Skip to content

Commit

Permalink
Restore to clean state when "RESET" in the ROI window is clicked
Browse files Browse the repository at this point in the history
This is a non-compatible change in that in addition to restore the zoom-in
status, all values and internal states, including ROIs, bad pixels, log
scale, etc, are also reset.

Close #81.
  • Loading branch information
leofang committed Feb 3, 2020
1 parent 1fc5fa5 commit cf284a0
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 28 deletions.
31 changes: 29 additions & 2 deletions nsls2ptycho/core/widgets/mplcanvastool.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ def __init__(self, parent=None, width=5, height=4, dpi=100):

self.image = None
self.image_data = None
self.overlay = None
self.image_handler = None
self.overlay = None
self.overlay_handler = None
self.reset()

Expand Down Expand Up @@ -163,6 +163,31 @@ def _update_buttons(self, op_name):
self._ids = self._eventHandler.zoom_pan_factory(self.ax)

def _on_reset(self):
# clear bad pixels to restore a clean state
# TODO: investigate why self.clear_overlay() is not working
self.overlay = None
self.set_overlay([], [])

# clear all ROIs (red and blue)
for sp in self._roi_all:
sp.valueChanged.disconnect(self._update_roi_canvas)
self._eventHandler.roi_changed.disconnect(self._update_roi)

for sp in self._roi_all:
sp.setValue(0.)

self._eventHandler.ref_rect = None
self._eventHandler.ref_idx = -1
for rect in self._eventHandler.all_rect:
rect.remove()
self._eventHandler.all_rect = []
#self.ax.figure.canvas.draw()
#self.canvas.draw()

for sp in self._roi_all:
sp.valueChanged.connect(self._update_roi_canvas)
self._eventHandler.roi_changed.connect(self._update_roi)

if self.image_handler:
width = self.image.shape[1]
height = self.image.shape[0]
Expand Down Expand Up @@ -204,16 +229,17 @@ def _on_adjust_roi(self):
def reset(self):
for sp in self._roi_all:
sp.setValue(0.)
self.image_handler = None
self.image = None
self.image_data = None
self.image_handler = None
self.overlay = None
self.overlay_handler = None
self.ax.clear()
self.ax.set_axis_off()
self.canvas.draw()

def draw_image(self, image, cmap='gray', init_roi=False, use_log=False):
# TODO: merge this function and use_logscale()
#print(cmap, init_roi, use_log)
if use_log:
print('log scale')
Expand Down Expand Up @@ -289,6 +315,7 @@ def show_overlay(self, state):
self.canvas.draw()

def use_logscale(self, state):
# TODO: merge this function and draw_image()
if self.image is None: return
if state:
self.image_data = np.log(np.clip(self.image, 1., None))
Expand Down
52 changes: 26 additions & 26 deletions nsls2ptycho/roi_gui.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,9 @@ def __init__(self, parent=None, image=None, param=None, main_window=None):
self.btn_badpixels_correct.clicked.connect(self.correct_badpixels)
self.ck_show_badpixels.clicked.connect(self.show_badpixels)
self.btn_save_to_h5.clicked.connect(self.save_to_h5)
self.ck_logscale.clicked.connect(self.use_logscale)
self.ck_logscale.toggled.connect(self.use_logscale)
self.actionBadpixels.triggered.connect(self.open_badpixel_dialog)
self.canvas.btn_home.clicked.connect(self.reset_window)

# badpixels
self.badpixel_dialog = None
Expand All @@ -45,31 +46,30 @@ def __init__(self, parent=None, image=None, param=None, main_window=None):
self.sp_threshold.setValue(1.0)
self._worker_thread = None

# def reset_window(self, image=None, main_window=None):
# '''
# called from outside
# '''
# self.canvas.reset()
# # TODO: reset bad pixels stored in canvas
# if image is not None:
# self.canvas.draw_image(image)

# #self.badpixels = None
# #self.offset_x = None
# #self.offset_y = None

# self.main_window = main_window
# self.roi_width = None
# self.roi_height = None
# self.cx = None
# self.cy = None
# self.sp_threshold.setValue(1.0)
# self._worker_thread = None

# #self.btn_badpixels_brightest.setChecked(False)
# self.btn_badpixels_outliers.setChecked(False)
# self.ck_show_badpixels.setChecked(False)
# self.btn_badpixels_correct.setChecked(False)
def reset_window(self):
# When this function is called, self.canvas._on_reset() is also called

#self.canvas.reset()
# TODO: reset bad pixels stored in canvas
#if image is not None:
# self.canvas.draw_image(image)

#self.badpixels = None
#self.offset_x = None
#self.offset_y = None

self.roi_width = None
self.roi_height = None
self.cx = None
self.cy = None
self.sp_threshold.setValue(1.0)
self._worker_thread = None

#self.btn_badpixels_brightest.setChecked(False)
self.btn_badpixels_outliers.setChecked(False)
self.btn_badpixels_correct.setChecked(False)
self.ck_show_badpixels.setChecked(False)
self.ck_logscale.setChecked(False)

def open_badpixel_dialog(self):
badpixels = self.canvas.get_badpixels()
Expand Down

0 comments on commit cf284a0

Please sign in to comment.