From 5909d35c0487be8c53a1f4be06cd43967736e55a Mon Sep 17 00:00:00 2001 From: jmcoreymv Date: Tue, 22 Oct 2024 08:53:25 -0700 Subject: [PATCH] Update binning size values to string format (#399) --- data/settings.json | 2 +- lumaviewpro.py | 24 ++++++++++-------------- modules/binning.py | 19 +++++++++++++++++++ 3 files changed, 30 insertions(+), 15 deletions(-) create mode 100644 modules/binning.py diff --git a/data/settings.json b/data/settings.json index 5b79f3e..9baf14c 100644 --- a/data/settings.json +++ b/data/settings.json @@ -123,7 +123,7 @@ } }, "binning": { - "size": 1 + "size": "1x1" }, "logging": { "default": { diff --git a/lumaviewpro.py b/lumaviewpro.py index 294cd3c..e4cf508 100644 --- a/lumaviewpro.py +++ b/lumaviewpro.py @@ -208,6 +208,7 @@ import labware from modules.autofocus_executor import AutofocusExecutor from modules.stitcher import Stitcher +import modules.binning as binning from modules.composite_generation import CompositeGeneration from modules.contrast_stretcher import ContrastStretcher import modules.coord_transformations as coord_transformations @@ -4727,7 +4728,8 @@ def load_settings(self, filename="./data/current.json"): # Multiplying frame size by the binning size to account for the select_binning_size() call # Effectively sets the frame size to the size it was prior to pixel binning, then bins - binning_size = int(settings['binning']['size']) + binning_size_str = settings['binning']['size'] + binning_size = binning.binning_size_str_to_int(text=binning_size_str) self.ids['frame_width_id'].text = str(settings['frame']['width'] * binning_size) self.ids['frame_height_id'].text = str(settings['frame']['height'] * binning_size) @@ -4735,8 +4737,7 @@ def load_settings(self, filename="./data/current.json"): settings['frame']['height'] * binning_size) # Pixel Binning - - self.ids['binning_spinner'].text = str(settings['binning']['size']) + self.ids['binning_spinner'].text = binning_size_str self.select_binning_size() lumaview.scope.set_stage_offset(stage_offset=settings['stage_offset']) @@ -4874,13 +4875,6 @@ def select_video_recording_format(self): else: settings['video_as_frames'] = True - - def update_binning_size(self, size: int): - global settings - # size = int(self.ids['binning_spinner'].text) - lumaview.scope.set_binning_size(size=size) - settings['binning']['size'] = size - def update_scale_bar_state(self): if self.ids['enable_scale_bar_btn'].state == 'down': @@ -4923,8 +4917,7 @@ def save_settings(self, file="./data/current.json"): def load_binning_sizes(self): spinner = self.ids['binning_spinner'] - sizes = (1,2,4) - spinner.values = list(map(str,sizes)) + spinner.values = ['1x1','2x2','4x4'] def select_binning_size(self): @@ -4933,8 +4926,11 @@ def select_binning_size(self): orig_binning_size = lumaview.scope.get_binning_size() orig_frame_size = get_current_frame_dimensions() - new_binning_size = int(self.ids['binning_spinner'].text) - self.update_binning_size(size=new_binning_size) + new_binning_size_str = self.ids['binning_spinner'].text + + new_binning_size = binning.binning_size_str_to_int(new_binning_size_str) + lumaview.scope.set_binning_size(size=new_binning_size) + settings['binning']['size'] = new_binning_size_str ratio = new_binning_size / orig_binning_size new_frame_size = { 'width': math.floor(orig_frame_size['width'] / ratio), diff --git a/modules/binning.py b/modules/binning.py new file mode 100644 index 0000000..626c9f3 --- /dev/null +++ b/modules/binning.py @@ -0,0 +1,19 @@ + + +BINNING_SIZE_MAP = { + '1x1': 1, + '2x2': 2, + '4x4': 4, +} + + +def binning_size_str_to_int(text: str) -> int: + return BINNING_SIZE_MAP.get(text, 1) + + +def binning_size_int_to_str(val: int): + for k, v in BINNING_SIZE_MAP.items(): + if v == val: + return k + + return '1x1'