From ed2288c19b850245ef10e12f81c8b6b1e9d6312a Mon Sep 17 00:00:00 2001
From: leufen1 <l.leufen@fz-juelich.de>
Date: Thu, 13 Jan 2022 17:38:02 +0100
Subject: [PATCH] plots also fixed for now, refac required to remove comments
 and todos

---
 mlair/helpers/filter.py                 | 30 ++++++++++++-------------
 mlair/plotting/data_insight_plotting.py |  6 +++--
 2 files changed, 19 insertions(+), 17 deletions(-)

diff --git a/mlair/helpers/filter.py b/mlair/helpers/filter.py
index 3a67accd..3e93ebc6 100644
--- a/mlair/helpers/filter.py
+++ b/mlair/helpers/filter.py
@@ -245,11 +245,7 @@ class ClimateFIRFilter(FIRFilter):
                                                           offset=self.offset, next_order=next_order)
 
             logging.info(f"{self.station_name}: finished clim_filter calculation")
-            # if self.minimum_length is None: #todo does slice(None,None) work? if yes this could be changed to slice(-self.minimum_length, self.offset)
-            #     filtered.append(fi)
-            # else:
-            #     filtered.append(fi.sel({new_dim: slice(-self.minimum_length, None)}))
-            if self.minimum_length is None:  # todo does slice(None,None) work? if yes this could be changed to slice(-self.minimum_length, self.offset)
+            if self.minimum_length is None:
                 filtered.append(fi.sel({new_dim: slice(None, self.offset)}))
             else:
                 filtered.append(fi.sel({new_dim: slice(self.offset - self.minimum_length, self.offset)}))
@@ -285,12 +281,9 @@ class ClimateFIRFilter(FIRFilter):
                 else:
                     raise ValueError(f"Cannot handle unkown apriori type: {self.apriori_type}. Please choose from None,"
                                      f" `zeros` or `residuum_stats`.")
+
         # add last residuum to filtered
-        # if self.minimum_length is None:  #todo does slice(None,None) work? if yes this could be changed to slice(-self.minimum_length, self.offset)
-        #     filtered.append(input_data)
-        # else:
-        #     filtered.append(input_data.sel({new_dim: slice(-self.minimum_length, None)}))
-        if self.minimum_length is None:  # todo does slice(None,None) work? if yes this could be changed to slice(-self.minimum_length, self.offset)
+        if self.minimum_length is None:
             filtered.append(input_data.sel({new_dim: slice(None, self.offset)}))
         else:
             filtered.append(input_data.sel({new_dim: slice(self.offset - self.minimum_length, self.offset)}))
@@ -585,17 +578,24 @@ class ClimateFIRFilter(FIRFilter):
                 # t0 = viz_date + np.timedelta64(int(offset), td_type)
                 t0 = viz_date  # offset should be irrelevant for visualization
                 t_minus = viz_date + np.timedelta64(int(-extend_length_history), td_type)
-                t_plus = t0 + np.timedelta64(int(extend_length_future + extend_length_opts), td_type)
+                t_plus = t0 + np.timedelta64(int(extend_length_future + 1), td_type)
+                # t_plus = t0 + np.timedelta64(int(extend_length_future + extend_length_opts), td_type)
                 if new_dim not in data.coords:
+                    # tmp_filter_data = self._shift_data(data.sel({time_dim: slice(t_minus, t_plus)}),
+                    #                                    range(int(-extend_length_history),
+                    #                                          int(extend_length_future + extend_length_opts)),
+                    #                                    time_dim,
+                    #                                    new_dim).sel({time_dim: viz_date})
                     tmp_filter_data = self._shift_data(data.sel({time_dim: slice(t_minus, t_plus)}),
                                                        range(int(-extend_length_history),
-                                                             int(extend_length_future + extend_length_opts)),
+                                                             int(extend_length_future + 1)),
                                                        time_dim,
                                                        new_dim).sel({time_dim: viz_date})
                 else:
                     tmp_filter_data = None
-                valid_range = range(-int((len(h) + 1) / 2) if minimum_length is None else -minimum_length,
-                                    extend_length_opts + 1)
+                valid_start = int(filtered.window.min()) + int((len(h) + 1) / 2)
+                valid_end = min(extend_length_opts + offset + 1, int(filtered.window.max()) - int((len(h) + 1) / 2))
+                valid_range = range(valid_start, valid_end)
                 plot_data.append({"t0": t0,
                                   "viz_date": viz_date,
                                   "var": variable_name,
@@ -766,7 +766,7 @@ class ClimateFIRFilter(FIRFilter):
                 # visualization
                 plot_data.extend(self.create_visualization(filt, d, filter_input_data, plot_dates, time_dim, new_dim,
                                                            sampling, extend_length_history, extend_length_future,
-                                                           minimum_length, h, var, extend_opts, 0))
+                                                           minimum_length, h, var, extend_opts, offset))
 
             # collect all filter results
             coll.append(xr.concat(filt_coll, time_dim))
diff --git a/mlair/plotting/data_insight_plotting.py b/mlair/plotting/data_insight_plotting.py
index b8a31fa1..2048f4c2 100644
--- a/mlair/plotting/data_insight_plotting.py
+++ b/mlair/plotting/data_insight_plotting.py
@@ -1076,8 +1076,10 @@ class PlotClimateFirFilter(AbstractPlotClass):  # pragma: no cover
         Use order and valid_range to find a good zoom in that hides edges of filter values that are effected by reduced
         filter order. Limits are returned to be usable for other plots.
         """
-        t_minus_delta = max(1.5 * (valid_range.stop - valid_range.start), 0.3 * order)
-        t_plus_delta = max(0.5 * (valid_range.stop - valid_range.start), 0.3 * order)
+        # t_minus_delta = -(valid_range.start - 0.5 * order)
+        # t_plus_delta = valid_range.stop + 0.5 * order
+        t_minus_delta = max(min(2 * (valid_range.stop - valid_range.start), 0.5 * order), -valid_range.start)
+        t_plus_delta = max(min(2 * (valid_range.stop - valid_range.start), 0.5 * order), valid_range.stop)
         t_minus = t0 + np.timedelta64(-int(t_minus_delta), td_type)
         t_plus = t0 + np.timedelta64(int(t_plus_delta), td_type)
         ax_start = max(t_minus, time_axis[0])
-- 
GitLab