mirror of
https://github.com/bec-project/ophyd_devices.git
synced 2026-02-08 16:18:40 +01:00
fix: online changes in e20639 for mcs card operating full 2D grid
This commit is contained in:
@@ -263,6 +263,13 @@ class DelayGeneratorDG645(Device):
|
|||||||
config_storage_name="ddg_config",
|
config_storage_name="ddg_config",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
fixed_ttl_width = Component(
|
||||||
|
bec_utils.ConfigSignal,
|
||||||
|
name="fixed_ttl_width",
|
||||||
|
kind="config",
|
||||||
|
config_storage_name="ddg_config",
|
||||||
|
)
|
||||||
|
|
||||||
amplitude = Component(
|
amplitude = Component(
|
||||||
bec_utils.ConfigSignal,
|
bec_utils.ConfigSignal,
|
||||||
name="amplitude",
|
name="amplitude",
|
||||||
@@ -337,7 +344,8 @@ class DelayGeneratorDG645(Device):
|
|||||||
parent (_type_, optional): _description_. Defaults to None.
|
parent (_type_, optional): _description_. Defaults to None.
|
||||||
device_manager (_type_, optional): _description_. Defaults to None.
|
device_manager (_type_, optional): _description_. Defaults to None.
|
||||||
Signals:
|
Signals:
|
||||||
polarity (_type_, optional): _description_. Defaults to None.
|
polarity (_list_, optional): _description_. Defaults to None.
|
||||||
|
fixed_ttl_width (_list_, optional): _description_. Defaults to None.
|
||||||
amplitude (_type_, optional): _description_. Defaults to None.
|
amplitude (_type_, optional): _description_. Defaults to None.
|
||||||
offset (_type_, optional): _description_. Defaults to None.
|
offset (_type_, optional): _description_. Defaults to None.
|
||||||
thres_trig_level (_type_, optional): _description_. Defaults to None.
|
thres_trig_level (_type_, optional): _description_. Defaults to None.
|
||||||
@@ -347,19 +355,21 @@ class DelayGeneratorDG645(Device):
|
|||||||
set_high_on_exposure
|
set_high_on_exposure
|
||||||
set_high_on_stage
|
set_high_on_stage
|
||||||
set_trigger_source
|
set_trigger_source
|
||||||
|
|
||||||
"""
|
"""
|
||||||
self.ddg_config = {
|
self.ddg_config = {
|
||||||
f"{name}_delay_burst": 0,
|
f"{name}_delay_burst": 0,
|
||||||
f"{name}_delta_width": 0,
|
f"{name}_delta_width": 0,
|
||||||
f"{name}_additional_triggers": 0,
|
f"{name}_additional_triggers": 0,
|
||||||
f"{name}_polarity": [1, 1, 1, 1, 1],
|
f"{name}_polarity": [1, 1, 1, 1, 1],
|
||||||
|
f"{name}_fixed_ttl_width": [0, 0, 0, 0, 0],
|
||||||
f"{name}_amplitude": 4.5,
|
f"{name}_amplitude": 4.5,
|
||||||
f"{name}_offset": 0,
|
f"{name}_offset": 0,
|
||||||
f"{name}_thres_trig_level": 2.5,
|
f"{name}_thres_trig_level": 2.5,
|
||||||
f"{name}_set_high_on_exposure": False,
|
f"{name}_set_high_on_exposure": False,
|
||||||
f"{name}_set_high_on_stage": False,
|
f"{name}_set_high_on_stage": False,
|
||||||
f"{name}_set_trigger_source": "SINGLE_SHOT",
|
f"{name}_set_trigger_source": "SINGLE_SHOT",
|
||||||
f"{name}_trigger_width": None,
|
f"{name}_trigger_width": None, # This somehow duplicates the logic of fixed_ttl_width
|
||||||
}
|
}
|
||||||
if ddg_config is not None:
|
if ddg_config is not None:
|
||||||
[self.ddg_config.update({f"{name}_{key}": value}) for key, value in ddg_config.items()]
|
[self.ddg_config.update({f"{name}_{key}": value}) for key, value in ddg_config.items()]
|
||||||
@@ -504,6 +514,11 @@ class DelayGeneratorDG645(Device):
|
|||||||
self.set_channels("width", exp_time)
|
self.set_channels("width", exp_time)
|
||||||
else:
|
else:
|
||||||
self.set_channels("width", self.trigger_width.get())
|
self.set_channels("width", self.trigger_width.get())
|
||||||
|
for value, channel in zip(self.fixed_ttl_width.get(), self._all_channels):
|
||||||
|
logger.info(f'{value}')
|
||||||
|
if value !=0:
|
||||||
|
logger.info(f'Setting {value}')
|
||||||
|
self.set_channels("width", value, channels=[channel])
|
||||||
else:
|
else:
|
||||||
self._set_trigger(getattr(TriggerSource, self.set_trigger_source.get()))
|
self._set_trigger(getattr(TriggerSource, self.set_trigger_source.get()))
|
||||||
exp_time = self.delta_width.get() + self.scaninfo.exp_time
|
exp_time = self.delta_width.get() + self.scaninfo.exp_time
|
||||||
@@ -539,6 +554,11 @@ class DelayGeneratorDG645(Device):
|
|||||||
self.set_channels("width", exp_time)
|
self.set_channels("width", exp_time)
|
||||||
else:
|
else:
|
||||||
self.set_channels("width", self.trigger_width.get())
|
self.set_channels("width", self.trigger_width.get())
|
||||||
|
for value, channel in zip(self.fixed_ttl_width.get(), self._all_channels):
|
||||||
|
logger.info(f'{value}')
|
||||||
|
if value !=0:
|
||||||
|
logger.info(f'Setting {value}')
|
||||||
|
self.set_channels("width", value, channels=[channel])
|
||||||
else:
|
else:
|
||||||
# define parameters
|
# define parameters
|
||||||
self._set_trigger(getattr(TriggerSource, self.set_trigger_source.get()))
|
self._set_trigger(getattr(TriggerSource, self.set_trigger_source.get()))
|
||||||
|
|||||||
@@ -354,7 +354,7 @@ class Eiger9mCsaxs(DetectorBase):
|
|||||||
break
|
break
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
timer += 0.1
|
timer += 0.1
|
||||||
if timer > 8:
|
if timer > 5:
|
||||||
self._stopped == True
|
self._stopped == True
|
||||||
self._close_file_writer()
|
self._close_file_writer()
|
||||||
raise EigerTimeoutError(
|
raise EigerTimeoutError(
|
||||||
|
|||||||
@@ -223,7 +223,7 @@ class McsCsaxs(SIS38XX):
|
|||||||
self._set_trigger(TriggerSource.MODE3)
|
self._set_trigger(TriggerSource.MODE3)
|
||||||
self.input_polarity.set(0)
|
self.input_polarity.set(0)
|
||||||
self.output_polarity.set(1)
|
self.output_polarity.set(1)
|
||||||
self.count_on_start.set(1)
|
self.count_on_start.set(0)
|
||||||
self.stop_all.set(1)
|
self.stop_all.set(1)
|
||||||
|
|
||||||
def _progress_update(self, value, **kwargs) -> None:
|
def _progress_update(self, value, **kwargs) -> None:
|
||||||
@@ -231,7 +231,7 @@ class McsCsaxs(SIS38XX):
|
|||||||
max_value = self.scaninfo.num_points
|
max_value = self.scaninfo.num_points
|
||||||
self._run_subs(
|
self._run_subs(
|
||||||
sub_type=self.SUB_PROGRESS,
|
sub_type=self.SUB_PROGRESS,
|
||||||
value=self.counter * int(self.scaninfo.num_points / num_lines) + max(value - 1, 0),
|
value=self.counter * int(self.scaninfo.num_points / num_lines) + value ,
|
||||||
max_value=max_value,
|
max_value=max_value,
|
||||||
done=bool(max_value == self.counter),
|
done=bool(max_value == self.counter),
|
||||||
)
|
)
|
||||||
@@ -240,27 +240,31 @@ class McsCsaxs(SIS38XX):
|
|||||||
def _on_mca_data(self, *args, obj=None, **kwargs) -> None:
|
def _on_mca_data(self, *args, obj=None, **kwargs) -> None:
|
||||||
if not isinstance(kwargs["value"], (list, np.ndarray)):
|
if not isinstance(kwargs["value"], (list, np.ndarray)):
|
||||||
return
|
return
|
||||||
self.mca_data[obj.attr_name] = kwargs["value"][1:]
|
#self.mca_data[obj.attr_name] = kwargs["value"][1:]
|
||||||
|
self.mca_data[obj.attr_name] = kwargs["value"]
|
||||||
if len(self.mca_names) != len(self.mca_data):
|
if len(self.mca_names) != len(self.mca_data):
|
||||||
return
|
return
|
||||||
#logger.info("Entered _on_mca_data")
|
#logger.info("Entered _on_mca_data")
|
||||||
self._updated = True
|
# self._updated = True
|
||||||
self.counter += 1
|
# self.counter += 1
|
||||||
#logger.info(f'data from mca {self.mca_data["mca1"]} and {self.mca_data["mca4"]}')
|
#logger.info(f'data from mca {self.mca_data["mca1"]} and {self.mca_data["mca4"]}')
|
||||||
if (self.scaninfo.scan_type == "fly" and self.counter == self.num_lines.get()) or (
|
# if (self.scaninfo.scan_type == "fly" and self.counter == self.num_lines.get()) or (
|
||||||
self.scaninfo.scan_type == "step" and self.counter == self.scaninfo.num_points
|
# self.scaninfo.scan_type == "step" and self.counter == self.scaninfo.num_points
|
||||||
):
|
# ):
|
||||||
|
# self._acquisition_done = True
|
||||||
|
# self.stop_all.put(1, use_complete=False)
|
||||||
|
# self._send_data_to_bec()
|
||||||
|
# self.erase_all.put(1)
|
||||||
|
# #logger.info("Entered _on_mca_data, acquisition finished")
|
||||||
|
# # Require wait for
|
||||||
|
# # time.sleep(0.01)
|
||||||
|
# self.mca_data = defaultdict(lambda: [])
|
||||||
|
# self.counter = 0
|
||||||
|
# return
|
||||||
|
# self.erase_start.set(1)
|
||||||
|
# self._send_data_to_bec()
|
||||||
|
# self.mca_data = defaultdict(lambda: [])
|
||||||
self._acquisition_done = True
|
self._acquisition_done = True
|
||||||
self.stop_all.put(1, use_complete=False)
|
|
||||||
self._send_data_to_bec()
|
|
||||||
self.erase_all.put(1)
|
|
||||||
#logger.info("Entered _on_mca_data, acquisition finished")
|
|
||||||
# Require wait for
|
|
||||||
# time.sleep(0.01)
|
|
||||||
self.mca_data = defaultdict(lambda: [])
|
|
||||||
self.counter = 0
|
|
||||||
return
|
|
||||||
self.erase_start.set(1)
|
|
||||||
self._send_data_to_bec()
|
self._send_data_to_bec()
|
||||||
self.mca_data = defaultdict(lambda: [])
|
self.mca_data = defaultdict(lambda: [])
|
||||||
|
|
||||||
@@ -292,9 +296,9 @@ class McsCsaxs(SIS38XX):
|
|||||||
|
|
||||||
def _set_acquisition_params(self) -> None:
|
def _set_acquisition_params(self) -> None:
|
||||||
if self.scaninfo.scan_type == "step":
|
if self.scaninfo.scan_type == "step":
|
||||||
self.n_points = int(self.scaninfo.frames_per_trigger + 1)
|
self.n_points = int(self.scaninfo.frames_per_trigger)
|
||||||
elif self.scaninfo.scan_type == "fly":
|
elif self.scaninfo.scan_type == "fly":
|
||||||
self.n_points = int(self.scaninfo.num_points / int(self.num_lines.get()) + 1)
|
self.n_points = int(self.scaninfo.num_points)# / int(self.num_lines.get()))
|
||||||
else:
|
else:
|
||||||
raise McsError(f"Scantype {self.scaninfo} not implemented for MCS card")
|
raise McsError(f"Scantype {self.scaninfo} not implemented for MCS card")
|
||||||
if self.n_points > 10000:
|
if self.n_points > 10000:
|
||||||
@@ -377,7 +381,7 @@ class McsCsaxs(SIS38XX):
|
|||||||
if timer > 8:
|
if timer > 8:
|
||||||
total_frames = self.counter * int(
|
total_frames = self.counter * int(
|
||||||
self.scaninfo.num_points / self.num_lines.get()
|
self.scaninfo.num_points / self.num_lines.get()
|
||||||
) + max(self.current_channel.get() - 1, 0)
|
) + max(self.current_channel.get(), 0)
|
||||||
raise McsTimeoutError(
|
raise McsTimeoutError(
|
||||||
f"Reached timeout with mcs in state {self.acquiring.get()} and {total_frames} frames arriving at the mcs card"
|
f"Reached timeout with mcs in state {self.acquiring.get()} and {total_frames} frames arriving at the mcs card"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -210,10 +210,16 @@ class PilatusCsaxs(DetectorBase):
|
|||||||
a zmq service is running on xbl-daq-34 that is waiting
|
a zmq service is running on xbl-daq-34 that is waiting
|
||||||
for a zmq message to start the writer for the pilatus_2 x12sa-pd-2
|
for a zmq message to start the writer for the pilatus_2 x12sa-pd-2
|
||||||
"""
|
"""
|
||||||
|
#TODO worked reliable with time.sleep(2)
|
||||||
|
# self._close_file_writer()
|
||||||
|
# time.sleep(2)
|
||||||
|
# self._stop_file_writer()
|
||||||
|
# time.sleep(2)
|
||||||
self._close_file_writer()
|
self._close_file_writer()
|
||||||
time.sleep(2)
|
time.sleep(.1)
|
||||||
self._stop_file_writer()
|
self._stop_file_writer()
|
||||||
time.sleep(2)
|
time.sleep(.1)
|
||||||
|
|
||||||
self.filepath_h5 = self.filewriter.compile_full_filename(
|
self.filepath_h5 = self.filewriter.compile_full_filename(
|
||||||
self.scaninfo.scan_number, "pilatus_2.h5", 1000, 5, True
|
self.scaninfo.scan_number, "pilatus_2.h5", 1000, 5, True
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -689,6 +689,10 @@ class SGalilMotor(Device, PositionerBase):
|
|||||||
|
|
||||||
def stop(self, *, success=False):
|
def stop(self, *, success=False):
|
||||||
self.controller.stop_all_axes()
|
self.controller.stop_all_axes()
|
||||||
|
#last_speed = self.controller.socket_put_and_receive("MG")
|
||||||
|
rtr = self.controller.socket_put_and_receive(f'SPC={2*10000}')
|
||||||
|
logger.info(f"{rtr}")
|
||||||
|
#logger.info(f'Motor stopped, restored speed for samy from {last_speed}mm/s to 2mm/s')
|
||||||
return super().stop(success=success)
|
return super().stop(success=success)
|
||||||
|
|
||||||
def kickoff(self) -> DeviceStatus:
|
def kickoff(self) -> DeviceStatus:
|
||||||
|
|||||||
Reference in New Issue
Block a user