WIP: Draft: Feat/updates from the beamline june25 #12
59
bin/test_ad_based_falcon.py
Normal file
59
bin/test_ad_based_falcon.py
Normal file
@@ -0,0 +1,59 @@
|
||||
import time
|
||||
|
||||
from ophyd_devices import CompareStatus
|
||||
|
||||
from superxas_bec.devices.falcon_ad import FalconAcquiringStatus, FalconAD
|
||||
from superxas_bec.devices.trigger import SamplingDone, Trigger
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("Initializing Falcon...")
|
||||
time_started = time.time()
|
||||
|
||||
falcon = FalconAD(name="test_device", prefix="X10DA-SITORO:", scan_info=None)
|
||||
trigger = Trigger(name="trigger_device", prefix="X10DA-ES1:", scan_info=None)
|
||||
|
||||
falcon.wait_for_connection(timeout=50, all_signals=True)
|
||||
trigger.wait_for_connection(timeout=50, all_signals=True)
|
||||
print(f"Device initialized in {time.time() - time_started:.2f} seconds.")
|
||||
|
||||
if falcon.acquiring.get() != FalconAcquiringStatus.DONE:
|
||||
status = CompareStatus(falcon.acquiring, FalconAcquiringStatus.DONE)
|
||||
falcon.stop_all.put(1)
|
||||
status.wait(timeout=5)
|
||||
|
||||
# Print PVs
|
||||
print("PVs:")
|
||||
print(f"ICR: {falcon.dxp1.input_count_rate.describe()}")
|
||||
print(f"OCR: {falcon.dxp1.output_count_rate.describe()}")
|
||||
print(f"ROI: {falcon.mca1.rois.roi0.count.describe()}")
|
||||
print(f"ERT: {falcon.mca1.elapsed_real_time.describe()}")
|
||||
|
||||
# print(falcon.acquiring._auto_monitor)
|
||||
# while True:
|
||||
# print(falcon.acquiring.get())
|
||||
# time.sleep(1)
|
||||
# Test loop
|
||||
for i in range(500):
|
||||
start_time = time.time()
|
||||
print(f"Start loop iteration {i}")
|
||||
|
||||
#status = CompareStatus(falcon.acquiring, FalconAcquiringStatus.ACQUIRING)
|
||||
falcon.erase_start.put(1)
|
||||
#status.wait(timeout=5)
|
||||
|
||||
status2 = CompareStatus(trigger.smpl_done, SamplingDone.DONE)
|
||||
trigger.smpl.put(1)
|
||||
status2.wait(timeout=5)
|
||||
|
||||
status3 = CompareStatus(falcon.acquiring, FalconAcquiringStatus.DONE)
|
||||
falcon.stop_all.put(1)
|
||||
status3.wait(timeout=5)
|
||||
|
||||
time.sleep(0.1)
|
||||
|
||||
icr = falcon.dxp1.input_count_rate.get()
|
||||
ocr = falcon.dxp1.output_count_rate.get()
|
||||
roi = falcon.mca1.rois.roi0.count.get()
|
||||
ert = falcon.mca1.elapsed_real_time.get()
|
||||
|
||||
print(f"time={time.time() - start_time:.4f}", icr, ocr, roi, ert)
|
||||
55
bin/test_falcon.py
Normal file
55
bin/test_falcon.py
Normal file
@@ -0,0 +1,55 @@
|
||||
import time
|
||||
|
||||
from ophyd_devices import CompareStatus
|
||||
|
||||
from superxas_bec.devices.falcon import FalconAcquiringStatus, FalconSuperXAS
|
||||
from superxas_bec.devices.trigger import SamplingDone, Trigger
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("Initializing Falcon...")
|
||||
time_started = time.time()
|
||||
|
||||
falcon = FalconSuperXAS(name="test_device", prefix="X10DA-SITORO:", scan_info=None)
|
||||
trigger = Trigger(name="trigger_device", prefix="X10DA-ES1:", scan_info=None)
|
||||
|
||||
falcon.wait_for_connection(timeout=50, all_signals=True)
|
||||
trigger.wait_for_connection(timeout=50, all_signals=True)
|
||||
print(f"Device initialized in {time.time() - time_started:.2f} seconds.")
|
||||
|
||||
if falcon.acquiring.get() != FalconAcquiringStatus.DONE:
|
||||
status = CompareStatus(falcon.acquiring, FalconAcquiringStatus.DONE)
|
||||
falcon.stop_all.put(1)
|
||||
status.wait(timeout=5)
|
||||
|
||||
# Print PVs
|
||||
print("PVs:")
|
||||
print(f"ICR: {falcon.icr.describe()}")
|
||||
print(f"OCR: {falcon.ocr.describe()}")
|
||||
print(f"ROI: {falcon.roi.describe()}")
|
||||
print(f"ERT: {falcon.ert.describe()}")
|
||||
|
||||
# Test loop
|
||||
for i in range(500):
|
||||
start_time = time.time()
|
||||
|
||||
status = CompareStatus(falcon.acquiring, FalconAcquiringStatus.ACQUIRING)
|
||||
falcon.erase_start.put(1)
|
||||
status.wait(timeout=5)
|
||||
|
||||
status2 = CompareStatus(trigger.smpl_done, SamplingDone.DONE)
|
||||
trigger.smpl.put(1)
|
||||
status2.wait(timeout=5)
|
||||
|
||||
status3 = CompareStatus(falcon.acquiring, FalconAcquiringStatus.DONE)
|
||||
falcon.stop_all.put(1)
|
||||
status3.wait(timeout=5)
|
||||
|
||||
time.sleep(0.1)
|
||||
|
||||
icr = falcon.icr.get()
|
||||
ocr = falcon.ocr.get()
|
||||
roi = falcon.roi.get()
|
||||
ert = falcon.ert.get()
|
||||
dead_cor_roi0_count = falcon.dead_cor_roi0_count.get()
|
||||
|
||||
print(f"time={time.time() - start_time:.4f}", icr, ocr, roi, ert, dead_cor_roi0_count)
|
||||
756
superxas_bec/device_configs/x10da_config_250616.yaml
Normal file
756
superxas_bec/device_configs/x10da_config_250616.yaml
Normal file
@@ -0,0 +1,756 @@
|
||||
absorption_transmission:
|
||||
deviceClass: ophyd_devices.ComputedSignal
|
||||
deviceConfig:
|
||||
compute_method: "def compute_signals(signal1, signal2):\n import math\n return\
|
||||
\ math.log(signal1.get()/signal2.get())\n"
|
||||
input_signals:
|
||||
- ic1
|
||||
- ic2
|
||||
enabled: true
|
||||
readOnly: false
|
||||
readoutPriority: monitored
|
||||
bm2_tr1:
|
||||
description: Beam Monitor 2 Translation 1
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-BM2:TR1
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
bm2_tr2:
|
||||
description: Beam Monitor 2 Translation 2
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-BM2:TR2
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
bm3_tr1:
|
||||
description: Beam Monitor 3 Translation 1
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-BM3:TR1
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
bm3_tr2:
|
||||
description: Beam Monitor 3 Translation 2
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-BM3:TR2
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
cm_bnd:
|
||||
description: Collimating Mirror bender
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-CM:BND
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
cm_pitch:
|
||||
description: Collimating Mirror Pitch
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-CM:ROTX
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
cm_roll:
|
||||
description: Collimating Mirror Roll
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-CM:ROTZ
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
cm_trx:
|
||||
description: Collimating Mirror X-Translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-CM:XTCP
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
cm_trxd:
|
||||
description: Collimating Mirror X-translation downstream
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-CM:TRXD
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
cm_trxu:
|
||||
description: Collimating Mirror X-translation upstream
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-CM:TRXU
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
cm_try:
|
||||
description: Collimating Mirror Point Y-Translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-CM:YTCP
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
cm_trydr:
|
||||
description: Collimating Mirror Y-translation downstream ring
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-CM:TRYDR
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
cm_trydw:
|
||||
description: Collimating Mirror Y-translation downstream wall
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-CM:TRYDW
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
cm_tryu:
|
||||
description: Collimating Mirror Y-translation upstream
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-CM:TRYU
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
cm_yaw:
|
||||
description: Collimating Mirror Yaw
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-CM:ROTY
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
falcon:
|
||||
description: Falcon Sitoro detector
|
||||
deviceClass: superxas_bec.devices.falcon.FalconSuperXAS
|
||||
deviceConfig:
|
||||
prefix: 'X10DA-SITORO:'
|
||||
enabled: true
|
||||
onFailure: raise
|
||||
readoutPriority: monitored
|
||||
softwareTrigger: false
|
||||
filter_fe:
|
||||
description: Front End Filter
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-FI:TRY1
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
fm_bnd:
|
||||
description: Focusing Mirror bender
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-MI1:TRB
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
fm_pitch:
|
||||
description: Focusing Mirror Pitch
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-MI1:pitch
|
||||
enabled: false
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
fm_roll:
|
||||
description: Focusing Mirror Roll
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-MI1:roll
|
||||
enabled: false
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
fm_trx:
|
||||
description: Focusing Mirror X-Translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-MI1:trans
|
||||
enabled: false
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
fm_trxd:
|
||||
description: Focusing Mirror X-translation downstream
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-MI1:TRXD
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
fm_trxu:
|
||||
description: Focusing Mirror X-translation upstream
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-MI1:TRXU
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
fm_try:
|
||||
description: Focusing Mirror Y-Translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-MI1:y
|
||||
enabled: false
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
fm_trydr:
|
||||
description: Focusing Mirror Y-translation downstream ring
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-MI1:TRYDR
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
fm_trydw:
|
||||
description: Focusing Mirror Y-translation downstream
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-MI1:TRYDW
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
fm_tryu:
|
||||
description: Focusing Mirror Y-translation upstream wall
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-MI1:TRYU
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
fm_yaw:
|
||||
description: Focusing Mirror Yaw
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-MI1:yaw
|
||||
enabled: false
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
hrm_rotx:
|
||||
description: Harmonic Rejection Mirror X-Rotation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-HRM:ROX
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
hrm_try:
|
||||
description: Harmonic Rejection Mirror Y-Translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-HRM:TRY
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
ic1:
|
||||
description: Ionization Chamber 1
|
||||
deviceClass: ophyd.EpicsSignalRO
|
||||
deviceConfig:
|
||||
auto_monitor: true
|
||||
read_pv: X10DA-ES1-SAI_01:MEAN
|
||||
enabled: true
|
||||
onFailure: raise
|
||||
readoutPriority: monitored
|
||||
softwareTrigger: false
|
||||
ic1_try:
|
||||
description: Ionization Chamber 1 Y-Translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-IC1:TRY
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
ic2:
|
||||
description: Ionization Chamber 2
|
||||
deviceClass: ophyd.EpicsSignalRO
|
||||
deviceConfig:
|
||||
auto_monitor: true
|
||||
read_pv: X10DA-ES1-SAI_02:MEAN
|
||||
enabled: true
|
||||
onFailure: raise
|
||||
readoutPriority: monitored
|
||||
softwareTrigger: false
|
||||
ic2_try:
|
||||
description: Ionization Chamber 2 Y-Translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-IC2:TRY
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
ic3:
|
||||
description: Ionization Chamber 3
|
||||
deviceClass: ophyd.EpicsSignalRO
|
||||
deviceConfig:
|
||||
auto_monitor: true
|
||||
read_pv: X10DA-ES1-SAI_03:MEAN
|
||||
enabled: true
|
||||
onFailure: raise
|
||||
readoutPriority: monitored
|
||||
softwareTrigger: false
|
||||
ic3_try:
|
||||
description: Ionization Chamber 3 Y-Translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-IC3:TRY
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
ic4:
|
||||
description: Ionization Chamber 4
|
||||
deviceClass: ophyd.EpicsSignalRO
|
||||
deviceConfig:
|
||||
auto_monitor: true
|
||||
read_pv: X10DA-ES1-SAI_04:MEAN
|
||||
enabled: true
|
||||
onFailure: raise
|
||||
readoutPriority: monitored
|
||||
softwareTrigger: false
|
||||
manip_heavy_trx:
|
||||
description: Heavy Sample Manipulator Motor X
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-PP1:MOT1
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
manip_heavy_try:
|
||||
description: Heavy Sample Manipulator Motor Y
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-PP1:MOT2
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
manip_heavy_trz:
|
||||
description: Heavy Sample Manipulator Motor Z
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-PP1:MOT3
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
manip_new_rot:
|
||||
description: Old Sample Manipulator Base rotation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-MAN:ROTY
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
manip_new_trx:
|
||||
description: Old Sample Manipulator X-Translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-MAN:TRX
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
manip_new_try:
|
||||
description: Old Sample Manipulator Y-Translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-MAN:TRY
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
manip_new_trz:
|
||||
description: Old Sample Manipulator Z - Along beam
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-MAN:TRZ
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
manip_old_rot:
|
||||
description: Old Sample Manipulator Base rotation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-MA1:TRX2
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
manip_old_trx:
|
||||
description: Old Sample Manipulator X-Translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-MA1:TRX
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
manip_old_try:
|
||||
description: Old Sample Manipulator Y-Translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-MA1:TRY
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
manip_old_trz:
|
||||
description: Old Sample Manipulator Z - Along beam
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-MA1:TRX1
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
mono_encoder_deg:
|
||||
description: ROTX encoder of Mono converted to degrees
|
||||
deviceClass: ophyd.EpicsSignalRO
|
||||
deviceConfig:
|
||||
auto_monitor: true
|
||||
read_pv: X10DA-OP1-MO1:ENC-ROTXCalc.VAL
|
||||
enabled: true
|
||||
onFailure: raise
|
||||
readoutPriority: monitored
|
||||
softwareTrigger: false
|
||||
mono_encoder_raw:
|
||||
description: ROTX encoder of Mono raw value
|
||||
deviceClass: ophyd.EpicsSignalRO
|
||||
deviceConfig:
|
||||
auto_monitor: true
|
||||
read_pv: X10DA-OP1-MO1:ENC-ROTX.RVAL
|
||||
enabled: true
|
||||
onFailure: raise
|
||||
readoutPriority: monitored
|
||||
softwareTrigger: false
|
||||
mono_energy:
|
||||
description: Mono Energy
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-MO12-QEXAFS:E_TEST
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
mono_rotx:
|
||||
description: Monochromator 1 X-Rotation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP1-MO1:ROTX
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
mono_trx:
|
||||
description: Monochromator 1 X-Translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP1-MO1:TRX
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
mono_try:
|
||||
description: Monochromator 1 Y-Translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP1-MO1:TRY
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_fe_centerx:
|
||||
description: Front-end slit diaphragm X-center
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-SLDI:CENTERX
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_fe_centery:
|
||||
description: Front-end slit diaphragm Y-center
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-SLDI:CENTERY
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_fe_gapx:
|
||||
description: Front-end slit diaphragm X-gap
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-SLDI:GAPX
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_fe_gapy:
|
||||
description: Front-end slit diaphragm Y-gap
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-SLDI:GAPY
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_fe_trxr:
|
||||
description: Front-end slit diaphragm 1 X-translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-SLDI:TRXR
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_fe_trxw:
|
||||
description: Front-end slit diaphragm 2 X-translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-SLDI:TRXW
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_fe_tryb:
|
||||
description: Front-end slit diaphragm 1 Y-translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-SLDI:TRYB
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_fe_tryt:
|
||||
description: Front-end slit diaphragm 2 Y-translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-SLDI:TRYT
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_kb_centerx:
|
||||
description: KB slit axis X
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-SH1:POSX
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_kb_centery:
|
||||
description: KB slit axis Y
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-SV1:POSY
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_kb_gapx:
|
||||
description: KB slit axis X
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-SH1:OPENX
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_kb_gapy:
|
||||
description: KB slit axis Y
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-SV1:OPENY
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_op_centerx:
|
||||
description: Optics slit X-center
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-SHtestCENTER
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_op_centery:
|
||||
description: Optics slit Y-center
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-SVcenter
|
||||
enabled: false
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_op_gapx:
|
||||
description: Optics slit X-gap
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-SHsize
|
||||
enabled: false
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_op_gapy:
|
||||
description: Optics slit Y-gap
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-SVsize
|
||||
enabled: false
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_op_htr1:
|
||||
description: Optics slit X-translation Ring
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-SH1:TR1
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_op_htr2:
|
||||
description: Optics slit X-translation Wall
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-SH1:TR2
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_op_vtr1:
|
||||
description: Optics slit Y-translation Up
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-SV1:TR1
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_op_vtr2:
|
||||
description: Optics slit Y-translation Down
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-SV1:TR2
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
t_absorber1:
|
||||
description: AbsorberTemperature 1
|
||||
deviceClass: ophyd.EpicsSignalRO
|
||||
deviceConfig:
|
||||
auto_monitor: true
|
||||
read_pv: X10DA-FE-ABS1-ETTC-0010:TEMP
|
||||
enabled: false
|
||||
onFailure: raise
|
||||
readoutPriority: monitored
|
||||
softwareTrigger: false
|
||||
table1_trx:
|
||||
description: Experimental Table 1 X-Translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-ET1:TRX
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
table1_try:
|
||||
description: Experimental Table 1 Y-Translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-ET1:TRY
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
table2_trx:
|
||||
description: Experimental Table 2 X-Translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES2-ET2:TRX
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
table2_try:
|
||||
description: Experimental Table 2 Y-Translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES2-ET2:TRY
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
trigger:
|
||||
description: Trigger Card
|
||||
deviceClass: superxas_bec.devices.trigger.Trigger
|
||||
deviceConfig:
|
||||
prefix: 'X10DA-ES1:'
|
||||
enabled: true
|
||||
onFailure: raise
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: true
|
||||
xrayeye_foc:
|
||||
description: X-Ray Eye Fine Focus
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-XE1:FINFOC
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
xrayeye_zoom:
|
||||
description: X-Ray Eye Zoom
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-XE1:ZOOM
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
774
superxas_bec/device_configs/x10da_config_250707.yaml
Normal file
774
superxas_bec/device_configs/x10da_config_250707.yaml
Normal file
@@ -0,0 +1,774 @@
|
||||
absorption_transmission:
|
||||
deviceClass: ophyd_devices.ComputedSignal
|
||||
deviceConfig:
|
||||
compute_method: "def compute_signals(signal1, signal2):\n import math\n return\
|
||||
\ math.log(signal1.get()/signal2.get())\n"
|
||||
input_signals:
|
||||
- ic1
|
||||
- ic2
|
||||
enabled: false
|
||||
readOnly: false
|
||||
readoutPriority: monitored
|
||||
bm2_tr1:
|
||||
description: Beam Monitor 2 Translation 1
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-BM2:TR1
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
bm2_tr2:
|
||||
description: Beam Monitor 2 Translation 2
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-BM2:TR2
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
bm3_tr1:
|
||||
description: Beam Monitor 3 Translation 1
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-BM3:TR1
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
bm3_tr2:
|
||||
description: Beam Monitor 3 Translation 2
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-BM3:TR2
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
cm_bnd:
|
||||
description: Collimating Mirror bender
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-CM:BND
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
cm_pitch:
|
||||
description: Collimating Mirror Pitch
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-CM:ROTX
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
cm_roll:
|
||||
description: Collimating Mirror Roll
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-CM:ROTZ
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
cm_trx:
|
||||
description: Collimating Mirror X-Translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-CM:XTCP
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
cm_trxd:
|
||||
description: Collimating Mirror X-translation downstream
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-CM:TRXD
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
cm_trxu:
|
||||
description: Collimating Mirror X-translation upstream
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-CM:TRXU
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
cm_try:
|
||||
description: Collimating Mirror Point Y-Translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-CM:YTCP
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
cm_trydr:
|
||||
description: Collimating Mirror Y-translation downstream ring
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-CM:TRYDR
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
cm_trydw:
|
||||
description: Collimating Mirror Y-translation downstream wall
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-CM:TRYDW
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
cm_tryu:
|
||||
description: Collimating Mirror Y-translation upstream
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-CM:TRYU
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
cm_yaw:
|
||||
description: Collimating Mirror Yaw
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-CM:ROTY
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
falcon:
|
||||
description: Falcon Sitoro detector
|
||||
deviceClass: superxas_bec.devices.falcon.FalconSuperXAS
|
||||
deviceConfig:
|
||||
prefix: 'X10DA-SITORO:'
|
||||
enabled: true
|
||||
onFailure: raise
|
||||
readoutPriority: monitored
|
||||
softwareTrigger: false
|
||||
filter_fe:
|
||||
description: Front End Filter
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-FI:TRY1
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
fm_bnd:
|
||||
description: Focusing Mirror bender
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-MI1:TRB
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
fm_pitch:
|
||||
description: Focusing Mirror Pitch
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-MI1:pitch
|
||||
enabled: false
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
fm_roll:
|
||||
description: Focusing Mirror Roll
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-MI1:roll
|
||||
enabled: false
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
fm_trx:
|
||||
description: Focusing Mirror X-Translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-MI1:trans
|
||||
enabled: false
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
fm_trxd:
|
||||
description: Focusing Mirror X-translation downstream
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-MI1:TRXD
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
fm_trxu:
|
||||
description: Focusing Mirror X-translation upstream
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-MI1:TRXU
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
fm_try:
|
||||
description: Focusing Mirror Y-Translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-MI1:y
|
||||
enabled: false
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
fm_trydr:
|
||||
description: Focusing Mirror Y-translation downstream ring
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-MI1:TRYDR
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
fm_trydw:
|
||||
description: Focusing Mirror Y-translation downstream
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-MI1:TRYDW
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
fm_tryu:
|
||||
description: Focusing Mirror Y-translation upstream wall
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-MI1:TRYU
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
fm_yaw:
|
||||
description: Focusing Mirror Yaw
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-MI1:yaw
|
||||
enabled: false
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
hrm_rotx:
|
||||
description: Harmonic Rejection Mirror X-Rotation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-HRM:ROX
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
hrm_try:
|
||||
description: Harmonic Rejection Mirror Y-Translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-HRM:TRY
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
ic1:
|
||||
description: Ionization Chamber 1
|
||||
deviceClass: ophyd.EpicsSignalRO
|
||||
deviceConfig:
|
||||
auto_monitor: true
|
||||
read_pv: X10DA-ES1-SAI_01:MEAN
|
||||
enabled: true
|
||||
onFailure: raise
|
||||
readoutPriority: monitored
|
||||
softwareTrigger: false
|
||||
ic1_try:
|
||||
description: Ionization Chamber 1 Y-Translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-IC1:TRY
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
ic2:
|
||||
description: Ionization Chamber 2
|
||||
deviceClass: ophyd.EpicsSignalRO
|
||||
deviceConfig:
|
||||
auto_monitor: true
|
||||
read_pv: X10DA-ES1-SAI_02:MEAN
|
||||
enabled: true
|
||||
onFailure: raise
|
||||
readoutPriority: monitored
|
||||
softwareTrigger: false
|
||||
ic2_try:
|
||||
description: Ionization Chamber 2 Y-Translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-IC2:TRY
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
ic3:
|
||||
description: Ionization Chamber 3
|
||||
deviceClass: ophyd.EpicsSignalRO
|
||||
deviceConfig:
|
||||
auto_monitor: true
|
||||
read_pv: X10DA-ES1-SAI_03:MEAN
|
||||
enabled: true
|
||||
onFailure: raise
|
||||
readoutPriority: monitored
|
||||
softwareTrigger: false
|
||||
ic3_try:
|
||||
description: Ionization Chamber 3 Y-Translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-IC3:TRY
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
ic4:
|
||||
description: Ionization Chamber 4
|
||||
deviceClass: ophyd.EpicsSignalRO
|
||||
deviceConfig:
|
||||
auto_monitor: true
|
||||
read_pv: X10DA-ES1-SAI_04:MEAN
|
||||
enabled: true
|
||||
onFailure: raise
|
||||
readoutPriority: monitored
|
||||
softwareTrigger: false
|
||||
manip_heavy_trx:
|
||||
description: Heavy Sample Manipulator Motor X
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-PP1:MOT1
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
manip_heavy_try:
|
||||
description: Heavy Sample Manipulator Motor Y
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-PP1:MOT2
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
manip_heavy_trz:
|
||||
description: Heavy Sample Manipulator Motor Z
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-PP1:MOT3
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
manip_new_rot:
|
||||
description: Old Sample Manipulator Base rotation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-MAN:ROTY
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
manip_new_trx:
|
||||
description: Old Sample Manipulator X-Translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-MAN:TRX
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
manip_new_try:
|
||||
description: Old Sample Manipulator Y-Translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-MAN:TRY
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
manip_new_trz:
|
||||
description: Old Sample Manipulator Z - Along beam
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-MAN:TRZ
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
manip_old_rot:
|
||||
description: Old Sample Manipulator Base rotation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-MA1:TRX2
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
manip_old_trx:
|
||||
description: Old Sample Manipulator X-Translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-MA1:TRX
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
manip_old_try:
|
||||
description: Old Sample Manipulator Y-Translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-MA1:TRY
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
manip_old_trz:
|
||||
description: Old Sample Manipulator Z - Along beam
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-MA1:TRX1
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
mono_encoder_deg:
|
||||
description: ROTX encoder of Mono converted to degrees
|
||||
deviceClass: ophyd.EpicsSignalRO
|
||||
deviceConfig:
|
||||
auto_monitor: true
|
||||
read_pv: X10DA-OP1-MO1:ENC-ROTXCalc.VAL
|
||||
enabled: true
|
||||
onFailure: raise
|
||||
readoutPriority: monitored
|
||||
softwareTrigger: false
|
||||
mono_encoder_raw:
|
||||
description: ROTX encoder of Mono raw value
|
||||
deviceClass: ophyd.EpicsSignalRO
|
||||
deviceConfig:
|
||||
auto_monitor: true
|
||||
read_pv: X10DA-OP1-MO1:ENC-ROTX.RVAL
|
||||
enabled: true
|
||||
onFailure: raise
|
||||
readoutPriority: monitored
|
||||
softwareTrigger: false
|
||||
mono_energy:
|
||||
description: Mono Energy
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-MO12-QEXAFS:E_TEST
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
mono_rotx:
|
||||
description: Monochromator 1 X-Rotation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP1-MO1:ROTX
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
mono_trx:
|
||||
description: Monochromator 1 X-Translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP1-MO1:TRX
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
mono_try:
|
||||
description: Monochromator 1 Y-Translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP1-MO1:TRY
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_fe_centerx:
|
||||
description: Front-end slit diaphragm X-center
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-SLDI:CENTERX
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_fe_centery:
|
||||
description: Front-end slit diaphragm Y-center
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-SLDI:CENTERY
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_fe_gapx:
|
||||
description: Front-end slit diaphragm X-gap
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-SLDI:GAPX
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_fe_gapy:
|
||||
description: Front-end slit diaphragm Y-gap
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-SLDI:GAPY
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_fe_trxr:
|
||||
description: Front-end slit diaphragm 1 X-translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-SLDI:TRXR
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_fe_trxw:
|
||||
description: Front-end slit diaphragm 2 X-translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-SLDI:TRXW
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_fe_tryb:
|
||||
description: Front-end slit diaphragm 1 Y-translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-SLDI:TRYB
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_fe_tryt:
|
||||
description: Front-end slit diaphragm 2 Y-translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-FE-SLDI:TRYT
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_kb_centerx:
|
||||
description: KB slit axis X
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-SH1:POSX
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_kb_centery:
|
||||
description: KB slit axis Y
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-SV1:POSY
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_kb_gapx:
|
||||
description: KB slit axis X
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-SH1:OPENX
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_kb_gapy:
|
||||
description: KB slit axis Y
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-SV1:OPENY
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_op_centerx:
|
||||
description: Optics slit X-center
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-SHtestCENTER
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_op_centery:
|
||||
description: Optics slit Y-center
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-SVcenter
|
||||
enabled: false
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_op_gapx:
|
||||
description: Optics slit X-gap
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-SHsize
|
||||
enabled: false
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_op_gapy:
|
||||
description: Optics slit Y-gap
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-SVsize
|
||||
enabled: false
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_op_htr1:
|
||||
description: Optics slit X-translation Ring
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-SH1:TR1
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_op_htr2:
|
||||
description: Optics slit X-translation Wall
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-SH1:TR2
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_op_vtr1:
|
||||
description: Optics slit Y-translation Up
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-SV1:TR1
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
slit_op_vtr2:
|
||||
description: Optics slit Y-translation Down
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-OP-SV1:TR2
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
t_absorber1:
|
||||
description: AbsorberTemperature 1
|
||||
deviceClass: ophyd.EpicsSignalRO
|
||||
deviceConfig:
|
||||
auto_monitor: true
|
||||
read_pv: X10DA-FE-ABS1-ETTC-0010:TEMP
|
||||
enabled: false
|
||||
onFailure: raise
|
||||
readoutPriority: monitored
|
||||
softwareTrigger: false
|
||||
table1_trx:
|
||||
description: Experimental Table 1 X-Translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-ET1:TRX
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
table1_try:
|
||||
description: Experimental Table 1 Y-Translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-ET1:TRY
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
table2_trx:
|
||||
description: Experimental Table 2 X-Translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES2-ET2:TRX
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
table2_try:
|
||||
description: Experimental Table 2 Y-Translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES2-ET2:TRY
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
trigger:
|
||||
description: Trigger Card
|
||||
deviceClass: superxas_bec.devices.trigger.Trigger
|
||||
deviceConfig:
|
||||
prefix: 'X10DA-ES1:'
|
||||
enabled: true
|
||||
onFailure: raise
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: true
|
||||
xrayeye_foc:
|
||||
description: X-Ray Eye Fine Focus
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-XE1:FINFOC
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
xrayeye_zoom:
|
||||
description: X-Ray Eye Zoom
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-XE1:ZOOM
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
lasermir_rot:
|
||||
description: Laser mirror
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES4-CRMO4:MOT2
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: monitored
|
||||
softwareTrigger: false
|
||||
lasermir_sw:
|
||||
description: Laser mirror
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES4-CRMO4:MOT3
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: monitored
|
||||
softwareTrigger: false
|
||||
63
superxas_bec/device_configs/x10da_config_falcon_test.yaml
Normal file
63
superxas_bec/device_configs/x10da_config_falcon_test.yaml
Normal file
@@ -0,0 +1,63 @@
|
||||
falcon:
|
||||
description: Falcon Sitoro detector
|
||||
deviceClass: superxas_bec.devices.falcon.FalconSuperXAS
|
||||
deviceConfig:
|
||||
prefix: 'X10DA-SITORO:'
|
||||
enabled: true
|
||||
onFailure: raise
|
||||
readoutPriority: monitored
|
||||
softwareTrigger: false
|
||||
manip_new_trx:
|
||||
description: Old Sample Manipulator X-Translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-MAN:TRX
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
manip_new_try:
|
||||
description: Old Sample Manipulator Y-Translation
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-MAN:TRY
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
manip_new_trz:
|
||||
description: Old Sample Manipulator Z - Along beam
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-MAN:TRZ
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
mono_energy:
|
||||
description: Mono Energy
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-MO12-QEXAFS:E_TEST
|
||||
enabled: true
|
||||
onFailure: retry
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: false
|
||||
trigger:
|
||||
description: Trigger Card
|
||||
deviceClass: superxas_bec.devices.trigger.Trigger
|
||||
deviceConfig:
|
||||
prefix: 'X10DA-ES1:'
|
||||
enabled: true
|
||||
onFailure: raise
|
||||
readoutPriority: baseline
|
||||
softwareTrigger: true
|
||||
kb_slit_y:
|
||||
readoutPriority: baseline
|
||||
description: KB slit axis Y
|
||||
deviceClass: ophyd.EpicsMotor
|
||||
deviceConfig:
|
||||
prefix: X10DA-ES1-SV1:OPENY
|
||||
onFailure: retry
|
||||
enabled: true
|
||||
softwareTrigger: false
|
||||
@@ -104,14 +104,14 @@ trigger:
|
||||
|
||||
##### Falcon detector #####
|
||||
falcon:
|
||||
readoutPriority: monitored
|
||||
description: Falcon Sitoro detector
|
||||
deviceClass: superxas_bec.devices.falcon.FalconSuperXAS
|
||||
deviceConfig:
|
||||
prefix: 'X10DA-SITORO:'
|
||||
enabled: true
|
||||
onFailure: raise
|
||||
enabled: True
|
||||
softwareTrigger: False
|
||||
readoutPriority: monitored
|
||||
softwareTrigger: false
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
"""FALCON device implementation for SuperXAS"""
|
||||
"""Module for Falcon detector at SuperXAS."""
|
||||
|
||||
import enum
|
||||
import queue
|
||||
import threading
|
||||
|
||||
import numpy as np
|
||||
from bec_lib.devicemanager import ScanInfo
|
||||
from bec_lib.logger import bec_logger
|
||||
from ophyd import Component as Cpt
|
||||
from ophyd import DeviceStatus, Kind, Signal, StatusBase
|
||||
from ophyd.status import SubscriptionStatus
|
||||
from ophyd_devices.devices.dxp import EpicsDXPFalcon, EpicsMCARecord, Falcon
|
||||
from ophyd import Device, EpicsSignal, EpicsSignalRO, Kind, SignalRO
|
||||
from ophyd_devices import CompareStatus, DeviceStatus, PreviewSignal, StatusBase
|
||||
from ophyd_devices.interfaces.base_classes.psi_device_base import PSIDeviceBase
|
||||
|
||||
logger = bec_logger.logger
|
||||
@@ -21,33 +21,24 @@ class FalconAcquiringStatus(int, enum.Enum):
|
||||
ACQUIRING = 1
|
||||
|
||||
|
||||
class DeadTimeCorrectedCounts(Signal):
|
||||
"""Signal to calculate dead time corrected counts"""
|
||||
class DeadTimeCorrectedSignal(SignalRO):
|
||||
"""Signal for dead time corrected counts."""
|
||||
|
||||
def __init__(self, name: str, channel: int, **kwargs):
|
||||
"""
|
||||
Initialize DeadTimeCorrectedCounts signal.
|
||||
def __init__(self, name:str, *args, parent: Device | None = None, **kwargs):
|
||||
super().__init__(name=name,*args, parent=parent,**kwargs)
|
||||
self._dead_time = 1.182e-7 # Dead time in seconds
|
||||
|
||||
Args:
|
||||
name (str): Name of the signal
|
||||
channel (int): Channel number
|
||||
"""
|
||||
super().__init__(name=name, **kwargs)
|
||||
self._channel = channel
|
||||
self._dead_time = 1.182e-7
|
||||
|
||||
# pylint: disable=arguments-differ
|
||||
def get(self) -> float:
|
||||
"""Get dead time corrected counts base on signals from dxp and mca of Falcon"""
|
||||
dxp: EpicsDXPFalcon = getattr(self.parent, f"dxp{self._channel}")
|
||||
mca: EpicsMCARecord = getattr(self.parent, f"mca{self._channel}")
|
||||
|
||||
icr = dxp.input_count_rate.get()
|
||||
ocr = dxp.output_count_rate.get()
|
||||
roi = mca.rois.roi0.count.get()
|
||||
ert = mca.elapsed_real_time.get()
|
||||
print(icr, ocr, roi, ert)
|
||||
def get(self, **kwargs) -> float | None:
|
||||
icr = self.parent.icr.get()
|
||||
ocr = self.parent.ocr.get()
|
||||
roi = self.parent.roi.get()
|
||||
ert = self.parent.ert.get()
|
||||
return self.compute_deadtime_corrected_signal(icr, ocr, roi, ert)
|
||||
|
||||
def compute_deadtime_corrected_signal(
|
||||
self, icr: float, ocr: float, roi: float, ert: float
|
||||
) -> float:
|
||||
"""Method to compute dead time corrected signal."""
|
||||
if icr == 0 or ocr == 0:
|
||||
return 0
|
||||
|
||||
@@ -62,7 +53,7 @@ class DeadTimeCorrectedCounts(Signal):
|
||||
test_icr = true_icr
|
||||
n += 1
|
||||
except Exception as e: # pylint: disable=broad-except
|
||||
logger.info(f"Error in computation of signal {self.name}, error: {e}")
|
||||
logger.info(f"Error in computation of deadtime corrected signal, error: {e}")
|
||||
return 0
|
||||
|
||||
# Return corrected roi counts
|
||||
@@ -72,60 +63,92 @@ class DeadTimeCorrectedCounts(Signal):
|
||||
return cor_roi_cnts
|
||||
|
||||
|
||||
class FalconControl(Falcon):
|
||||
"""Falcon Control class at SuperXAS. prefix: 'X10DA-SITORO:'"""
|
||||
class FalconControl(Device):
|
||||
"""Falcon Control class for SuperXAS. prefix: 'X10DA-SITORO:'"""
|
||||
|
||||
_default_read_attrs = Falcon._default_read_attrs + (
|
||||
"dxp1",
|
||||
# # "dxp2",
|
||||
"mca1",
|
||||
# # "mca2",
|
||||
"dead_time_cor_cnts1",
|
||||
# # "dead_time_cor_cnts2",
|
||||
# PVs for Falcon control
|
||||
erase_start: EpicsSignal = Cpt(
|
||||
EpicsSignal, "EraseStart", kind=Kind.omitted, doc="XMAP start signal"
|
||||
)
|
||||
_default_configuration_attrs = Falcon._default_configuration_attrs + (
|
||||
"dxp1",
|
||||
# "dxp2",
|
||||
"mca1",
|
||||
# "mca2",
|
||||
"dead_time_cor_cnts1",
|
||||
# "dead_time_cor_cnts2",
|
||||
stop_all: EpicsSignal = Cpt(EpicsSignal, "StopAll", kind=Kind.omitted, doc="XMAP stop signal")
|
||||
acquiring: EpicsSignalRO = Cpt(
|
||||
EpicsSignalRO,
|
||||
"Acquiring",
|
||||
kind=Kind.omitted,
|
||||
auto_monitor=True,
|
||||
doc="XMAP acquiring signal",
|
||||
)
|
||||
# PVs for Signals, auto_monitors are active here
|
||||
icr: EpicsSignalRO = Cpt(
|
||||
EpicsSignalRO,
|
||||
"dxp1:InputCountRate",
|
||||
kind=Kind.normal,
|
||||
auto_monitor=True,
|
||||
doc="XMAP input count rate",
|
||||
)
|
||||
ocr: EpicsSignalRO = Cpt(
|
||||
EpicsSignalRO,
|
||||
"dxp1:OutputCountRate",
|
||||
kind=Kind.normal,
|
||||
auto_monitor=True,
|
||||
doc="XMAP output count rate",
|
||||
)
|
||||
ert: EpicsSignalRO = Cpt(
|
||||
EpicsSignalRO,
|
||||
"mca1.ERTM",
|
||||
kind=Kind.normal,
|
||||
auto_monitor=True,
|
||||
doc="XMAP elapsed real time",
|
||||
)
|
||||
roi: EpicsSignalRO = Cpt(
|
||||
EpicsSignalRO, "mca1.R0", kind=Kind.normal, auto_monitor=True, doc="XMAP ROI signal"
|
||||
)
|
||||
label: EpicsSignalRO = Cpt(EpicsSignalRO, "mca1.R0NM", kind=Kind.config, doc="XMAP ROI label")
|
||||
spectrum_val: EpicsSignalRO = Cpt(
|
||||
EpicsSignalRO, "mca1.VAL", kind=Kind.omitted, doc="XMAP spectrum signal"
|
||||
)
|
||||
|
||||
# DXP parameters
|
||||
dxp1 = Cpt(EpicsDXPFalcon, "dxp1:")
|
||||
# dxp2 = Cpt(EpicsDXPFalcon, "dxp2:")
|
||||
|
||||
# MCA record with spectrum data
|
||||
mca1 = Cpt(EpicsMCARecord, "mca1")
|
||||
# mca2 = Cpt(EpicsMCARecord, "mca2")
|
||||
|
||||
# Norm Signal
|
||||
dead_time_cor_cnts1 = Cpt(
|
||||
DeadTimeCorrectedCounts, name="dead_time_cor_cnts", channel=1, kind=Kind.hinted
|
||||
# Configuration attributes
|
||||
collect_mode: EpicsSignal = Cpt(EpicsSignal, "CollectMode", doc="Collect mode signal")
|
||||
preset_real_time: EpicsSignal = Cpt(
|
||||
EpicsSignal, "PresetReal", doc="Preset real time signal"
|
||||
)
|
||||
|
||||
# Preview Signal for Falcon detector
|
||||
spectrum: PreviewSignal = Cpt(
|
||||
PreviewSignal,
|
||||
name="spectrum",
|
||||
ndim=1,
|
||||
kind=Kind.omitted,
|
||||
doc="Preview signal for Falcon detector spectrum",
|
||||
)
|
||||
|
||||
# Computed signal for dead time corrected counts
|
||||
dead_cor_roi0_count = Cpt(
|
||||
DeadTimeCorrectedSignal,
|
||||
kind=Kind.hinted,
|
||||
doc="Dead time corrected ROI 0 count",
|
||||
)
|
||||
# dead_time_cor_cnts2 = Cpt(DeadTimeCorrectedCounts, name='dead_time_cor_cnts', channel=2, kind=Kind.normal)
|
||||
|
||||
|
||||
class FalconSuperXAS(PSIDeviceBase, FalconControl):
|
||||
"""Falcon implementierung at SuperXAS. prefix: 'X10DA-SITORO:'"""
|
||||
"""Slim Falcon implementation at SuperXAS. prefix: 'X10DA-SITORO:'"""
|
||||
|
||||
########################################
|
||||
# Beamline Specific Implementations #
|
||||
########################################
|
||||
def __init__(self, *, name, prefix="", scan_info=None, device_manager=None, **kwargs):
|
||||
super().__init__(
|
||||
name=name, prefix=prefix, scan_info=scan_info, device_manager=device_manager, **kwargs
|
||||
)
|
||||
self._pv_timeout = 5 # seconds
|
||||
self._dead_time = 1.182e-7 # Dead time in seconds
|
||||
self.update_queue: queue.Queue = queue.Queue()
|
||||
self.current_values: dict = {}
|
||||
self.update_thread: threading.Thread | None = None
|
||||
self.threading_event = threading.Event() # Event to control the update thread
|
||||
self.r_lock: threading.RLock = threading.RLock() # Lock for thread safety
|
||||
|
||||
def __init__(self, name: str, prefix: str = "", scan_info: ScanInfo | None = None, **kwargs):
|
||||
"""
|
||||
Initialize Falcon device.
|
||||
|
||||
Args:
|
||||
name (str): Name of the device
|
||||
prefix (str): Prefix of the device
|
||||
scan_info (ScanInfo): Information about the scan
|
||||
**kwargs: Additional keyword arguments
|
||||
"""
|
||||
super().__init__(name=name, prefix=prefix, scan_info=scan_info, **kwargs)
|
||||
self._pv_timeout = 1
|
||||
#########################################
|
||||
#### Custom beamline specific methods ###
|
||||
#########################################
|
||||
|
||||
def on_init(self) -> None:
|
||||
"""
|
||||
@@ -135,40 +158,57 @@ class FalconSuperXAS(PSIDeviceBase, FalconControl):
|
||||
set default values on signals, please use on_connected instead.
|
||||
"""
|
||||
|
||||
def on_destroy(self):
|
||||
"""
|
||||
Called when the device is destroyed.
|
||||
|
||||
This method can be used to clean up resources or stop threads.
|
||||
"""
|
||||
if self.update_thread and self.update_thread.is_alive():
|
||||
self.threading_event.set()
|
||||
self.update_queue.put((None, None)) # Signal the thread to stop
|
||||
self.update_thread.join(timeout=5) # Wait for the thread to finish
|
||||
if self.update_thread.is_alive():
|
||||
logger.warning(f"Update thread for device {self.name} did not finish in 5s.")
|
||||
self.update_thread = None
|
||||
|
||||
def on_connected(self) -> None:
|
||||
"""
|
||||
Called after the device is connected and its signals are connected.
|
||||
Default values for signals should be set here.
|
||||
Upon being connected, make sure the Falcon is not acquiring.
|
||||
"""
|
||||
status = CompareStatus(self.acquiring, FalconAcquiringStatus.DONE)
|
||||
self.cancel_on_stop(status)
|
||||
self.stop_all.put(1)
|
||||
status.wait(timeout=self._pv_timeout)
|
||||
|
||||
def on_stage(self) -> DeviceStatus | StatusBase | None:
|
||||
"""
|
||||
Called while staging the device.
|
||||
|
||||
Information about the upcoming scan can be accessed from the scan_info (self.scan_info.msg) object.
|
||||
Information about the upcoming scan can be accessed self.scan_info.msg.
|
||||
"""
|
||||
self.collect_mode.set(0).wait()
|
||||
self.preset_real_time.set(0).wait()
|
||||
self.stop_all.put(1)
|
||||
if (
|
||||
self.wait_for_condition(
|
||||
lambda: self.acquiring.get() == FalconAcquiringStatus.DONE, timeout=self._pv_timeout
|
||||
)
|
||||
is False
|
||||
):
|
||||
raise TimeoutError("Timeout on Falcon stage")
|
||||
if self.acquiring.get() != FalconAcquiringStatus.DONE:
|
||||
logger.info(f"Falcon state was {self.acquiring.get()} during stage. Calling stop_all")
|
||||
status = CompareStatus(self.acquiring, FalconAcquiringStatus.DONE)
|
||||
self.cancel_on_stop(status)
|
||||
self.stop_all.put(1)
|
||||
status.wait(timeout=self._pv_timeout)
|
||||
|
||||
status_list = []
|
||||
status_list.append(self.collect_mode.set(0))
|
||||
status_list.append(self.preset_real_time.set(0))
|
||||
for status in status_list:
|
||||
self.cancel_on_stop(status)
|
||||
for status in status_list:
|
||||
status.wait(timeout=self._pv_timeout)
|
||||
|
||||
def on_unstage(self) -> DeviceStatus | StatusBase | None:
|
||||
"""Called while unstaging the device."""
|
||||
self.stop_all.put(1)
|
||||
self.erase_all.put(1)
|
||||
if (
|
||||
self.wait_for_condition(
|
||||
lambda: self.acquiring.get() == FalconAcquiringStatus.DONE, timeout=self._pv_timeout
|
||||
)
|
||||
is False
|
||||
):
|
||||
raise TimeoutError("Timeout on Falcon unstage")
|
||||
if self.acquiring.get() != FalconAcquiringStatus.DONE:
|
||||
status = CompareStatus(self.acquiring, FalconAcquiringStatus.DONE)
|
||||
self.cancel_on_stop(status)
|
||||
self.stop_all.put(1)
|
||||
return status
|
||||
|
||||
def on_pre_scan(self) -> DeviceStatus | StatusBase | None:
|
||||
"""Called right before the scan starts on all devices automatically."""
|
||||
@@ -185,20 +225,3 @@ class FalconSuperXAS(PSIDeviceBase, FalconControl):
|
||||
def on_stop(self) -> None:
|
||||
"""Called when the device is stopped."""
|
||||
self.stop_all.put(1)
|
||||
|
||||
def _stop_erase_and_wait_for_acquiring(self) -> DeviceStatus:
|
||||
"""Method called from the Trigger card to reset counts on the Falcon"""
|
||||
|
||||
if self.acquiring.get() != FalconAcquiringStatus.DONE:
|
||||
self.stop_all.put(1)
|
||||
|
||||
def _check_acquiriting(*, old_value, value, **kwargs):
|
||||
if old_value == FalconAcquiringStatus.DONE and value == FalconAcquiringStatus.ACQUIRING:
|
||||
return True
|
||||
return False
|
||||
|
||||
status = SubscriptionStatus(self.acquiring, _check_acquiriting)
|
||||
|
||||
logger.info("Triggering Falcon")
|
||||
self.erase_start.put(1)
|
||||
return status
|
||||
|
||||
131
superxas_bec/devices/falcon_ad.py
Normal file
131
superxas_bec/devices/falcon_ad.py
Normal file
@@ -0,0 +1,131 @@
|
||||
"""FALCON device implementation for SuperXAS"""
|
||||
|
||||
import enum
|
||||
|
||||
from bec_lib.devicemanager import ScanInfo
|
||||
from bec_lib.logger import bec_logger
|
||||
from ophyd import Component as Cpt
|
||||
from ophyd import DeviceStatus, EpicsSignalRO, Staged, StatusBase
|
||||
from ophyd_devices import CompareStatus
|
||||
from ophyd_devices.devices.dxp import EpicsDXPFalcon, EpicsMCARecord, Falcon
|
||||
from ophyd_devices.interfaces.base_classes.psi_device_base import PSIDeviceBase
|
||||
|
||||
logger = bec_logger.logger
|
||||
|
||||
|
||||
class FalconAcquiringStatus(int, enum.Enum):
|
||||
"""Status of Falcon"""
|
||||
|
||||
DONE = 0
|
||||
ACQUIRING = 1
|
||||
|
||||
|
||||
class FalconADControl(Falcon):
|
||||
"""Falcon Control class at SuperXAS. prefix: 'X10DA-SITORO:'"""
|
||||
|
||||
acquiring = Cpt(EpicsSignalRO, "Acquiring", auto_monitor=True, kind="omitted")
|
||||
# DXP parameters
|
||||
dxp1 = Cpt(EpicsDXPFalcon, "dxp1:")
|
||||
|
||||
# MCA record with spectrum data
|
||||
mca1 = Cpt(EpicsMCARecord, "mca1")
|
||||
|
||||
|
||||
class FalconAD(PSIDeviceBase, FalconADControl):
|
||||
"""Falcon implementierung at SuperXAS. prefix: 'X10DA-SITORO:'"""
|
||||
|
||||
########################################
|
||||
# Beamline Specific Implementations #
|
||||
########################################
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
name: str,
|
||||
prefix: str = "",
|
||||
scan_info: ScanInfo | None = None,
|
||||
device_manager=None,
|
||||
**kwargs,
|
||||
):
|
||||
"""
|
||||
Initialize Falcon device.
|
||||
|
||||
Args:
|
||||
name (str): Name of the device
|
||||
prefix (str): Prefix of the device
|
||||
scan_info (ScanInfo): Information about the scan
|
||||
**kwargs: Additional keyword arguments
|
||||
"""
|
||||
super().__init__(
|
||||
name=name, prefix=prefix, scan_info=scan_info, device_manager=device_manager, **kwargs
|
||||
)
|
||||
self.device_manager = device_manager
|
||||
self._pv_timeout = 5
|
||||
|
||||
def on_init(self) -> None:
|
||||
"""
|
||||
Called when the device is initialized.
|
||||
|
||||
No signals are connected at this point. If you like to
|
||||
set default values on signals, please use on_connected instead.
|
||||
"""
|
||||
|
||||
def on_connected(self) -> None:
|
||||
"""
|
||||
Called after the device is connected and its signals are connected.
|
||||
Default values for signals should be set here.
|
||||
"""
|
||||
status = CompareStatus(self.acquiring, FalconAcquiringStatus.DONE)
|
||||
self.cancel_on_stop(status)
|
||||
self.stop_all.put(1)
|
||||
status.wait(timeout=self._pv_timeout)
|
||||
|
||||
# TODO Skip AD stage command (trigger_value) for now!
|
||||
def stage(self) -> list[object] | DeviceStatus | StatusBase: # type: ignore
|
||||
"""Stage the device."""
|
||||
if self.staged != Staged.no:
|
||||
return [self]
|
||||
self.stopped = False
|
||||
status = self.on_stage() # pylint: disable=assignment-from-no-return
|
||||
if isinstance(status, StatusBase):
|
||||
return status
|
||||
return [self]
|
||||
|
||||
def on_stage(self) -> DeviceStatus | StatusBase | None:
|
||||
"""
|
||||
Called while staging the device.
|
||||
|
||||
Information about the upcoming scan can be accessed from the scan_info (self.scan_info.msg) object.
|
||||
"""
|
||||
if self.acquiring.get() != FalconAcquiringStatus.DONE:
|
||||
logger.info(f"Falcon state was {self.acquiring.get()} during stage. Calling stop_all")
|
||||
status = CompareStatus(self.acquiring, FalconAcquiringStatus.DONE)
|
||||
self.cancel_on_stop(status)
|
||||
self.stop_all.put(1)
|
||||
status.wait(timeout=self._pv_timeout)
|
||||
|
||||
self.collect_mode.set(0).wait(timeout=self._pv_timeout)
|
||||
self.preset_real_time.set(0).wait(timeout=self._pv_timeout)
|
||||
|
||||
def on_unstage(self) -> DeviceStatus | StatusBase | None:
|
||||
"""Called while unstaging the device."""
|
||||
if self.acquiring.get() != FalconAcquiringStatus.DONE:
|
||||
self.stop_all.put(1)
|
||||
status = CompareStatus(self.acquiring, FalconAcquiringStatus.DONE)
|
||||
self.cancel_on_stop(status)
|
||||
return status
|
||||
|
||||
def on_pre_scan(self) -> DeviceStatus | StatusBase | None:
|
||||
"""Called right before the scan starts on all devices automatically."""
|
||||
|
||||
def on_trigger(self) -> DeviceStatus | StatusBase | None:
|
||||
"""Called when the device is triggered."""
|
||||
|
||||
def on_complete(self) -> DeviceStatus | StatusBase | None:
|
||||
"""Called to inquire if a device has completed a scans."""
|
||||
|
||||
def on_kickoff(self) -> DeviceStatus | StatusBase | None:
|
||||
"""Called to kickoff a device for a fly scan. Has to be called explicitly."""
|
||||
|
||||
def on_stop(self) -> None:
|
||||
"""Called when the device is stopped."""
|
||||
self.stop_all.put(1)
|
||||
@@ -1,16 +1,19 @@
|
||||
"""SuperXAS Trigger Device"""
|
||||
|
||||
import enum
|
||||
import time
|
||||
|
||||
from bec_lib.devicemanager import ScanInfo
|
||||
from bec_lib.logger import bec_logger
|
||||
from ophyd import Component as Cpt
|
||||
from ophyd import Device, DeviceStatus, EpicsSignal, EpicsSignalRO, Kind, StatusBase
|
||||
from ophyd_devices import CompareStatus, TransitionStatus
|
||||
from ophyd_devices.interfaces.base_classes.psi_device_base import PSIDeviceBase
|
||||
|
||||
from superxas_bec.devices.falcon import FalconAcquiringStatus, FalconSuperXAS
|
||||
|
||||
logger = bec_logger.logger
|
||||
|
||||
import enum
|
||||
|
||||
from bec_lib.devicemanager import ScanInfo
|
||||
from ophyd_devices.interfaces.base_classes.psi_device_base import PSIDeviceBase
|
||||
|
||||
|
||||
class ContinuousSamplingMode(int, enum.Enum):
|
||||
"""Options for start_csmpl signal"""
|
||||
@@ -36,14 +39,22 @@ class TriggerControl(Device):
|
||||
doc="Number of cycles (multiplies by 0.2s)",
|
||||
)
|
||||
start_csmpl = Cpt(
|
||||
EpicsSignal, suffix="START-CSMPL", kind=Kind.config, doc="Continous sampling mode on/off"
|
||||
EpicsSignal,
|
||||
suffix="START-CSMPL",
|
||||
kind=Kind.config,
|
||||
doc="Continous sampling mode on/off",
|
||||
put_complete=True,
|
||||
)
|
||||
smpl = Cpt(
|
||||
EpicsSignal, suffix="SMPL", kind=Kind.config, doc="Sampling Trigger if cont mode is off"
|
||||
)
|
||||
smpl_done = Cpt(
|
||||
EpicsSignalRO, suffix="SMPL-DONE", kind=Kind.config, doc="Done status of trigger"
|
||||
)
|
||||
EpicsSignalRO,
|
||||
suffix="SMPL-DONE",
|
||||
kind=Kind.config,
|
||||
auto_monitor=True,
|
||||
doc="Done status of trigger",
|
||||
) # Status PV updates need to be monitored as we wait and react for changes
|
||||
|
||||
|
||||
class Trigger(PSIDeviceBase, TriggerControl):
|
||||
@@ -59,7 +70,8 @@ class Trigger(PSIDeviceBase, TriggerControl):
|
||||
):
|
||||
super().__init__(name=name, prefix=prefix, scan_info=scan_info, **kwargs)
|
||||
self.device_manager = device_manager
|
||||
self._pv_timeout = 1
|
||||
self._pv_timeout = 5
|
||||
self._trigger_index = 0
|
||||
|
||||
########################################
|
||||
# Beamline Specific Implementations #
|
||||
@@ -87,41 +99,54 @@ class Trigger(PSIDeviceBase, TriggerControl):
|
||||
"""
|
||||
self.start_csmpl.set(ContinuousSamplingMode.OFF).wait(timeout=self._pv_timeout)
|
||||
exp_time = self.scan_info.msg.scan_parameters["exp_time"]
|
||||
if self.scan_info.msg.scan_name != "exafs_scan":
|
||||
self.set_exposure_time(exp_time).wait()
|
||||
self._trigger_index = 0
|
||||
if self.scan_info.msg.scan_name != "exafs_scan": # TODO
|
||||
self.set_exposure_time(exp_time).wait(self._pv_timeout)
|
||||
|
||||
def on_unstage(self) -> DeviceStatus | StatusBase | None:
|
||||
"""Called while unstaging the device."""
|
||||
status = self.start_csmpl.set(ContinuousSamplingMode.ON)
|
||||
status = self.start_csmpl.set(ContinuousSamplingMode.ON).wait(timeout=self._pv_timeout)
|
||||
return status
|
||||
|
||||
def on_pre_scan(self) -> DeviceStatus | StatusBase | None:
|
||||
"""Called right before the scan starts on all devices automatically."""
|
||||
|
||||
def on_trigger(self) -> DeviceStatus | StatusBase | None:
|
||||
"""Called when the device is triggered."""
|
||||
"""
|
||||
Called when the device is triggered.
|
||||
If Falcon is present in the device manager, it will also wait for the Falcon to be ready for acquiring,
|
||||
and then wait for the Falcon to be done with acquiring. This is to ensure that data of PVs is updated
|
||||
and the sampling is done before data is being read from the device.
|
||||
"""
|
||||
if self.scan_info.msg.scan_name == "exafs_scan":
|
||||
exp_time = self.scan_info.msg.scan_parameters["integ_time"][self._trigger_index]
|
||||
self._trigger_index += 1
|
||||
self.set_exposure_time(exp_time).wait()
|
||||
time_started = time.time()
|
||||
logger.info(f"Triggering device {self.name} at {time_started}")
|
||||
|
||||
falcon = self.device_manager.devices.get("falcon", None)
|
||||
|
||||
if falcon is not None:
|
||||
# pylint: disable=protected-access
|
||||
status = falcon._stop_erase_and_wait_for_acquiring()
|
||||
status.wait()
|
||||
|
||||
started = False
|
||||
|
||||
def _sampling_done():
|
||||
nonlocal started
|
||||
if not started and self.smpl_done.get() == SamplingDone.RUNNING:
|
||||
started = True
|
||||
return False
|
||||
if started and self.smpl_done.get() == SamplingDone.DONE:
|
||||
return True
|
||||
|
||||
return self.smpl_done.get() == SamplingDone.DONE
|
||||
|
||||
if falcon is not None and falcon.enabled is True:
|
||||
falcon: FalconSuperXAS
|
||||
status = CompareStatus(falcon.acquiring, FalconAcquiringStatus.ACQUIRING)
|
||||
self.cancel_on_stop(status)
|
||||
falcon.erase_start.put(1)
|
||||
status.wait(timeout=self._pv_timeout)
|
||||
time.sleep(0.4)
|
||||
status_smpl = TransitionStatus(self.smpl_done, [SamplingDone.RUNNING, SamplingDone.DONE])
|
||||
logger.info(f"Triggering sampling for {self.name} at {time.time() - time_started}")
|
||||
self.smpl.put(1)
|
||||
status = self.task_handler.submit_task(_sampling_done, run=True)
|
||||
return status
|
||||
self.cancel_on_stop(status_smpl)
|
||||
status_smpl.wait(timeout=self._pv_timeout)
|
||||
logger.info(f"Sampling done for {self.name} at {time.time() - time_started}")
|
||||
if falcon is not None and falcon.enabled is True:
|
||||
time.sleep(0.4) # Simulate some processing time
|
||||
status = CompareStatus(falcon.acquiring, FalconAcquiringStatus.DONE)
|
||||
self.cancel_on_stop(status)
|
||||
falcon.stop_all.put(1)
|
||||
status.wait(timeout=self._pv_timeout)
|
||||
time.sleep(0.4) # Simulate some processing time
|
||||
return status_smpl
|
||||
|
||||
def on_complete(self) -> DeviceStatus | StatusBase | None:
|
||||
"""Called to inquire if a device has completed a scans."""
|
||||
@@ -131,9 +156,9 @@ class Trigger(PSIDeviceBase, TriggerControl):
|
||||
|
||||
def on_stop(self) -> None:
|
||||
"""Called when the device is stopped."""
|
||||
self.task_handler.shutdown()
|
||||
|
||||
def set_exposure_time(self, value: float) -> DeviceStatus:
|
||||
"""Utility method to set exposure time complying to device logic with cycle of min 0.2s."""
|
||||
cycles = max(int(value * 5), 1)
|
||||
logger.info(f"Device {self.name} set exp_time to {value} with N cycles: {cycles}")
|
||||
return self.total_cycles.set(cycles)
|
||||
|
||||
@@ -39,7 +39,7 @@ class EXAFSScan(ScanBase):
|
||||
self.k_step_conversion = 3.81
|
||||
self._check_and_upated_input_arguments()
|
||||
if motor is None:
|
||||
default_motor = "kb_slit_y"
|
||||
default_motor = "mono_energy"
|
||||
motor = default_motor # TODO Remove that motor, put energy of mono
|
||||
self.motor = motor
|
||||
super().__init__(exp_time=0, relative=False, settling_time=settling_time, **kwargs)
|
||||
|
||||
@@ -28,10 +28,10 @@ def falcon():
|
||||
|
||||
def test_devices_falcon(falcon):
|
||||
"""Test init and on_connected methods of Falcon device"""
|
||||
|
||||
falcon.acquiring._read_pv.mock_data = FalconAcquiringStatus.DONE
|
||||
assert falcon.prefix == "X10DA-SITORO:"
|
||||
assert falcon.name == "falcon"
|
||||
assert falcon._pv_timeout == 1
|
||||
assert falcon._pv_timeout == 5
|
||||
falcon.on_connected()
|
||||
|
||||
|
||||
@@ -41,17 +41,15 @@ def test_devices_falcon_stage(falcon):
|
||||
falcon.collect_mode.put(1)
|
||||
falcon.preset_real_time.put(1)
|
||||
falcon.stop_all.put(0)
|
||||
falcon.acquiring.put(FalconAcquiringStatus.DONE)
|
||||
falcon.acquiring._read_pv.mock_data = FalconAcquiringStatus.DONE
|
||||
# Should resolve with that status
|
||||
falcon.on_stage()
|
||||
assert falcon.collect_mode.get() == 0
|
||||
assert falcon.preset_real_time.get() == 0
|
||||
assert falcon.stop_all.get() == 1
|
||||
# Should timeout
|
||||
falcon.acquiring.put(FalconAcquiringStatus.ACQUIRING)
|
||||
falcon._pv_timeout = 0.1
|
||||
with pytest.raises(TimeoutError):
|
||||
falcon.on_stage()
|
||||
falcon.acquiring._read_pv.mock_data = FalconAcquiringStatus.ACQUIRING
|
||||
falcon.on_stage()
|
||||
assert falcon.stop_all.get() == 1
|
||||
|
||||
|
||||
def test_devices_falcon_unstage(falcon):
|
||||
|
||||
Reference in New Issue
Block a user