diff --git a/Config_Positioner.md b/Config_Positioner.md index 0159db0..3a13dfe 100644 --- a/Config_Positioner.md +++ b/Config_Positioner.md @@ -1,476 +1,492 @@ -# Positioner -This file contains the positioner settings. - -See source:trunk/PixelatorController/config/positioner.json for an example. - - **atPositionCheckInverval_Default**::
- Double value used for all positioners that don't define their own atPositionCheckInverval.
- **Default**: 0.002 - - **atPositionCheckTimeout_Default**::
- Double value used for all positioners that don't define their own atPositionCheckTimeout.
- **Default**: 10.0 - -The remaining entries are positioner names with their settings. The settings depend on the positioner type. - -## base settings -The following settings are available for all types of positioners: - - **type**::
- String value that identifies which hardware interface will handle the positioner behaviour. The list of allowed values is listed near the beginning of [`Positioner.h`](https://gitlab.psi.ch/microspectro/pixelator/-/blob/master/PixelatorController/src/Positioner.h#L28), for example: - -`enum Type { Base, Epics, Tango, NewPort, NexLine, SmarAct, SmarActUsb, SmarActTcp, Interferometer, BeamShutter, AnalogOut, Transform, Zaber, ZmiEpics };` - - **active**::
- Integer value that defines if the positioner should be used (value of 1) or ignored (value of 0).
- **Default**: 0 - - **axisName**::
- String value defines the name of the axis moved by this positioner.
- Example: Coarse and Fine X both belong to SampleX.
- Note: The named axis must be defined in axis.json, or Pixelator will crash.
- **Default**: positioner name - - **nexus_name**::
- String value defines the positioners name in the hdf5 file.
- **Default**: positioner name - - **readOnly**::
- Boolean value true when the positioner can only be used to read its position (i.e. cannot request a move).
- **Default**: false - - **description**::
- String value describes the function of the positioner. That value is written to the hdf5 file (NXcollection) and it is sent to PixelatorGUI.
- **Default**: "" (empty string) - - **unit**::
- String value defines the unit of the positioner values (on the GUI and in the hdf5 file).
- **Default**: "" (empty string) - - **hardwareUnitFactor**::
- Double value defines the conversion factor used to convert hardware positioner values to **unit***.
- **Default**: 1.0 - - **distributionMode**::
- String value defines the discribution of points to an interval.
- Example: 5 points from 0 to 10: - * "n": 0, 2.5, 5, 7.5, 10 - * "nPlus1": 0, 2, 4, 6, 8, 10 - - **Default**: "n" - - **positionOffset**::
- Double value defines shift of coordinates between those communicated with the hardware controller and the user.
- **Default**: 0.0 - - **upperSoftLimit**::
- Double value defines largest value allowed to be requested to move to.
- **Default**: 0.0 - - **lowerSoftLimit**::
- Double value defines lowest value allowed to be requested to move to.
- **Default**: 0.0 - - **coarsePositioner**::
- String value defines cooperating positioner that will handle large movements.
- **Default**: "" (empty string) - - **finePositioner**::
- String value defines cooperating positioner that will handle fine movements.
- **Default**: "" (empty string) - - **maxVelocity**::
- Double value defines maximum rate of movement.
- **Default**: 0.0 - - **autoOff**::
- Positioners can be set to an unpowered state after 1 of 3 events: -1. positioner move due to direct request -2. positioner move due scan request -3. "All Motors Off" request - - "Never" : Positioner remains powered after scanning moves and is unaffected by an "All Motors Off" request.
- "Always" : positioner is unpowered after any move that is part of a scan and by an "All Motors Off" request. However, a simple move request will not unpower the positioner.
- "SlowAxis" : Positioner is unpowered after each scan move if it is not part of the fast scanning axis.
- "Disabled" : this is a "hack" to disable the "fine" positioner in a "coarse"/"fine" pair.
- "Manual" : Positioner remains powered after scanning moves, but is unpowered by "All Motors Off" request.
- **Default**: "Never" - -| autoOff value | simple move | scan move
(fastest axis) | scan move
(not fastest) | "All Motors Off" | -|---------------|-------------|-------|------|------------------| -| "Never" | ON | ON | ON | ON | -| "Always" | ON | OFF | OFF | OFF | -| "SlowAxis" | ON | ON | OFF | OFF | -| "Manual" | ON | ON | ON | OFF | - - -**linkedOffsetPositionerName**::
- String value that defines the name of a positioner whose movements are to be coordinated. Typically stated in a zoneplate Z-axis positioner configuration with a value corresponding to the fine positioner of the sample Z-axis.
- **Default**: empty string - - **beamlineControlPosition**::
- Integer value defines inclusion of (value greater than zero), and position of a positioner control in the "Beamline Control" and "Microscope Status" sections of the GUI. The "Beamline Control" section will only list positioners with a **beamlineControlPosition** value greater than zero, with each positioner listed in ascending **beamlineControlPosition** order. The "Microscope Status" GUI section will list any positioner with a **beamlineControlPosition** value of zero (except it will always ignore a positioner with the name "BeamShutter"). Negative values can be used to exclude a positioner from both sections of the GUI. -
 **Default**: 0 - - **epsilon**::
- Double value defines numerical precision to be considered when calculating positioner moves.
- **Default**: 0.1 - - **atPositionCheckInverval**::
- Double value defines the interval (in seconds) used in waitDoneMoving(). - getStatus() is called in this interval as long as it returns moving or - until atPositionCheckTimeout is exceeded.
- **Default**: atPositionCheckInverval_Default ([see above](#positioner)) - - **atPositionCheckTimeout**::
- Double value defines the timeout (in seconds) used in waitDoneMoving(). - getStatus() is called as long as it returns moving or until atPositionCheckTimeout is exceeded.
- **Default**: atPositionCheckTimeout_Default ([see above](#positioner)) - - **stringPositions**::
- Optional array of objects with members that defines relationships between string and numeric values. Pixelator always considers positioners to have a numerical value, while the hardware controllers sometimes operate in terms of named states (e.g. "on" and "off") and this array defines the translation. - * **string**: String value defines the position name - * **position**: Double value defines the position value - - These objects can be used to get - * a name of a position value (positionUserToStringHardware) - * the position of a named position (stringHardwareToPositionUser) - - -## Epics -This positioner type interfaces with the [EPICS](https://epics.anl.gov/) hardware control system. Note that an "Epics" type positioner can be configured as an [Orchestra Detector](#orchestra-detector). - - -**setChannel**::
- String value defines the EPICS channel to which a move request can be written.
- **Default**: empty string - -**getChannel**::
- String value defines the EPICS channel from which a position value can be read.
- **Default**: empty string - -**lowChannel**::
- String value defines the EPICS channel from which lower hardware limit of the device can be read.
- **Default**: empty string - -**highChannel**::
- String value defines the EPICS channel from which upper hardware limit of the device can be read.
- **Default**: empty string - -**toleranceChannel**::
- String value defines the EPICS channel from which the tolerance of the device can be read.
- **Default**: empty string - -**unitChannel**::
- String value defines the EPICS channel from which a string can be read that represents the physical unit of the device values.
- **Default**: empty string - -**doneMovingChannel**::
- String value defines the EPICS channel from which the moving status of the device can be read. _Pixelator_ expects a value of 1 means that the hardware has completed its movement and a value of 0 means that it has not completed the movement.
- **Default**: empty string - -**doneMovingInv**::
- Boolean value defines if the meaning of the values read from the **doneMovingChannel** channel should be inverted.
- **Default**: false - -**stopMovingChannel**::
- String value defines the EPICS channel that is used to stop a motion when a "All Motors Off" is requested.
- **Default**: empty string - - - -## Tango -This positioner type interfaces with the [TANGO](https://www.tango-controls.org/) hardware control system. Note that a "Tango" type positioner can be configured as an [Orchestra Detector](#orchestra-detector). - - -**Device**::
- String value defines address of the TANGO object.
- **Default**: empty string - -**setAttribute**::
- String value defines the device attribute to which move requests should be written.
- **Default**: empty string - -**setCommand**::
- String value defines command to be issued to the TANGO device in order to perform a move request.
- **Default**: empty string - -**getAttribute**::
- String value defines the device attribute from which position values should be read.
- **Default**: empty string - -**lowAttribute**::
- String value defines the device attribute from which the hardware low limit value can be read.
- **Default**: empty string - -**highAttribute**::
- String value defines the device attribute from which the hardware high limit value can be read.
- **Default**: empty string - -**toleranceAttribute**::
- String value defines the device attribute from which the hardware tolerance can be read.
- **Default**: empty string - -**unitAttribute**::
- String value defines the device attribute from which a string representing the physical unit of the positioner values can be read.
- **Default**: empty string - -**doneMovingAttribute**::
- String value defines device attribute from which the movement status of the device can be read.
- **Default**: empty string - -**polarizationMapping**::
- Boolean value defines whether to perform [mapping](https://gitlab.psi.ch/microspectro/pixelator/-/blob/master/PixelatorController/src/TangoPositioner.cc#L261) between string values used by TANGO and numerical values used by _Pixelator_.
- **Default**: false - -| TANGO string | _Pixelator_ number | -|--------------|--------------------| -| "LH" | 1 | -| "LV" | 2 | -| "CL" | 3 | -| "CR" | 4 | - - -### Orchestra Detector - -An Orchestra detector is a special type of **readOnly** positioner that uses Orchestra to sample the most recent value of an "Epics" or "Tango" data channel with no waiting. An Orchestra detector being configured as a type of positioner is an historical artefact that may be corrected in future. This can be used, for example, to monitor the synchrotrons storage ring current that is provided via an EPICS channel on a pixel-by-pixel basis with minimal overhead. - - **orchestraDetector**::
- Strinf value defines the name of the Orchestra controller that will perform the value sampling.
- **Default**: empty string - - **orchestraDetectorChannelIndex**::
- Integer value defines the orchestra channel to be used for the value sampling.
- **Default**: -1 - - **orchestraDetectorMonitor**::
- Boolean value defines if the positioner values should be recorded in the scan file as a monitor.
- **Default**: false - -## NewPort - - -**controller**::
- String value defines the name of the hardware controller that communicates with the device.
- **Default**: empty string - -**groupName**::
- String value defines the name of the device group of which the positioner is a member.
- **Default**: name string of the positioner - -**positionerName**::
- String value defines the name by which the controller recognizes the positioner.
- **Default**: name string of the positioner - -**maxAccel**::
- Double value defines the upper limit for the positioners rate of acceleration.
- **Default**: 4 - -## NexLine - -**controller**::
- String value defines the name of the hardware controller that communicates with the device.
- **Default**: empty string - -**positionerNr**::
- Integer value defines the index of the positioner in the controllers list of devices.
- **Default**: 0 - -## SmarAct - -**controller**::
- String value defines the name of the hardware controller that communicates with the device.
- **Default**: empty string - -**positionerNr**::
- Integer value defines the index of the positioner in the controllers list of devices.
- **Default**: 0 - -**isRot**::
- Boolean value defines whether the positioner is a rotational (rather than linear).
- **Default**: false - -**receiveTimeout**::
- Double value defines how many seconds _Pixelator_ shall wait for a response to a request.
- **Default**: 5.0 - -**initDir**::
- Integer value defines the direction that the positioner shall move when performing its initialization function.
- **Default**: 0 - -**ignoreNotHomed**::
- Bool value defines if the "not homed state" flag is ignored.
- **Default**: False - - -## SmarActUsb - -**deviceName**::
- String value defines the name of the device in the linux USB bus.
- **Default**: empty string - - -## SmarActTcp - -**controller**::
- String value defines the name of the hardware controller that communicates with the device.
- **Default**: empty string - -**positionerNr**::
- Integer value defines the index of the positioner in the controllers list of devices.
- **Default**: 0 - -**isRot**::
- Boolean value defines whether the positioner is a rotational (rather than linear).
- **Default**: false - -**receiveTimeout**::
- Double value defines how many seconds _Pixelator_ shall wait for a response to a request.
- **Default**: 5.0 - - -## Interferometer -This detector type is always read only. - -**controller**::
- String value defines the name of the hardware controller that communicates with the device.
- **Default**: empty string - - **axis**::
- Integer value defines the axis measured by this positioner. The integer value is determined by the order in which the axes are defined in in the [axis.json settings file](PixelatorControllerSettings#axis)
- **Default**: 0 - - -## BeamShutter - -**devicePath**::
- String value defines address of the device.
- **Default**: empty string - -**subdevice**::
- Integer value defines subaddress of the device.
- **Default**: 0 - -**channel**::
- Integer value defines channel index of the device.
- **Default**: 0 - - -## AnalogOut - -**devicePath**::
- String value defines address of the device.
- **Default**: empty string - -**subdevice**::
- Integer value defines subaddress of the device.
- **Default**: 0 - -**channel**::
- Integer value defines channel index of the device.
- **Default**: 0 - - -## Transform -This positioner type is the combination of multiple positioners to create a new set of axes that might be tilted or reshaped with respect to the component positioner axes. - -**functionCode**::
- Integer value defines which transform to apply. Accepted values include: - * 0: PolLux flexure stage for coarse XY stage (transforms physical arcs into linear movements). - * 1: Rotated XY axes (doesn't affect Z-axis movements) - * 2: Rotated XYZ axes for laminography or in-plane XMCD measurements. - * 3: [Matrix transform](https://en.wikipedia.org/wiki/Transformation_matrix) -
 **Default**: 0 - -**axisNr**::
- Integer value defines index of the coordinate system axis.
- **Default**: 0 - -**moveOrder**::
- Integer value defines whether the positioner shall be moved before or after the Z-axis positioner (to avoid crashing the sample into the OSA). Only valid with **functionCode** == 2. Accepted values include: - * -1: Negative positioner moves are completed fully before Z-axis movement starts. Positive positioner moves are started after Z-axis movement is complete. - * 0: Move order not controlled. - * +1: Positive positioner moves are completed fully before Z-axis movement starts. Negative positioner moves are started after Z-axis movement is complete. -
 **Default**: 0 - -**angleXZ**::
- Double value defines the number of degrees through which the coordinate system is rotated in the XZ plane (about the Y-axis). Only valid with **functionCode** == 2
- **Default**: 0.0 - -**angleYZ**::
- Double value defines the number of degrees through which the coordinate system is rotated in the YZ plane (about the X-axis). Only valid with **functionCode** == 2
- **Default**: 0.0 - -**param1**::
-**param2**::
-**param3**::
-**param4**::
-**param5**::
- String value defines positioner names involved in the transform. The number of **param#** parameters that need to be declared depends on the number of axes involved and therefore the **functionCode** value. The first 2 parameters (3 for **functionCode**>=2) refer to the component positioners (i.e. inputs), and the last (latter 2 for **functionCode**>=2) refer to the complementary positioners (i.e. output positioners that give the other axes). It is possible to stack transforms such that a "transform" type positioner can be referred to as a base component (declared in one of the **param#** parameters) for another "transform" type positioner.
- **Default**: empty string - -**matrix**::
- Array of double values defines the transform matrix to be used when **functionCode**==3. The array should have a either 4 or 9 values.
- **Default**: 0 - - -## Zaber - -**controller**::
- String value defines the name of the hardware controller that communicates with the device.
- **Default**: empty string - -**positionerNr**::
- Integer value defines the index of the positioner in the controllers list of devices.
- **Default**: 0 - -**receiveTimeout**::
- Double value defines how many seconds _Pixelator_ shall wait for a response to a request.
- **Default**: 5.0 - - -## ZmiEpics - -**axis**::
- Integer value defines index of the coordinate system axis. (I didn't find where this is actually used in the code.)
- **Default**: 0 - -**precision**::
- Double value defines the precision with which to record the positioner position values.
- **Default**: 0.1 - -**resetVoltage**::
- Double value defines the "reset voltage" value to be published on the **vresetChannel** EPICS channel.
- **Default**: 0.0 - -**fbonChannel**::
- String value defines the EPICS channel to which requests to switch the feedback on and off can be published.
- **Default**: empty string - -**setChannel**::
- String value defines the EPICS channel to which a move request can be written.
- **Default**: empty string - -**getChannel**::
- String value defines the EPICS channel from which a position value can be read.
- **Default**: empty string - -**presetChannel**::
- String value defines the EPICS channel to which a a coarse position value can be written when resetting the interferometer.
- **Default**: empty string - -**resetChannel**::
- String value defines the EPICS channel to which a reset request can be written.
- **Default**: empty string - -**errChannel**::
- String value defines the EPICS channel from which the position error can be read.
- **Default**: empty string - -**vresetChannel**::
- String value defines the EPICS channel to which the **resetVoltage** value can be written.
- **Default**: empty string - -**istatusChannel**::
- String value defines the EPICS channel from which the status of the positioner can be read.
+# Positioner +This file contains the positioner settings. + +See source:trunk/PixelatorController/config/positioner.json for an example. + + **atPositionCheckInverval_Default**::
+ Double value used for all positioners that don't define their own atPositionCheckInverval.
+ **Default**: 0.002 + + **atPositionCheckTimeout_Default**::
+ Double value used for all positioners that don't define their own atPositionCheckTimeout.
+ **Default**: 10.0 + +The remaining entries are positioner names with their settings. The settings depend on the positioner type. + +## base settings +The following settings are available for all types of positioners: + + **type**::
+ String value that identifies which hardware interface will handle the positioner behaviour. The list of allowed values is listed near the beginning of [`Positioner.h`](https://gitlab.psi.ch/microspectro/pixelator/-/blob/master/PixelatorController/src/Positioner.h#L28), for example: + +`enum Type { Base, Epics, Tango, NewPort, NexLine, SmarAct, SmarActUsb, SmarActTcp, Interferometer, BeamShutter, AnalogOut, Transform, Zaber, ZmiEpics };` + + **active**::
+ Integer value that defines if the positioner should be used (value of 1) or ignored (value of 0).
+ **Default**: 0 + + **axisName**::
+ String value defines the name of the axis moved by this positioner.
+ Example: Coarse and Fine X both belong to SampleX.
+ Note: The named axis must be defined in axis.json, or Pixelator will crash.
+ **Default**: positioner name + + **nexus_name**::
+ String value defines the positioners name in the hdf5 file.
+ **Default**: positioner name + + **readOnly**::
+ Boolean value true when the positioner can only be used to read its position (i.e. cannot request a move).
+ **Default**: false + + **description**::
+ String value describes the function of the positioner. That value is written to the hdf5 file (NXcollection) and it is sent to PixelatorGUI.
+ **Default**: "" (empty string) + + **unit**::
+ String value defines the unit of the positioner values (on the GUI and in the hdf5 file).
+ **Default**: "" (empty string) + + **hardwareUnitFactor**::
+ Double value defines the conversion factor used to convert hardware positioner values to **unit***.
+ **Default**: 1.0 + + **distributionMode**::
+ String value defines the discribution of points to an interval.
+ Example: 5 points from 0 to 10: + * "n": 0, 2.5, 5, 7.5, 10 + * "nPlus1": 0, 2, 4, 6, 8, 10 + + **Default**: "n" + + **positionOffset**::
+ Double value defines shift of coordinates between those communicated with the hardware controller and the user.
+ **Default**: 0.0 + + **upperSoftLimit**::
+ Double value defines largest value allowed to be requested to move to.
+ **Default**: 0.0 + + **lowerSoftLimit**::
+ Double value defines lowest value allowed to be requested to move to.
+ **Default**: 0.0 + + **coarsePositioner**::
+ String value defines cooperating positioner that will handle large movements.
+ **Default**: "" (empty string) + + **finePositioner**::
+ String value defines cooperating positioner that will handle fine movements.
+ **Default**: "" (empty string) + + **maxVelocity**::
+ Double value defines maximum rate of movement.
+ **Default**: 0.0 + + **autoOff**::
+ Positioners can be set to an unpowered state after 1 of 3 events: +1. positioner move due to direct request +2. positioner move due scan request +3. "All Motors Off" request + + "Never" : Positioner remains powered after scanning moves and is unaffected by an "All Motors Off" request.
+ "Always" : positioner is unpowered after any move that is part of a scan and by an "All Motors Off" request. However, a simple move request will not unpower the positioner.
+ "SlowAxis" : Positioner is unpowered after each scan move if it is not part of the fast scanning axis.
+ "Disabled" : this is a "hack" to disable the "fine" positioner in a "coarse"/"fine" pair.
+ "Manual" : Positioner remains powered after scanning moves, but is unpowered by "All Motors Off" request.
+ **Default**: "Never" + +| autoOff value | simple move | scan move
(fastest axis) | scan move
(not fastest) | "All Motors Off" | +|---------------|-------------|-------|------|------------------| +| "Never" | ON | ON | ON | ON | +| "Always" | ON | OFF | OFF | OFF | +| "SlowAxis" | ON | ON | OFF | OFF | +| "Manual" | ON | ON | ON | OFF | + + +**linkedOffsetPositionerName**::
+ String value that defines the name of a positioner whose movements are to be coordinated. Typically stated in a zoneplate Z-axis positioner configuration with a value corresponding to the fine positioner of the sample Z-axis.
+ **Default**: empty string + + **beamlineControlPosition**::
+ Integer value defines inclusion of (value greater than zero), and position of a positioner control in the "Beamline Control" and "Microscope Status" sections of the GUI. The "Beamline Control" section will only list positioners with a **beamlineControlPosition** value greater than zero, with each positioner listed in ascending **beamlineControlPosition** order. The "Microscope Status" GUI section will list any positioner with a **beamlineControlPosition** value of zero (except it will always ignore a positioner with the name "BeamShutter"). Negative values can be used to exclude a positioner from both sections of the GUI. +
 **Default**: 0 + + **epsilon**::
+ Double value defines numerical precision to be considered when calculating positioner moves.
+ **Default**: 0.1 + + **atPositionCheckInverval**::
+ Double value defines the interval (in seconds) used in waitDoneMoving(). + getStatus() is called in this interval as long as it returns moving or + until atPositionCheckTimeout is exceeded.
+ **Default**: atPositionCheckInverval_Default ([see above](#positioner)) + + **atPositionCheckTimeout**::
+ Double value defines the timeout (in seconds) used in waitDoneMoving(). + getStatus() is called as long as it returns moving or until atPositionCheckTimeout is exceeded.
+ **Default**: atPositionCheckTimeout_Default ([see above](#positioner)) + + **stringPositions**::
+ Optional array of objects with members that defines relationships between string and numeric values. Pixelator always considers positioners to have a numerical value, while the hardware controllers sometimes operate in terms of named states (e.g. "on" and "off") and this array defines the translation. + * **string**: String value defines the position name + * **position**: Double value defines the position value + + These objects can be used to get + * a name of a position value (positionUserToStringHardware) + * the position of a named position (stringHardwareToPositionUser) + + +## Epics +This positioner type interfaces with the [EPICS](https://epics.anl.gov/) hardware control system. Note that an "Epics" type positioner can be configured as an [Orchestra Detector](#orchestra-detector). + + +**setChannel**::
+ String value defines the EPICS channel to which a move request can be written.
+ **Default**: empty string + +**getChannel**::
+ String value defines the EPICS channel from which a position value can be read.
+ **Default**: empty string + +**lowChannel**::
+ String value defines the EPICS channel from which lower hardware limit of the device can be read.
+ **Default**: empty string + +**highChannel**::
+ String value defines the EPICS channel from which upper hardware limit of the device can be read.
+ **Default**: empty string + +**toleranceChannel**::
+ String value defines the EPICS channel from which the tolerance of the device can be read.
+ **Default**: empty string + +**unitChannel**::
+ String value defines the EPICS channel from which a string can be read that represents the physical unit of the device values.
+ **Default**: empty string + +**doneMovingChannel**::
+ String value defines the EPICS channel from which the moving status of the device can be read. _Pixelator_ expects a value of 1 means that the hardware has completed its movement and a value of 0 means that it has not completed the movement.
+ **Default**: empty string + +**doneMovingInv**::
+ Boolean value defines if the meaning of the values read from the **doneMovingChannel** channel should be inverted.
+ **Default**: false + +**stopMovingChannel**::
+ String value defines the EPICS channel that is used to stop a motion when a "All Motors Off" is requested.
+ **Default**: empty string + + + +## Tango +This positioner type interfaces with the [TANGO](https://www.tango-controls.org/) hardware control system. Note that a "Tango" type positioner can be configured as an [Orchestra Detector](#orchestra-detector). + + +**Device**::
+ String value defines address of the TANGO object.
+ **Default**: empty string + +**setAttribute**::
+ String value defines the device attribute to which move requests should be written.
+ **Default**: empty string + +**setCommand**::
+ String value defines command to be issued to the TANGO device in order to perform a move request.
+ **Default**: empty string + +**getAttribute**::
+ String value defines the device attribute from which position values should be read.
+ **Default**: empty string + +**lowAttribute**::
+ String value defines the device attribute from which the hardware low limit value can be read.
+ **Default**: empty string + +**highAttribute**::
+ String value defines the device attribute from which the hardware high limit value can be read.
+ **Default**: empty string + +**toleranceAttribute**::
+ String value defines the device attribute from which the hardware tolerance can be read.
+ **Default**: empty string + +**unitAttribute**::
+ String value defines the device attribute from which a string representing the physical unit of the positioner values can be read.
+ **Default**: empty string + +**doneMovingAttribute**::
+ String value defines device attribute from which the movement status of the device can be read.
+ **Default**: empty string + +**polarizationMapping**::
+ Boolean value defines whether to perform [mapping](https://gitlab.psi.ch/microspectro/pixelator/-/blob/master/PixelatorController/src/TangoPositioner.cc#L261) between string values used by TANGO and numerical values used by _Pixelator_.
+ **Default**: false + +| TANGO string | _Pixelator_ number | +|--------------|--------------------| +| "LH" | 1 | +| "LV" | 2 | +| "CL" | 3 | +| "CR" | 4 | + + +### Realtime Sampling + +An EPICS channel can be sampled at a fast rate via Orocos when [correctly configured](Realtime-Sampler-Configuration). This can be used, for example, to monitor the synchrotrons storage ring current that is provided via an EPICS channel on a pixel-by-pixel basis with minimal overhead. + + **rtDetector**::
+ Strinf value defines the name of the Orocos detector that will perform the value sampling.
+ **Default**: empty string + + **rtDetectorChannelIndex**::
+ Integer value defines the Orocos channel to be used for the value sampling.
+ **Default**: -1 + + **rtDetectorMonitor**::
+ Boolean value defines if the positioner values should be recorded in the scan file as a monitor.
+ **Default**: false + +### Orchestra Detector (obsolete) + +An Orchestra detector is a special type of **readOnly** positioner that uses Orchestra to sample the most recent value of an "Epics" or "Tango" data channel with no waiting. An Orchestra detector being configured as a type of positioner is an historical artefact that may be corrected in future. This can be used, for example, to monitor the synchrotrons storage ring current that is provided via an EPICS channel on a pixel-by-pixel basis with minimal overhead. + + **orchestraDetector**::
+ Strinf value defines the name of the Orchestra controller that will perform the value sampling.
+ **Default**: empty string + + **orchestraDetectorChannelIndex**::
+ Integer value defines the orchestra channel to be used for the value sampling.
+ **Default**: -1 + + **orchestraDetectorMonitor**::
+ Boolean value defines if the positioner values should be recorded in the scan file as a monitor.
+ **Default**: false + +## NewPort + + +**controller**::
+ String value defines the name of the hardware controller that communicates with the device.
+ **Default**: empty string + +**groupName**::
+ String value defines the name of the device group of which the positioner is a member.
+ **Default**: name string of the positioner + +**positionerName**::
+ String value defines the name by which the controller recognizes the positioner.
+ **Default**: name string of the positioner + +**maxAccel**::
+ Double value defines the upper limit for the positioners rate of acceleration.
+ **Default**: 4 + +## NexLine + +**controller**::
+ String value defines the name of the hardware controller that communicates with the device.
+ **Default**: empty string + +**positionerNr**::
+ Integer value defines the index of the positioner in the controllers list of devices.
+ **Default**: 0 + +## SmarAct + +**controller**::
+ String value defines the name of the hardware controller that communicates with the device.
+ **Default**: empty string + +**positionerNr**::
+ Integer value defines the index of the positioner in the controllers list of devices.
+ **Default**: 0 + +**isRot**::
+ Boolean value defines whether the positioner is a rotational (rather than linear).
+ **Default**: false + +**receiveTimeout**::
+ Double value defines how many seconds _Pixelator_ shall wait for a response to a request.
+ **Default**: 5.0 + +**initDir**::
+ Integer value defines the direction that the positioner shall move when performing its initialization function.
+ **Default**: 0 + +**ignoreNotHomed**::
+ Bool value defines if the "not homed state" flag is ignored.
+ **Default**: False + + +## SmarActUsb + +**deviceName**::
+ String value defines the name of the device in the linux USB bus.
+ **Default**: empty string + + +## SmarActTcp + +**controller**::
+ String value defines the name of the hardware controller that communicates with the device.
+ **Default**: empty string + +**positionerNr**::
+ Integer value defines the index of the positioner in the controllers list of devices.
+ **Default**: 0 + +**isRot**::
+ Boolean value defines whether the positioner is a rotational (rather than linear).
+ **Default**: false + +**receiveTimeout**::
+ Double value defines how many seconds _Pixelator_ shall wait for a response to a request.
+ **Default**: 5.0 + + +## Interferometer +This detector type is always read only. + +**controller**::
+ String value defines the name of the hardware controller that communicates with the device.
+ **Default**: empty string + + **axis**::
+ Integer value defines the axis measured by this positioner. The integer value is determined by the order in which the axes are defined in in the [axis.json settings file](PixelatorControllerSettings#axis)
+ **Default**: 0 + + +## BeamShutter + +**devicePath**::
+ String value defines address of the device.
+ **Default**: empty string + +**subdevice**::
+ Integer value defines subaddress of the device.
+ **Default**: 0 + +**channel**::
+ Integer value defines channel index of the device.
+ **Default**: 0 + + +## AnalogOut + +**devicePath**::
+ String value defines address of the device.
+ **Default**: empty string + +**subdevice**::
+ Integer value defines subaddress of the device.
+ **Default**: 0 + +**channel**::
+ Integer value defines channel index of the device.
+ **Default**: 0 + + +## Transform +This positioner type is the combination of multiple positioners to create a new set of axes that might be tilted or reshaped with respect to the component positioner axes. + +**functionCode**::
+ Integer value defines which transform to apply. Accepted values include: + * 0: PolLux flexure stage for coarse XY stage (transforms physical arcs into linear movements). + * 1: Rotated XY axes (doesn't affect Z-axis movements) + * 2: Rotated XYZ axes for laminography or in-plane XMCD measurements. + * 3: [Matrix transform](https://en.wikipedia.org/wiki/Transformation_matrix) +
 **Default**: 0 + +**axisNr**::
+ Integer value defines index of the coordinate system axis.
+ **Default**: 0 + +**moveOrder**::
+ Integer value defines whether the positioner shall be moved before or after the Z-axis positioner (to avoid crashing the sample into the OSA). Only valid with **functionCode** == 2. Accepted values include: + * -1: Negative positioner moves are completed fully before Z-axis movement starts. Positive positioner moves are started after Z-axis movement is complete. + * 0: Move order not controlled. + * +1: Positive positioner moves are completed fully before Z-axis movement starts. Negative positioner moves are started after Z-axis movement is complete. +
 **Default**: 0 + +**angleXZ**::
+ Double value defines the number of degrees through which the coordinate system is rotated in the XZ plane (about the Y-axis). Only valid with **functionCode** == 2
+ **Default**: 0.0 + +**angleYZ**::
+ Double value defines the number of degrees through which the coordinate system is rotated in the YZ plane (about the X-axis). Only valid with **functionCode** == 2
+ **Default**: 0.0 + +**param1**::
+**param2**::
+**param3**::
+**param4**::
+**param5**::
+ String value defines positioner names involved in the transform. The number of **param#** parameters that need to be declared depends on the number of axes involved and therefore the **functionCode** value. The first 2 parameters (3 for **functionCode**>=2) refer to the component positioners (i.e. inputs), and the last (latter 2 for **functionCode**>=2) refer to the complementary positioners (i.e. output positioners that give the other axes). It is possible to stack transforms such that a "transform" type positioner can be referred to as a base component (declared in one of the **param#** parameters) for another "transform" type positioner.
+ **Default**: empty string + +**matrix**::
+ Array of double values defines the transform matrix to be used when **functionCode**==3. The array should have a either 4 or 9 values.
+ **Default**: 0 + + +## Zaber + +**controller**::
+ String value defines the name of the hardware controller that communicates with the device.
+ **Default**: empty string + +**positionerNr**::
+ Integer value defines the index of the positioner in the controllers list of devices.
+ **Default**: 0 + +**receiveTimeout**::
+ Double value defines how many seconds _Pixelator_ shall wait for a response to a request.
+ **Default**: 5.0 + + +## ZmiEpics + +**axis**::
+ Integer value defines index of the coordinate system axis. (I didn't find where this is actually used in the code.)
+ **Default**: 0 + +**precision**::
+ Double value defines the precision with which to record the positioner position values.
+ **Default**: 0.1 + +**resetVoltage**::
+ Double value defines the "reset voltage" value to be published on the **vresetChannel** EPICS channel.
+ **Default**: 0.0 + +**fbonChannel**::
+ String value defines the EPICS channel to which requests to switch the feedback on and off can be published.
+ **Default**: empty string + +**setChannel**::
+ String value defines the EPICS channel to which a move request can be written.
+ **Default**: empty string + +**getChannel**::
+ String value defines the EPICS channel from which a position value can be read.
+ **Default**: empty string + +**presetChannel**::
+ String value defines the EPICS channel to which a a coarse position value can be written when resetting the interferometer.
+ **Default**: empty string + +**resetChannel**::
+ String value defines the EPICS channel to which a reset request can be written.
+ **Default**: empty string + +**errChannel**::
+ String value defines the EPICS channel from which the position error can be read.
+ **Default**: empty string + +**vresetChannel**::
+ String value defines the EPICS channel to which the **resetVoltage** value can be written.
+ **Default**: empty string + +**istatusChannel**::
+ String value defines the EPICS channel from which the status of the positioner can be read.
 **Default**: empty string \ No newline at end of file