Feat/areadetector updates

This commit is contained in:
wang_x1 2024-11-07 09:28:08 +01:00
parent 66cbdc2263
commit d4406373a9
4 changed files with 352 additions and 45 deletions

View File

@ -0,0 +1,130 @@
"""AreaDetector Devices
"""
# isort: skip_file
from ophyd import EpicsSignal, EpicsSignalRO, EpicsSignalWithRBV
from ophyd.areadetector import ADComponent as ADCpt
from ophyd.areadetector.cam import (
CamBase as _CamBase,
FileBase as _FileBase,
Andor3DetectorCam as _Andor3DetectorCam,
PilatusDetectorCam as _PilatusDetectorCam,
EigerDetectorCam as _EigerDetectorCam,
ProsilicaDetectorCam as _ProsilicaDetectorCam,
SimDetectorCam as _SimDetectorCam,
URLDetectorCam as _URLDetectorCam,
)
__all__ = [
"CamBase",
"FileBase",
"Andor3DetectorCam",
"EigerDetectorCam",
"PilatusDetectorCam",
"ProsilicaDetectorCam",
"URLDetectorCam",
"AravisDetectorCam",
"PylonDetectorCam",
"VimbaDetectorCam",
]
class CamBase(_CamBase):
pool_max_buffers = None
class FileBase(_FileBase):
file_number_sync = None
file_number_write = None
class Andor3DetectorCam(CamBase, _Andor3DetectorCam):
gate_mode = ADCpt(EpicsSignalWithRBV, "GateMode")
insertion_delay = ADCpt(EpicsSignalWithRBV, "InsertionDelay")
mcp_gain = ADCpt(EpicsSignalWithRBV, "MCPGain")
mcp_intelligate = ADCpt(EpicsSignalWithRBV, "MCPIntelligate")
class EigerDetectorCam(CamBase, _EigerDetectorCam): ...
class PilatusDetectorCam(CamBase, _PilatusDetectorCam): ...
class ProsilicaDetectorCam(CamBase, _ProsilicaDetectorCam): ...
class SimDetectorCam(CamBase, _SimDetectorCam): ...
class URLDetectorCam(CamBase, _URLDetectorCam): ...
class GenICam(CamBase):
frame_rate = ADCpt(EpicsSignalWithRBV, "FrameRate")
frame_rate_enable = ADCpt(EpicsSignalWithRBV, "FrameRateEnable")
trigger_source = ADCpt(EpicsSignalWithRBV, "TriggerSource")
trigger_overlay = ADCpt(EpicsSignalWithRBV, "TriggerOverlay")
trigger_software = ADCpt(EpicsSignal, "TriggerSoftware")
exposure_mode = ADCpt(EpicsSignalWithRBV, "ExposureMode")
exposure_auto = ADCpt(EpicsSignalWithRBV, "ExposureAuto")
gain_auto = ADCpt(EpicsSignalWithRBV, "GainAuto")
pixel_format = ADCpt(EpicsSignalWithRBV, "PixelFormat")
class AravisDetectorCam(GenICam):
ar_convert_pixel_format = ADCpt(EpicsSignalWithRBV, "ARConvertPixelFormat")
ar_shift_dir = ADCpt(EpicsSignalWithRBV, "ARShiftDir")
ar_shift_bits = ADCpt(EpicsSignalWithRBV, "ARShiftBits")
class VimbaDetectorCam(GenICam):
time_stamp_mode = ADCpt(EpicsSignalWithRBV, "TimeStampMode")
unique_id_mode = ADCpt(EpicsSignalWithRBV, "UniqueIdMode")
convert_pixel_format = ADCpt(EpicsSignalWithRBV, "ConvertPixelFormat")
class PylonDetectorCam(GenICam):
time_stamp_mode = ADCpt(EpicsSignalWithRBV, "TimeStampMode")
unique_id_mode = ADCpt(EpicsSignalWithRBV, "UniqueIdMode")
convert_pixel_format = ADCpt(EpicsSignalWithRBV, "ConvertPixelFormat")
convert_bit_align = ADCpt(EpicsSignalWithRBV, "ConvertBitAlign")
convert_shift_bits = ADCpt(EpicsSignalWithRBV, "ConvertShiftBits")
class SLSDetectorCam(CamBase, FileBase):
detector_type = ADCpt(EpicsSignalRO, "DetectorType_RBV")
setting = ADCpt(EpicsSignalWithRBV, "Setting")
delay_time = ADCpt(EpicsSignalWithRBV, "DelayTime")
threshold_energy = ADCpt(EpicsSignalWithRBV, "ThresholdEnergy")
enable_trimbits = ADCpt(EpicsSignalWithRBV, "Trimbits")
bit_depth = ADCpt(EpicsSignalWithRBV, "BitDepth")
num_gates = ADCpt(EpicsSignalWithRBV, "NumGates")
num_cycles = num_images = ADCpt(EpicsSignalWithRBV, "NumCycles")
num_frames = ADCpt(EpicsSignalWithRBV, "NumFrames")
trigger_mode = timing_mode = ADCpt(EpicsSignalWithRBV, "TimingMode")
trigger_software = ADCpt(EpicsSignal, "TriggerSoftware")
high_voltage = ADCpt(EpicsSignalWithRBV, "HighVoltage")
# Receiver and data callback
receiver_mode = ADCpt(EpicsSignalWithRBV, "ReceiverMode")
receiver_stream = ADCpt(EpicsSignalWithRBV, "ReceiverStream")
enable_data = ADCpt(EpicsSignalWithRBV, "UseDataCallback")
missed_packets = ADCpt(EpicsSignalRO, "ReceiverMissedPackets_RBV")
# Direct settings access
setup_file = ADCpt(EpicsSignal, "SetupFile")
load_setup = ADCpt(EpicsSignal, "LoadSetup")
command = ADCpt(EpicsSignal, "Command")
# Mythen 3
counter_mask = ADCpt(EpicsSignalWithRBV, "CounterMask")
counter1_threshold = ADCpt(EpicsSignalWithRBV, "Counter1Threshold")
counter2_threshold = ADCpt(EpicsSignalWithRBV, "Counter2Threshold")
counter3_threshold = ADCpt(EpicsSignalWithRBV, "Counter3Threshold")
gate1_delay = ADCpt(EpicsSignalWithRBV, "Gate1Delay")
gate1_width = ADCpt(EpicsSignalWithRBV, "Gate1Width")
gate2_delay = ADCpt(EpicsSignalWithRBV, "Gate2Delay")
gate2_width = ADCpt(EpicsSignalWithRBV, "Gate2Width")
gate3_delay = ADCpt(EpicsSignalWithRBV, "Gate3Delay")
gate3_width = ADCpt(EpicsSignalWithRBV, "Gate3Width")
# Moench
json_frame_mode = ADCpt(EpicsSignalWithRBV, "JsonFrameMode")
json_detector_mode = ADCpt(EpicsSignalWithRBV, "JsonDetectorMode")

View File

@ -0,0 +1,222 @@
# vi: ts=4 sw=4
"""AreaDetector up-to-date plugins.
.. _areaDetector: http://cars.uchicago.edu/software/epics/areaDetector.html
"""
# This module contains:
# - Classes like `StatsPlugin_V{X}{Y}` that are design to be counterparts to
# AreaDetector verion X.Y.
#
# isort: skip_file
from ophyd import Component as Cpt, Device, EpicsSignal, EpicsSignalRO, EpicsSignalWithRBV
# fmt: off
from ophyd.areadetector.plugins import (
PluginBase, PluginBase_V34,
FilePlugin, FilePlugin_V34,
AttributePlugin, AttributePlugin_V34,
AttrPlotPlugin, AttrPlotPlugin_V34,
CircularBuffPlugin, CircularBuffPlugin_V34,
CodecPlugin, CodecPlugin_V34,
ColorConvPlugin, ColorConvPlugin_V34,
FFTPlugin, FFTPlugin_V34,
HDF5Plugin, HDF5Plugin_V34,
ImagePlugin, ImagePlugin_V34,
JPEGPlugin, JPEGPlugin_V34,
MagickPlugin, MagickPlugin_V34,
NetCDFPlugin, NetCDFPlugin_V34,
NexusPlugin, NexusPlugin_V34,
OverlayPlugin, OverlayPlugin_V34,
PosPlugin, PosPluginPlugin_V34,
PvaPlugin, PvaPlugin_V34,
ProcessPlugin, ProcessPlugin_V34,
ROIPlugin, ROIPlugin_V34,
ROIStatPlugin, ROIStatPlugin_V34,
ROIStatNPlugin, ROIStatNPlugin_V25,
ScatterPlugin, ScatterPlugin_V34,
StatsPlugin, StatsPlugin_V34,
TIFFPlugin, TIFFPlugin_V34,
TimeSeriesPlugin, TimeSeriesPlugin_V34,
TransformPlugin, TransformPlugin_V34,
)
class PluginBase_V35(PluginBase_V34, version=(3, 5), version_of=PluginBase):
codec = Cpt(EpicsSignalRO, "Codec_RBV", string=True)
compressed_size = Cpt(EpicsSignalRO, "CompressedSize_RBV")
def read_configuration(self):
ret = Device.read_configuration(self)
source_plugin = self.source_plugin
if source_plugin:
ret.update(source_plugin.read_configuration())
return ret
def describe_configuration(self):
ret = Device.describe_configuration(self)
source_plugin = self.source_plugin
if source_plugin:
ret.update(source_plugin.describe_configuration())
return ret
class FilePlugin_V35(
PluginBase_V35, FilePlugin_V34, version=(3, 5), version_of=FilePlugin
):
...
class ColorConvPlugin_V35(
PluginBase_V35, ColorConvPlugin_V34, version=(3, 5), version_of=ColorConvPlugin
):
...
class HDF5Plugin_V35(
FilePlugin_V35, HDF5Plugin_V34, version=(3, 5), version_of=HDF5Plugin
):
flush_now = Cpt(
EpicsSignal,
"FlushNow",
string=True,
doc="0=Done 1=Flush")
class ImagePlugin_V35(
PluginBase_V35, ImagePlugin_V34, version=(3, 5), version_of=ImagePlugin
):
...
class JPEGPlugin_V35(
FilePlugin_V35, JPEGPlugin_V34, version=(3, 5), version_of=JPEGPlugin
):
...
class MagickPlugin_V35(
FilePlugin_V35, MagickPlugin_V34, version=(3, 5), version_of=MagickPlugin
):
...
class NetCDFPlugin_V35(
FilePlugin_V35, NetCDFPlugin_V34, version=(3, 5), version_of=NetCDFPlugin
):
...
class NexusPlugin_V35(
FilePlugin_V35, NexusPlugin_V34, version=(3, 5), version_of=NexusPlugin
):
...
class OverlayPlugin_V35(
PluginBase_V35, OverlayPlugin_V34, version=(3, 5), version_of=OverlayPlugin
):
...
class ProcessPlugin_V35(
PluginBase_V35, ProcessPlugin_V34, version=(3, 5), version_of=ProcessPlugin
):
...
class ROIPlugin_V35(
PluginBase_V35, ROIPlugin_V34, version=(3, 5), version_of=ROIPlugin
):
...
class ROIStatPlugin_V35(
PluginBase_V35, ROIStatPlugin_V34, version=(3, 5), version_of=ROIStatPlugin
):
...
class ROIStatNPlugin_V35(ROIStatNPlugin_V25, version=(3, 5), version_of=ROIStatNPlugin):
...
class StatsPlugin_V35(
PluginBase_V35, StatsPlugin_V34, version=(3, 5), version_of=StatsPlugin
):
...
class TIFFPlugin_V35(
FilePlugin_V35, TIFFPlugin_V34, version=(3, 5), version_of=TIFFPlugin
):
...
class TransformPlugin_V35(
PluginBase_V35, TransformPlugin_V34, version=(3, 5), version_of=TransformPlugin
):
...
class PvaPlugin_V35(
PluginBase_V35, PvaPlugin_V34, version=(3, 5), version_of=PvaPlugin
):
...
class FFTPlugin_V35(
PluginBase_V35, FFTPlugin_V34, version=(3, 5), version_of=FFTPlugin
):
...
class ScatterPlugin_V35(
PluginBase_V35, ScatterPlugin_V34, version=(3, 5), version_of=ScatterPlugin
):
...
class PosPluginPlugin_V35(
PluginBase_V35, PosPluginPlugin_V34, version=(3, 5), version_of=PosPlugin
):
...
class CircularBuffPlugin_V35(
PluginBase_V35,
CircularBuffPlugin_V34,
version=(3, 5),
version_of=CircularBuffPlugin
):
...
class AttrPlotPlugin_V35(
PluginBase_V35, AttrPlotPlugin_V34, version=(3, 5), version_of=AttrPlotPlugin
):
...
class TimeSeriesPlugin_V35(
PluginBase_V35, TimeSeriesPlugin_V34, version=(3, 5), version_of=TimeSeriesPlugin
):
...
class CodecPlugin_V35(
PluginBase_V35, CodecPlugin_V34, version=(3, 5), version_of=CodecPlugin
):
blosc_shuffle = Cpt(
EpicsSignalWithRBV, "BloscShuffle", string=True, doc="0=None 1=Byte 2=Bit"
)
class AttributePlugin_V35(
PluginBase_V35, AttributePlugin_V34, version=(3, 5), version_of=AttributePlugin
):
ts_acquiring = None
ts_control = None
ts_current_point = None
ts_num_points = None
ts_read = None

View File

@ -1,45 +0,0 @@
from ophyd import ADComponent as ADCpt
from ophyd import CamBase, DetectorBase, EpicsSignal, EpicsSignalRO, EpicsSignalWithRBV
from ophyd.areadetector.plugins import FileBase
class SLSDetectorCam(CamBase, FileBase):
detector_type = ADCpt(EpicsSignalRO, "DetectorType_RBV")
setting = ADCpt(EpicsSignalWithRBV, "Setting")
delay_time = ADCpt(EpicsSignalWithRBV, "DelayTime")
threshold_energy = ADCpt(EpicsSignalWithRBV, "ThresholdEnergy")
enable_trimbits = ADCpt(EpicsSignalWithRBV, "Trimbits")
bit_depth = ADCpt(EpicsSignalWithRBV, "BitDepth")
num_gates = ADCpt(EpicsSignalWithRBV, "NumGates")
num_cycles = ADCpt(EpicsSignalWithRBV, "NumCycles")
num_frames = ADCpt(EpicsSignalWithRBV, "NumFrames")
timing_mode = ADCpt(EpicsSignalWithRBV, "TimingMode")
trigger_software = ADCpt(EpicsSignal, "TriggerSoftware")
high_voltage = ADCpt(EpicsSignalWithRBV, "HighVoltage")
# Receiver and data callback
receiver_mode = ADCpt(EpicsSignalWithRBV, "ReceiverMode")
receiver_stream = ADCpt(EpicsSignalWithRBV, "ReceiverStream")
enable_data = ADCpt(EpicsSignalWithRBV, "UseDataCallback")
missed_packets = ADCpt(EpicsSignalRO, "ReceiverMissedPackets_RBV")
# Direct settings access
setup_file = ADCpt(EpicsSignal, "SetupFile")
load_setup = ADCpt(EpicsSignal, "LoadSetup")
command = ADCpt(EpicsSignal, "Command")
# Mythen 3
counter_mask = ADCpt(EpicsSignalWithRBV, "CounterMask")
counter1_threshold = ADCpt(EpicsSignalWithRBV, "Counter1Threshold")
counter2_threshold = ADCpt(EpicsSignalWithRBV, "Counter2Threshold")
counter3_threshold = ADCpt(EpicsSignalWithRBV, "Counter3Threshold")
gate1_delay = ADCpt(EpicsSignalWithRBV, "Gate1Delay")
gate1_width = ADCpt(EpicsSignalWithRBV, "Gate1Width")
gate2_delay = ADCpt(EpicsSignalWithRBV, "Gate2Delay")
gate2_width = ADCpt(EpicsSignalWithRBV, "Gate2Width")
gate3_delay = ADCpt(EpicsSignalWithRBV, "Gate3Delay")
gate3_width = ADCpt(EpicsSignalWithRBV, "Gate3Width")
# Moench
json_frame_mode = ADCpt(EpicsSignalWithRBV, "JsonFrameMode")
json_detector_mode = ADCpt(EpicsSignalWithRBV, "JsonDetectorMode")
class SLSDetector(DetectorBase):
cam = ADCpt(SLSDetectorCam, "cam1:")