From 1e445d865eb25bbee75be62bb5b4abf11ed00907 Mon Sep 17 00:00:00 2001 From: John ZuHone Date: Wed, 7 Sep 2022 12:42:14 -0400 Subject: [PATCH 1/3] In plots that use residuals, make sure that only data that is not masked out by a bad time or a masked time is used --- xija/component/base.py | 8 ++++++++ xija/gui_fit/plots.py | 8 ++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/xija/component/base.py b/xija/component/base.py index 64ec37b..eb9555a 100644 --- a/xija/component/base.py +++ b/xija/component/base.py @@ -300,6 +300,8 @@ def plot_resid__time(self, fig, ax): resids = self.resids if self.mask: resids[~self.mask.mask] = np.nan + for i0, i1 in self.model.mask_times_indices: + resids[i0:i1] = np.nan if not lines: plot_cxctime(self.model.times, resids, ls='-', color='#386cb0', fig=fig, ax=ax) @@ -312,12 +314,16 @@ def plot_resid__time(self, fig, ax): ax.set_ylabel('Temperature (%s)' % self.units) else: lines[0].set_ydata(resids) + ax.relim() + ax.autoscale() def plot_resid__data(self, fig, ax): lines = ax.get_lines() resids = self.resids if self.mask: resids[~self.mask.mask] = np.nan + for i0, i1 in self.model.mask_times_indices: + resids[i0:i1] = np.nan if not lines: ax.plot(self.dvals + self.randx, resids, 'o', @@ -328,6 +334,8 @@ def plot_resid__data(self, fig, ax): ax.set_ylabel('Temperature (%s)' % self.units) else: lines[0].set_ydata(resids) + ax.relim() + ax.autoscale() class Coupling(ModelComponent): diff --git a/xija/gui_fit/plots.py b/xija/gui_fit/plots.py index d4ca87a..b2012cd 100644 --- a/xija/gui_fit/plots.py +++ b/xija/gui_fit/plots.py @@ -266,7 +266,7 @@ def __init__(self, model, hist_msids): self.emin_entry = QtWidgets.QLineEdit() self.emin_entry.setText(f"{self.errorlimits[0]}") self.emin_entry.returnPressed.connect(self.emin_edited) - + self.emax_entry = QtWidgets.QLineEdit() self.emax_entry.setText(f"{self.errorlimits[1]}") self.emax_entry.returnPressed.connect(self.emax_edited) @@ -291,11 +291,11 @@ def __init__(self, model, hist_msids): self.rz_mask self.fmt1_mask self.make_plots() - + @property def errorlimits(self): return self._errorlimits - + @errorlimits.setter def errorlimits(self, lims): self._errorlimits = lims @@ -390,7 +390,7 @@ def update_plots(self): mask &= self.rz_mask if self.fmt1_masked: mask &= self.fmt1_mask - for i0, i1 in self.model.bad_times_indices: + for i0, i1 in self.model.mask_times_indices: mask[i0:i1] = False resids = self.comp.resids[mask] dvals = self.comp.dvals[mask] From 94e320c65127ce81745c81b87e1b21b87e1656c2 Mon Sep 17 00:00:00 2001 From: John ZuHone Date: Wed, 7 Sep 2022 15:21:18 -0400 Subject: [PATCH 2/3] Don't keep an extra reference to the canvas object around. flush events when updating plots. --- xija/gui_fit/plots.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/xija/gui_fit/plots.py b/xija/gui_fit/plots.py index b2012cd..d5966aa 100644 --- a/xija/gui_fit/plots.py +++ b/xija/gui_fit/plots.py @@ -541,11 +541,10 @@ def __init__(self, plot_name, plots_box): self.ax = self.fig.add_subplot(111, sharex=plots_box.default_ax) self.ax.autoscale(enable=False, axis='x') - self.canvas = canvas self.plots_box = plots_box self.main_window = self.plots_box.main_window - self.selecter = self.canvas.mpl_connect("button_press_event", self.select) - self.releaser = self.canvas.mpl_connect("button_release_event", self.release) + self.selecter = self.fig.canvas.mpl_connect("button_press_event", self.select) + self.releaser = self.fig.canvas.mpl_connect("button_release_event", self.release) self.ly = None self.limits = None @@ -556,7 +555,7 @@ def select(self, event): grab = event.inaxes and self.main_window.show_line and \ not self.ax.get_navigate_mode() if grab: - self.mover = self.canvas.mpl_connect('motion_notify_event', self.on_mouse_move) + self.mover = self.fig.canvas.mpl_connect('motion_notify_event', self.on_mouse_move) self.plots_box.xline = event.xdata self.plots_box.update_xline() else: @@ -571,12 +570,12 @@ def on_mouse_move(self, event): def release(self, event): if hasattr(self, "mover"): - self.canvas.mpl_disconnect(self.mover) + self.fig.canvas.mpl_disconnect(self.mover) def update_xline(self): if self.plot_name.endswith("time") and self.ly is not None: self.ly.set_xdata(self.plots_box.xline) - self.canvas.draw_idle() + self.fig.canvas.draw_idle() _rz_times = None @@ -657,8 +656,8 @@ def update(self, first=False): self.add_annotation("line") if mw.show_limits: self.add_annotation("limits") - self.canvas.draw_idle() - + self.fig.canvas.draw_idle() + self.fig.canvas.flush_events() class PlotsBox(QtWidgets.QVBoxLayout): def __init__(self, model, main_window): From c8ea2da18439020d6e5af634169e16e23569237f Mon Sep 17 00:00:00 2001 From: John ZuHone Date: Wed, 7 Sep 2022 15:23:40 -0400 Subject: [PATCH 3/3] Same for HistogramWindow --- xija/gui_fit/plots.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/xija/gui_fit/plots.py b/xija/gui_fit/plots.py index d5966aa..1a2d5b9 100644 --- a/xija/gui_fit/plots.py +++ b/xija/gui_fit/plots.py @@ -284,7 +284,6 @@ def __init__(self, model, hist_msids): self.max_limit = -1000 self.min_limit = 1000 - self.canvas = canvas self.ax1 = self.fig.add_subplot(1, 2, 1) self.ax2 = self.fig.add_subplot(1, 2, 2) self.plot_dict = {} @@ -505,7 +504,8 @@ def update_plots(self): xpos_max, ystart, 'Maximum Error', ha="left", va="center", rotation=90, clip_on=True) - self.canvas.draw_idle() + self.fig.canvas.draw_idle() + self.fig.canvas.flush_events() class PlotBox(QtWidgets.QVBoxLayout): @@ -659,6 +659,7 @@ def update(self, first=False): self.fig.canvas.draw_idle() self.fig.canvas.flush_events() + class PlotsBox(QtWidgets.QVBoxLayout): def __init__(self, model, main_window): super(QtWidgets.QVBoxLayout, self).__init__()