Skip to content
John Holt edited this page May 3, 2019 · 30 revisions

Wiki > The Backend System > Specific Device IOC > Miscellaneous motion control > Reflectometry IOC

Wiki > Project overview > Design documents > Reflectometers > Reflectometry IOC

High level Requirements

As described in the physics background page (Reflectometers Science), we need to calculate where a beamline should physically be based on higher level parameters, and track a changing beam path with multiple components. The user workflows we need to support are:

  1. Delayed move (the user wants to move one or multiple devices on the beamline and they want to confirm the entered value(s) before committing to the move):
    1. Set a parameter (or multiple)
    2. Ensure the value is correct by reading it
    3. Move to the set value – either:
      1. Trigger move for a single parameter – the new value is applied for this parameter, all others retain their current values.
      2. Trigger move for all parameters – any new values are applied for all parameters
  2. Immediate move (the user knows the value is correct and just wants to move):
    1. Set a single parameter
    2. Beamline immediately moves parameter to that position, while keeping all other parameters at their current value
  3. Readback values (so the user knows where the beamline actually is)
    1. When any component, moves the actual position of the parameters should be reported
  4. Visual indicators (so the user has extra information on the state of parameters without thought, usually indicated on the GUI via a colour)
    1. If a parameter setpoint is changed but not moved to (default colour yellow)
    2. If an underlying motor of a parameter is moving (default colour green)
    3. If a setpoint readback and readback are different from each other and not moving (default colour red)
    4. If a setpoint and setpoint readback are different and the setpoint is not changed (default colour red)
      1. TBD - we are not sure, we don't just want to copy values up from lower components.

Design Details

Reflectometry IOC sits on top of:

  • Motor Driver Layer: This layer is responsible for communicating with the galil and other motors. This is complete.
  • Motor Group Layer: This layer groups together motors from the motor driver layer into more natural groups. For instance a jawset, which allows a user to set jaw gaps and height, not just positions of individual blades.

The reflectometry IOC is composed of layers, each layer talking to the layer below and above it:

  • Beamline Parameters: In this layer, the user is specifying where they want a component to be positioned in relation to the incoming beam. The user will specify theta, for instance, which will then set the position of the geometry component related to theta. They will also read whether the geometry component has changed and report a readback of the positions on the actual beamline. The beamline parameters are calculated in a strict order starting with those closest to the source to ensure the path is correct. Parameters can be disabled in which case they do not automatically track the beam.

  • Geometry Components: This layer calculates the beam path, and handles the conversion of positions between parameter values (relative to current beam path) and motor values (absolute room coordinates). The beamline parameters set the positions from above and the composite driving layers sets the parameters from below.

  • Composite Driving Layer: This layer pushes values from the parameters into the motor group and motor driver PVs. They also push the readbacks up to the geometry layer. This layer contains some logic to allow concurrent moves with very simple synchronization (complete all moves in time with the slowest axis).

The whole system is coordinated by the Beamline object.

Other Concepts

Footprint Calculator

The footprint calculator calculates the resolution and footprint on the sample based on the slit gaps, distances between slits and sample length. This object is owned by the beamline. Currently, the footprint and resolution values are read-only.

Clone this wiki locally