New additions from klaus
This commit is contained in:
@@ -33,20 +33,10 @@ class AerotechTasksMixin(CustomDeviceMixin):
|
|||||||
PSO is not needed or when it'd conflict with other devices.
|
PSO is not needed or when it'd conflict with other devices.
|
||||||
"""
|
"""
|
||||||
# Fish out our configuration from scaninfo (via explicit or generic addressing)
|
# Fish out our configuration from scaninfo (via explicit or generic addressing)
|
||||||
d = {}
|
d = self.parent.scan_info.scan_msg.scan_parameters.get("aerotech_config")
|
||||||
if "kwargs" in self.parent.scaninfo.scan_msg.info:
|
|
||||||
scanargs = self.parent.scaninfo.scan_msg.info["kwargs"]
|
|
||||||
if self.parent.scaninfo.scan_type in ("script", "scripted"):
|
|
||||||
# NOTE: Scans don't have to fully configure the device
|
|
||||||
if "script_text" in scanargs and scanargs["script_text"] is not None:
|
|
||||||
d["script_text"] = scanargs["script_text"]
|
|
||||||
if "script_file" in scanargs and scanargs["script_file"] is not None:
|
|
||||||
d["script_file"] = scanargs["script_file"]
|
|
||||||
if "script_task" in scanargs and scanargs["script_task"] is not None:
|
|
||||||
d["script_task"] = scanargs["script_task"]
|
|
||||||
|
|
||||||
# Perform bluesky-style configuration
|
# Perform bluesky-style configuration
|
||||||
if len(d) > 0:
|
if d:
|
||||||
# logger.warning(f"[{self.parent.name}] Configuring with:\n{d}")
|
# logger.warning(f"[{self.parent.name}] Configuring with:\n{d}")
|
||||||
self.parent.configure(d=d)
|
self.parent.configure(d=d)
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ Created on Thu Jun 27 17:28:43 2024
|
|||||||
|
|
||||||
@author: mohacsi_i
|
@author: mohacsi_i
|
||||||
"""
|
"""
|
||||||
|
import copy
|
||||||
from time import sleep
|
from time import sleep
|
||||||
from ophyd import Signal, Component, EpicsSignal, EpicsSignalRO, Kind, DeviceStatus
|
from ophyd import Signal, Component, EpicsSignal, EpicsSignalRO, Kind, DeviceStatus
|
||||||
from ophyd.device import DynamicDeviceComponent
|
from ophyd.device import DynamicDeviceComponent
|
||||||
@@ -164,26 +165,25 @@ class GigaFrostCameraMixin(CustomDetectorMixin):
|
|||||||
)
|
)
|
||||||
|
|
||||||
# Fish out our configuration from scaninfo (via explicit or generic addressing)
|
# Fish out our configuration from scaninfo (via explicit or generic addressing)
|
||||||
scanparam = self.parent.scaninfo.scan_msg.info
|
scan_msg = self.parent.scaninfo.scan_msg
|
||||||
|
scanargs = {**scan_msg.request_inputs["inputs"], **scan_msg.request_inputs["kwargs"]}
|
||||||
d = {}
|
d = {}
|
||||||
if "kwargs" in scanparam:
|
if "image_width" in scanargs and scanargs["image_width"] is not None:
|
||||||
scanargs = scanparam["kwargs"]
|
d["image_width"] = scanargs["image_width"]
|
||||||
if "image_width" in scanargs and scanargs["image_width"] is not None:
|
if "image_height" in scanargs and scanargs["image_height"] is not None:
|
||||||
d["image_width"] = scanargs["image_width"]
|
d["image_height"] = scanargs["image_height"]
|
||||||
if "image_height" in scanargs and scanargs["image_height"] is not None:
|
if "exp_time" in scanargs and scanargs["exp_time"] is not None:
|
||||||
d["image_height"] = scanargs["image_height"]
|
d["exposure_time_ms"] = scanargs["exp_time"]
|
||||||
if "exp_time" in scanargs and scanargs["exp_time"] is not None:
|
if "acq_time" in scanargs and scanargs["acq_time"] is not None:
|
||||||
d["exposure_time_ms"] = scanargs["exp_time"]
|
d["exposure_time_ms"] = scanargs["acq_time"]
|
||||||
if "acq_time" in scanargs and scanargs["acq_time"] is not None:
|
if "acq_period" in scanargs and scanargs["acq_period"] is not None:
|
||||||
d["exposure_time_ms"] = scanargs["acq_time"]
|
d["exposure_period_ms"] = scanargs["acq_period"]
|
||||||
if "acq_period" in scanargs and scanargs["acq_period"] is not None:
|
if "exp_burst" in scanargs and scanargs["exp_burst"] is not None:
|
||||||
d["exposure_period_ms"] = scanargs["acq_period"]
|
d["exposure_num_burst"] = scanargs["exp_burst"]
|
||||||
if "exp_burst" in scanargs and scanargs["exp_burst"] is not None:
|
if "acq_mode" in scanargs and scanargs["acq_mode"] is not None:
|
||||||
d["exposure_num_burst"] = scanargs["exp_burst"]
|
d["acq_mode"] = scanargs["acq_mode"]
|
||||||
if "acq_mode" in scanargs and scanargs["acq_mode"] is not None:
|
# elif self.parent.scaninfo.scan_type == "step":
|
||||||
d["acq_mode"] = scanargs["acq_mode"]
|
# d['acq_mode'] = "default"
|
||||||
# elif self.parent.scaninfo.scan_type == "step":
|
|
||||||
# d['acq_mode'] = "default"
|
|
||||||
|
|
||||||
# Perform bluesky-style configuration
|
# Perform bluesky-style configuration
|
||||||
if len(d) > 0:
|
if len(d) > 0:
|
||||||
@@ -497,13 +497,13 @@ class GigaFrostCamera(PSIDetectorBase):
|
|||||||
|
|
||||||
def trigger(self) -> DeviceStatus:
|
def trigger(self) -> DeviceStatus:
|
||||||
"""Sends a software trigger to GigaFrost"""
|
"""Sends a software trigger to GigaFrost"""
|
||||||
super().trigger()
|
return super().trigger()
|
||||||
|
|
||||||
# There's no status readback from the camera, so we just wait
|
# There's no status readback from the camera, so we just wait
|
||||||
sleep_time = self.cfgExposure.value * self.cfgCntNum.value * 0.001 + 0.2
|
# sleep_time = self.cfgExposure.value * self.cfgCntNum.value * 0.001 + 0.2
|
||||||
logger.warning(f"Gigafrost sleeping for {sleep_time} sec")
|
# logger.warning(f"Gigafrost sleeping for {sleep_time} sec")
|
||||||
sleep(sleep_time)
|
# sleep(sleep_time)
|
||||||
return DeviceStatus(self, done=True, success=True, settle_time=sleep_time)
|
# return DeviceStatus(self, done=True, success=True, settle_time=sleep_time)
|
||||||
|
|
||||||
def configure(self, d: dict = None):
|
def configure(self, d: dict = None):
|
||||||
"""Configure the next scan with the GigaFRoST camera
|
"""Configure the next scan with the GigaFRoST camera
|
||||||
|
|||||||
@@ -75,8 +75,14 @@ class TomcatSnapNStep(AsyncFlyScanBase):
|
|||||||
filename = "AerotechSnapAndStepTemplate.ascript"
|
filename = "AerotechSnapAndStepTemplate.ascript"
|
||||||
filesubs = self.get_filesubs()
|
filesubs = self.get_filesubs()
|
||||||
filetext = self.render_file(filename, filesubs)
|
filetext = self.render_file(filename, filesubs)
|
||||||
kwargs["parameter"]["kwargs"]["script_text"] = filetext
|
self.scan_parameters["aerotech_config"] = {
|
||||||
kwargs["parameter"]["kwargs"]["script_file"] = "bec.ascript"
|
"script_text":filetext,
|
||||||
|
"script_file":"bec.ascript",
|
||||||
|
"script_task": 4,
|
||||||
|
}
|
||||||
|
# self.scan_parameters["script_file"] = "bec.ascript"
|
||||||
|
# kwargs["parameter"]["kwargs"]["script_text"] = filetext
|
||||||
|
# kwargs["parameter"]["kwargs"]["script_file"] = "bec.ascript"
|
||||||
|
|
||||||
super().__init__(
|
super().__init__(
|
||||||
acq_time=acq_time,
|
acq_time=acq_time,
|
||||||
|
|||||||
@@ -123,7 +123,11 @@ class AcquireWhite(Acquire):
|
|||||||
|
|
||||||
class AcquireProjections(AsyncFlyScanBase):
|
class AcquireProjections(AsyncFlyScanBase):
|
||||||
scan_name = "acquire_projections"
|
scan_name = "acquire_projections"
|
||||||
gui_config = {"Acquisition parameters": ["exp_burst"]}
|
gui_config = {
|
||||||
|
"Motor": ["motor"],
|
||||||
|
"Acquisition parameters": ["sample_position_in", "start_angle", "angular_range" ],
|
||||||
|
"Camera": ["exp_time", "exp_burst"]
|
||||||
|
}
|
||||||
|
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
motor: DeviceBase,
|
motor: DeviceBase,
|
||||||
@@ -131,6 +135,7 @@ class AcquireProjections(AsyncFlyScanBase):
|
|||||||
sample_position_in: float,
|
sample_position_in: float,
|
||||||
start_angle: float,
|
start_angle: float,
|
||||||
angular_range: float,
|
angular_range: float,
|
||||||
|
exp_time:float,
|
||||||
**kwargs):
|
**kwargs):
|
||||||
"""
|
"""
|
||||||
Acquire projection images.
|
Acquire projection images.
|
||||||
@@ -171,7 +176,7 @@ class AcquireProjections(AsyncFlyScanBase):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
self.motor = motor
|
self.motor = motor
|
||||||
super().__init__(**kwargs)
|
super().__init__(exp_time=exp_time,**kwargs)
|
||||||
|
|
||||||
self.burst_at_each_point = 1
|
self.burst_at_each_point = 1
|
||||||
self.sample_position_in = sample_position_in
|
self.sample_position_in = sample_position_in
|
||||||
|
|||||||
Reference in New Issue
Block a user