diff --git a/phoenix_bec/bec_ipython_client/startup/post_startup.py b/phoenix_bec/bec_ipython_client/startup/post_startup.py
index 5e5a7b3..7d21dc6 100644
--- a/phoenix_bec/bec_ipython_client/startup/post_startup.py
+++ b/phoenix_bec/bec_ipython_client/startup/post_startup.py
@@ -130,7 +130,6 @@ def ph_add_falcon(line):
## enddef
-
@register_line_magic
def ph_load_falcon(line):
"""
@@ -144,6 +143,28 @@ def ph_load_falcon(line):
print("...... %ph_load_config ... to reload phoenix default configuration")
+@register_line_magic
+def ph_add_xmap(line):
+ """
+ magic to add falcon to existing configuration
+ """
+ t0 = tt.time()
+ phoenix.add_xmap()
+ print("elapsed time:", tt.time() - t0)
+
+
+## enddef
+
+@register_line_magic
+def ph_load_xmap(line):
+ """
+ magic to load falcon as sole detector
+ """
+ t0 = tt.time()
+ phoenix.load_xmap()
+ print("elapsed time:", tt.time() - t0)
+
+
@register_line_magic
def ph_create_base_config(line):
"""
diff --git a/phoenix_bec/device_configs/current_devices_tmp.yaml b/phoenix_bec/device_configs/current_devices_tmp.yaml
index 3bc7f68..aeb31f0 100644
--- a/phoenix_bec/device_configs/current_devices_tmp.yaml
+++ b/phoenix_bec/device_configs/current_devices_tmp.yaml
@@ -8,6 +8,7 @@ PH_TTL:
- phoenix
- TTL Trigger
- phoenix_devices.yaml
+ - class PhoenixTrigger
onFailure: buffer
enabled: true
readoutPriority: monitored
@@ -29,7 +30,8 @@ PH_Dummy:
name: 'Dummy_Detector_PSI_Detector'
deviceTags:
- phoenix
- - phoenix_devices.yamllass
+ - phoenix_devices.yaml
+ - class Dummy_PSIDetector
- reads channel X07MB-PC-PSCAN.P-P0D0
- Dummy class to test PSI detector c from DAQ GUI
onFailure: buffer
@@ -53,7 +55,8 @@ ScanX:
prefix: 'X07MB-ES-MA1:ScanX'
deviceTags:
- ES-MA1.ScanX
- - phoenix_bec/device_configs/phoenix_devices.yaml
+ - phoenix_devices.yaml
+ - class EpicsMotor
onFailure: retry
enabled: true
readOnly: false
@@ -66,7 +69,8 @@ ScanY:
prefix: 'X07MB-ES-MA1:ScanY'
deviceTags:
- ES-MA1.ScanY
- - phoenix_bec/device_configs/phoenix_devices.yaml
+ - phoenix_devices.yaml
+ - class EpicsMotor
onFailure: retry
enabled: true
readOnly: false
@@ -86,7 +90,8 @@ SAI_07_MEAN:
read_pv: 'X07MB-OP2-SAI_07:MEAN'
deviceTags:
- PHOENIX
- - phoenix_bec/device_configs/phoenix_devices.yaml
+ - phoenix_devices.yaml
+ - class EpicsSignalRO
onFailure: buffer
enabled: true
readOnly: true
@@ -101,7 +106,8 @@ SAI_08_MEAN:
read_pv: 'X07MB-OP2-SAI_08:MEAN'
deviceTags:
- PHOENIX
- - phoenix_bec/device_configs/phoenix_devices.yaml
+ - phoenix_devices.yaml
+ - class EpicsSignalRO
onFailure: buffer
enabled: true
readOnly: true
@@ -110,304 +116,3 @@ SAI_08_MEAN:
#
# END OF STANDARD CONFIG
#
-
-#
-# falcon without hdf5
-#
-falcon_hdf5:
- description: Falcon detector x-ray fluoresence with hdf5 plugin from device class phoenix_bec.devices. falcon_phoenix.FalconPhoenix
- deviceClass: phoenix_bec.devices.falcon_phoenix.FalconPhoenix
- deviceConfig:
- prefix: 'X07MB-SITORO:'
- deviceTags:
- - phoenix
- - falcon
- - with hdf5
- - phoenix_falcon.yaml
- onFailure: buffer
- enabled: true
- readoutPriority: async
- softwareTrigger: false
-#
-# END FALCON with HDF5
-#
-#
-# falcon without hdf5
-#
-falcon_hdf5:
- description: Falcon detector x-ray fluoresence with hdf5 plugin from device class phoenix_bec.devices. falcon_phoenix.FalconPhoenix
- deviceClass: phoenix_bec.devices.falcon_phoenix.FalconPhoenix
- deviceConfig:
- prefix: 'X07MB-SITORO:'
- deviceTags:
- - phoenix
- - falcon
- - with hdf5
- - phoenix_falcon.yaml
- onFailure: buffer
- enabled: true
- readoutPriority: async
- softwareTrigger: false
-#
-# END FALCON with HDF5
-#
-#
-# falcon without hdf5
-#
-falcon_hdf5:
- description: Falcon detector x-ray fluoresence with hdf5 plugin from device class phoenix_bec.devices. falcon_phoenix.FalconPhoenix
- deviceClass: phoenix_bec.devices.falcon_phoenix.FalconPhoenix
- deviceConfig:
- prefix: 'X07MB-SITORO:'
- deviceTags:
- - phoenix
- - falcon
- - with hdf5
- - phoenix_falcon.yaml
- onFailure: buffer
- enabled: true
- readoutPriority: async
- softwareTrigger: false
-#
-# END FALCON with HDF5
-#
-#
-# falcon without hdf5
-#
-falcon_hdf5:
- description: Falcon detector x-ray fluoresence with hdf5 plugin from device class phoenix_bec.devices. falcon_phoenix.FalconPhoenix
- deviceClass: phoenix_bec.devices.falcon_phoenix.FalconPhoenix
- deviceConfig:
- prefix: 'X07MB-SITORO:'
- deviceTags:
- - phoenix
- - falcon
- - with hdf5
- - phoenix_falcon.yaml
- onFailure: buffer
- enabled: true
- readoutPriority: async
- softwareTrigger: false
-#
-# END FALCON with HDF5
-#
-#
-# falcon without hdf5
-#
-falcon_hdf5:
- description: Falcon detector x-ray fluoresence with hdf5 plugin from device class phoenix_bec.devices. falcon_phoenix.FalconPhoenix
- deviceClass: phoenix_bec.devices.falcon_phoenix.FalconPhoenix
- deviceConfig:
- prefix: 'X07MB-SITORO:'
- deviceTags:
- - phoenix
- - falcon
- - with hdf5
- - phoenix_falcon.yaml
- onFailure: buffer
- enabled: true
- readoutPriority: async
- softwareTrigger: false
-#
-# END FALCON with HDF5
-#
-#
-# falcon without hdf5
-#
-falcon_hdf5:
- description: Falcon detector x-ray fluoresence with hdf5 plugin from device class phoenix_bec.devices. falcon_phoenix.FalconPhoenix
- deviceClass: phoenix_bec.devices.falcon_phoenix.FalconPhoenix
- deviceConfig:
- prefix: 'X07MB-SITORO:'
- deviceTags:
- - phoenix
- - falcon
- - with hdf5
- - phoenix_falcon.yaml
- onFailure: buffer
- enabled: true
- readoutPriority: async
- softwareTrigger: false
-#
-# END FALCON with HDF5
-#
-#
-# falcon without hdf5
-#
-falcon_hdf5:
- description: Falcon detector x-ray fluoresence with hdf5 plugin from device class phoenix_bec.devices. falcon_phoenix.FalconPhoenix
- deviceClass: phoenix_bec.devices.falcon_phoenix.FalconPhoenix
- deviceConfig:
- prefix: 'X07MB-SITORO:'
- deviceTags:
- - phoenix
- - falcon
- - with hdf5
- - phoenix_falcon.yaml
- onFailure: buffer
- enabled: true
- readoutPriority: async
- softwareTrigger: false
-#
-# END FALCON with HDF5
-#
-#
-# falcon without hdf5
-#
-falcon_hdf5:
- description: Falcon detector x-ray fluoresence with hdf5 plugin from device class phoenix_bec.devices. falcon_phoenix.FalconPhoenix
- deviceClass: phoenix_bec.devices.falcon_phoenix.FalconPhoenix
- deviceConfig:
- prefix: 'X07MB-SITORO:'
- deviceTags:
- - phoenix
- - falcon
- - with hdf5
- - phoenix_falcon.yaml
- onFailure: buffer
- enabled: true
- readoutPriority: async
- softwareTrigger: false
-#
-# END FALCON with HDF5
-#
-#
-# falcon without hdf5
-#
-falcon_hdf5:
- description: Falcon detector x-ray fluoresence with hdf5 plugin from device class phoenix_bec.devices. falcon_phoenix.FalconPhoenix
- deviceClass: phoenix_bec.devices.falcon_phoenix.FalconPhoenix
- deviceConfig:
- prefix: 'X07MB-SITORO:'
- deviceTags:
- - phoenix
- - falcon
- - with hdf5
- - phoenix_falcon.yaml
- onFailure: buffer
- enabled: true
- readoutPriority: async
- softwareTrigger: false
-#
-# END FALCON with HDF5
-#
-#
-# falcon without hdf5
-#
-falcon_hdf5:
- description: Falcon detector x-ray fluoresence with hdf5 plugin from device class phoenix_bec.devices. falcon_phoenix.FalconPhoenix
- deviceClass: phoenix_bec.devices.falcon_phoenix.FalconPhoenix
- deviceConfig:
- prefix: 'X07MB-SITORO:'
- deviceTags:
- - phoenix
- - falcon
- - with hdf5
- - phoenix_falcon.yaml
- onFailure: buffer
- enabled: true
- readoutPriority: async
- softwareTrigger: false
-#
-# END FALCON with HDF5
-#
-#
-# falcon without hdf5
-#
-falcon_hdf5:
- description: Falcon detector x-ray fluoresence with hdf5 plugin from device class phoenix_bec.devices. falcon_phoenix.FalconPhoenix
- deviceClass: phoenix_bec.devices.falcon_phoenix.FalconPhoenix
- deviceConfig:
- prefix: 'X07MB-SITORO:'
- deviceTags:
- - phoenix
- - falcon
- - with hdf5
- - phoenix_falcon.yaml
- onFailure: buffer
- enabled: true
- readoutPriority: async
- softwareTrigger: false
-#
-# END FALCON with HDF5
-#
-#
-# falcon without hdf5
-#
-falcon_hdf5:
- description: Falcon detector x-ray fluoresence with hdf5 plugin from device class phoenix_bec.devices. falcon_phoenix.FalconPhoenix
- deviceClass: phoenix_bec.devices.falcon_phoenix.FalconPhoenix
- deviceConfig:
- prefix: 'X07MB-SITORO:'
- deviceTags:
- - phoenix
- - falcon
- - with hdf5
- - phoenix_falcon.yaml
- onFailure: buffer
- enabled: true
- readoutPriority: async
- softwareTrigger: false
-#
-# END FALCON with HDF5
-#
-#
-# falcon without hdf5
-#
-falcon_hdf5:
- description: Falcon detector x-ray fluoresence with hdf5 plugin from device class phoenix_bec.devices. falcon_phoenix.FalconPhoenix
- deviceClass: phoenix_bec.devices.falcon_phoenix.FalconPhoenix
- deviceConfig:
- prefix: 'X07MB-SITORO:'
- deviceTags:
- - phoenix
- - falcon
- - with hdf5
- - phoenix_falcon.yaml
- onFailure: buffer
- enabled: true
- readoutPriority: async
- softwareTrigger: false
-#
-# END FALCON with HDF5
-#
-#
-# falcon without hdf5
-#
-falcon_hdf5:
- description: Falcon detector x-ray fluoresence with hdf5 plugin from device class phoenix_bec.devices. falcon_phoenix.FalconPhoenix
- deviceClass: phoenix_bec.devices.falcon_phoenix.FalconPhoenix
- deviceConfig:
- prefix: 'X07MB-SITORO:'
- deviceTags:
- - phoenix
- - falcon
- - with hdf5
- - phoenix_falcon.yaml
- onFailure: buffer
- enabled: true
- readoutPriority: async
- softwareTrigger: false
-#
-# END FALCON with HDF5
-#
-#
-# falcon without hdf5
-#
-falcon_hdf5:
- description: Falcon detector x-ray fluoresence with hdf5 plugin from device class phoenix_bec.devices. falcon_phoenix.FalconPhoenix
- deviceClass: phoenix_bec.devices.falcon_phoenix.FalconPhoenix
- deviceConfig:
- prefix: 'X07MB-SITORO:'
- deviceTags:
- - phoenix
- - falcon
- - with hdf5
- - phoenix_falcon.yaml
- onFailure: buffer
- enabled: true
- readoutPriority: async
- softwareTrigger: false
-#
-# END FALCON with HDF5
-#
\ No newline at end of file
diff --git a/phoenix_bec/device_configs/phoenix_devices.yaml b/phoenix_bec/device_configs/phoenix_devices.yaml
index d10686e..aeb31f0 100644
--- a/phoenix_bec/device_configs/phoenix_devices.yaml
+++ b/phoenix_bec/device_configs/phoenix_devices.yaml
@@ -8,6 +8,7 @@ PH_TTL:
- phoenix
- TTL Trigger
- phoenix_devices.yaml
+ - class PhoenixTrigger
onFailure: buffer
enabled: true
readoutPriority: monitored
@@ -29,7 +30,8 @@ PH_Dummy:
name: 'Dummy_Detector_PSI_Detector'
deviceTags:
- phoenix
- - phoenix_devices.yamllass
+ - phoenix_devices.yaml
+ - class Dummy_PSIDetector
- reads channel X07MB-PC-PSCAN.P-P0D0
- Dummy class to test PSI detector c from DAQ GUI
onFailure: buffer
@@ -53,7 +55,8 @@ ScanX:
prefix: 'X07MB-ES-MA1:ScanX'
deviceTags:
- ES-MA1.ScanX
- - phoenix_bec/device_configs/phoenix_devices.yaml
+ - phoenix_devices.yaml
+ - class EpicsMotor
onFailure: retry
enabled: true
readOnly: false
@@ -66,7 +69,8 @@ ScanY:
prefix: 'X07MB-ES-MA1:ScanY'
deviceTags:
- ES-MA1.ScanY
- - phoenix_bec/device_configs/phoenix_devices.yaml
+ - phoenix_devices.yaml
+ - class EpicsMotor
onFailure: retry
enabled: true
readOnly: false
@@ -86,7 +90,8 @@ SAI_07_MEAN:
read_pv: 'X07MB-OP2-SAI_07:MEAN'
deviceTags:
- PHOENIX
- - phoenix_bec/device_configs/phoenix_devices.yaml
+ - phoenix_devices.yaml
+ - class EpicsSignalRO
onFailure: buffer
enabled: true
readOnly: true
@@ -101,7 +106,8 @@ SAI_08_MEAN:
read_pv: 'X07MB-OP2-SAI_08:MEAN'
deviceTags:
- PHOENIX
- - phoenix_bec/device_configs/phoenix_devices.yaml
+ - phoenix_devices.yaml
+ - class EpicsSignalRO
onFailure: buffer
enabled: true
readOnly: true
diff --git a/phoenix_bec/device_configs/phoenix_falcon.yaml b/phoenix_bec/device_configs/phoenix_falcon.yaml
index 2edecc1..6344a3d 100644
--- a/phoenix_bec/device_configs/phoenix_falcon.yaml
+++ b/phoenix_bec/device_configs/phoenix_falcon.yaml
@@ -2,9 +2,9 @@
#
# falcon without hdf5
#
-falcon_hdf5:
+falcon:
description: Falcon detector x-ray fluoresence with hdf5 plugin from device class phoenix_bec.devices. falcon_phoenix.FalconPhoenix
- deviceClass: phoenix_bec.devices.falcon_phoenix.FalconPhoenix
+ deviceClass: phoenix_bec.devices.phoenix_falcon.FalconPhoenix
deviceConfig:
prefix: 'X07MB-SITORO:'
deviceTags:
@@ -12,6 +12,8 @@ falcon_hdf5:
- falcon
- with hdf5
- phoenix_falcon.yaml
+ - class FalconPhoenix
+ - file:phoenix_falcon.py
onFailure: buffer
enabled: true
readoutPriority: async
diff --git a/phoenix_bec/device_configs/phoenix_falcon_backup.yaml b/phoenix_bec/device_configs/phoenix_falcon_backup.yaml
new file mode 100644
index 0000000..2edecc1
--- /dev/null
+++ b/phoenix_bec/device_configs/phoenix_falcon_backup.yaml
@@ -0,0 +1,21 @@
+
+#
+# falcon without hdf5
+#
+falcon_hdf5:
+ description: Falcon detector x-ray fluoresence with hdf5 plugin from device class phoenix_bec.devices. falcon_phoenix.FalconPhoenix
+ deviceClass: phoenix_bec.devices.falcon_phoenix.FalconPhoenix
+ deviceConfig:
+ prefix: 'X07MB-SITORO:'
+ deviceTags:
+ - phoenix
+ - falcon
+ - with hdf5
+ - phoenix_falcon.yaml
+ onFailure: buffer
+ enabled: true
+ readoutPriority: async
+ softwareTrigger: false
+#
+# END FALCON with HDF5
+#
\ No newline at end of file
diff --git a/phoenix_bec/device_configs/phoenix_xmap.yaml b/phoenix_bec/device_configs/phoenix_xmap.yaml
index bb26a6a..333d26e 100644
--- a/phoenix_bec/device_configs/phoenix_xmap.yaml
+++ b/phoenix_bec/device_configs/phoenix_xmap.yaml
@@ -2,16 +2,17 @@
# Configuration XMAP without hdf5
#
-xmap_nohdf5:
- description: XMAP detector x-ray fluoresence II
- deviceClass: phoenix_bec.devices.xmap_phoenix_no_hdf5.XMAPPhoenix
+xmap:
+ description: XMAP detector x-ray fluoresence
+ deviceClass: phoenix_bec.devices.phoenix_xmap.XMAPPhoenix
deviceConfig:
prefix: 'X07MB-XMAP:'
deviceTags:
- phoenix
- xmap
- - no hdf5
- phoenix_bec/device_configs/phoenix_xmap.yaml
+ - class XMAPPhoenix
+ - file phoenix_xmap
onFailure: buffer
enabled: true
readoutPriority: async
diff --git a/phoenix_bec/devices/device_list.md b/phoenix_bec/devices/device_list.md
index 28fbc95..4b8d1bd 100644
--- a/phoenix_bec/devices/device_list.md
+++ b/phoenix_bec/devices/device_list.md
@@ -1,6 +1,6 @@
// This file was autogenerated. Do not edit it manually.
## Device List
-### phoenix_bec
+### phoenix_bec
| Device | Documentation | Module |
| :----- | :------------- | :------ |
| Dummy_PSIDetector |
Abstract base class for SLS detectors
Class attributes:
custom_prepare_cls (object): class for custom prepare logic (BL specific)
Args:
prefix (str): EPICS PV prefix for component (optional)
name (str): name of the device, as will be reported via read()
kind (str): member of class 'ophydobj.Kind', defaults to Kind.normal
omitted -> reado_PSIDetectorBase
| [phoenix_bec.devices.dummy_devices](https://gitlab.psi.ch/bec/phoenix_bec/-/blob/main/phoenix_bec/devices/dummy_devices.py) |
@@ -12,7 +12,7 @@
| FalconPhoenix |
Falcon detector for phoenix
custom_prepare_cls (XMAPSetu
custom_prepare_cls (XMAPSetup) : Custom detector setup class for cSAXS,
inherits from CustomDetectorMixin
in __init__ of PSIDetecor base
PSIDetectorBase.set_min_readout (float) : Minimum readout time for the detector
dxp (EpicsDXPXMAP) : DXP parameters for XMAP detector
mca (EpicsMCARecord) : MCA parameters for XMAP detector
hdf5 (XMAPHDF5Plugins) : HDF5 parameters for XMAP detector
MIN_READOUT (float) : Minimum readout time for the detector
| [phoenix_bec.devices.falcon_phoenix_no_hdf5](https://gitlab.psi.ch/bec/phoenix_bec/-/blob/main/phoenix_bec/devices/falcon_phoenix_no_hdf5.py) |
| PhoenixTrigger |
Class for PHOENIX TTL hardware trigger: 'X07MB-OP2:'
This device is used to trigger communicate with an ADC card
that creates TTL signals to trigger cameras and detectors at Phoenix.
| [phoenix_bec.devices.phoenix_trigger](https://gitlab.psi.ch/bec/phoenix_bec/-/blob/main/phoenix_bec/devices/phoenix_trigger.py) |
| ROI | | [phoenix_bec.devices.sitoro](https://gitlab.psi.ch/bec/phoenix_bec/-/blob/main/phoenix_bec/devices/sitoro.py) |
-| SitoroEpicsDXP | All high-level DXP parameters for each channel | [phoenix_bec.devices.sitoro](https://gitlab.psi.ch/bec/phoenix_bec/-/blob/main/phoenix_bec/devices/sitoro.py) |
+| SitoroEpicsDXP | All high-level DXP parameters for each channel | [phoenix_bec.devices.sitoro](https://gitlab.psi.ch/bec/phoenix_bec/-/blob/maiself.file_devices_tmn/phoenix_bec/devices/sitoro.py) |
| SitoroEpicsDXP_OLD |
DXP parameters for Sitoro detector
Base class to map EPICS PVs from DXP parameters to ophyd signals.
| [phoenix_bec.devices.sitoro_phoenix](https://gitlab.psi.ch/bec/phoenix_bec/-/blob/main/phoenix_bec/devices/sitoro_phoenix.py) |
| SitoroEpicsDXPBaseSystem | | [phoenix_bec.devices.sitoro](https://gitlab.psi.ch/bec/phoenix_bec/-/blob/main/phoenix_bec/devices/sitoro.py) |
| SitoroEpicsDXPLowLevel | | [phoenix_bec.devices.sitoro](https://gitlab.psi.ch/bec/phoenix_bec/-/blob/main/phoenix_bec/devices/sitoro.py) |
diff --git a/phoenix_bec/devices/dummy_devices.py b/phoenix_bec/devices/dummy_devices.py
index 05bcb79..c655718 100644
--- a/phoenix_bec/devices/dummy_devices.py
+++ b/phoenix_bec/devices/dummy_devices.py
@@ -297,7 +297,7 @@ class SetupDummy(CustomDetectorMixin):
class Dummy_PSIDetector(PSIDetectorBase):
"""
- Abstract base class for SLS detectors
+ Abstract base class for SLS detasyn_pipeline_configectors
Class attributes:
custom_prepare_cls (object): class for custom prepare logic (BL specific)
diff --git a/phoenix_bec/devices/falcon_csaxs_original.py b/phoenix_bec/devices/obsolete/falcon_csaxs_original.py
similarity index 100%
rename from phoenix_bec/devices/falcon_csaxs_original.py
rename to phoenix_bec/devices/obsolete/falcon_csaxs_original.py
diff --git a/phoenix_bec/devices/falcon_phoenix.py b/phoenix_bec/devices/obsolete/falcon_phoenix_backup.py
similarity index 100%
rename from phoenix_bec/devices/falcon_phoenix.py
rename to phoenix_bec/devices/obsolete/falcon_phoenix_backup.py
diff --git a/phoenix_bec/devices/falcon_phoenix_no_hdf5.py b/phoenix_bec/devices/obsolete/falcon_phoenix_no_hdf5.py
similarity index 100%
rename from phoenix_bec/devices/falcon_phoenix_no_hdf5.py
rename to phoenix_bec/devices/obsolete/falcon_phoenix_no_hdf5.py
diff --git a/phoenix_bec/devices/sitoro.py b/phoenix_bec/devices/obsolete/sitoro.py
similarity index 100%
rename from phoenix_bec/devices/sitoro.py
rename to phoenix_bec/devices/obsolete/sitoro.py
diff --git a/phoenix_bec/devices/sitoro_phoenix.py b/phoenix_bec/devices/obsolete/sitoro_phoenix.py
similarity index 99%
rename from phoenix_bec/devices/sitoro_phoenix.py
rename to phoenix_bec/devices/obsolete/sitoro_phoenix.py
index 20802b0..01244bc 100644
--- a/phoenix_bec/devices/sitoro_phoenix.py
+++ b/phoenix_bec/devices/obsolete/sitoro_phoenix.py
@@ -65,7 +65,7 @@ from ophyd import Device, EpicsSignal, EpicsSignalRO, EpicsSignalWithRBV
# import ophyd.mca as Mca
-from .sitoro import (
+from ..sitoro import (
SitoroEpicsMCARecord,
SitoroEpicsMCA,
SitoroEpicsMCAReadNotify,
diff --git a/phoenix_bec/devices/xmap_phoenix_no_hdf5.py b/phoenix_bec/devices/obsolete/xmap_phoenix_no_hdf5.py
similarity index 100%
rename from phoenix_bec/devices/xmap_phoenix_no_hdf5.py
rename to phoenix_bec/devices/obsolete/xmap_phoenix_no_hdf5.py
diff --git a/phoenix_bec/devices/phoenix_falcon.py b/phoenix_bec/devices/phoenix_falcon.py
new file mode 100644
index 0000000..f4c3ab0
--- /dev/null
+++ b/phoenix_bec/devices/phoenix_falcon.py
@@ -0,0 +1,365 @@
+"""
+Implementation for falcon at PHOENIX, derived from
+implementation on csaxs (file falcon_csaxs.py)
+
+17.10.2024 try to streamline implementation with mca record
+
+
+Differences to implement
+
+1) we consider EPICS initialization as standard implementaion,
+ so no reinitialization when bec device is initrialized ... DONE ...
+
+2) in EpicsDXPFalcon(Device) add ICR and OCR for individual detectors
+
+3) can we make this generic to make it suited for both falcon and XMAP ?
+
+3) make easy switching between mca spectra an mca mapping
+
+fix defiend relation bwetween variables and names used here for example DONE
+
+ aquiring is currently called 'state' --> should be renamed to aquiring
+ Currently state = Cpt(EpicsSignal, "Acquiring")
+ should be acquiring = Cpt(EpicsSignal, "Acquiring")
+
+
+ hdf5 = Cpt(FalconHDF5Plugins, "HDF1:")
+
+def arm_aquisition
+
+ raise FalconTimeoutError(
+ f"Failed to arm the acquisition. Detector state {signal_conditions[0][0]}"
+ )
+
+
+
+CHANGES LOG and
+
+ System as taken from cSAXS some times works for one element need about 7 second
+ There seem to be still serious timout issues
+
+ changes log
+ TIMEOUT_FOR_SIGNALs from 5 to 10
+
+
+
+
+"""
+
+import enum
+import os
+import threading
+import time
+
+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.areadetector.plugins import HDF5Plugin_V35 as HDF5Plugin
+
+from ophyd_devices.interfaces.base_classes.psi_detector_base import (
+ CustomDetectorMixin,
+ PSIDetectorBase,
+)
+
+logger = bec_logger.logger
+
+
+class FalconError(Exception):
+ """Base class for exceptions in this module."""
+
+
+class FalconTimeoutError(FalconError):
+ """Raised when the Falcon does not respond in time."""
+
+
+class DetectorState(enum.IntEnum):
+ """Detector states for Falcon detector"""
+
+ DONE = 0
+ ACQUIRING = 1
+
+
+class TriggerSource(enum.IntEnum):
+ """Trigger source for Falcon detector"""
+
+ USER = 0
+ GATE = 1
+ SYNC = 2
+
+
+class MappingSource(enum.IntEnum):
+ """Mapping source for Falcon detector"""
+
+ SPECTRUM = 0
+ MAPPING = 1
+
+
+class FalconSetup(CustomDetectorMixin):
+ """
+ Falcon setup class for Phoenix
+
+ Parent class: CustomDetectorMixin
+
+ """
+
+ def __init__(self, *args, parent: Device = None, **kwargs) -> None:
+ super().__init__(*args, parent=parent, **kwargs)
+ self._lock = threading.RLock()
+
+ def on_init(self) -> None:
+ """Initialize Falcon detector"""
+ self.initialize_default_parameter()
+ self.initialize_detector()
+ self.initialize_detector_backend()
+
+ def initialize_default_parameter(self) -> None:
+ """
+ Set default parameters for Falcon
+
+ This will set:
+ - readout (float): readout time in seconds
+ - value_pixel_per_buffer (int): number of spectra in buffer of Falcon Sitoro
+
+ """
+ # self.parent.value_pixel_per_buffer = 20
+ self.update_readout_time()
+
+ def update_readout_time(self) -> None:
+ """Set readout time for Eiger9M detector"""
+ readout_time = (
+ self.parent.scaninfo.readout_time
+ if hasattr(self.parent.scaninfo, "readout_time")
+ else self.parent.MIN_READOUT
+ )
+ self.parent.readout_time = max(readout_time, self.parent.MIN_READOUT)
+
+ def initialize_detector(self) -> None:
+ """Initialize Falcon detector"""
+
+ pass
+
+ """
+ THIS IS THE OLD CSACS CODE. uncomment for now, as we consider EPICS as the boss
+ for initialization
+
+ self.stop_detector()
+ self.stop_detector_backend()
+
+ self.set_trigger(
+ mapping_mode=MappingSource.MAPPING, trigger_source=TriggerSource.GATE, ignore_gate=0
+ )
+ # 1 Realtime
+ self.parent.preset_mode.put(1)
+ # 0 Normal, 1 Inverted
+ self.parent.input_logic_polarity.put(0)
+ # 0 Manual 1 Auto
+ self.parent.auto_pixels_per_buffer.put(0)
+ # Sets the number of pixels/spectra in the buffer
+ self.parent.pixels_per_buffer.put(self.parent.value_pixel_per_buffer)
+ """
+
+ def initialize_detector_backend(self) -> None:
+ """Initialize the detector backend for Falcon."""
+ self.parent.hdf5.enable.put(1)
+ # file location of h5 layout for cSAXS
+ self.parent.hdf5.xml_file_name.put("layout.xml")
+ # 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
+ 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)
+
+ def on_stage(self) -> None:
+ """Prepare detector and backend for acquisition"""
+ self.prepare_detector()
+ self.prepare_data_backend()
+ self.publish_file_location(done=False, successful=False)
+ self.arm_acquisition()
+
+ def prepare_detector(self) -> None:
+ """Prepare detector for acquisition"""
+ self.set_trigger(
+ mapping_mode=MappingSource.MAPPING, trigger_source=TriggerSource.GATE, ignore_gate=0
+ )
+ self.parent.preset_real.put(self.parent.scaninfo.exp_time)
+ self.parent.pixels_per_run.put(
+ int(self.parent.scaninfo.num_points * self.parent.scaninfo.frames_per_trigger)
+ )
+
+ def prepare_data_backend(self) -> None:
+ """Prepare data backend for acquisition"""
+ self.parent.filepath.set(
+ self.parent.filewriter.compile_full_filename(f"{self.parent.name}.h5")
+ ).wait()
+ file_path, file_name = os.path.split(self.parent.filepath.get())
+ self.parent.hdf5.file_path.put(file_path)
+ self.parent.hdf5.file_name.put(file_name)
+ self.parent.hdf5.file_template.put("%s%s")
+ self.parent.hdf5.num_capture.put(
+ int(self.parent.scaninfo.num_points * self.parent.scaninfo.frames_per_trigger)
+ )
+ self.parent.hdf5.file_write_mode.put(2)
+ # Reset spectrum counter in filewriter, used for indexing & identifying missing triggers
+ self.parent.hdf5.array_counter.put(0)
+ # Start file writing
+ self.parent.hdf5.capture.put(1)
+
+ def arm_acquisition(self) -> None:
+ """Arm detector for acquisition"""
+ self.parent.start_all.put(1)
+ signal_conditions = [
+ (
+ lambda: self.parent.acquiring.read()[self.parent.acquiring.name]["value"],
+ DetectorState.ACQUIRING,
+ )
+ ]
+ if not self.wait_for_signals(
+ signal_conditions=signal_conditions,
+ timeout=self.parent.TIMEOUT_FOR_SIGNALS,
+ check_stopped=True,
+ all_signals=False,
+ ):
+ raise FalconTimeoutError(
+ f"Failed to arm the acquisition. Detector state {signal_conditions[0][0]}"
+ )
+
+ def on_unstage(self) -> None:
+ """Unstage detector and backend"""
+ pass
+
+ def on_complete(self) -> None:
+ """Complete detector and backend"""
+ self.finished(timeout=self.parent.TIMEOUT_FOR_SIGNALS)
+ self.publish_file_location(done=True, successful=True)
+
+ def on_stop(self) -> None:
+ """Stop detector and backend"""
+ self.stop_detector()
+ self.stop_detector_backend()
+
+ def stop_detector(self) -> None:
+ """Stops detector"""
+
+ self.parent.stop_all.put(1)
+ time.sleep(0.5)
+ self.parent.erase_all.put(1)
+ time.sleep(0.5)
+
+ signal_conditions = [
+ (
+ lambda: self.parent.acquiring.read()[self.parent.acquiring.name]["value"],
+ DetectorState.DONE,
+ )
+ ]
+
+ if not self.wait_for_signals(
+ signal_conditions=signal_conditions,
+ timeout=self.parent.TIMEOUT_FOR_SIGNALS - self.parent.TIMEOUT_FOR_SIGNALS // 2,
+ all_signals=False,
+ ):
+ # Retry stop detector and wait for remaining time
+ raise FalconTimeoutError(
+ f"Failed to stop detector, timeout with state {signal_conditions[0][0]}"
+ )
+
+ def stop_detector_backend(self) -> None:
+ """Stop the detector backend"""
+ self.parent.hdf5.capture.put(0)
+
+ def finished(self, timeout: int = 5) -> None:
+ """Check if scan finished succesfully"""
+ with self._lock:
+ total_frames = int(
+ self.parent.scaninfo.num_points * self.parent.scaninfo.frames_per_trigger
+ )
+ signal_conditions = [
+ (self.parent.dxp.current_pixel.get, total_frames),
+ (self.parent.hdf5.array_counter.get, total_frames),
+ ]
+ if not self.wait_for_signals(
+ signal_conditions=signal_conditions,
+ timeout=timeout,
+ check_stopped=True,
+ all_signals=True,
+ ):
+ logger.debug(
+ f"Falcon missed a trigger: received trigger {self.parent.dxp.current_pixel.get()},"
+ f" send data {self.parent.hdf5.array_counter.get()} from total_frames"
+ f" {total_frames}"
+ )
+ self.stop_detector()
+ self.stop_detector_backend()
+
+ def set_trigger(
+ self, mapping_mode: MappingSource, trigger_source: TriggerSource, ignore_gate: int = 0
+ ) -> None:
+ """
+ Set triggering mode for detector
+
+ Args:
+ mapping_mode (MappingSource): Mapping mode for the detector
+ trigger_source (TriggerSource): Trigger source for the detector, pixel_advance_signal
+ ignore_gate (int): Ignore gate from TTL signal; defaults to 0
+
+ """
+ mapping = int(mapping_mode)
+ trigger = trigger_source
+ self.parent.collect_mode.put(mapping)
+ self.parent.pixel_advance_mode.put(trigger)
+ self.parent.ignore_gate.put(ignore_gate)
+
+
+class FalconPhoenix(PSIDetectorBase, Falcon):
+ """
+ FalconX4 Sitoro detector for Phoenix
+
+
+ Parent class: PSIDetectorBase, Falcon
+
+ class attributes:
+ custom_prepare_cls (FalconSetup) : Custom detector setup class for cSAXS,
+ inherits from CustomDetectorMixin
+ PSIDetectorBase.set_min_readout (float) : Minimum readout time for the detector
+ dxp (EpicsDXPFalcon) : DXP parameters for Falcon detector
+ mca (EpicsMCARecord) : MCA parameters for Falcon detector
+ hdf5 (FalconHDF5Plugins) : HDF5 parameters for Falcon detector
+ MIN_READOUT (float) : Minimum readout time for the detector
+
+
+
+ """
+
+ # Specify which functions are revealed to the user in BEC client
+ USER_ACCESS = ["describe"]
+
+ # specify Setup class
+ custom_prepare_cls = FalconSetup
+ # specify minimum readout time for detector
+ MIN_READOUT = 3e-3
+ TIMEOUT_FOR_SIGNALS = 1
+
+ # specify class attributes
+
+ # 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
+ hdf5 = Cpt(HDF5Plugin, "HDF1:")
+
+
+if __name__ == "__main__":
+ falcon = FalconPhoenix(name="falcon_hdf5", prefix="X07MB-SITORO:", sim_mode=True)
diff --git a/phoenix_bec/devices/phoenix_xmap.py b/phoenix_bec/devices/phoenix_xmap.py
new file mode 100644
index 0000000..211c3f9
--- /dev/null
+++ b/phoenix_bec/devices/phoenix_xmap.py
@@ -0,0 +1,299 @@
+#
+#
+# changes version for PHOENIX WITHOUT HDF5 plugin to be revised/renamed...
+#
+#
+
+import enum
+import os
+import threading
+
+from bec_lib.logger import bec_logger
+from ophyd import Component as Cpt
+from ophyd import Device, EpicsSignal, EpicsSignalRO, EpicsSignalWithRBV
+from ophyd.mca import EpicsMCARecord
+from ophyd_devices.interfaces.base_classes.psi_detector_base import (
+ CustomDetectorMixin,
+ PSIDetectorBase,
+)
+
+from ophyd.mca import EpicsDXP
+from ophyd_devices.devices.dxp import xMAP, EpicsMCARecord
+from ophyd_devices.devices.areadetector.plugins import HDF5Plugin_V35 as HDF5Plugin
+
+logger = bec_logger.logger
+#bec_logger.level = bec_logger.LOGLEVEL.TRACE
+bec_logger.level = bec_logger.LOGLEVEL.INFO
+
+
+
+class XMAPError(Exception):
+ """Base class for exceptions in this module."""
+
+
+class XMAPTimeoutError(XMAPError):
+ """Raised when the XMAP does not respond in time."""
+
+
+class DetectorState(enum.IntEnum):
+ """Detector states for XMAP detector"""
+
+ DONE = 0
+ ACQUIRING = 1
+
+
+class TriggerSource(enum.IntEnum):
+ """Trigger source for XMAP detector"""
+
+ USER = 0
+ GATE = 1
+ SYNC = 2
+
+
+class MappingSource(enum.IntEnum):
+ """Mapping source for XMAP detector"""
+
+ SPECTRUM = 0
+ MAPPING = 1
+
+
+class XMAPSetup(CustomDetectorMixin):
+ """
+ XMAP setup class for phoenix
+
+ Parent class: CustomDetectorMixin
+
+ """
+
+ def __init__(self, *args, parent: Device = None, **kwargs) -> None:
+ super().__init__(*args, parent=parent, **kwargs)
+ self._lock = threading.RLock()
+
+ def on_init(self) -> None:
+ """Initialize XMAP detector"""
+ self.initialize_default_parameter()
+ self.initialize_detector()
+ self.initialize_detector_backend()
+
+ def initialize_default_parameter(self) -> None:
+ """
+ Set default parameters for XMAP
+
+ This will set:
+ - readout (float): readout time in seconds
+ - value_pixel_per_buffer (int): number of spectra in buffer of XMAP
+
+ """
+ self.parent.value_pixel_per_buffer = 20
+ self.update_readout_time()
+
+ def update_readout_time(self) -> None:
+ """Set readout time for Eiger9M detector"""
+ readout_time = (
+ self.parent.scaninfo.readout_time
+ if hasattr(self.parent.scaninfo, "readout_time")
+ else self.parent.MIN_READOUT
+ )
+ self.parent.readout_time = max(readout_time, self.parent.MIN_READOUT)
+
+ def initialize_detector(self) -> None:
+ """Initialize XMAP detector"""
+ self.stop_detector()
+ self.stop_detector_backend()
+ self.set_trigger(
+ mapping_mode=MappingSource.MAPPING, trigger_source=TriggerSource.GATE, ignore_gate=0
+ )
+ # 1 Realtime
+ self.parent.preset_mode.put(1)
+ # 0 Normal, 1 Inverted
+ self.parent.input_logic_polarity.put(0)
+ # 0 Manual 1 Auto
+ self.parent.auto_pixels_per_buffer.put(0)
+ # Sets the number of pixels/spectra in the buffer
+ self.parent.pixels_per_buffer.put(self.parent.value_pixel_per_buffer)
+
+ def initialize_detector_backend(self) -> None:
+ """Initialize the detector backend for XMAP."""
+ w=0
+ #----------------------------------------------------------------------
+ #self.parent.hdf5.enable.put(1)
+ # file location of h5 layout for cSAXS
+ #self.parent.hdf5.xml_file_name.put("layout.xml")
+ # 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
+ #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)
+
+ def on_stage(self) -> None:
+ """Prepare detector and backend for acquisition"""
+ self.prepare_detector()
+ self.prepare_data_backend()
+ self.publish_file_location(done=False, successful=False)
+ self.arm_acquisition()
+
+ def prepare_detector(self) -> None:
+ """Prepare detector for acquisition"""
+ self.set_trigger(
+ mapping_mode=MappingSource.MAPPING, trigger_source=TriggerSource.GATE, ignore_gate=0
+ )
+ self.parent.preset_real.put(self.parent.scaninfo.exp_time)
+ self.parent.pixels_per_run.put(
+ int(self.parent.scaninfo.num_points * self.parent.scaninfo.frames_per_trigger)
+ )
+
+ def prepare_data_backend(self) -> None:
+ """Prepare data backend for acquisition"""
+ w=9
+ """ --------------------------------------------------------------
+ self.parent.filepath.set(
+ self.parent.filewriter.compile_full_filename(f"{self.parent.name}.h5")
+ ).wait()
+ file_path, file_name = os.path.split(self.parent.filepath.get())
+ self.parent.hdf5.file_path.put(file_path)
+ self.parent.hdf5.file_name.put(file_name)
+ self.parent.hdf5.file_template.put("%s%s")
+ self.parent.hdf5.num_capture.put(
+ int(self.parent.scaninfo.num_points * self.parent.scaninfo.frames_per_trigger)
+ )
+ self.parent.hdf5.file_write_mode.put(2)
+ # Reset spectrum counter in filewriter, used for indexing & identifying missing triggers
+ self.parent.hdf5.array_counter.put(0)
+ # Start file writing
+ self.parent.hdf5.capture.put(1)
+ """
+
+ def arm_acquisition(self) -> None:
+ """Arm detector for acquisition"""
+ self.parent.start_all.put(1)
+ signal_conditions = [
+ (
+ lambda: self.parent.acquiring.read()[self.parent.acquiring.name]["value"],
+ DetectorState.ACQUIRING,
+ )
+ ]
+ if not self.wait_for_signals(
+ signal_conditions=signal_conditions,
+ timeout=self.parent.TIMEOUT_FOR_SIGNALS,
+ check_stopped=True,
+ all_signals=False,
+ ):
+ raise XMAPTimeoutError(
+ f"Failed to arm the acquisition. Detector state {signal_conditions[0][0]}"
+ )
+
+ def on_unstage(self) -> None:
+ """Unstage detector and backend"""
+ pass
+
+ def on_complete(self) -> None:
+ """Complete detector and backend"""
+ #------------------------------------------------------------------
+ #self.finished(timeout=self.parent.TIMEOUT_FOR_SIGNALS)
+ #self.publish_file_location(done=True, successful=True)
+ w=9
+ def on_stop(self) -> None:
+ """Stop detector and backend"""
+ self.stop_detector()
+ #self.stop_detector_backend()
+
+ def stop_detector(self) -> None:
+ """Stops detector"""
+
+ self.parent.stop_all.put(1)
+ self.parent.erase_all.put(1)
+ #-------------------------------------------------------------------
+ #signal_conditions = [
+ # (lambda: self.parent.acquiring.read()[self.parent.acquiring.name]["value"], DetectorState.DONE)
+ #]stage2 = StageXY(prefix='X07MB',name='-ES-MA1', name='stage2')
+ # timeout=self.parent.TIMEOUT_FOR_SIGNALS - self.parent.TIMEOUT_FOR_SIGNALS // 2,
+ # all_signals=False,
+ #):
+ # # Retry stop detector and wait for remaining time
+ # raise XMAPTimeoutError(
+ # f"Failed to stop detector, timeout with state {signal_conditions[0][0]}"
+ # )
+
+ def stop_detector_backend(self) -> None:
+ """Stop the detector backend"""
+ #self.parent.hdf5.capture.put(0)
+ w=0
+
+ def finished(self, timeout: int = 5) -> None:
+ """Check if scan finished succesfully"""
+ with self._lock:
+ total_frames = int(
+ self.parent.scaninfo.num_points * self.parent.scaninfo.frames_per_trigger
+ )
+ signal_conditions = [
+ (self.parent.dxp.current_pixel.get, total_frames),
+ # (self.parent.hdf5.array_counter.get, total_frames), ---------------------
+ ]
+ if not self.wait_for_signals(
+ signal_conditions=signal_conditions,
+ timeout=timeout,
+ check_stopped=True,
+ all_signals=True,
+ ):
+ logger.debug(
+ f"XMAP missed a trigger: received trigger {self.parent.dxp.current_pixel.get()},"
+ f" send data {self.parent.hdf5.array_counter.get()} from total_frames"
+ f" {total_frames}"
+ )
+ self.stop_detector()
+ self.stop_detector_backend()
+
+ def set_trigger(
+ self, mapping_mode: MappingSource, trigger_source: TriggerSource, ignore_gate: int = 0
+ ) -> None:
+ """
+ Set triggering mode for detector
+
+ Args:
+ mapping_mode (MappingSource): Mapping mode for the detector
+ trigger_source (TriggerSource): Trigger source for the detector, pixel_advance_signal
+ ignore_gate (int): Ignore gate from TTL signal; defaults to 0
+
+ """
+ mapping = int(mapping_mode)
+ trigger = trigger_source
+ self.parent.collect_mode.put(mapping)
+ self.parent.pixel_advance_mode.put(trigger)
+ self.parent.ignore_gate.put(ignore_gate)
+
+
+class XMAPPhoenix(PSIDetectorBase, xMAP):
+ """
+ XMAP 4-element detector for phoenix
+ custom_prepare_cls (XMAPSetup) : Custom detector setup class for PHOENIX,
+ inherits from CustomDetectorMixin
+ in __init__ of PSIDetecor base
+ PSIDetectorBase.set_min_readout (float) : Minimum readout time for the detector
+ dxp (EpicsDXPXMAP) : DXP parameters for XMAP detector
+ mca (EpicsMCARecord) : MCA parameters for XMAP detector
+ hdf5 (XMAPHDF5Plugins) : HDF5 parameters for XMAP detector
+ MIN_READOUT (float) : Minimum readout time for the detector
+ """
+
+ # Specify which functions are revealed to the user in BEC client
+ USER_ACCESS = ["describe"]
+
+ # specify Setup class
+ custom_prepare_cls = XMAPSetup
+ # specify minimum readout time for detector
+ MIN_READOUT = 3e-3
+ TIMEOUT_FOR_SIGNALS = 5
+
+ dxp1 = Cpt(EpicsDXP, "dxp1:")
+ #dxp2 = Cpt(EpicsDXP, "dxp2:")
+ #dxp3 = Cpt(EpicsDXP, "dxp3:")
+ #dxp4 = Cpt(EpicsDXP, "dxp4:")
+
+ mca1 = Cpt(EpicsMCARecord, "mca1")
+ #mca2 = Cpt(EpicsMCARecord, "mca2")
+ #mca3 = Cpt(EpicsMCARecord, "mca3")
+ #mca4 = Cpt(EpicsMCARecord, "mca4")
+
+ hdf5 = Cpt(HDF5Plugin, "HDF1:")
diff --git a/phoenix_bec/local_scripts/Code_to_test_devices/test_falcon.py b/phoenix_bec/local_scripts/Code_to_test_devices/test_falcon.py
index 7ec6b72..3015fe0 100644
--- a/phoenix_bec/local_scripts/Code_to_test_devices/test_falcon.py
+++ b/phoenix_bec/local_scripts/Code_to_test_devices/test_falcon.py
@@ -6,7 +6,7 @@ ff = 0
falcon = 0
from ophyd import Component as Cpt
-import phoenix_bec.devices.falcon_phoenix as ff
+import phoenix_bec.devices.phoenix_falcon as ff
falcon = ff.FalconPhoenix(name="falcon_hdf5", prefix="X07MB-SITORO:")
# xmap = ff.FalconPhoenix(name="falcon_hdf5", prefix="X07MB-XMAP:")
@@ -14,4 +14,35 @@ falcon = ff.FalconPhoenix(name="falcon_hdf5", prefix="X07MB-SITORO:")
# there will be an error message, if device contains a channel whcih does not exist
w = falcon.get()
-print(w)
+#print(w)
+# for attr in falcon.hdf5.component_names:
+# if not attr.startswith("_"):
+# print(attr)
+# signal = getattr(falcon, attr)
+# signal.get()
+
+
+"""
+ print(this_scan.scan.data.keys())
+ for outer_key in this_scan.scan.data.keys():
+ print("outer_key", outer_key)
+ n_outer = len(this_scan.scan.data.keys())
+ for inner_key in this_scan.scan.data[outer_key].keys():
+ print("inner_key", inner_key)
+ # calculate nunber of points
+ n_inner = len(this_scan.scan.data[outer_key][inner_key].keys())
+ value = np.zeros(n_inner)
+ timestamp = np.zeros(n_inner)
+ for i in range(n_inner):
+ try:
+ value[i] = this_scan.scan.data[outer_key][inner_key][i]["value"]
+ except:
+ value = None
+ try:
+ timestamp[i] = this_scan.scan.data[outer_key][inner_key][i]["timestamp"]
+ except:
+ timestamp[i] = None
+ # endfor
+ self.add(inner_key + "_" + outer_key + "_val", value)
+ self.add(innerprint("test")
+ """
\ No newline at end of file
diff --git a/phoenix_bec/local_scripts/Development_helpers/EditDeviceClasses.py b/phoenix_bec/local_scripts/Development_helpers/EditDeviceClasses.py
index 7c65a3b..7135840 100644
--- a/phoenix_bec/local_scripts/Development_helpers/EditDeviceClasses.py
+++ b/phoenix_bec/local_scripts/Development_helpers/EditDeviceClasses.py
@@ -1,9 +1,9 @@
-from phoenix_bec.devices.xmap_phoenix_no_hdf5 import XMAPphoenix
+from phoenix_bec.devices.obsolete.xmap_phoenix_no_hdf5 import XMAPphoenix
from phoenix_bec.scripts.phoenix import PhoenixBL
phoenix=PhoenixBL()
phoenix.read_phoenix_config()
#
-# how do we get this to iphython command line ?
+# how do we get this to iphython command line ?
#
\ No newline at end of file
diff --git a/phoenix_bec/scripts/phoenix.py b/phoenix_bec/scripts/phoenix.py
index f59e3c6..c2aae64 100644
--- a/phoenix_bec/scripts/phoenix.py
+++ b/phoenix_bec/scripts/phoenix.py
@@ -50,40 +50,35 @@ class PhoenixBL:
print("..... init PhoenixBL from phoenix_bec/scripts/phoenix.py")
- # load local configuration
+ # Define important paths
- self.path_scripts_local = (
- "/data/test/x07mb-test-bec/bec_deployment/phoenix_bec/phoenix_bec/local_scripts/"
- )
+ self.base_path = "/data/test/x07mb-test-bec/production/phoenix_bec/"
+ self.path_phoenix_bec = self.base_path+"phoenix_bec/"
+ self.path_devices = self.path_phoenix_bec + "device_configs/"
- self.path_config_local = (
- self.path_scripts_local + "TEST_ConfigPhoenix/"
- ) # base dir for local configurations
+ self.path_scripts = self.path_phoenix_bec + "scripts/"
+ self.path_scans = self.path_phoenix_bec + "scans/"
- self.path_devices_local = (
- self.path_config_local + "Local_device_config/"
- ) # local yamal file
+ self.path_scripts_local = self.path_phoenix_bec+"local_scripts/"
+ self.path_config_local = self.path_scripts_local + "TEST_ConfigPhoenix/"
- self.file_devices_file_local = self.path_devices_local + "phoenix_devices.yaml"
-
- self.path_phoenix_bec = "/data/test/x07mb-test-bec/bec_deployment/phoenix_bec/"
- self.path_devices = self.path_phoenix_bec + "phoenix_bec/device_configs/"
# yamal file for default configuration
- self.file_devices_file = (
- self.path_phoenix_bec + "phoenix_bec/device_configs/phoenix_devices.yaml"
- ) # local yamal file
+ self.file_devices_file = self.path_devices + "phoenix_devices.yaml"
- self.file_devices_tmp = (
- self.path_phoenix_bec + "phoenix_bec/device_configs/current_devices_tmp.yaml"
- ) # tmp configuration file. Will be electronicall created and appended if needed
+ self.file_devices_xmap = self.path_devices + "phoenix_xmap.yaml"
+ self.file_devices_falcon = self.path_devices + "phoenix_falcon.yaml"
+
+
+ # temporary yaml file to allow adding devices with one single comamnd
+ self.file_devices_tmp = self.path_devices + "current_devices_tmp.yaml"
self.t0 = time.time()
- def read_local_phoenix_config(self):
- print("read file ")
- print(self.file_phoenix_devices_file)
- bec.config.update_session_with_file(self.file_devices_file_local)
+ #def read_local_phoenix_config(self):
+ # print("read file ")
+ # print(self.file_phoenix_devices_file)
+ # bec.config.update_session_with_file(self.file_devices_file_local)
def create_base_config(self):
# create a yaml file from standard configuration
@@ -94,30 +89,41 @@ class PhoenixBL:
def add_phoenix_config(self):
print("add_phoenix_config ")
print("self.file_devices_file")
- bec.config.update_session_with_file(self.tmp.file_devices_file)
+ os.system("cat " + self.file_devices_file + " >> " + self.file_devices_tmp)
+
+ bec.config.update_session_with_file(self.file_devices_tmp)
def add_xmap(self):
print("add xmap ")
- os.system("cat " + self.path_devices + "phoenix_xmap.yaml" + " >> " + self.file_devices_tmp)
+ os.system("cat " + self.file_devices_xmap + " >> " + self.file_devices_tmp)
bec.config.update_session_with_file(self.file_devices_tmp)
+ def load_xmap(self):
+ print("load_xmap")
+ os.system(
+ "cat " + self.file_devices_xmap + " > " + self.file_devices_tmp)
+
+ bec.config.update_session_with_file(self.file_devices_xmap)
+
def add_falcon(self):
print("add_falcon to existing configuration ")
os.system(
- "cat " + self.path_devices + "phoenix_falcon.yaml" + " >> " + self.file_devices_tmp
+ "cat " + self.file_devices_falcon + " >> " + self.file_devices_tmp
)
bec.config.update_session_with_file(self.file_devices_tmp)
def load_falcon(self):
print("load_falcon")
- bec.config.update_session_with_file(self.path_devices + "phoenix_falcon.yaml")
+ os.system(
+ "cat " + self.file_devices_falcon + " > " + self.file_devices_tmp)
+ bec.config.update_session_with_file(self.file_devices_falcon)
- def show_phoenix_setup(self):
- print(self.path_phoenix_bec)
- os.system("cat " + self.path_phoenix_bec + "phoenix_bec/scripts/Current_setup.txt")
+ #def show_phoenix_setup(self):
+ # print(self.path_phoenix_bec)
+ # os.system("cat " + self.path_phoenix_bec + "phoenix_bec/scripts/Current_setup.txt")
@classmethod
def my_log(cls, x):
@@ -140,6 +146,7 @@ class PhoenixBL:
file.close
+
class PhGroup:
"""
Class to create data groups
@@ -232,7 +239,6 @@ class PhGroup:
"""
- print("keys")
print(this_scan.scan.data.keys())
for outer_key in this_scan.scan.data.keys():
print("outer_key", outer_key)
@@ -258,5 +264,25 @@ class PhGroup:
# endfor
# endfor
# endfor
-
+ print(time.time())
# enddef
+
+
+if __name__ == "__main__":
+ PH = PhoenixBL()
+
+
+ for x in PH.__dir__():
+ if 'path' in x:
+ #print(x)
+ pa = getattr(PH, x)
+ if os.path.isdir(pa) :
+ print(pa,' exists')
+ else:
+ print('!!- ' , pa,' does not exist')
+ if 'file' in x:
+ pa = getattr(PH, x)
+ if os.path.isfile(pa) :
+ print(pa,' exists')
+ else:
+ print('!!- ' , pa,' does not exist')
\ No newline at end of file