This commit is contained in:
gac-x06da
2025-03-11 13:24:06 +01:00
committed by mohacsi_i
parent e64b5b2c3d
commit 3b9a86c8c8
4 changed files with 50 additions and 33 deletions
+4 -1
View File
@@ -19,9 +19,11 @@ from bec_lib import bec_logger
logger = bec_logger.logger logger = bec_logger.logger
class SilentNDDerivedSignal(NDDerivedSignal): class SilentNDDerivedSignal(NDDerivedSignal):
"""Silent version of NDDerivedSignal, it does not spam the terminal on """Silent version of NDDerivedSignal, it does not spam the terminal on
every defective frame (shit happens, ok?).""" every defective frame (shit happens, ok?)."""
def _array_shape_callback(self, **kwargs): def _array_shape_callback(self, **kwargs):
try: try:
super()._array_shape_callback(**kwargs) super()._array_shape_callback(**kwargs)
@@ -46,7 +48,8 @@ class NDArrayPreview(Device):
# Status attributes # Status attributes
min_callback_time = Component( min_callback_time = Component(
EpicsSignalWithRBV, "MinCallbackTime", kind=Kind.config, put_complete=True) EpicsSignalWithRBV, "MinCallbackTime", kind=Kind.config, put_complete=True
)
array_size_x = Component(EpicsSignal, "ArraySize0_RBV", kind=Kind.config) array_size_x = Component(EpicsSignal, "ArraySize0_RBV", kind=Kind.config)
array_size_y = Component(EpicsSignal, "ArraySize1_RBV", kind=Kind.config) array_size_y = Component(EpicsSignal, "ArraySize1_RBV", kind=Kind.config)
array_size_z = Component(EpicsSignal, "ArraySize2_RBV", kind=Kind.config) array_size_z = Component(EpicsSignal, "ArraySize2_RBV", kind=Kind.config)
+10 -21
View File
@@ -1,4 +1,4 @@
""" MX measurements module """MX measurements module
Scan primitives for standard BEC scans at the PX beamlines at SLS. Scan primitives for standard BEC scans at the PX beamlines at SLS.
Theese scans define the event model and can be called from higher levels. Theese scans define the event model and can be called from higher levels.
@@ -123,15 +123,6 @@ class AerotechFlyscanBase(AsyncFlyScanBase):
return super().cleanup() return super().cleanup()
class MeasureStandardWedge(AerotechFlyscanBase): class MeasureStandardWedge(AerotechFlyscanBase):
"""Standard wedge scan using the OMEGA motor """Standard wedge scan using the OMEGA motor
@@ -280,18 +271,16 @@ class MeasureHelical(AerotechFlyscanBase):
ready_rate : float, optional ready_rate : float, optional
No clue what is this... (default=500) No clue what is this... (default=500)
sg_start : (float, float, float, float, float) sg_start : (float, float, float, float, float)
Complete SmarGon coordinate in tuple form. Complete SmarGon coordinate in tuple form.
sg_end : (float, float, float, float, float) sg_end : (float, float, float, float, float)
Complete SmarGon coordinate in tuple form. Complete SmarGon coordinate in tuple form.
sg_steps : int sg_steps : int
Number of steps with SmarGon. Number of steps with SmarGon.
""" """
scan_name = "helicalscan" scan_name = "helicalscan"
required_kwargs = ["start", "range", "move_time", "sg_start", "sg_end", "sg_steps"] required_kwargs = ["start", "range", "move_time", "sg_start", "sg_end", "sg_steps"]
def pre_scan(self): def pre_scan(self):
"""Mostly just checking if ABR stage is ok...""" """Mostly just checking if ABR stage is ok..."""
@@ -310,7 +299,7 @@ class MeasureHelical(AerotechFlyscanBase):
logger.info(f"StepSize:\t{self.smargon_step_size}") logger.info(f"StepSize:\t{self.smargon_step_size}")
logger.info(f"StepTime:\t{self.smargon_step_time}") logger.info(f"StepTime:\t{self.smargon_step_time}")
# TODO: Move roughly to start position??? # TODO: Move roughly to start position???
st0 = yield from self.stubs.send_rpc("shx", "omove", self.smargon_start[0]) st0 = yield from self.stubs.send_rpc("shx", "omove", self.smargon_start[0])
st1 = yield from self.stubs.send_rpc("shy", "omove", self.smargon_start[1]) st1 = yield from self.stubs.send_rpc("shy", "omove", self.smargon_start[1])
st2 = yield from self.stubs.send_rpc("shz", "omove", self.smargon_start[2]) st2 = yield from self.stubs.send_rpc("shz", "omove", self.smargon_start[2])
@@ -347,8 +336,8 @@ class MeasureHelical(AerotechFlyscanBase):
st3.wait() st3.wait()
st4.wait() st4.wait()
t_end = time.time() t_end = time.time()
t_elapsed = t_end-t_start t_elapsed = t_end - t_start
time.sleep(max(self.smargon_step_time-t_elapsed, 0)) time.sleep(max(self.smargon_step_time - t_elapsed, 0))
# Wait for scan task to finish # Wait for scan task to finish
if self.abr_complete: if self.abr_complete:
@@ -384,11 +373,11 @@ class MeasureHelical2(AerotechFlyscanBase):
ready_rate : float, optional ready_rate : float, optional
No clue what is this... (default=500) No clue what is this... (default=500)
sg_start : (float, float, float, float, float) sg_start : (float, float, float, float, float)
Complete SmarGon coordinate in tuple form. Complete SmarGon coordinate in tuple form.
sg_end : (float, float, float, float, float) sg_end : (float, float, float, float, float)
Complete SmarGon coordinate in tuple form. Complete SmarGon coordinate in tuple form.
sg_steps : int sg_steps : int
Number of steps with SmarGon. Number of steps with SmarGon.
""" """
scan_name = "helicalscan2" scan_name = "helicalscan2"
@@ -469,8 +458,8 @@ class MeasureHelical2(AerotechFlyscanBase):
st3.wait() st3.wait()
st4.wait() st4.wait()
t_end = time.time() t_end = time.time()
t_elapsed = t_end-t_start t_elapsed = t_end - t_start
time.sleep(max(self.smargon_step_time-t_elapsed, 0)) time.sleep(max(self.smargon_step_time - t_elapsed, 0))
yield from self.stubs.read(group="monitored", point_id=self.point_id) yield from self.stubs.read(group="monitored", point_id=self.point_id)
self.point_id += 1 self.point_id += 1
+14 -8
View File
@@ -1,6 +1,4 @@
def rock(steps, exp_time, scan_start=None, scan_end=None, datasource=None, visual=True, **kwargs):
def rock(steps, exp_time, scan_start=None, scan_end=None,datasource=None, visual=True, **kwargs):
"""Demo step scan with plotting """Demo step scan with plotting
This is a simple user-space demo step scan with the BEC. It be a This is a simple user-space demo step scan with the BEC. It be a
@@ -16,10 +14,9 @@ def rock(steps, exp_time, scan_start=None, scan_end=None,datasource=None, visual
motor = dev.dccm_theta2 motor = dev.dccm_theta2
if scan_start is None: if scan_start is None:
scan_start = -0.05/dev.dccm_energy.user_readback.get() scan_start = -0.05 / dev.dccm_energy.user_readback.get()
if scan_end is None: if scan_end is None:
scan_end = 0.05/dev.dccm_energy.user_readback.get() scan_end = 0.05 / dev.dccm_energy.user_readback.get()
if visual: if visual:
# Get or create scan specific window # Get or create scan specific window
@@ -42,7 +39,14 @@ def rock(steps, exp_time, scan_start=None, scan_end=None,datasource=None, visual
print("Handing over to 'scans.line_scan'") print("Handing over to 'scans.line_scan'")
s = scans.line_scan( s = scans.line_scan(
motor, scan_start, scan_end, steps=steps, exp_time=exp_time, datasource=datasource, relative=True, **kwargs motor,
scan_start,
scan_end,
steps=steps,
exp_time=exp_time,
datasource=datasource,
relative=True,
**kwargs,
) )
if visual: if visual:
@@ -50,7 +54,9 @@ def rock(steps, exp_time, scan_start=None, scan_end=None,datasource=None, visual
firt_par = plt1.get_dap_params() firt_par = plt1.get_dap_params()
else: else:
# Without GUI # Without GUI
firt_par = bec.dap.LinearModel.fit(s, motor.name, motor.name, datasource.name, datasource.name) firt_par = bec.dap.LinearModel.fit(
s, motor.name, motor.name, datasource.name, datasource.name
)
# Move to fitted maximum # Move to fitted maximum
+22 -3
View File
@@ -3,7 +3,17 @@ def bl_check_beam():
return True return True
def ascan(motor, scan_start, scan_end, steps, exp_time, datasource=None, visual=True, relative=False, **kwargs): def ascan(
motor,
scan_start,
scan_end,
steps,
exp_time,
datasource=None,
visual=True,
relative=False,
**kwargs,
):
"""Demo step scan with plotting """Demo step scan with plotting
This is a simple user-space demo step scan with the BEC. It be a This is a simple user-space demo step scan with the BEC. It be a
@@ -38,7 +48,14 @@ def ascan(motor, scan_start, scan_end, steps, exp_time, datasource=None, visual=
print("Handing over to 'scans.line_scan'") print("Handing over to 'scans.line_scan'")
s = scans.line_scan( s = scans.line_scan(
motor, scan_start, scan_end, steps=steps, exp_time=exp_time, datasource=datasource, relative=relative, **kwargs motor,
scan_start,
scan_end,
steps=steps,
exp_time=exp_time,
datasource=datasource,
relative=relative,
**kwargs,
) )
if visual: if visual:
@@ -46,7 +63,9 @@ def ascan(motor, scan_start, scan_end, steps, exp_time, datasource=None, visual=
firt_par = plt1.get_dap_params() firt_par = plt1.get_dap_params()
return s, firt_par return s, firt_par
else: else:
firt_par = bec.dap.LinearModel.fit(s, motor.name, motor.name, datasource.name, datasource.name) firt_par = bec.dap.LinearModel.fit(
s, motor.name, motor.name, datasource.name, datasource.name
)
return s, firt_par return s, firt_par
# fit = bec.dap.LinearModel(motor, datasource) # fit = bec.dap.LinearModel(motor, datasource)