diff --git a/phoenix_bec/device_configs/current_devices_tmp.yaml b/phoenix_bec/device_configs/current_devices_tmp.yaml index a397747..bbe154d 100644 --- a/phoenix_bec/device_configs/current_devices_tmp.yaml +++ b/phoenix_bec/device_configs/current_devices_tmp.yaml @@ -47,7 +47,7 @@ PH_Dummy: # ############################ -ScanX: +MA1_ScanX: readoutPriority: baseline description: 'Vertical sample position ES-MA1.ScanX' deviceClass: ophyd.EpicsMotor @@ -58,10 +58,10 @@ ScanX: - phoenix_devices.yaml - class EpicsMotor onFailure: retry - enabled: true + enabled: false readOnly: false -ScanY: +MA1_ScanY: readoutPriority: baseline description: 'Horizontal sample position ES-MA1.ScanY' deviceClass: ophyd.EpicsMotor @@ -72,15 +72,163 @@ ScanY: - phoenix_devices.yaml - class EpicsMotor onFailure: retry - enabled: true + enabled: false readOnly: false softwareTrigger: false + + +MA1_ROT: + readoutPriority: baseline + description: 'Horizontal sample position ES-MA1.ROT' + deviceClass: ophyd.EpicsMotor + deviceConfig: + prefix: 'X07MB-ES-MA1:ROT' + deviceTags: + - ES-MA1.ROT + - phoenix_devices.yaml + - class EpicsMotor + onFailure: retry + enabled: false + readOnly: false + softwareTrigger: false + + +MA1_TRZ1: + readoutPriority: baseline + description: 'position ES-MA1.ROT' + deviceClass: ophyd.EpicsMotor + deviceConfig: + prefix: 'X07MB-ES-MA1:TRZ1' + deviceTags: + - ES-MA1.TRZ1 + - phoenix_devices.yaml + - class EpicsMotor + onFailure: retry + enabled: false + readOnly: false + softwareTrigger: false + + + +MA1_TRX1: + readoutPriority: baseline + description: 'position ES-MA1.TRX1' + deviceClass: ophyd.EpicsMotor + deviceConfig: + prefix: 'X07MB-ES-MA1:TRX1' + deviceTags: + - ES-MA1.TRX1 + - phoenix_devices.yaml + - class EpicsMotor + onFailure: retry + enabled: false + readOnly: false + softwareTrigger: false + + +# # # # DIODES from ES1 ADC # # +SAI_01_MEAN: + readoutPriority: monitored + description: DIODE SAI01 + deviceClass: ophyd.EpicsSignalRO + deviceConfig: + auto_monitor: true + read_pv: 'X07MB-OP2-SAI_01:MEAN' + deviceTags: + - PHOENIX + - phoenix_devices.yaml + - class EpicsSignalRO + onFailure: buffer + enabled: true + readOnly: true + softwareTrigger: false + +SAI_02_MEAN: + readoutPriority: monitored + description: DIODE SAI02 + deviceClass: ophyd.EpicsSignalRO + deviceConfig: + auto_monitor: true + read_pv: 'X07MB-OP2-SAI_02:MEAN' + deviceTags: + - PHOENIX + - phoenix_devices.yaml + - class EpicsSignalRO + onFailure: buffer + enabled: true + readOnly: true + softwareTrigger: false + +SAI_03_MEAN: + readoutPriority: monitored + description: DIODE SAI03 + deviceClass: ophyd.EpicsSignalRO + deviceConfig: + auto_monitor: true + read_pv: 'X07MB-OP2-SAI_03:MEAN' + deviceTags: + - PHOENIX + - phoenix_devices.yaml + - class EpicsSignalRO + onFailure: buffer + enabled: true + readOnly: true + softwareTrigger: false + +SAI_04_MEAN: + readoutPriority: monitored + description: DIODE SAI04 + deviceClass: ophyd.EpicsSignalRO + deviceConfig: + auto_monitor: true + read_pv: 'X07MB-OP2-SAI_04:MEAN' + deviceTags: + - PHOENIX + - phoenix_devices.yaml + - class EpicsSignalRO + onFailure: buffer + enabled: true + readOnly: true + softwareTrigger: false + +SAI_05_MEAN: + readoutPriority: monitored + description: DIODE SAI05 + deviceClass: ophyd.EpicsSignalRO + deviceConfig: + auto_monitor: true + read_pv: 'X07MB-OP2-SAI_05:MEAN' + deviceTags: + - PHOENIX + - phoenix_devices.yaml + - class EpicsSignalRO + onFailure: buffer + enabled: true + readOnly: true + softwareTrigger: false + +SAI_06_MEAN: + readoutPriority: monitored + description: DIODE SAI06 + deviceClass: ophyd.EpicsSignalRO + deviceConfig: + auto_monitor: true + read_pv: 'X07MB-OP2-SAI_06:MEAN' + deviceTags: + - PHOENIX + - phoenix_devices.yaml + - class EpicsSignalRO + onFailure: buffer + enabled: true + readOnly: true + softwareTrigger: false + SAI_07_MEAN: readoutPriority: monitored description: DIODE SAI07 @@ -116,104 +264,19 @@ SAI_08_MEAN: # # END OF STANDARD CONFIG # -# -# Configuration XMAP -# -xmap: - description: XMAP detector x-ray fluoresence - deviceClass: phoenix_bec.devices.phoenix_xmap.XMAPPhoenix + +MA1_TRZ1: + readoutPriority: baseline + description: 'Horizontal sample position ES-MA1.ROT' + deviceClass: ophyd.EpicsMotor deviceConfig: - prefix: 'X07MB-XMAP:' + prefix: 'X07MB-ES-MA1:TRZ1' deviceTags: - - phoenix - - xmap - - phoenix_bec/device_configs/phoenix_xmap.yaml - - class XMAPPhoenix - - file phoenix_xmap - onFailure: buffer - enabled: true - readoutPriority: async - softwareTrigger: false - -# -# Configuration XMAP -# -xmap: - description: XMAP detector x-ray fluoresence - deviceClass: phoenix_bec.devices.phoenix_xmap.XMAPPhoenix - deviceConfig: - prefix: 'X07MB-XMAP:' - deviceTags: - - phoenix - - xmap - - phoenix_bec/device_configs/phoenix_xmap.yaml - - class XMAPPhoenix - - file phoenix_xmap - onFailure: buffer - enabled: true - readoutPriority: async - softwareTrigger: false - - -# -# falcon without hdf5 -# -falcon: - description: Falcon detector x-ray fluoresence with hdf5 plugin from device class phoenix_bec.devices. falcon_phoenix.FalconPhoenix - deviceClass: phoenix_bec.devices.phoenix_falcon.FalconPhoenix - deviceConfig: - prefix: 'X07MB-SITORO:' - deviceTags: - - phoenix - - falcon - - with hdf5 - - phoenix_falcon.yaml - - class FalconPhoenix - - file:phoenix_falcon.py - onFailure: buffer - enabled: true - readoutPriority: async - softwareTrigger: false -# -# END FALCON with HDF5 -# -# -# falcon without hdf5 -# -falcon: - description: Falcon detector x-ray fluoresence with hdf5 plugin from device class phoenix_bec.devices. falcon_phoenix.FalconPhoenix - deviceClass: phoenix_bec.devices.phoenix_falcon.FalconPhoenix - deviceConfig: - prefix: 'X07MB-SITORO:' - deviceTags: - - phoenix - - falcon - - with hdf5 - - phoenix_falcon.yaml - - class FalconPhoenix - - file:phoenix_falcon.py - onFailure: buffer - enabled: true - readoutPriority: async - softwareTrigger: false -# -# END FALCON with HDF5 -## -# Configuration XMAP -# -xmap: - description: XMAP detector x-ray fluoresence - deviceClass: phoenix_bec.devices.phoenix_xmap.XMAPPhoenix - deviceConfig: - prefix: 'X07MB-XMAP:' - deviceTags: - - phoenix - - xmap - - phoenix_bec/device_configs/phoenix_xmap.yaml - - class XMAPPhoenix - - file phoenix_xmap - onFailure: buffer - enabled: true - readoutPriority: async + - ES-MA1.TRZ1 + - phoenix_devices.yaml + - class EpicsMotor + onFailure: retry + enabled: false + readOnly: false softwareTrigger: false diff --git a/phoenix_bec/device_configs/phoenix_devices.yaml b/phoenix_bec/device_configs/phoenix_devices.yaml index aeb31f0..ad17717 100644 --- a/phoenix_bec/device_configs/phoenix_devices.yaml +++ b/phoenix_bec/device_configs/phoenix_devices.yaml @@ -1,6 +1,6 @@ PH_TTL: - description: PHOENIX TTL trigger + description: PHOENIX TTL TRIGGER deviceClass: phoenix_bec.devices.phoenix_trigger.PhoenixTrigger deviceConfig: prefix: 'X07MB-OP2:' @@ -47,7 +47,7 @@ PH_Dummy: # ############################ -ScanX: +MA1_ScanX: readoutPriority: baseline description: 'Vertical sample position ES-MA1.ScanX' deviceClass: ophyd.EpicsMotor @@ -58,10 +58,10 @@ ScanX: - phoenix_devices.yaml - class EpicsMotor onFailure: retry - enabled: true + enabled: false readOnly: false -ScanY: +MA1_ScanY: readoutPriority: baseline description: 'Horizontal sample position ES-MA1.ScanY' deviceClass: ophyd.EpicsMotor @@ -72,15 +72,163 @@ ScanY: - phoenix_devices.yaml - class EpicsMotor onFailure: retry - enabled: true + enabled: false readOnly: false softwareTrigger: false + + +MA1_ROT: + readoutPriority: baseline + description: 'Horizontal sample position ES-MA1.ROT' + deviceClass: ophyd.EpicsMotor + deviceConfig: + prefix: 'X07MB-ES-MA1:ROT' + deviceTags: + - ES-MA1.ROT + - phoenix_devices.yaml + - class EpicsMotor + onFailure: retry + enabled: false + readOnly: false + softwareTrigger: false + + +MA1_TRZ1: + readoutPriority: baseline + description: 'position ES-MA1.ROT' + deviceClass: ophyd.EpicsMotor + deviceConfig: + prefix: 'X07MB-ES-MA1:TRZ1' + deviceTags: + - ES-MA1.TRZ1 + - phoenix_devices.yaml + - class EpicsMotor + onFailure: retry + enabled: false + readOnly: false + softwareTrigger: false + + + +MA1_TRX1: + readoutPriority: baseline + description: 'position ES-MA1.TRX1' + deviceClass: ophyd.EpicsMotor + deviceConfig: + prefix: 'X07MB-ES-MA1:TRX1' + deviceTags: + - ES-MA1.TRX1 + - phoenix_devices.yaml + - class EpicsMotor + onFailure: retry + enabled: false + readOnly: false + softwareTrigger: false + + +# # # # DIODES from ES1 ADC # # +SAI_01_MEAN: + readoutPriority: monitored + description: DIODE SAI01 + deviceClass: ophyd.EpicsSignalRO + deviceConfig: + auto_monitor: true + read_pv: 'X07MB-OP2-SAI_01:MEAN' + deviceTags: + - PHOENIX + - phoenix_devices.yaml + - class EpicsSignalRO + onFailure: buffer + enabled: true + readOnly: true + softwareTrigger: false + +SAI_02_MEAN: + readoutPriority: monitored + description: DIODE SAI02 + deviceClass: ophyd.EpicsSignalRO + deviceConfig: + auto_monitor: true + read_pv: 'X07MB-OP2-SAI_02:MEAN' + deviceTags: + - PHOENIX + - phoenix_devices.yaml + - class EpicsSignalRO + onFailure: buffer + enabled: true + readOnly: true + softwareTrigger: false + +SAI_03_MEAN: + readoutPriority: monitored + description: DIODE SAI03 + deviceClass: ophyd.EpicsSignalRO + deviceConfig: + auto_monitor: true + read_pv: 'X07MB-OP2-SAI_03:MEAN' + deviceTags: + - PHOENIX + - phoenix_devices.yaml + - class EpicsSignalRO + onFailure: buffer + enabled: true + readOnly: true + softwareTrigger: false + +SAI_04_MEAN: + readoutPriority: monitored + description: DIODE SAI04 + deviceClass: ophyd.EpicsSignalRO + deviceConfig: + auto_monitor: true + read_pv: 'X07MB-OP2-SAI_04:MEAN' + deviceTags: + - PHOENIX + - phoenix_devices.yaml + - class EpicsSignalRO + onFailure: buffer + enabled: true + readOnly: true + softwareTrigger: false + +SAI_05_MEAN: + readoutPriority: monitored + description: DIODE SAI05 + deviceClass: ophyd.EpicsSignalRO + deviceConfig: + auto_monitor: true + read_pv: 'X07MB-OP2-SAI_05:MEAN' + deviceTags: + - PHOENIX + - phoenix_devices.yaml + - class EpicsSignalRO + onFailure: buffer + enabled: true + readOnly: true + softwareTrigger: false + +SAI_06_MEAN: + readoutPriority: monitored + description: DIODE SAI06 + deviceClass: ophyd.EpicsSignalRO + deviceConfig: + auto_monitor: true + read_pv: 'X07MB-OP2-SAI_06:MEAN' + deviceTags: + - PHOENIX + - phoenix_devices.yaml + - class EpicsSignalRO + onFailure: buffer + enabled: true + readOnly: true + softwareTrigger: false + SAI_07_MEAN: readoutPriority: monitored description: DIODE SAI07 @@ -116,3 +264,19 @@ SAI_08_MEAN: # # END OF STANDARD CONFIG # + +MA1_TRZ1: + readoutPriority: baseline + description: 'Horizontal sample position ES-MA1.ROT' + deviceClass: ophyd.EpicsMotor + deviceConfig: + prefix: 'X07MB-ES-MA1:TRZ1' + deviceTags: + - ES-MA1.TRZ1 + - phoenix_devices.yaml + - class EpicsMotor + onFailure: retry + enabled: false + readOnly: false + softwareTrigger: false + diff --git a/phoenix_bec/devices/dxp_loc.py b/phoenix_bec/devices/dxp_loc.py new file mode 100644 index 0000000..2107d8e --- /dev/null +++ b/phoenix_bec/devices/dxp_loc.py @@ -0,0 +1,165 @@ +""" +Base classes for XIA xMAP and FalconX dxp system. +Falcon interfaces with the dxpSITORO epics driver, https://github.com/epics-modules/dxpSITORO. +xMAP interfaces with the dxp epics driver, https://github.com/epics-modules/dxp. + +An example usage for a 4-element FalconX system. :: + + from ophyd import Component as Cpt + from ophyd_devices.devices.dxp import Falcon, EpicsMCARecord, EpicsDXPFalcon + from ophyd_devices.devices.areadetector.plugins import HDF5Plugin_V35 as HDF5Plugin + + class FalconX4(Falcon): + # DXP parameters + dxp1 = Cpt(EpicsDXPFalcon, "dxp1:") + dxp2 = Cpt(EpicsDXPFalcon, "dxp2:") + dxp3 = Cpt(EpicsDXPFalcon, "dxp3:") + dxp4 = Cpt(EpicsDXPFalcon, "dxp4:") + + # MCA record with spectrum data + mca1 = Cpt(EpicsMCARecord, "mca1") + mca2 = Cpt(EpicsMCARecord, "mca2") + mca3 = Cpt(EpicsMCARecord, "mca3") + mca4 = Cpt(EpicsMCARecord, "mca4") + + # optionally with a HDF5 writer plugin + hdf = Cpt(HDF5Plugin, "HDF1:") + + falcon = FalconX4("X07MB-SITORO:", name="falcon") + falcon.collect_mode.put(0) # 0: MCA spectra, 1: MCA mapping + falcon.preset_mode.put("Real time") + falcon.preset_real_time.put(1) + status = falcon.erase_start.set(1) + status.wait() + falcon.mca1.spectrum.get() + +""" +from ophyd import Component as Cpt +from ophyd import Kind, EpicsSignal, EpicsSignalRO, Device +from ophyd.mca import EpicsMCARecord as _EpicsMCARecord, EpicsDXPBaseSystem, EpicsDXPMultiElementSystem, EpicsDXPMapping +from ophyd.areadetector import EpicsSignalWithRBV + +__all__ = ( + 'EpicsMCARecord', + 'EpicsDXPFalcon', + 'Falcon', + 'xMAP' +) + +class EpicsMCARecord(_EpicsMCARecord): + """EpicsMCARecord with addtional fields""" + calo = Cpt(EpicsSignal, ".CALO") + cals = Cpt(EpicsSignal, ".CALS") + calq = Cpt(EpicsSignal, ".CALQ") + tth = Cpt(EpicsSignal, ".TTH") + +class EpicsDXPFalcon(Device): + """All high-level DXP parameters for each channel""" + + # Detection + detection_filter = Cpt(EpicsSignalWithRBV, "DetectionFilter") + detection_threshold = Cpt(EpicsSignalWithRBV, "DetectionThreshold") + min_pulse_pair_separation = Cpt(EpicsSignalWithRBV, "MinPulsePairSeparation") + + # Pre-amp and energe range + detector_polarity = Cpt(EpicsSignalWithRBV, "DetectorPolarity") + decay_time = Cpt(EpicsSignalWithRBV, "DecayTime") + risetime_optimization = Cpt(EpicsSignalWithRBV, "RisetimeOptimization") + scale_factor = Cpt(EpicsSignalWithRBV, "ScaleFactor") + + # Presets + preset_events = Cpt(EpicsSignalWithRBV, "PresetEvents") + preset_mode = Cpt(EpicsSignalWithRBV, "PresetMode", string=True) + preset_triggers = Cpt(EpicsSignalWithRBV, "PresetTriggers") + preset_real_time = Cpt(EpicsSignalWithRBV, "PresetReal") + + # Couting statistics + elapsed_live_time = Cpt(EpicsSignalRO, "ElapsedLiveTime", lazy=True) + elapsed_real_time = Cpt(EpicsSignalRO, "ElapsedRealTime", lazy=True) + elapsed_trigger_live = Cpt(EpicsSignalRO, "ElapsedTriggerLiveTime", lazy=True) + triggers = Cpt(EpicsSignalRO, "Triggers", lazy=True) + events = Cpt(EpicsSignalRO, "Events", lazy=True) + input_count_rate = Cpt(EpicsSignalRO, "InputCountRate", lazy=True) + output_count_rate = Cpt(EpicsSignalRO, "OutputCountRate", lazy=True) + + # Mapping + current_pixel = Cpt(EpicsSignal, "CurrentPixel") + + # Diagnostic trace + trace_data = Cpt(EpicsSignal, "TraceData") + +class EpicsDXPFalconMultiElementSystem(EpicsDXPBaseSystem): + # Preset control + preset_events = Cpt(EpicsSignal, "PresetEvents") + preset_real_time = Cpt(EpicsSignal, "PresetReal") + preset_mode = Cpt(EpicsSignal, "PresetMode", string=True) + preset_triggers = Cpt(EpicsSignal, "PresetTriggers") + + # Acquisition control + erase_all = Cpt(EpicsSignal, "EraseAll") + erase_start = Cpt(EpicsSignal, "EraseStart", put_complete=True, trigger_value=1) + start_all = Cpt(EpicsSignal, "StartAll", put_complete=True, trigger_value=1) + stop_all = Cpt(EpicsSignal, "StopAll") + + # Status + set_acquire_busy = Cpt(EpicsSignal, "SetAcquireBusy") + acquire_busy = Cpt(EpicsSignal, "AcquireBusy") + status_all = Cpt(EpicsSignal, "StatusAll") + status_all_once = Cpt(EpicsSignal, "StatusAllOnce") + acquiring = Cpt(EpicsSignal, "Acquiring") + + # Reading + read_all = Cpt(EpicsSignal, "ReadAll", kind=Kind.omitted) + read_all_once = Cpt(EpicsSignal, "ReadAllOnce", kind=Kind.omitted) + + # As a debugging note, if snl_connected is not '1', your IOC is + # misconfigured: + snl_connected = Cpt(EpicsSignal, "SNL_Connected") + + # High-level parameters + copy_decay_time = Cpt(EpicsSignal, "CopyDecayTime", kind=Kind.omitted) + copy_detection_filter = Cpt(EpicsSignal, "CopyDetectionFilter", kind=Kind.omitted) + copy_detection_threshold = Cpt(EpicsSignal, "CopyDetectionThreshold", kind=Kind.omitted) + copy_detector_polarity = Cpt(EpicsSignal, "CopyDetectorPolarity", kind=Kind.omitted) + copy_min_pulse_pair_separation = Cpt(EpicsSignal, "CopyMinPulsePairSeparation", kind=Kind.omitted) + copt_risetime_optimization = Cpt(EpicsSignal, "CopyRisetimeOptimization", kind=Kind.omitted) + copy_scale_factor = Cpt(EpicsSignal, "CopyScaleFactor", kind=Kind.omitted) + read_traces = Cpt(EpicsSignal, "ReadTraces", kind=Kind.omitted) + + # ROI and SCA + copy_roic_hannel = Cpt(EpicsSignal, "CopyROIChannel", kind=Kind.omitted) + copy_roie_nergy = Cpt(EpicsSignal, "CopyROIEnergy", kind=Kind.omitted) + copy_roi_sca = Cpt(EpicsSignal, "CopyROI_SCA", kind=Kind.omitted) + + # do_* executes the process: + do_read_all = Cpt(EpicsSignal, "DoReadAll", kind=Kind.omitted) + do_status_all = Cpt(EpicsSignal, "DoStatusAll", kind=Kind.omitted) + do_read_traces = Cpt(EpicsSignal, "DoReadTraces", kind=Kind.omitted) + + # Statistics + dead_time = Cpt(EpicsSignal, "DeadTime") + idead_time = Cpt(EpicsSignal, "IDeadTime") + max_elapsed_live = Cpt(EpicsSignal, "MaxElapsedLive") + max_elapsed_real = Cpt(EpicsSignal, "MaxElapsedReal") + max_elapsed_trigger_live = Cpt(EpicsSignal, "MaxElapsedTriggerLive") + max_triggers = Cpt(EpicsSignal, "MaxTriggers") + max_events = Cpt(EpicsSignal, "MaxEvents") + max_input_count_rate = Cpt(EpicsSignal, "MaxInputCountRate") + max_output_count_rate = Cpt(EpicsSignal, "MaxOutputCountRate") + + +class EpicsDxpFalconMapping(EpicsDXPMapping): + auto_apply = None + apply = None + nd_array_mode = Cpt(EpicsSignalWithRBV, "NDArrayMode") + + +class Falcon(EpicsDXPFalconMultiElementSystem, EpicsDxpFalconMapping): + ... + + +class xMAP(EpicsDXPMultiElementSystem, EpicsDXPMapping): + # Override signals from EpicsDXPMultiElementSystem, so calling `set`` method + # returns a waitable Status object. Otherwise the Status object is immediately done. + erase_start = Cpt(EpicsSignal, "EraseStart", put_complete=True, trigger_value=1) + start_all = Cpt(EpicsSignal, "StartAll", put_complete=True, trigger_value=1) diff --git a/phoenix_bec/devices/phoenix_falcon.py b/phoenix_bec/devices/phoenix_falcon.py index c762bd1..a5bf878 100644 --- a/phoenix_bec/devices/phoenix_falcon.py +++ b/phoenix_bec/devices/phoenix_falcon.py @@ -57,7 +57,9 @@ from bec_lib.logger import bec_logger from ophyd import Component as Cpt from ophyd import Device, EpicsSignal, EpicsSignalRO, EpicsSignalWithRBV -from ophyd_devices.devices.dxp import Falcon, EpicsMCARecord, EpicsDXPFalcon +#from ophyd_devices.devices.dxp import Falcon, EpicsMCARecord, EpicsDXPFalcon +from dxp import Falcon, EpicsMCARecord, EpicsDXPFalcon + from ophyd_devices.devices.areadetector.plugins import HDF5Plugin_V35 as HDF5Plugin# from ophyd_devices.interfaces.base_classes.psi_detector_base import ( @@ -170,7 +172,8 @@ class FalconSetup(CustomDetectorMixin): # TODO Check if lazy open is needed and wanted! self.parent.hdf5.lazy_open.put(1) self.parent.hdf5.temp_suffix.put("") - # size of queue for number of spectra allowed in the buffer, if too small at high throughput, data is lost + # size of queue for number of spectra allowed in the buffer, + # if too small at high throughput, data is lost self.parent.hdf5.queue_size.put(2000) # Segmentation into Spectra within EPICS, 1 is activate, 0 is deactivate self.parent.nd_array_mode.put(1) diff --git a/phoenix_bec/devices/phoenix_trigger.py b/phoenix_bec/devices/phoenix_trigger.py index 060b2cf..69fe3f6 100644 --- a/phoenix_bec/devices/phoenix_trigger.py +++ b/phoenix_bec/devices/phoenix_trigger.py @@ -232,7 +232,6 @@ class PhoenixTrigger(PSIDetectorBase): if __name__ == "__main__": # Test the PhoenixTrigger class - trigger = PhoenixTrigger(name="trigger", prefix="X07MB-OP2:") trigger.wait_for_connection(all_signals=True) trigger.read() diff --git a/phoenix_bec/devices/phoenix_xmap.py b/phoenix_bec/devices/phoenix_xmap.py index 211c3f9..0a76205 100644 --- a/phoenix_bec/devices/phoenix_xmap.py +++ b/phoenix_bec/devices/phoenix_xmap.py @@ -18,7 +18,9 @@ from ophyd_devices.interfaces.base_classes.psi_detector_base import ( ) from ophyd.mca import EpicsDXP -from ophyd_devices.devices.dxp import xMAP, EpicsMCARecord +#from ophyd_devices.devices.dxp import xMAP, EpicsMCARecord +from dxp import xMAP, EpicsMCARecord + from ophyd_devices.devices.areadetector.plugins import HDF5Plugin_V35 as HDF5Plugin logger = bec_logger.logger