diff --git a/saqc/funcs/soil_moisture_tests.py b/saqc/funcs/soil_moisture_tests.py index 2c58a5206da7158435388420b4b42232392675bf..f9c232940d2310b722185fcff06b31ac0bf8bad9 100644 --- a/saqc/funcs/soil_moisture_tests.py +++ b/saqc/funcs/soil_moisture_tests.py @@ -129,7 +129,7 @@ def flagSoilMoistureBySoilFrost( """ # retrieve reference series - refseries = data[soil_temp_reference] + refseries = data[soil_temp_reference].copy() ref_use = flagger.isFlagged( soil_temp_reference, flag=flagger.GOOD, comparator="==" ) | flagger.isFlagged(soil_temp_reference, flag=flagger.UNFLAGGED, comparator="==") @@ -137,35 +137,14 @@ def flagSoilMoistureBySoilFrost( refseries = refseries[ref_use.values] # drop nan values from reference series, since those are values you dont want to refer to. refseries = refseries.dropna() - # skip further processing if reference series is empty: if refseries.empty: return data, flagger - # wrap around df.index.get_loc method, to catch key error in case of empty tolerance window: - def _checkNearestForFrost(ref_date, ref_series, tolerance, check_level): - - try: - # if there is no reference value within tolerance margin, following line will raise key error and - # trigger the exception - ref_pos = ref_series.index.get_loc( - ref_date, method="nearest", tolerance=tolerance - ) - except KeyError: - # since test is not applicable: make no change to flag state - return False - - # if reference value index is available, return comparison result (to determine flag) - return ref_series[ref_pos] <= check_level - - # make temporal frame holding date index, since df.apply cant access index - temp_frame = pd.Series(data.index) - # get flagging mask ("True" denotes "bad"="test succesfull") - mask = temp_frame.apply( - _checkNearestForFrost, args=(refseries, tolerated_deviation, frost_level) - ) - # apply calculated flags - flagger = flagger.setFlags(field, mask.values, **kwargs) + refseries = refseries.reindex(data[field].dropna().index, method="nearest", tolerance=tolerated_deviation) + refseries = refseries[refseries < frost_level].index + + flagger = flagger.setFlags(field, refseries, **kwargs) return data, flagger @@ -236,9 +215,8 @@ def flagSoilMoistureByPrecipitationEvents( :param ignore_missing: """ - dataseries, moist_rate = retrieveTrustworthyOriginal(data, field, flagger) - # data harmonized: refseries, ref_rate = retrieveTrustworthyOriginal(data, prec_reference, flagger) + dataseries, moist_rate = retrieveTrustworthyOriginal(data, field, flagger) # data not hamronized: refseries = data[prec_reference].dropna() @@ -249,7 +227,7 @@ def flagSoilMoistureByPrecipitationEvents( return data, flagger refseries = refseries.reindex(refseries.index.join(dataseries.index, how='outer')) - # get 24 h prec. monitor (this makes last-24h-rainfall-evaluation independent from preceeding entries) + # get 24 h prec. monitor prec_count = refseries.rolling(window="1D").sum() # exclude data not signifying a raise:: if raise_reference is None: diff --git a/test/funcs/test_soil_moisture_tests.py b/test/funcs/test_soil_moisture_tests.py index 2f5c4f06211a204b7a3eb7bcb12296a7f40c29c1..0c8257fe368f895d9ee4856fe0df724fbbcee67f 100644 --- a/test/funcs/test_soil_moisture_tests.py +++ b/test/funcs/test_soil_moisture_tests.py @@ -58,6 +58,3 @@ def test_flagSoilMoisturePrecipitationEvents(flagger): test_sum = (flag_result[flag_assertion] == flagger.BAD).sum() assert test_sum == len(flag_assertion) -if __name__ == "__main__": - flagger = TESTFLAGGER[2] - test_flagSoilMoisturePrecipitationEvents(flagger)