From 6c2ae5c1662154399f0659a79e8a105351668ba3 Mon Sep 17 00:00:00 2001 From: Mohacsi Istvan Date: Fri, 18 Nov 2022 16:19:28 +0100 Subject: [PATCH] Better config --- ophyd_devices/epics/DeviceFactory.py | 47 ++--- ophyd_devices/epics/__init__.py | 10 + ophyd_devices/epics/db/x12sa_database.yml | 175 +++++++++++++++++- .../DelayGeneratorDG645.py | 0 .../{proxies => devices}/InsertionDevice.py | 0 .../epics/{proxies => devices}/SpmBase.py | 0 .../epics/{proxies => devices}/XbpmBase.py | 0 .../epics/{proxies => devices}/__init__.py | 6 + .../epics/{proxies => devices}/mono_dccm.py | 0 .../epics/{proxies => devices}/slits.py | 0 10 files changed, 208 insertions(+), 30 deletions(-) create mode 100644 ophyd_devices/epics/__init__.py rename ophyd_devices/epics/{proxies => devices}/DelayGeneratorDG645.py (100%) rename ophyd_devices/epics/{proxies => devices}/InsertionDevice.py (100%) rename ophyd_devices/epics/{proxies => devices}/SpmBase.py (100%) rename ophyd_devices/epics/{proxies => devices}/XbpmBase.py (100%) rename ophyd_devices/epics/{proxies => devices}/__init__.py (53%) rename ophyd_devices/epics/{proxies => devices}/mono_dccm.py (100%) rename ophyd_devices/epics/{proxies => devices}/slits.py (100%) diff --git a/ophyd_devices/epics/DeviceFactory.py b/ophyd_devices/epics/DeviceFactory.py index bb49122..87c999c 100644 --- a/ophyd_devices/epics/DeviceFactory.py +++ b/ophyd_devices/epics/DeviceFactory.py @@ -8,42 +8,41 @@ Created on Wed Oct 13 17:06:51 2021 import os import yaml from ophyd.ophydobj import OphydObject -from ophyd import EpicsSignal, EpicsSignalRO, EpicsMotor -from ophyd.sim import SynAxis, SynSignal, SynPeriodicSignal -from ophyd.quadem import QuadEM -import pathlib +from devices import * +# #################################################### +# Test connection to beamline devices +# #################################################### +# Current file path path = os.path.dirname(os.path.abspath(__file__)) - -from proxies import * - - -# Load SLS common database +# Load simulated device database fp = open(f"{path}/db/test_database.yml", "r") lut_db = yaml.load(fp, Loader=yaml.Loader) -# Load SLS common database (already in DB) -# fp = open(f"{path}/db/machine_database.yml", "r") -# lut_db = yaml.load(fp, Loader=yaml.Loader) - # Load beamline specific database -bl = os.getenv("BEAMLINE_XNAME", "X12SA") -fp = open(f"{path}/db/{bl.lower()}_database.yml", "r") -lut_db.update(yaml.load(fp, Loader=yaml.Loader)) +bl = os.getenv("BEAMLINE_XNAME", "TESTENV") +if bl!="TESTENV": + fp = open(f"{path}/db/{bl.lower()}_database.yml", "r") + lut_db.update(yaml.load(fp, Loader=yaml.Loader)) def createProxy(name: str, connect=True) -> OphydObject: - """Factory routine to create an ophyd device with a pre-defined schema. + """ Create an ophyd device from its alias + + Factory routine that uses the beamline database to instantiate + instantiate ophyd devices from their alias and pre-defined + configuration parameters. Does nothing if the device is already an OphydObject! """ if issubclass(type(name), OphydObject): return name entry = lut_db[name] + # Yeah, using global namespace cls_candidate = globals()[entry["type"]] - print(f"Device candidate: {cls_candidate}") + #print(f"Class candidate: {cls_candidate}") if issubclass(cls_candidate, OphydObject): ret = cls_candidate(**entry["config"]) @@ -56,7 +55,13 @@ def createProxy(name: str, connect=True) -> OphydObject: if __name__ == "__main__": for key in lut_db: - print("") - dut = createProxy(str(key)) - print(f"{key}\t:\t{dut.read()}") + try: + dut = createProxy(str(key)) + #print(f"{key}\t: {type(dut)}\t{dut.read()}") + print(f"{key}\t: {type(dut)}") + except Exception as ex: + print(ex) + + + diff --git a/ophyd_devices/epics/__init__.py b/ophyd_devices/epics/__init__.py new file mode 100644 index 0000000..d57f5ef --- /dev/null +++ b/ophyd_devices/epics/__init__.py @@ -0,0 +1,10 @@ +from .devices.DelayGeneratorDG645 import DelayGeneratorDG645 +from .devices.slits import SlitH, SlitV +from .devices.XbpmBase import XbpmBase, XbpmCsaxsOp +from .devices.SpmBase import SpmBase +from .devices.InsertionDevice import InsertionDevice + +# Standard ophyd classes +from ophyd import EpicsSignal, EpicsSignalRO, EpicsMotor +from ophyd.sim import SynAxis, SynSignal, SynPeriodicSignal +from ophyd.quadem import QuadEM diff --git a/ophyd_devices/epics/db/x12sa_database.yml b/ophyd_devices/epics/db/x12sa_database.yml index e6d9cfc..6c351d1 100644 --- a/ophyd_devices/epics/db/x12sa_database.yml +++ b/ophyd_devices/epics/db/x12sa_database.yml @@ -565,34 +565,191 @@ led: deviceGroup: monitor status: {enabled: true} type: EpicsSignalRO +fal0: + desc: 'Some scaler...' + acquisition: {schedule: sync} + config: {name: fal0, read_pv: X12SA-ES1-SCALER.S4} + deviceGroup: monitor + status: {enabled: true} + type: EpicsSignalRO +fal1: + desc: 'Some scaler...' + acquisition: {schedule: sync} + config: {name: fal1, read_pv: X12SA-ES1-SCALER.S5} + deviceGroup: monitor + status: {enabled: true} + type: EpicsSignalRO +fal2: + desc: 'Some scaler...' + acquisition: {schedule: sync} + config: {name: fal2, read_pv: X12SA-ES1-SCALER.S6} + deviceGroup: monitor + status: {enabled: true} + type: EpicsSignalRO + +bpm1i: + desc: 'Some VME XBPM...' + acquisition: {schedule: sync} + config: {name: bpm1i, read_pv: X12SA-OP-BPM1:SUM} + deviceGroup: monitor + status: {enabled: true} + type: EpicsSignalRO +bpm1: + desc: 'XBPM 1: Somewhere around mono (VME)' + acquisition: {schedule: sync} + config: {name: bpm1, prefix: 'X12SA-OP-BPM2:'} + deviceGroup: monitor + status: {enabled: true} + type: XbpmCsaxsOp +bpm2i: + desc: 'Some VME XBPM...' + acquisition: {schedule: sync} + config: {name: bpm2i, read_pv: X12SA-OP-BPM2:SUM} + deviceGroup: monitor + status: {enabled: true} + type: EpicsSignalRO +bpm2: + desc: 'XBPM 2: Somewhere around mono (VME)' + acquisition: {schedule: sync} + config: {name: bpm2, prefix: 'X12SA-OP-BPM2:'} + deviceGroup: monitor + status: {enabled: true} + type: XbpmCsaxsOp + bpm3: - desc: 'XBPM 3: White beam before mono (VME)' + desc: 'XBPM 3: White beam AH501 before mono' acquisition: {schedule: sync} - config: {name: bpm3, prefix: 'X12SA-OP-BPM1:'} + config: {name: bpm3, prefix: 'X12SA-OP-BPM3:'} deviceGroup: monitor status: {enabled: true} - type: XbpmCsaxsOp -bpm4: - desc: 'XBPM 4: Somewhere around mono (VME)' + type: QuadEM +bpm3a: + desc: 'XBPM 3: White beam AH501 before mono' acquisition: {schedule: sync} - config: {name: bpm4, prefix: 'X12SA-OP-BPM2:'} + config: {name: bpm3a, read_pv: 'X12SA-OP-BPM3:Current1:MeanValue_RBV'} deviceGroup: monitor status: {enabled: true} - type: XbpmCsaxsOp + type: EpicsSignalRO +bpm3b: + desc: 'XBPM 3: White beam AH501 before mono' + acquisition: {schedule: sync} + config: {name: bpm3b, read_pv: 'X12SA-OP-BPM3:Current2:MeanValue_RBV'} + deviceGroup: monitor + status: {enabled: true} + type: EpicsSignalRO +bpm3c: + desc: 'XBPM 3: White beam AH501 before mono' + acquisition: {schedule: sync} + config: {name: bpm3c, read_pv: 'X12SA-OP-BPM3:Current3:MeanValue_RBV'} + deviceGroup: monitor + status: {enabled: true} + type: EpicsSignalRO +bpm3d: + desc: 'XBPM 3: White beam AH501 before mono' + acquisition: {schedule: sync} + config: {name: bpm3d, read_pv: 'X12SA-OP-BPM3:Current4:MeanValue_RBV'} + deviceGroup: monitor + status: {enabled: true} + type: EpicsSignalRO + +bpm4a: + desc: 'XBPM 4: VME between mono and mirror' + acquisition: {schedule: sync} + config: {name: bpm4a, read_pv: 'X12SA-OP1-SCALER.S2'} + deviceGroup: monitor + status: {enabled: true} + type: EpicsSignalRO +bpm4b: + desc: 'XBPM 4: VME between mono and mirror' + acquisition: {schedule: sync} + config: {name: bpm4b, read_pv: 'X12SA-OP1-SCALER.S3'} + deviceGroup: monitor + status: {enabled: true} + type: EpicsSignalRO +bpm4c: + desc: 'XBPM 4: VME between mono and mirror' + acquisition: {schedule: sync} + config: {name: bpm4c, read_pv: 'X12SA-OP1-SCALER.S4'} + deviceGroup: monitor + status: {enabled: true} + type: EpicsSignalRO +bpm4d: + desc: 'XBPM 4: VME between mono and mirror' + acquisition: {schedule: sync} + config: {name: bpm4d, read_pv: 'X12SA-OP1-SCALER.S5'} + deviceGroup: monitor + status: {enabled: true} + type: EpicsSignalRO bpm5: - desc: 'XBPM 5: Not commissioned' + desc: 'XBPM 5: AH501 past the mirror' acquisition: {schedule: sync} config: {name: bpm5, prefix: 'X12SA-OP-BPM5:'} deviceGroup: monitor status: {enabled: true} type: QuadEM +bpm5a: + desc: 'XBPM 5: AH501 past the mirror' + acquisition: {schedule: sync} + config: {name: bpm5a, read_pv: 'X12SA-OP-BPM5:Current1:MeanValue_RBV'} + deviceGroup: monitor + status: {enabled: true} + type: EpicsSignalRO +bpm5b: + desc: 'XBPM 5: AH501 past the mirror' + acquisition: {schedule: sync} + config: {name: bpm5b, read_pv: 'X12SA-OP-BPM5:Current2:MeanValue_RBV'} + deviceGroup: monitor + status: {enabled: true} + type: EpicsSignalRO +bpm5c: + desc: 'XBPM 5: AH501 past the mirror' + acquisition: {schedule: sync} + config: {name: bpm5c, read_pv: 'X12SA-OP-BPM5:Current3:MeanValue_RBV'} + deviceGroup: monitor + status: {enabled: true} + type: EpicsSignalRO +bpm5d: + desc: 'XBPM 5: AH501 past the mirror' + acquisition: {schedule: sync} + config: {name: bpm5d, read_pv: 'X12SA-OP-BPM5:Current4:MeanValue_RBV'} + deviceGroup: monitor + status: {enabled: true} + type: EpicsSignalRO bpm6: - desc: 'XBPM 6: Not commissioned' + desc: 'XBPM 6: Xbox, not commissioned' acquisition: {schedule: sync} config: {name: bpm6, prefix: 'X12SA-OP-BPM6:'} deviceGroup: monitor status: {enabled: true} type: QuadEM +bpm6a: + desc: 'XBPM 6: Xbox, not commissioned' + acquisition: {schedule: sync} + config: {name: bpm6a, read_pv: 'X12SA-OP-BPM6:Current1:MeanValue_RBV'} + deviceGroup: monitor + status: {enabled: true} + type: EpicsSignalRO +bpm6b: + desc: 'XBPM 6: Xbox, not commissioned' + acquisition: {schedule: sync} + config: {name: bpm6b, read_pv: 'X12SA-OP-BPM6:Current2:MeanValue_RBV'} + deviceGroup: monitor + status: {enabled: true} + type: EpicsSignalRO +bpm6c: + desc: 'XBPM 6: Xbox, not commissioned' + acquisition: {schedule: sync} + config: {name: bpm6c, read_pv: 'X12SA-OP-BPM6:Current3:MeanValue_RBV'} + deviceGroup: monitor + status: {enabled: true} + type: EpicsSignalRO +bpm6d: + desc: 'XBPM 6: Xbox, not commissioned' + acquisition: {schedule: sync} + config: {name: bpm6d, read_pv: 'X12SA-OP-BPM6:Current4:MeanValue_RBV'} + deviceGroup: monitor + status: {enabled: true} + type: EpicsSignalRO ftp: desc: 'Flight tube pressure' acquisition: {schedule: sync} diff --git a/ophyd_devices/epics/proxies/DelayGeneratorDG645.py b/ophyd_devices/epics/devices/DelayGeneratorDG645.py similarity index 100% rename from ophyd_devices/epics/proxies/DelayGeneratorDG645.py rename to ophyd_devices/epics/devices/DelayGeneratorDG645.py diff --git a/ophyd_devices/epics/proxies/InsertionDevice.py b/ophyd_devices/epics/devices/InsertionDevice.py similarity index 100% rename from ophyd_devices/epics/proxies/InsertionDevice.py rename to ophyd_devices/epics/devices/InsertionDevice.py diff --git a/ophyd_devices/epics/proxies/SpmBase.py b/ophyd_devices/epics/devices/SpmBase.py similarity index 100% rename from ophyd_devices/epics/proxies/SpmBase.py rename to ophyd_devices/epics/devices/SpmBase.py diff --git a/ophyd_devices/epics/proxies/XbpmBase.py b/ophyd_devices/epics/devices/XbpmBase.py similarity index 100% rename from ophyd_devices/epics/proxies/XbpmBase.py rename to ophyd_devices/epics/devices/XbpmBase.py diff --git a/ophyd_devices/epics/proxies/__init__.py b/ophyd_devices/epics/devices/__init__.py similarity index 53% rename from ophyd_devices/epics/proxies/__init__.py rename to ophyd_devices/epics/devices/__init__.py index 6539e1e..cc273aa 100644 --- a/ophyd_devices/epics/proxies/__init__.py +++ b/ophyd_devices/epics/devices/__init__.py @@ -3,3 +3,9 @@ from .slits import SlitH, SlitV from .XbpmBase import XbpmBase, XbpmCsaxsOp from .SpmBase import SpmBase from .InsertionDevice import InsertionDevice + +# Standard ophyd classes +from ophyd import EpicsSignal, EpicsSignalRO, EpicsMotor +from ophyd.sim import SynAxis, SynSignal, SynPeriodicSignal +from ophyd.quadem import QuadEM + diff --git a/ophyd_devices/epics/proxies/mono_dccm.py b/ophyd_devices/epics/devices/mono_dccm.py similarity index 100% rename from ophyd_devices/epics/proxies/mono_dccm.py rename to ophyd_devices/epics/devices/mono_dccm.py diff --git a/ophyd_devices/epics/proxies/slits.py b/ophyd_devices/epics/devices/slits.py similarity index 100% rename from ophyd_devices/epics/proxies/slits.py rename to ophyd_devices/epics/devices/slits.py