Basic Usage
Once the the HXRSnD
module has been installed along with its dependencies,
simply run the shell script in the bin
folder. From the top level of
HXRSnD
the command to run is:
./bin/run_snd
This should set up the IPython
shell with the system instantiated.
Device List
The snd
object is where most if not all of the interfacing with the system
should be done. It has the following devices as attributes:
t1
- Tower 1 in the split and delay systemt4
- Tower 4 in the split and delay systemt2
- Tower 2 in the split and delay systemt3
- Tower 3 in the split and delay systemdi
- Input diode for the systemdd
- Diode between the two delay towersdo
- Output diode for the systemdci
- Input diode for the channel cut linedcc
- Diode between the two channel cut towersdco
- Input diode for the channel cut lineE1
- Macromotor for the delay line energyE2
- Macromotor for the channel cut energydelay
- Macromotor for the delayab
- Air bearings of the systemdaq
- Object that interfaces with the DAQ
Each of the devices has an assortment of motors that can be viewed from the
'Component' section of the object's docstring. The easiest way to so is by using
the IPython
, ?
, operator.
For convenience, each of the components (except the macromotors) are
instantiated independently and should behave identically to when interfaced
using the snd
object.
Motor and Macromotor Classes
The basic interface for the Attocube, Aerotech and macromotors were made to be largely the same, only differing in some of in the implemented convenience methods. The macromotors currently only have core functionality, but this will be expanded in the future.
For each of the methods and properties listed below, using the ?
operator
will show a more detailed docstring than what is listed below. Also, list of
methods below is not an exhaustive list and is just a catalog of some of (what
my idea are) the more useful methods and attributes.
Methods and Properties Common to All Motors:
motor.move()
,motor.mv()
- Moves the motor to the inputted position.motor.move_rel()
,motor.mvr()
- Moves the motor by the inputted value.motor.position
,motor.wm()
- Returns the current position of the motor.
Methods and Properties Common to Aerotech and Attocube Motors
motor.enable()
,motor.disable()
- Enables or disables the motor.motor.enabled
- Returns whether the motor is enabled.motor.stop()
- Stops the current motor move.
Aerotech Methods and Properties
motor.offset
- Current offset of the motor.motor.offset_position()
- Sets the current position to be the inputted position by changing themotor.offset
value.motor.homf()
,motor.homr()
- Homes the motor forward or in reverse.motor.reconfig()
- Pulls the motor parameters from the controller.motor.faulted
- Returns whether the motor is faulted.motor.clear()
- Clears the motor from the faulted state.motor.state
- Returns the state PV of the motor (Go, Stop).motor.ready
- Returns whether the motor is ready for a motion.motor.ready_motor()
- Clears, enabled and changes the state of the motor to "Go".
Attocube Methods and Properties
motor.connected
- Returns whether the motor is connected.motor.refereced
- Returns whether the motor is referenced.motor.error
- Returns whether the motor has an error.
Towers
The towers themselves have some methods and attributes that may be useful for general usage. Below is a list of some of them.
tower.enable()
,tower.disable()
,tower.clear()
- Enables, disables or clears all the (aerotech and attocube) motors in this tower.tower.pos_inserted
,tower.pos_removed
- Attributes that hold the x values that correspond to the inserted and removed positions of the tower.tower.insert()
,tower.remove()
- Moves the tower to thepos_inserted
orpos_removed
positions. Note: this only works ifpos_inserted
orpos_removed
are set.tower.energy
- Sets or returns the energy the tower is currently tuned for based on the angle of the theta motor. Note: This is not guaranteed to be correct for now.tower.theta
- The bragg angle the tower is currently set to maximize. This is computed using the overall theta motor of the tower (tower.tth
for delay towers andtower.th
for the channel cut tower). Note: This is not guaranteed to be correct for now.
Bragg Calculations
The bragg angle and energy calculations used to perform the energy macro-motions are in following script:
HXRSnD/hxrsnd/bragg.py
They were both pulled from blutil
and the script should contain all the
necessary components to perform the calculation. For convenience, both
bragg_angle()
and bragg_energy()
are imported to this environment for
quick testing.
Additionally, there are three functions implemented by Yanwen that are also present in the environment. These can be used to perform any quick calculations and are listed below:
snd_L
- Calculates the bragg angles for the delay and channel cut branches, in addition to the delay.snd_diag
- Calculates the positions of the diagnostic motors in the middle of the system to intersect with the beam at the inputted energies and delay.snd_delay
- Calculates the delay of the system based on the length of the delay arm.