General Information¶
Supported devices¶
The scantool distinguishes three different device types: Triggers, Data Sources and Motors. These devices either have a standardized interface, or the support of the device is explicitly integrated in an alias mapping within the scantool.
The motor and data source devices can have different axes and sources. An example for a multiple axis system is a slitsystem inheriting five (5) axis - default, x, y, gapx, gapy. A default axis is always provided, in case of the slitsytem the default is the x axis.
The following devices are currently integrated.
Motors¶
Following device classes as motor interfaces are supported:
Motors |
axis name |
---|---|
BeckhoffMC2Base |
default |
BeckhoffMC2Beckhoff |
default |
BeckhoffMC2Technosoft |
default |
BeckhoffMC2Elmo |
default |
BeckhoffMC2Hexapod |
default |
BeckhoffSimpleMotor |
default |
DoocsPhaseshifter |
default |
CrystalManipulator |
default |
CrystalManipulatorGroup |
default |
DoocsOpticalDelay |
default |
DoocsPhaseshifter |
default |
DoocsUndulatorEnergy |
default |
JJAttenuator |
default |
MonoChromator |
default |
MonoChromatorGroup |
default |
MonoChromatorEnergyChanger |
default |
OpticalDelay |
default |
PicoMotor |
default |
PpLaserDelayCopy |
default |
RobotManipulatorStaubli |
default |
SlitSystem |
default, x, y, gapx, gapy |
SoftMono |
default |
TangoMotor |
default |
X2TimerML |
default |
If the device to be scanned is not in the list of supported devic classes then it might be integrated via abstract motor interface.
Abstract Motor Interface
A device might have interfaces property that defines interfaces it is compatbile with. If the interface property contains Motors then first the Standard motor with limits interface with following mandatory properties:
actualPosition (DOUBLE/FLOAT)
targetPosition (DOUBLE/FLOAT)
isCWLimit (BOOL)
isCCWLimit (BOOL)
isSWLimitHigh (BOOL)
isSWLimitLow (BOOL)
and commands
move
stop
is validated. If one or several properties or commands are missing then the device is validated against the Standard motor without limits interface. Such a device should contain the actualPosition, and targetPosition properties and move, stop commands.
In general, it is expected that a motor device has the state State.ON
when
it is ready to move and goes to State.MOVING
when it is moving towards the
target position.
If a motor is following the target position, it is expected to use State.ACTIVE
instead of State.ON
.
Custom Motor Interface
If the requested scan device is not supported with the abstract motor interface, then there is a possibility to use custom a motor interface. The device has to be added as a motor with custom axis definition starting with “custom#”:
Mandatory attributes are
actualPosition
andtargetPosition
:custom#actualPosition=someReadProperty&targetPosition=someWriteProperty
Other attributes
isCWLimit
,isCCWLimit
,isSWLimitHigh
,isSWLimitLow
,move
,stop
andstate
are not mandatory.Example of custom motor having move and stop slots and soft-limit switches:
custom#actualPosition=actual&targetPosition=target&move=moveSlot&stop=stopSlot&isSWLimitLow=limitLow&isSWLimitHigh=limitLow
Data sources¶
Data sources are considered to represent a single point of data on device level. Any scalar attribute of any karabo device can be added as a data source. Therefore there is no default value anymore. An internal mechanism considers if the data source is a pipeline value or not. If the data source depends on the pipeline processing, the data source is awaiting for a small amount of time (~second) a new value. It is possible to use vector data source. Currently ascan and dscan in Single acquisition mode with one vector data source is supported. Scan is plotted as a mesh scan.
Warning
The “Data Sources” table does not replace the DAQ. It should be used only for online preview and alignment. Data should be recorded by the properly configured DAQ.
Triggers¶
Triggers are a key element of the scantool. They trigger the data generation for the data sources. In the scantool the acquisition of all trigger devices is done in a synchronous way by software.
The scantool can only perform basic trigger configuration. Specialized setup must be done manually. The operator must also be familiar with the particular trigger device: some devices can take minutes to configure, others carry significant overhead or synchroniztion issues. The online preview data is collected after the ACQUISITION of all data triggers has completed. Supported devices are:
LPDMainControl
GotthardDetector
JungfrauDetector
AdqDigitizer
GreatEyes
SimulatedTrigger
AgipdComposite
PulsePickerTrigger
DoocsPulseKicker
The trigger devices (device developers) are responsible to provide
A start acquisition slot
An acquisition time property (FLOAT) which configures the trigger
A common state behavior for a trigger device is:
State.PASSIVE (Derived): Trigger is NOT ready for data acquisition
State.ACTIVE (Derived): Trigger IS ready for data acquisition
State.ACQUIRING (Derived): Trigger is acquiring data
Warning
CAMERAS are not supported as trigger sources as they don’t tell us when the acquisition is done. Just make sure the camera is ACQUIRING data.
Note
Unfortunately AGIPD cannot be supported at the moment as this device does not provide any information if it is ACQUIRING data or not.
Note
Depending on the type, scan does not always require motors, data sources and triggers.
Scan devices are stored in deviceEnv.motors, deviceEnv.sources and deviceEnv.triggers tables and can be edited via device tree available in the device scene.
Scans¶
The scantool provides following scans:
Name |
Description |
---|---|
ascan |
Linear step scan with up to 4 motors. Uses absolute coordinates and stays at last position. |
dscan |
Linear step scan with up to 4 motors. Uses relative coordinates and returns to start. |
cscan |
N dimensional fly scan based on absolute coordinates. These are start and go fly scans with optional velocity setting. If the velocity control is set, motor velocities will be set based on the exposure time. Most motors do not support velocity setting and others have severe restrictions (also in hardware). |
tscan |
Scan without the motor movement. For defined time acquires data from sources. |
mesh |
2D scan based on absolute coordinates. |
dmesh |
2D scan based on relative coordinates. |
custom |
Step scan uses absolute coordinates defined in the scanEnv.customScanPattern. |
external |
Linear step scan with up to 4 motors. Uses externaly retrieved scan pattern |
At the moment, scans with up to 4 motors and 6 data sources are available.
Based on the scan type start and stop positions of motors and the number of scan steps has to be provided.
After moving motors to the start positions, they are locked by the scantool and unlocked at the end of the scan or when the scan is paused.
For details on how to use custom scans see: Custom Scan Patterns.
Acquisition Modes¶
For step scans acquistionMode property can be used to adjust the data acquisition mode:
Single: Acquire data once after the acquisition time.
Continuous: Continuous data acquisition during the acquisition time, excluding motor movement.
Continuous Averaged: Average acquired data over the acquisition time.
Continuous Extended: Continuous data acquisition during the acquisition time and motor movements.
Property is available as a combo box in the main scene.
Scan Environment Settings¶
Name |
Attribute |
Default |
Description |
---|---|---|---|
Comment |
scanEnv.comment |
“” |
Free form text to describe the executed scan. |
Bidirectional |
scanEnv.bidirectional |
False |
Enable bidirectional (snake) mesh scan |
Stopping Policy¶
The XFEL scantool comes with a defined stopping policy
Absolute scans: The motors stay a final position.
Relative scans: The motors will move back to start positions.
Stopping scan: see absolute and relative scan behavior.
Aborting scan: If a motor experiences an unexpected behavior during scan (e.g .error state), the scan will abort and the motors won’t be moved any further.
Note
A scan can be manually aborted and subsequently any post scan action (move back to start position) is not executed.