diff --git a/mlair/data_handler/data_handler_mixed_sampling.py b/mlair/data_handler/data_handler_mixed_sampling.py index f84a23b5b2cfff148cc886ffa90fdb9d0b9ea810..eb3f78dc465247095d0114f3f41d4b8b70ba5480 100644 --- a/mlair/data_handler/data_handler_mixed_sampling.py +++ b/mlair/data_handler/data_handler_mixed_sampling.py @@ -346,30 +346,47 @@ class DataHandlerMixedSamplingWithClimateAndFirFilter(DataHandlerMixedSamplingWi filter_add_unfiltered = kwargs.get("filter_add_unfiltered", False) sp_chem, sp_chem_unfiltered = None, None sp_meteo, sp_meteo_unfiltered = None, None + if len(chem_vars) > 0: sp_keys = {k: copy.deepcopy(kwargs[k]) for k in cls.data_handler_climate_fir.requirements() if k in kwargs} sp_keys = cls.build_update_kwargs(sp_keys, dh_type="filtered_chem") sp_keys.update({"variables": chem_vars}) + cls.adjust_window_opts("chem", "window_history_size", sp_keys) + cls.adjust_window_opts("chem", "window_history_offset", sp_keys) sp_chem = cls.data_handler_climate_fir(station, **sp_keys) if filter_add_unfiltered is True: sp_keys = {k: copy.deepcopy(kwargs[k]) for k in cls.data_handler_unfiltered.requirements() if k in kwargs} sp_keys = cls.build_update_kwargs(sp_keys, dh_type="unfiltered_chem") sp_keys.update({"variables": chem_vars}) + cls.adjust_window_opts("chem", "window_history_size", sp_keys) + cls.adjust_window_opts("chem", "window_history_offset", sp_keys) sp_chem_unfiltered = cls.data_handler_unfiltered(station, **sp_keys) if len(meteo_vars) > 0: sp_keys = {k: copy.deepcopy(kwargs[k]) for k in cls.data_handler_fir.requirements() if k in kwargs} sp_keys = cls.build_update_kwargs(sp_keys, dh_type="filtered_meteo") sp_keys.update({"variables": meteo_vars}) + cls.adjust_window_opts("meteo", "window_history_size", sp_keys) + cls.adjust_window_opts("meteo", "window_history_offset", sp_keys) sp_meteo = cls.data_handler_fir(station, **sp_keys) if filter_add_unfiltered is True: sp_keys = {k: copy.deepcopy(kwargs[k]) for k in cls.data_handler_unfiltered.requirements() if k in kwargs} sp_keys = cls.build_update_kwargs(sp_keys, dh_type="unfiltered_meteo") sp_keys.update({"variables": meteo_vars}) + cls.adjust_window_opts("meteo", "window_history_size", sp_keys) + cls.adjust_window_opts("meteo", "window_history_offset", sp_keys) sp_meteo_unfiltered = cls.data_handler_unfiltered(station, **sp_keys) dp_args = {k: copy.deepcopy(kwargs[k]) for k in cls.own_args("id_class") if k in kwargs} return cls(sp_chem, sp_meteo, sp_chem_unfiltered, sp_meteo_unfiltered, chem_vars, meteo_vars, **dp_args) + @staticmethod + def adjust_window_opts(key: str, parameter_name: str, kwargs: dict): + if parameter_name in kwargs: + window_opt = kwargs.pop(parameter_name) + if isinstance(window_opt, dict): + window_opt = window_opt[key] + kwargs[parameter_name] = window_opt + def _create_collection(self): collection = super()._create_collection() if self.id_class_other is not None: @@ -389,6 +406,8 @@ class DataHandlerMixedSamplingWithClimateAndFirFilter(DataHandlerMixedSamplingWi # chem transformation kwargs_chem = copy.deepcopy(kwargs) kwargs_chem["variables"] = chem_vars + cls.adjust_window_opts("chem", "window_history_size", kwargs_chem) + cls.adjust_window_opts("chem", "window_history_offset", kwargs_chem) dh_transformation = (cls.data_handler_climate_fir, cls.data_handler_unfiltered) transformation_chem = super().transformation(set_stations, tmp_path=tmp_path, dh_transformation=dh_transformation, **kwargs_chem) @@ -396,6 +415,8 @@ class DataHandlerMixedSamplingWithClimateAndFirFilter(DataHandlerMixedSamplingWi # meteo transformation kwargs_meteo = copy.deepcopy(kwargs) kwargs_meteo["variables"] = meteo_vars + cls.adjust_window_opts("meteo", "window_history_size", kwargs_meteo) + cls.adjust_window_opts("meteo", "window_history_offset", kwargs_meteo) dh_transformation = (cls.data_handler_fir, cls.data_handler_unfiltered) transformation_meteo = super().transformation(set_stations, tmp_path=tmp_path, dh_transformation=dh_transformation, **kwargs_meteo) diff --git a/mlair/data_handler/data_handler_with_filter.py b/mlair/data_handler/data_handler_with_filter.py index a522f53b08fe0b56d990245d5b96cdf2a55148c6..9b7b27f8ce2b5230f24095ed9253860f4e6ee082 100644 --- a/mlair/data_handler/data_handler_with_filter.py +++ b/mlair/data_handler/data_handler_with_filter.py @@ -189,7 +189,7 @@ class DataHandlerFirFilterSingleStation(DataHandlerFilterSingleStation): def apply_filter(self): """Apply FIR filter only on inputs.""" fir = FIRFilter(self.input_data.astype("float32"), self.fs, self.filter_order, self.filter_cutoff_freq, - self.filter_window_type, self.target_dim, self.time_dim) + self.filter_window_type, self.target_dim, self.time_dim, station_name=self.station) self.fir_coeff = fir.filter_coefficients filter_data = fir.filtered_data self.input_data = xr.concat(filter_data, pd.Index(self.create_filter_index(), name=self.filter_dim))