From 3dc52de94d43092742b4bb0d7f0eef2b071f695b Mon Sep 17 00:00:00 2001 From: Viljar Femoen Date: Thu, 4 Sep 2025 11:16:06 +0200 Subject: [PATCH 01/10] Speed up kinematic simulations --- src/instamatic/gui/ctrl_frame.py | 18 ++++++++++++++++++ .../microscope/interface/simu_microscope.py | 2 ++ 2 files changed, 20 insertions(+) diff --git a/src/instamatic/gui/ctrl_frame.py b/src/instamatic/gui/ctrl_frame.py index 7fbe4d56..38d52cd6 100644 --- a/src/instamatic/gui/ctrl_frame.py +++ b/src/instamatic/gui/ctrl_frame.py @@ -50,6 +50,8 @@ def __init__(self, parent): frame.pack(side='top', fill='x', padx=10, pady=10) frame = Frame(self) + stage_reset_btn = Button(frame, text='Reset stage', command=self.reset_stage) + stage_reset_btn.grid(row=0, column=0, sticky='W') Label(frame, text='Angle (-)', width=20).grid(row=1, column=0, sticky='W') Label(frame, text='Angle (0)', width=20).grid(row=2, column=0, sticky='W') @@ -161,6 +163,13 @@ def __init__(self, parent): ) slider.grid(row=12, column=0, columnspan=3, sticky='EW') + # Magnification + Label(frame, text='Magnification', width=20).grid(row=14, column=0, sticky='W') + mag_inc_btn = Button(frame, text='+', command=self.increase_mag) + mag_inc_btn.grid(row=14, column=1) + mag_dec_btn = Button(frame, text='-', command=self.decrease_mag) + mag_dec_btn.grid(row=14, column=2) + frame.pack(side='top', fill='x', padx=10, pady=10) frame = Frame(self) @@ -228,6 +237,15 @@ def set_brightness(self, event=None): def get_brightness(self, event=None): self.var_brightness.set(self.ctrl.brightness.get()) + def increase_mag(self): + self.ctrl.magnification.increase() + + def decrease_mag(self): + self.ctrl.magnification.decrease() + + def reset_stage(self): + self.ctrl.stage.set(0, 0, 0, 0, 0) + def set_difffocus(self, event=None): self.var_difffocus.set(self.var_difffocus.get()) self.q.put(('ctrl', {'task': 'difffocus.set', 'value': self.var_difffocus.get()})) diff --git a/src/instamatic/microscope/interface/simu_microscope.py b/src/instamatic/microscope/interface/simu_microscope.py index 6e40a188..6a29879d 100644 --- a/src/instamatic/microscope/interface/simu_microscope.py +++ b/src/instamatic/microscope/interface/simu_microscope.py @@ -58,6 +58,8 @@ def __init__(self, name: str = 'simulate'): self.BeamShift_x = random.randint(MIN, MAX) self.BeamShift_y = random.randint(MIN, MAX) + self.BeamShift_x = 0 + self.BeamShift_y = 0 self.BeamTilt_x = random.randint(MIN, MAX) self.BeamTilt_y = random.randint(MIN, MAX) From fc0b5613e3d127d315da10fcc04697217c024cd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Tcho=C5=84?= Date: Sat, 20 Sep 2025 18:26:31 +0200 Subject: [PATCH 02/10] Fix typos in Magnification error messages --- src/instamatic/microscope/components/lenses.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/instamatic/microscope/components/lenses.py b/src/instamatic/microscope/components/lenses.py index 3680147d..691342c0 100644 --- a/src/instamatic/microscope/components/lenses.py +++ b/src/instamatic/microscope/components/lenses.py @@ -135,13 +135,13 @@ def increase(self) -> None: try: self.index += 1 except ValueError: - print(f'Error: Cannot change magnficication index (current={self.value}).') + print(f'Error: Cannot change magnification index (current={self.value}).') def decrease(self) -> None: try: self.index -= 1 except ValueError: - print(f'Error: Cannot change magnficication index (current={self.value}).') + print(f'Error: Cannot change magnification index (current={self.value}).') def get_ranges(self) -> dict: """Runs through all modes and fetches all the magnification settings From 385bc9a1df8574a19be59d6bcd176bec393ac7ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Tcho=C5=84?= Date: Sat, 20 Sep 2025 18:27:34 +0200 Subject: [PATCH 03/10] Tighten handpanel, use config modes, spinbox stage xy --- src/instamatic/gui/ctrl_frame.py | 64 ++++++++++++-------------------- 1 file changed, 24 insertions(+), 40 deletions(-) diff --git a/src/instamatic/gui/ctrl_frame.py b/src/instamatic/gui/ctrl_frame.py index 38d52cd6..7112a0c0 100644 --- a/src/instamatic/gui/ctrl_frame.py +++ b/src/instamatic/gui/ctrl_frame.py @@ -22,6 +22,9 @@ def __init__(self, parent): frame = Frame(self) + stage_reset_btn = Button(frame, text='Reset stage', command=self.reset_stage) + stage_reset_btn.grid(row=0, column=1, sticky='W') + b_stage_stop = Button(frame, text='Stop stage', command=self.stage_stop) b_stage_stop.grid(row=0, column=2, sticky='W') @@ -31,51 +34,36 @@ def __init__(self, parent): b_find_eucentric_height = Button( frame, text='Find eucentric height', command=self.find_eucentric_height ) - b_find_eucentric_height.grid(row=0, column=0, sticky='EW', columnspan=2) + b_find_eucentric_height.grid(row=0, column=0, sticky='EW') Label(frame, text='Mode:').grid(row=8, column=0, sticky='W') - self.o_mode = OptionMenu( - frame, - self.var_mode, - 'diff', - 'diff', - 'mag1', - 'mag2', - 'lowmag', - 'samag', - command=self.set_mode, - ) - self.o_mode.grid(row=8, column=1, sticky='W', padx=10) + ranges = config.microscope.ranges + modes = list(ranges.keys()) + self.o_mode = OptionMenu(frame, self.var_mode, modes[0], *modes, command=self.set_mode) + self.o_mode.grid(row=8, column=1, sticky='EW') frame.pack(side='top', fill='x', padx=10, pady=10) frame = Frame(self) - stage_reset_btn = Button(frame, text='Reset stage', command=self.reset_stage) - stage_reset_btn.grid(row=0, column=0, sticky='W') - Label(frame, text='Angle (-)', width=20).grid(row=1, column=0, sticky='W') Label(frame, text='Angle (0)', width=20).grid(row=2, column=0, sticky='W') Label(frame, text='Angle (+)', width=20).grid(row=3, column=0, sticky='W') Label(frame, text='Alpha wobbler (±)', width=20).grid(row=4, column=0, sticky='W') Label(frame, text='Stage(XY)', width=20).grid(row=6, column=0, sticky='W') - e_negative_angle = Spinbox( - frame, width=10, textvariable=self.var_negative_angle, from_=-90, to=90, increment=5 - ) + angle = {'width': 10, 'from_': -90, 'to': 90, 'increment': 5} + angle_i1 = {**angle, 'increment': 1} + stage = {'width': 10, 'from_': -1e6, 'to': 1e6, 'increment': 1000} + + e_negative_angle = Spinbox(frame, textvariable=self.var_negative_angle, **angle) e_negative_angle.grid(row=1, column=1, sticky='EW') - e_neutral_angle = Spinbox( - frame, width=10, textvariable=self.var_neutral_angle, from_=-90, to=90, increment=5 - ) + e_neutral_angle = Spinbox(frame, textvariable=self.var_neutral_angle, **angle) e_neutral_angle.grid(row=2, column=1, sticky='EW') - e_positive_angle = Spinbox( - frame, width=10, textvariable=self.var_positive_angle, from_=-90, to=90, increment=5 - ) + e_positive_angle = Spinbox(frame, textvariable=self.var_positive_angle, **angle) e_positive_angle.grid(row=3, column=1, sticky='EW') - - e_alpha_wobbler = Spinbox( - frame, width=10, textvariable=self.var_alpha_wobbler, from_=-90, to=90, increment=1 - ) + e_alpha_wobbler = Spinbox(frame, textvariable=self.var_alpha_wobbler, **angle_i1) e_alpha_wobbler.grid(row=4, column=1, sticky='EW') + self.b_start_wobble = Button(frame, text='Start', command=self.start_alpha_wobbler) self.b_start_wobble.grid(row=4, column=2, sticky='W') self.b_stop_wobble = Button( @@ -83,9 +71,9 @@ def __init__(self, parent): ) self.b_stop_wobble.grid(row=4, column=3, sticky='W') - e_stage_x = Entry(frame, width=10, textvariable=self.var_stage_x) + e_stage_x = Spinbox(frame, textvariable=self.var_stage_x, **stage) e_stage_x.grid(row=6, column=1, sticky='EW') - e_stage_y = Entry(frame, width=10, textvariable=self.var_stage_y) + e_stage_y = Spinbox(frame, textvariable=self.var_stage_y, **stage) e_stage_y.grid(row=6, column=2, sticky='EW') if config.settings.use_goniotool: @@ -170,19 +158,15 @@ def __init__(self, parent): mag_dec_btn = Button(frame, text='-', command=self.decrease_mag) mag_dec_btn.grid(row=14, column=2) - frame.pack(side='top', fill='x', padx=10, pady=10) - - frame = Frame(self) - - Label(frame, text='DiffFocus', width=20).grid(row=11, column=0, sticky='W') + Label(frame, text='DiffFocus', width=20).grid(row=21, column=0, sticky='W') e_difffocus = Entry(frame, width=10, textvariable=self.var_difffocus) - e_difffocus.grid(row=11, column=1, sticky='W') + e_difffocus.grid(row=21, column=1, sticky='W') b_difffocus = Button(frame, text='Set', command=self.set_difffocus) - b_difffocus.grid(row=11, column=2, sticky='W') + b_difffocus.grid(row=21, column=2, sticky='WE') b_difffocus_get = Button(frame, text='Get', command=self.get_difffocus) - b_difffocus_get.grid(row=11, column=3, sticky='W') + b_difffocus_get.grid(row=21, column=3, sticky='W') slider = Scale( frame, @@ -192,7 +176,7 @@ def __init__(self, parent): orient=HORIZONTAL, command=self.set_difffocus, ) - slider.grid(row=12, column=0, columnspan=3, sticky='EW') + slider.grid(row=22, column=0, columnspan=3, sticky='EW') frame.pack(side='top', fill='x', padx=10, pady=10) From 58579676594a71574569ffa3b45126cbd61c8cfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Tcho=C5=84?= Date: Sat, 20 Sep 2025 18:35:21 +0200 Subject: [PATCH 04/10] Remove repetition and excessive lines --- src/instamatic/gui/ctrl_frame.py | 41 +++++++------------------------- 1 file changed, 8 insertions(+), 33 deletions(-) diff --git a/src/instamatic/gui/ctrl_frame.py b/src/instamatic/gui/ctrl_frame.py index 7112a0c0..f3bd00c1 100644 --- a/src/instamatic/gui/ctrl_frame.py +++ b/src/instamatic/gui/ctrl_frame.py @@ -238,44 +238,19 @@ def set_difffocus(self, event=None): def get_difffocus(self, event=None): self.var_difffocus.set(self.ctrl.difffocus.get()) - def set_negative_angle(self): - self.q.put( - ( - 'ctrl', - { - 'task': 'stage.set', - 'a': self.var_negative_angle.get(), - 'wait': self.var_stage_wait.get(), - }, - ) - ) + def _set_angle(self, var: Variable) -> None: + kwargs = {'task': 'stage.set', 'a': var.get(), 'wait': self.var_stage_wait.get()} + self.q.put(('ctrl', kwargs)) self.triggerEvent.set() + def set_negative_angle(self): + return self._set_angle(self.var_negative_angle) + def set_neutral_angle(self): - self.q.put( - ( - 'ctrl', - { - 'task': 'stage.set', - 'a': self.var_neutral_angle.get(), - 'wait': self.var_stage_wait.get(), - }, - ) - ) - self.triggerEvent.set() + return self._set_angle(self.var_neutral_angle) def set_positive_angle(self): - self.q.put( - ( - 'ctrl', - { - 'task': 'stage.set', - 'a': self.var_positive_angle.get(), - 'wait': self.var_stage_wait.get(), - }, - ) - ) - self.triggerEvent.set() + return self._set_angle(self.var_positive_angle) def set_goniotool_tx(self, event=None, value=None): if not value: From 93ae9fe5a9152dc808c390a75f21230def96cb4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Tcho=C5=84?= Date: Sat, 20 Sep 2025 18:36:45 +0200 Subject: [PATCH 05/10] Make spacing consistent --- src/instamatic/gui/ctrl_frame.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/instamatic/gui/ctrl_frame.py b/src/instamatic/gui/ctrl_frame.py index f3bd00c1..77baa8c1 100644 --- a/src/instamatic/gui/ctrl_frame.py +++ b/src/instamatic/gui/ctrl_frame.py @@ -49,11 +49,11 @@ def __init__(self, parent): Label(frame, text='Angle (0)', width=20).grid(row=2, column=0, sticky='W') Label(frame, text='Angle (+)', width=20).grid(row=3, column=0, sticky='W') Label(frame, text='Alpha wobbler (±)', width=20).grid(row=4, column=0, sticky='W') - Label(frame, text='Stage(XY)', width=20).grid(row=6, column=0, sticky='W') + Label(frame, text='Stage (XY)', width=20).grid(row=6, column=0, sticky='W') angle = {'width': 10, 'from_': -90, 'to': 90, 'increment': 5} angle_i1 = {**angle, 'increment': 1} - stage = {'width': 10, 'from_': -1e6, 'to': 1e6, 'increment': 1000} + stage = {'width': 10, 'from_': -1e6, 'to': 1e6, 'increment': 100} e_negative_angle = Spinbox(frame, textvariable=self.var_negative_angle, **angle) e_negative_angle.grid(row=1, column=1, sticky='EW') @@ -102,7 +102,7 @@ def __init__(self, parent): b_stage_get.grid(row=6, column=4, sticky='W') # defocus button - Label(frame, text='Diff defocus:', width=20).grid(row=13, column=0, sticky='W') + Label(frame, text='Diff defocus', width=20).grid(row=13, column=0, sticky='W') self.e_diff_defocus = Spinbox( frame, textvariable=self.var_diff_defocus, From a6deb038e39c4681549290cf52b224c3dc3d2bf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Tcho=C5=84?= Date: Sat, 20 Sep 2025 18:57:47 +0200 Subject: [PATCH 06/10] Change alpha-wobbler 2-button toggle into a checkbutton for consistency --- src/instamatic/gui/ctrl_frame.py | 61 ++++++++++++++------------------ 1 file changed, 27 insertions(+), 34 deletions(-) diff --git a/src/instamatic/gui/ctrl_frame.py b/src/instamatic/gui/ctrl_frame.py index 77baa8c1..9a342953 100644 --- a/src/instamatic/gui/ctrl_frame.py +++ b/src/instamatic/gui/ctrl_frame.py @@ -64,12 +64,13 @@ def __init__(self, parent): e_alpha_wobbler = Spinbox(frame, textvariable=self.var_alpha_wobbler, **angle_i1) e_alpha_wobbler.grid(row=4, column=1, sticky='EW') - self.b_start_wobble = Button(frame, text='Start', command=self.start_alpha_wobbler) - self.b_start_wobble.grid(row=4, column=2, sticky='W') - self.b_stop_wobble = Button( - frame, text='Stop', command=self.stop_alpha_wobbler, state=DISABLED + b_wobble = Checkbutton( + frame, + text='Toggle wobble', + variable=self.var_alpha_wobbler_on, + command=self.toggle_alpha_wobbler, ) - self.b_stop_wobble.grid(row=4, column=3, sticky='W') + b_wobble.grid(row=4, column=2, sticky='W') e_stage_x = Spinbox(frame, textvariable=self.var_stage_x, **stage) e_stage_x.grid(row=6, column=1, sticky='EW') @@ -116,7 +117,7 @@ def __init__(self, parent): self.c_toggle_defocus = Checkbutton( frame, text='Toggle defocus', - variable=self.var_toggle_diff_defocus, + variable=self.var_diff_defocus_on, command=self.toggle_diff_defocus, ) self.c_toggle_defocus.grid(row=13, column=2, sticky='W', columnspan=2) @@ -192,6 +193,7 @@ def init_vars(self): self.var_mode = StringVar(value='diff') self.var_alpha_wobbler = DoubleVar(value=5) + self.var_alpha_wobbler_on = BooleanVar(value=False) self.var_stage_x = IntVar(value=0) self.var_stage_y = IntVar(value=0) @@ -202,7 +204,7 @@ def init_vars(self): self.var_difffocus = IntVar(value=65535) self.var_diff_defocus = IntVar(value=1500) - self.var_toggle_diff_defocus = BooleanVar(value=False) + self.var_diff_defocus_on = BooleanVar(value=False) self.var_stage_wait = BooleanVar(value=True) @@ -280,29 +282,22 @@ def get_stage(self, event=None): self.var_stage_x.set(round(x)) self.var_stage_y.set(round(y)) - def start_alpha_wobbler(self): - self.wobble_stop_event = threading.Event() - - self.b_stop_wobble.config(state=NORMAL) - self.b_start_wobble.config(state=DISABLED) - - self.q.put( - ( - 'ctrl', - { - 'task': 'stage.alpha_wobbler', - 'delta': self.var_alpha_wobbler.get(), - 'event': self.wobble_stop_event, - }, + def toggle_alpha_wobbler(self): + if self.var_alpha_wobbler_on.get(): + self.wobble_stop_event = threading.Event() + self.q.put( + ( + 'ctrl', + { + 'task': 'stage.alpha_wobbler', + 'delta': self.var_alpha_wobbler.get(), + 'event': self.wobble_stop_event, + }, + ) ) - ) - self.triggerEvent.set() - - def stop_alpha_wobbler(self): - self.wobble_stop_event.set() - - self.b_stop_wobble.config(state=DISABLED) - self.b_start_wobble.config(state=NORMAL) + self.triggerEvent.set() + else: # wobbler off + self.wobble_stop_event.set() def stage_stop(self): self.q.put(('ctrl', {'task': 'stage.stop'})) @@ -313,21 +308,19 @@ def find_eucentric_height(self): self.triggerEvent.set() def toggle_diff_defocus(self): - toggle = self.var_toggle_diff_defocus.get() - - if toggle: + if self.var_diff_defocus_on.get(): offset = self.var_diff_defocus.get() self.ctrl.difffocus.defocus(offset=offset) self.b_reset_defocus.config(state=NORMAL) else: self.ctrl.difffocus.refocus() - self.var_toggle_diff_defocus.set(False) + self.var_diff_defocus_on.set(False) self.get_difffocus() def reset_diff_defocus(self): self.ctrl.difffocus.refocus() - self.var_toggle_diff_defocus.set(False) + self.var_diff_defocus_on.set(False) self.get_difffocus() From b0312eb91688ee1d2998361d8481a9e7d090191e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Tcho=C5=84?= Date: Sat, 20 Sep 2025 19:10:47 +0200 Subject: [PATCH 07/10] Simulated beamshift = 0 not strictly necessary for this PR --- src/instamatic/microscope/interface/simu_microscope.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/instamatic/microscope/interface/simu_microscope.py b/src/instamatic/microscope/interface/simu_microscope.py index 6a29879d..6e40a188 100644 --- a/src/instamatic/microscope/interface/simu_microscope.py +++ b/src/instamatic/microscope/interface/simu_microscope.py @@ -58,8 +58,6 @@ def __init__(self, name: str = 'simulate'): self.BeamShift_x = random.randint(MIN, MAX) self.BeamShift_y = random.randint(MIN, MAX) - self.BeamShift_x = 0 - self.BeamShift_y = 0 self.BeamTilt_x = random.randint(MIN, MAX) self.BeamTilt_y = random.randint(MIN, MAX) From 64c97ba0d627293d45fd87e2162fa5ce594d2e4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Tcho=C5=84?= Date: Sat, 20 Sep 2025 20:05:05 +0200 Subject: [PATCH 08/10] Set columnspan=2 of wobble toggle to avoid unnecessary stretch --- src/instamatic/gui/ctrl_frame.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/instamatic/gui/ctrl_frame.py b/src/instamatic/gui/ctrl_frame.py index 9a342953..354b3259 100644 --- a/src/instamatic/gui/ctrl_frame.py +++ b/src/instamatic/gui/ctrl_frame.py @@ -70,7 +70,7 @@ def __init__(self, parent): variable=self.var_alpha_wobbler_on, command=self.toggle_alpha_wobbler, ) - b_wobble.grid(row=4, column=2, sticky='W') + b_wobble.grid(row=4, column=2, sticky='W', columnspan=2) e_stage_x = Spinbox(frame, textvariable=self.var_stage_x, **stage) e_stage_x.grid(row=6, column=1, sticky='EW') From a6cb1f49662f7ee5df96e6d86595836738033671 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Tcho=C5=84?= Date: Mon, 22 Sep 2025 13:54:45 +0200 Subject: [PATCH 09/10] Apply changes suggested during review Co-authored-by: Viljar Femoen --- src/instamatic/gui/ctrl_frame.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/instamatic/gui/ctrl_frame.py b/src/instamatic/gui/ctrl_frame.py index 354b3259..c69e8acc 100644 --- a/src/instamatic/gui/ctrl_frame.py +++ b/src/instamatic/gui/ctrl_frame.py @@ -37,8 +37,7 @@ def __init__(self, parent): b_find_eucentric_height.grid(row=0, column=0, sticky='EW') Label(frame, text='Mode:').grid(row=8, column=0, sticky='W') - ranges = config.microscope.ranges - modes = list(ranges.keys()) + modes = list(config.microscope.ranges.keys()) self.o_mode = OptionMenu(frame, self.var_mode, modes[0], *modes, command=self.set_mode) self.o_mode.grid(row=8, column=1, sticky='EW') @@ -225,12 +224,14 @@ def get_brightness(self, event=None): def increase_mag(self): self.ctrl.magnification.increase() + print(f'Set magnification: {self.ctrl.magnification.get()}') def decrease_mag(self): self.ctrl.magnification.decrease() + print(f'Set magnification: {self.ctrl.magnification.get()}') def reset_stage(self): - self.ctrl.stage.set(0, 0, 0, 0, 0) + self.ctrl.stage.neutral() def set_difffocus(self, event=None): self.var_difffocus.set(self.var_difffocus.get()) From 85c397c672e66ef2ce5720b74e4bf3e4d070ecf6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Tcho=C5=84?= Date: Mon, 22 Sep 2025 16:56:03 +0200 Subject: [PATCH 10/10] In control panel's 'Stage (XYZ)', add Z control (ugly but very useful) --- src/instamatic/gui/ctrl_frame.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/instamatic/gui/ctrl_frame.py b/src/instamatic/gui/ctrl_frame.py index c69e8acc..5ebca73c 100644 --- a/src/instamatic/gui/ctrl_frame.py +++ b/src/instamatic/gui/ctrl_frame.py @@ -48,7 +48,7 @@ def __init__(self, parent): Label(frame, text='Angle (0)', width=20).grid(row=2, column=0, sticky='W') Label(frame, text='Angle (+)', width=20).grid(row=3, column=0, sticky='W') Label(frame, text='Alpha wobbler (±)', width=20).grid(row=4, column=0, sticky='W') - Label(frame, text='Stage (XY)', width=20).grid(row=6, column=0, sticky='W') + Label(frame, text='Stage (XYZ)', width=20).grid(row=6, column=0, sticky='W') angle = {'width': 10, 'from_': -90, 'to': 90, 'increment': 5} angle_i1 = {**angle, 'increment': 1} @@ -75,6 +75,8 @@ def __init__(self, parent): e_stage_x.grid(row=6, column=1, sticky='EW') e_stage_y = Spinbox(frame, textvariable=self.var_stage_y, **stage) e_stage_y.grid(row=6, column=2, sticky='EW') + e_stage_z = Spinbox(frame, textvariable=self.var_stage_z, **stage) + e_stage_z.grid(row=6, column=3, sticky='EW') if config.settings.use_goniotool: Label(frame, text='Rot. Speed', width=20).grid(row=5, column=0, sticky='W') @@ -97,9 +99,9 @@ def __init__(self, parent): b_positive_angle.grid(row=3, column=2, sticky='W') b_stage = Button(frame, text='Set', command=self.set_stage) - b_stage.grid(row=6, column=3, sticky='W') + b_stage.grid(row=6, column=4, sticky='W') b_stage_get = Button(frame, text='Get', command=self.get_stage) - b_stage_get.grid(row=6, column=4, sticky='W') + b_stage_get.grid(row=6, column=5, sticky='W') # defocus button Label(frame, text='Diff defocus', width=20).grid(row=13, column=0, sticky='W') @@ -196,6 +198,7 @@ def init_vars(self): self.var_stage_x = IntVar(value=0) self.var_stage_y = IntVar(value=0) + self.var_stage_z = IntVar(value=0) self.var_goniotool_tx = IntVar(value=1) @@ -272,6 +275,7 @@ def set_stage(self): 'task': 'stage.set', 'x': self.var_stage_x.get(), 'y': self.var_stage_y.get(), + 'z': self.var_stage_z.get(), 'wait': self.var_stage_wait.get(), }, ) @@ -279,9 +283,10 @@ def set_stage(self): self.triggerEvent.set() def get_stage(self, event=None): - x, y, _, _, _ = self.ctrl.stage.get() + x, y, z, _, _ = self.ctrl.stage.get() self.var_stage_x.set(round(x)) self.var_stage_y.set(round(y)) + self.var_stage_z.set(round(z)) def toggle_alpha_wobbler(self): if self.var_alpha_wobbler_on.get():