From beaa3bfbe8fff7d2c5872ecafd832b77f2f8d1e1 Mon Sep 17 00:00:00 2001 From: vshekar1 Date: Sun, 19 Oct 2025 17:39:56 -0400 Subject: [PATCH 1/2] Added CS1000 temp ramping --- config_params.py | 2 +- daq_macros.py | 6 ++++++ daq_main_common.py | 3 ++- gui/dialog/user_screen.py | 27 +++++++++++++++++++++++++++ mxbluesky/devices/cryostream.py | 9 +++++---- start_bs.py | 4 ++-- 6 files changed, 43 insertions(+), 8 deletions(-) diff --git a/config_params.py b/config_params.py index 97425456..2ea9a23d 100644 --- a/config_params.py +++ b/config_params.py @@ -91,7 +91,7 @@ class OnMountAvailOptions(Enum): DEWAR_SECTORS = {'amx':8, 'fmx':8, 'nyx':8} PUCKS_PER_DEWAR_SECTOR = {'amx':3, 'fmx':3, 'nyx':3} -cryostreamTempPV = {"amx": "XF:17ID1:CS700:TEMP", "fmx": "XF:17ID2:CS700:TEMP", "nyx":"XF:19ID2:CS700:TEMP"} +cryostreamTempPV = {"amx": "XF:17IDB-ES:AMX{CS:1}SAMPLE_TEMP_RBV", "fmx": "XF:17IDC-ES:FMX{CS:1}SAMPLE_TEMP_RBV"} VALID_EXP_TIMES = { "amx": {"min": 0.005, "max": 1, "digits": 3}, diff --git a/daq_macros.py b/daq_macros.py index 7045ed93..bf3760d0 100644 --- a/daq_macros.py +++ b/daq_macros.py @@ -4600,6 +4600,12 @@ def emptyQueue(): def topViewCheckOn(): setBlConfig(TOP_VIEW_CHECK,1) +def set_cryostream_temp(temp): + cs1000.move(float(temp)) + +def set_cryostream_ramp_rate(ramp_rate): + cs1000.ramp_rate.put(float(ramp_rate)) + def anneal(annealTime=1.0): if daq_utils.beamline == 'fmx': annealer = fmxAnnealer diff --git a/daq_main_common.py b/daq_main_common.py index dd459370..b79b6fac 100755 --- a/daq_main_common.py +++ b/daq_main_common.py @@ -84,7 +84,8 @@ def setGovState(state): backoffDetector, enableMount, robotOn, - set_energy + set_cryostream_ramp_rate, + set_cryostream_temp ] if daq_utils.beamline != "nyx": diff --git a/gui/dialog/user_screen.py b/gui/dialog/user_screen.py index e7e54e04..26f8f6cd 100644 --- a/gui/dialog/user_screen.py +++ b/gui/dialog/user_screen.py @@ -133,6 +133,17 @@ def __init__(self, parent: "ControlMain"): self.slit1YMotor_ledit = QtWidgets.QLineEdit() self.slit1YMotor_ledit.setText(str(self.parent.slit1YGapSP_pv.get())) self.slit1YMotor_ledit.returnPressed.connect(self.setSlit1YCB) + temp_change_label = QtWidgets.QLabel("Cryo Temp:") + self.temp_change_ledit = QtWidgets.QLineEdit() + self.temp_change_ledit.returnPressed.connect(self.setTemp) + self.temp_change_button = QtWidgets.QPushButton("Set Temp") + self.temp_change_button.clicked.connect(self.setTemp) + + temp_ramp_label = QtWidgets.QLabel("Cryo Ramp Rate:") + self.temp_ramp_ledit = QtWidgets.QLineEdit() + self.temp_ramp_ledit.returnPressed.connect(self.setRamp) + self.temp_ramp_button = QtWidgets.QPushButton("Set Ramp Rate") + self.temp_ramp_button.clicked.connect(self.setRamp) sampleFluxLabelDesc = QtWidgets.QLabel("Sample Flux:") sampleFluxLabelDesc.setFixedWidth(80) @@ -152,8 +163,18 @@ def __init__(self, parent: "ControlMain"): hBoxBeam2.addWidget(self.slit1YRBVLabel.getEntry()) hBoxBeam2.addWidget(slit1YSPLabel) hBoxBeam2.addWidget(self.slit1YMotor_ledit) + hBoxTemp = QtWidgets.QHBoxLayout() + hBoxTemp.addWidget(temp_change_label) + hBoxTemp.addWidget(self.temp_change_ledit) + hBoxTemp.addWidget(self.temp_change_button) + hBoxRamp = QtWidgets.QHBoxLayout() + hBoxRamp.addWidget(temp_ramp_label) + hBoxRamp.addWidget(self.temp_ramp_ledit) + hBoxRamp.addWidget(self.temp_ramp_button) vBoxBeam.addLayout(hBoxBeam1) vBoxBeam.addLayout(hBoxBeam2) + vBoxBeam.addLayout(hBoxTemp) + vBoxBeam.addLayout(hBoxRamp) vBoxBeam.addLayout(hBoxBeam3) beamGB.setLayout(vBoxBeam) @@ -229,6 +250,12 @@ def setSlit1XCB(self): def setSlit1YCB(self): self.parent.send_to_server("setSlit1Y", [self.slit1YMotor_ledit.text()]) + def setTemp(self): + self.parent.send_to_server("set_cryostream_temp", [self.temp_change_ledit.text()]) + + def setRamp(self): + self.parent.send_to_server("set_cryostream_ramp_rate", [self.temp_ramp_ledit.text()]) + def unmountWarmCB(self): self.parent.send_to_server("unmountSample") diff --git a/mxbluesky/devices/cryostream.py b/mxbluesky/devices/cryostream.py index 4582c760..11332d6f 100644 --- a/mxbluesky/devices/cryostream.py +++ b/mxbluesky/devices/cryostream.py @@ -10,9 +10,10 @@ class CryoStreamCmd(IntEnum): class CryoStream(PVPositionerIsClose): - readback = Cpt(EpicsSignalRO, 'TEMP') - setpoint = Cpt(EpicsSignal, 'RTEMP') - actuate = Cpt(EpicsSignal, "RAMP.PROC") + readback = Cpt(EpicsSignalRO, 'SAMPLE_TEMP_RBV') + setpoint = Cpt(EpicsSignal, 'RAMP:TARGET_TEMP') + actuate = Cpt(EpicsSignal, "RAMP:EXECUTE") actuate_value = CryoStreamCmd.START_RAMP - stop_signal = Cpt(EpicsSignal, "RAMP.PROC") + stop_signal = Cpt(EpicsSignal, "RAMP:EXECUTE") stop_value = CryoStreamCmd.STOP_RAMP + ramp_rate = Cpt(EpicsSignal, "RAMP:RAMP_RATE") diff --git a/start_bs.py b/start_bs.py index 75b2991b..c0454a1c 100755 --- a/start_bs.py +++ b/start_bs.py @@ -160,7 +160,7 @@ class SampleXYZ(Device): dewar = Dewar("XF:17IDB-ES:AMX", name="dewar") home_pins = home_pins_plan(gov_mon_signal, gonio_mon_signal, pyz_homer, gonio) robot_arm = RobotArm("XF:17IDB-ES:AMX", name="robot_arm") - cs700 = CryoStream("XF:17ID1:CS700:", name="cs700", atol=0.1) + cs1000 = CryoStream("XF:17IDB-ES:AMX{CS:1}", name="cs1000", atol=0.1) elif beamline == "fmx": from mxbluesky.devices import (WorkPositions, TwoClickLowMag, LoopDetector, MountPositions, @@ -207,7 +207,7 @@ class SampleXYZ(Device): dewar = Dewar("XF:17IDC-ES:FMX", name="dewar") home_pins = home_pins_plan(gov_mon_signal, gonio_mon_signal, pyz_homer, gonio) robot_arm = RobotArm("XF:17IDC-ES:FMX", name="robot_arm") - cs700 = CryoStream("XF:17ID2:CS700:", name="cs700", atol=0.1) + cs1000 = CryoStream("XF:17IDC-ES:FMX{CS:1}", name="cs1000", atol=0.1) elif beamline=="nyx": from mxbluesky.devices.md2 import LightDevice, BeamstopDevice, MD2SimpleHVDevice, MD2Device, ShutterDevice From 4682497539c21045f30c9a8ecc597f8c4c3a0ea8 Mon Sep 17 00:00:00 2001 From: Shekar V Date: Mon, 5 Jan 2026 12:42:50 -0500 Subject: [PATCH 2/2] Apply suggestions from code review Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- daq_main_common.py | 1 + gui/dialog/user_screen.py | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/daq_main_common.py b/daq_main_common.py index b79b6fac..65c8585f 100755 --- a/daq_main_common.py +++ b/daq_main_common.py @@ -84,6 +84,7 @@ def setGovState(state): backoffDetector, enableMount, robotOn, + set_energy, set_cryostream_ramp_rate, set_cryostream_temp ] diff --git a/gui/dialog/user_screen.py b/gui/dialog/user_screen.py index 26f8f6cd..40a39d2d 100644 --- a/gui/dialog/user_screen.py +++ b/gui/dialog/user_screen.py @@ -138,7 +138,7 @@ def __init__(self, parent: "ControlMain"): self.temp_change_ledit.returnPressed.connect(self.setTemp) self.temp_change_button = QtWidgets.QPushButton("Set Temp") self.temp_change_button.clicked.connect(self.setTemp) - + temp_ramp_label = QtWidgets.QLabel("Cryo Ramp Rate:") self.temp_ramp_ledit = QtWidgets.QLineEdit() self.temp_ramp_ledit.returnPressed.connect(self.setRamp) @@ -255,7 +255,7 @@ def setTemp(self): def setRamp(self): self.parent.send_to_server("set_cryostream_ramp_rate", [self.temp_ramp_ledit.text()]) - + def unmountWarmCB(self): self.parent.send_to_server("unmountSample")