From 2fd7b38aaaa5b7af165a35d3846e608b81971503 Mon Sep 17 00:00:00 2001 From: vshekar1 Date: Sun, 19 Oct 2025 17:53:27 -0400 Subject: [PATCH 1/3] Added Special puck option for FMX --- daq_lib.py | 2 +- gui/control_main.py | 24 ++++++++++++++++++++++++ gui/dewar_tree.py | 13 +++++++++++-- 3 files changed, 36 insertions(+), 3 deletions(-) diff --git a/daq_lib.py b/daq_lib.py index 172a685b..b4c98e57 100644 --- a/daq_lib.py +++ b/daq_lib.py @@ -401,7 +401,7 @@ def unmountCold(): set_mounted_pin_data(currentMountedSampleID, mount_state=MountState.CURRENTLY_UNMOUNTING.value) if robot_lib.unmountRobotSample(gov_robot, puckPos,pinPos,currentMountedSampleID): db_lib.deleteCompletedRequestsforSample(currentMountedSampleID) - if getBlConfig("robot_online"): + if getBlConfig("robot_online") and not getBlConfig("special_mount_enabled"): robot_lib.parkGripper() clearMountedSample() setPvDesc("robotGovActive",1) diff --git a/gui/control_main.py b/gui/control_main.py index 2995109e..5a88a2a5 100644 --- a/gui/control_main.py +++ b/gui/control_main.py @@ -357,10 +357,30 @@ def createSampleTab(self): self.dewarViewRadio.toggled.connect( functools.partial(self.dewarViewToggledCB, "dewarView") ) + self.puck_type_radio_group = QtWidgets.QButtonGroup() + self.special_puck_radio = QtWidgets.QRadioButton("Special Puck") + self.dewar_puck_radio = QtWidgets.QRadioButton("Dewar Puck") + self.puck_type_radio_group.addButton(self.special_puck_radio) + self.puck_type_radio_group.addButton(self.dewar_puck_radio) + self.dewar_puck_radio.toggled.connect( + lambda: self.toggle_special_puck(False) + ) + self.special_puck_radio.toggled.connect( + lambda: self.toggle_special_puck(True) + ) + puck_type_radio_layout = QtWidgets.QHBoxLayout() + puck_type_radio_layout.addWidget(self.dewar_puck_radio) + puck_type_radio_layout.addWidget(self.special_puck_radio) + if getBlConfig("special_mount_enabled"): + self.special_puck_radio.setChecked(True) + else: + self.dewar_puck_radio.setChecked(True) + hBoxRadioLayout1.addWidget(self.dewarViewRadio) hBoxRadioLayout1.addWidget(self.priorityViewRadio) self.viewRadioGroup.addButton(self.dewarViewRadio) vBoxDFlayout.addLayout(hBoxRadioLayout1) + vBoxDFlayout.addLayout(puck_type_radio_layout) vBoxDFlayout.addWidget(self.dewarTree) vBoxDFlayout.addWidget(self.follow_current_request_checkbox) queueSelectedButton = QtWidgets.QPushButton("Queue All Selected") @@ -1590,6 +1610,10 @@ def createSampleTab(self): serverCheckThread.visit_dir_changed.connect(QApplication.instance().quit) serverCheckThread.start() + def toggle_special_puck(self, activate_special: bool): + setBlConfig("special_mount_enabled", activate_special) + self.dewarTree.refreshTreeDewarView(hard_refresh=True) + def updateCam(self, pixmapItem: "QGraphicsPixmapItem", frame): if pixmapItem == self.pixmap_item: with QMutexLocker(self.sampleCameraMutex): diff --git a/gui/dewar_tree.py b/gui/dewar_tree.py index 4fe4a365..3475a85e 100644 --- a/gui/dewar_tree.py +++ b/gui/dewar_tree.py @@ -211,9 +211,16 @@ def set_mounted_sample(self, item, sample_name=None): sample_name = item.text() item.setText(sample_name + MountState.get_text(mount_state)) - def refreshTreeDewarView(self, get_latest_pucks=False): + def refreshTreeDewarView(self, get_latest_pucks=False, hard_refresh=False): puck = "" - #self.model.clear() + # self.model.clear() + # We only want to show 1 puck when special mount is enabled + if daq_utils.getBlConfig("special_mount_enabled"): + self.pucksPerDewarSector = 1 + self.dewarSectors = 1 + else: + self.pucksPerDewarSector = PUCKS_PER_DEWAR_SECTOR[daq_utils.beamline] + self.dewarSectors = DEWAR_SECTORS[daq_utils.beamline] dewar_data, puck_data, sample_data, request_data = db_lib.get_dewar_tree_data( daq_utils.primaryDewarName, daq_utils.beamline, get_latest_pucks ) @@ -223,6 +230,8 @@ def refreshTreeDewarView(self, get_latest_pucks=False): "sample_data": sample_data, "request_data": request_data, } + if hard_refresh: + self.model.clear() self.update_model(data) def update_model(self, data): From 1336666f75b8a39bb936265359d385964989c495 Mon Sep 17 00:00:00 2001 From: vshekar1 Date: Mon, 12 Jan 2026 16:35:32 -0500 Subject: [PATCH 2/3] Moved callback def to after the check --- gui/control_main.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/gui/control_main.py b/gui/control_main.py index 5a88a2a5..6c155c50 100644 --- a/gui/control_main.py +++ b/gui/control_main.py @@ -362,12 +362,6 @@ def createSampleTab(self): self.dewar_puck_radio = QtWidgets.QRadioButton("Dewar Puck") self.puck_type_radio_group.addButton(self.special_puck_radio) self.puck_type_radio_group.addButton(self.dewar_puck_radio) - self.dewar_puck_radio.toggled.connect( - lambda: self.toggle_special_puck(False) - ) - self.special_puck_radio.toggled.connect( - lambda: self.toggle_special_puck(True) - ) puck_type_radio_layout = QtWidgets.QHBoxLayout() puck_type_radio_layout.addWidget(self.dewar_puck_radio) puck_type_radio_layout.addWidget(self.special_puck_radio) @@ -375,6 +369,12 @@ def createSampleTab(self): self.special_puck_radio.setChecked(True) else: self.dewar_puck_radio.setChecked(True) + self.dewar_puck_radio.toggled.connect( + lambda: self.toggle_special_puck(False) + ) + self.special_puck_radio.toggled.connect( + lambda: self.toggle_special_puck(True) + ) hBoxRadioLayout1.addWidget(self.dewarViewRadio) hBoxRadioLayout1.addWidget(self.priorityViewRadio) From cb0dd6e9d115ce3cd9e8cd91656261067dad8181 Mon Sep 17 00:00:00 2001 From: vshekar1 Date: Mon, 12 Jan 2026 16:46:10 -0500 Subject: [PATCH 3/3] Prevent callback from triggering twice --- gui/control_main.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gui/control_main.py b/gui/control_main.py index 6c155c50..0d346b27 100644 --- a/gui/control_main.py +++ b/gui/control_main.py @@ -370,10 +370,10 @@ def createSampleTab(self): else: self.dewar_puck_radio.setChecked(True) self.dewar_puck_radio.toggled.connect( - lambda: self.toggle_special_puck(False) + lambda checked: self.toggle_special_puck(False) if checked else None ) self.special_puck_radio.toggled.connect( - lambda: self.toggle_special_puck(True) + lambda checked: self.toggle_special_puck(True) if checked else None ) hBoxRadioLayout1.addWidget(self.dewarViewRadio)