Deltares-research / kenmerkendewaarden

Derive indicators from waterlevel measurements
https://deltares-research.github.io/kenmerkendewaarden/
GNU General Public License v3.0
1 stars 0 forks source link

add hat/lat computation from measurements #72

Closed veenstrajelmer closed 1 month ago

veenstrajelmer commented 1 month ago

Todo:

import hatyan
import logging
logging.basicConfig(format='%(message)s') # for some reason calling basicConfig is required for hatyan, not for kenmerkendewaarden
logging.getLogger("hatyan").setLevel(level="INFO")

station = "HOEKVHLD"

df_meas = hatyan.read_dia(r"c:\DATA\kenmerkendewaarden\tests\testdata\HOEK_KW.dia")
df_meas_19y = df_meas.loc["2001":"2019"]

def calc_hat_lat_frommeasurements(df_meas_19y, freq="10min"):

    num_years = len(df_meas_19y.index.year.unique())
    if num_years != 19:
        raise ValueError(f"please provide a timeseries of 19 years instead of {num_years} years")

    # TODO: consider deviating from hatyan default settings: nodalfactors=True, fu_alltimes=True, xfac=False, source='schureman'
    # fu_alltimes=False makes the process significantly faster
    comp_avg, comp_all = hatyan.analysis(df_meas_19y, const_list="year", analysis_perperiod="Y", return_allperiods=True, fu_alltimes=False)

    # TODO: decide on required prediction frequency, 1min is better in theory, but hat/lat values differ only 2mm for HOEKVHLD (1min vs 10 min)
    df_pred = hatyan.prediction(comp_all, timestep=freq)

    lat = df_pred["values"].min()
    hat = df_pred["values"].max()
    return hat, lat

hat, lat = calc_hat_lat_frommeasurements(df_meas_19y, freq="10min")
print(hat, lat)