5. Photon Delivery System#

5.1. Configure the Photon Delivery System#

Configuring the photon delivery system for a specific measurement is usually quite simple. When moving to a new absorption edge, do the following:

RE(change_edge('Fe'))

substituting the two-letter symbol for the element you want to measure. This will:

  • move the monochromator (Section 5.3)

  • put the photon delivery system in the correct mode (Section 5.7.1)

  • measure the rocking curve of the monochromator (Section 6.2)

  • optimize the height of the hutch slits (Section 6.2)

  • move the reference foil holder to the correct position (Section 4.1)

  • set the active Xspress3 ROI to the correct emission line

This whole process takes at most 7 minutes, sometimes under 3 minutes. After that, the beamline is ready to collect data.

If using the focusing mirror, do this:

RE(change_edge('Fe', focus=True))

Excluding the focus argument – or setting it to False – indicates setup for collimated beam.

This edge change can be put into a macro (see Section 7.6) like so:

yield from change_edge('Fe')

or

yield from change_edge('Fe', focus=True)

In this way, a macro can manage energy changes while you sleep!

5.1.1. Automating reference foil changes#

A wheel is used to hold and switch between reference foils and stable oxides. The standard reference wheel has most of the elements accessible at BMM, including all the lanthanides (except Pm!). A double wheel (see Figure 8.2) is used to hold the standards. The wheel is mounted on a rotation stage which is, in turn, mounted on an XY stage for alignment. See Table 7.2 for the contents of reference wheel.

_images/ref_wheel.jpg

Fig. 5.1 The reference wheel.#

To select, for example, the iron reference foil:

RE(reference('Fe'))

In a plan:

yield from reference('Fe')

The argument is simply the one- or two-element symbol for the target element.

This selects the correct reference by rotating to the correct slot and translating to the correct ring on the wheel.

The change_edge() command does this automatically, so long as the target edge is available on the reference holder.

The reference wheel content is configured as a python dictionary. See xafs_ref.mapping.

This dictionary identifies the positions in xafs_ref and xafs_refx for each reference sample. It also identifies the form of the reference samples and its chemical composition.

To see the available reference materials and their positions on the reference wheel, do %se.

Here is a complete list of standards in BMM’s collection.

5.1.2. Parameters for the change_edge() command#

Typically the change_edge() command is called with one or two arguments, the mandatory element symbol and the the focus argument, which can be True or False.

The full set of parameters for the change_edge() plan are:

RE(change_edge(element, focus=False, edge='K', energy=None, tune=True, slits=True, calibrating=False, target=300.))

where,

element

The one- or two-letter element symbol or Z number.

focus

True: set up for using the focusing mirror, modes A, B, C; False: collimated beam, modes D, E, F. Default is False.

edge

If not specified, use K or L3, as appropriate for the energy range of the beamline. Use this argument to specify an L1, L2, or M edge.

energy

Use an E0 value that is not obtained from the look-up table. Default is unspecified, i.e. use element and look-up table. This is rarely necessary, except when setting up for XRD.

tune

True: optimize DCM second crystal pitch; False: skip rocking_curve() scan. Default is True. Skipping this is rarely a good idea.

slits

True: optimize slit height; False: skip slit_hight() scan. Default is True. Skipping this is rarely a good idea.

calibrating

True: used when performing beamline maintenance. Default is False. Rarely used.

target

The energy above e0 at which to perform the rocking curve scan. Default is 300.

Except for edge and focus, most of those parameters are rarely used. If you need to set up for measuring an L2 or L1 edge, you must specify edge. For example:

RE(change_edge('Pt', edge='L1'))

For all the details about the individual parts of the photon delivery system, read on!

5.2. Shutters#

Open and close the photon shutter

In the nomenclature of BMM, the photon shutter is shb. Open and close this shutter with:

shb.open()
shb.close()

These plans are somewhat more elaborate than simply toggling the state of the shutters. It happens from time to time that the shutter does not trigger when told to open or close. So, these plans try up to three times to open or close the photon shutter, with a 1.5 second pause between attempts.

If you wish to open or close the photon shutter (using the same multiple attempt algorithm) in a macro (Section 7.6), do:

yield from shb.open_plan()
yield from shb.close_plan()
Open and close the safety shutter

This is the front-end shutter. Closing it takes light off the monochromator, which is not something you typically want to do during an experiment. That said, the safety shutter is sha in the BMM nomenclature:

sha.open()
sha.close()

and:

yield from sha.open_plan()
yield from sha.close_plan()

5.3. Monochromator#

The monochromator consists of 8 motors. It should never be necessary to interact directly with any of the physical motors. Plans exist for facilitating any actions a user should ever need.

Query the current energy

To know the position and energy of the monochromator: %w dcm

This returns a short report like this:

Energy = 19300.1   reflection = Si(111)
current: Bragg =  5.87946   2nd Xtal Perp = 15.0792   2nd Xtal Para = 146.4328

This report shows the current energy, the crystal set currently in use, and the position of the parallel and perpendicular motors of the second crystal carriage.

Move to a new energy

The dcm.energy virtual motor coordinates the Bragg, parallel, and perpendicular motors to maintain a fixed exit height and set the energy of the mono. To move to the copper K edge energy:

RE(mv(dcm.energy, 8979))

To move 50 eV above the copper K edge energy:

RE(mv(dcm.energy, 8979+50))

Note that the BlueSky command line is able to do simple arithmetic (and a whole lot more!). It is a good idea to leave the arithmetic to the computer.

Move to a new energy in a macro

An energy change can be a part of a macro (Section 7.6). Simply do:

yield from mv(dcm.energy, 8979+50))
Tune the second crystal of the mono

After a long move, you might need to retune the second crystal. To find the peak of the rocking curve and move to that peak:

RE(rocking_curve())

This will run a scan of the pitch of the second crystal. At the end of the scan, it moves to the center of mass of the measured intensity profile.

You can do the rocking curve scan by looking at the signal on the Bicron which is used as the incident beam monitor for the XRD end station. Do:

RE(rocking_curve(detector='Bicron'))

You can tune the second crystal by hand with these commands:

tu()
td()

Those stand for “tune up” and “tune down”. Do not think that “up” and “down” refer to measured intensity. Rather, they refer to the direction of motion of the motor which adjusts the second crystal pitch. When you move to higher energy, you usually need to tune in td() direction. When you move to a lower energy, you usually need to tune in the tu() direction. Obviously…..

Fixed-exit and pseudo-channelcut modes

The mono can be run in either fixed-exit or pseudo-channelcut modes.

Fixed exit means that the second monochromator crystal will be moved in directions parallel and perpendicular to its diffracting surface in order to maintain a fixed exit height of the beam coming from the second crystal. Without fixed-exit mode, it would not be possible to change the energy over the entire energy range of the beamline. The aperture after the monochromator is only a few millimeters tall. The vertical displacement of the beam over a lerge energy change would be sufficient to move the beam out of the aperture.

However, the stability of the monochromator suffers with respect to EXAFS data quality when measuring an energy scan in fixed-exit mode. We find it is better to disable the parallel and perpendicular motions when measuring XAFS, suffering a small vertical displacement of the beam.

The mono mode is controlled by a parameter:

dcm.mode = 'fixed'

or

dcm.mode = 'channelcut'

In practice, the monochromator is normally left in fixed-exit mode. That way, the monochromator can be moved without having to worry about the beam height and the monochromator exit aperture. In the XAFS scan plan (Section 7.4), the monochromator first moves – in fixed-exit mode – to the center of the angular range of the scan, then sets dcm.mode to channelcut. Once the sequence of scan repititions is finished, the monochromator is moved back to the center of the angular range and the monochromator is returned to fixed-exit mode.

5.4. Post-mono slits#

After the mono, before the focusing mirror, in Diagnostic Module 2, there is a four-blade slit system. These are used to define the beam size on the mirrors and to refine energy resolution for the focused beam..

Table 5.1 Post mono slit motors#

motor

units

notes

motion type

slits2_top

mm

top blade position

single axis

slits2_bottom

mm

bottom blade position

single axis

slits2_inboard

mm

inboard blade position

single axis

slits2_outboard

mm

outboard blade position

single axis

slits2_hsize

mm

horizontal size

coordinated motion

slits2_hcenter

mm

horizontal center

coordinated motion

slits2_vsize

mm

vertical size

coordinated motion

slits2_vcenter

mm

vertical center

coordinated motion

The individual blades are moved like any other motor:

RE(mv(slits2.outboard, -0.5))
RE(mvr(slits2.top, -0.1))

Coordinated motions are moved the same way:

RE(mv(slits2.hsize, 6))
RE(mvr(slits2.vcenter, -0.1))

To know the current positions of the slit blades and their coordinated motions, use %w slits2

In [1966]: %w slits2
SLITS2:
     vertical   size   =   1.350 mm          Top      =   0.675
     vertical   center =   0.000 mm          Bottom   =  -0.675
     horizontal size   =   8.000 mm          Outboard =   4.000
     horizontal center =   0.000 mm          Inboard  =  -4.000

5.5. Mirrors#

Mirrors are set as part of the mode changing plan. Unless you know exactly what you are doing, you probably don’t want to move the mirrors outside of the change_mode() command. (Adjusting M1 by hand is a horrible idea – unless you know exactly what you are doing and why.) Changing the mirror positions in any way changes the height and inclination of the beam as it enters the end station. This requires changes in positions of the slits, the XAFS table, and other parts of the photon delivery system.

Outside of the use of the change_mode() command, it should not be necessary for users to move the mirror motors. It is very easy to lose the beam entirely when moving mirror motors. Without a clear understanding of how the optics work, re-finding the beam can be quite challenging. If you loose the beam by moving motors, the best solution is probably to rerun the change_mode() command.

That said, if you want to know the current positions of the motors on the focusing mirror, use %w m2

In [1903]: %w m2
M2:
     vertical =   6.000 mm           YU  =   6.000
     lateral  =   0.000 mm           YDO =   6.000
     pitch    =   0.000 mrad         YDI =   6.000
     roll     =  -0.001 mrad         XU  =  -0.129
     yaw      =   0.200 mrad         XD  =   0.129
     bender   =  163789.0 steps

For the harmonic rejection mirror, use %w m3

In [1904]: %w m3
M3: (Rh/Pt stripe)
     vertical =   0.000 mm           YU  =  -1.167
     lateral  =  15.001 mm           YDO =   1.167
     pitch    =   3.500 mrad         YDI =   1.167
     roll     =   0.000 mrad         XU  =  15.001
     yaw      =   0.001 mrad         XD  =  15.001

5.6. End station slits#

Near the end of the photon delivery system, in Diagnostic Module 3 in the end station, there is a four-blade slit system. These are used to define the beam size on the sample.

Table 5.2 End station slit motors#

motor

units

notes

motion type

slits3_top

mm

top blade position

single axis

slits3_bottom

mm

bottom blade position

single axis

slits3_inboard

mm

inboard blade position

single axis

slits3_outboard

mm

outboard blade position

single axis

slits3_hsize

mm

horizontal size

coordinated motion

slits3_hcenter

mm

horizontal center

coordinated motion

slits3_vsize

mm

vertical size

coordinated motion

slits3_vcenter

mm

vertical center

coordinated motion

The individual blades are moved like any other motor, for example:

RE(mv(slits3.outboard, -0.5))
RE(mvr(slits3.top, -0.1))

Coordinated motions are moved the same way, for example:

RE(mv(slits3.hsize, 6))
RE(mvr(slits3.vcenter, -0.1))

To know the current positions of the slit blades and their coordinated motions, use %w slits3

In [1966]: %w slits3
SLITS3:
     vertical   size   =   1.350 mm          Top      =   0.675
     vertical   center =   0.000 mm          Bottom   =  -0.675
     horizontal size   =   8.000 mm          Outboard =   4.000
     horizontal center =   0.000 mm          Inboard  =  -4.000

5.7. Configurations#

5.7.1. Photon delivery modes#

A look-up table is used to move the elements of the photon delivery system to their correct locations for the different energy ranges and focusing conditions. Here is a table of different photon delivery modes. Modes A-F are for delivery of light to the XAS end station. Mode XRD delivers high energy, focused beam to the goniometer.

Table 5.3 Photon delivery modes#

Mode

focused

energy range

A

above 8 keV

B

below 6 keV

C

6 keV – 8 keV

D

above 8 keV

E

6 keV – 8 keV

F

below 6 keV

XRD

above 8 keV

Todo

The lookup table is not complete for mode B. In fact, the ydo and ydi jacks of M3 cannot move low enough to enter mode B. In practice, mode B is not available. Elements that should be measured in mode B are, instead, measured in mode C and we live with incomplete harmonic rejection.

To move between modes, do:

RE(change_mode('<mode>'))

where <mode> is one of the strings in the first column of Table 5.3. For example:

RE(change_mode('D'))

This will move 17 motors all at the same time and should take less than 5 minutes.

Focusing at the XAS end station requires that bender be near its upper limit. Focusing at the XRD station has the bender near the middle of its range.

5.7.2. Monochromator crystals#

To change between the Si(111) and Si(311) crystals, do:

RE(change_xtals('111'))

or:

RE(change_xtals('311'))

This will move the lateral motor of the monochromator between the two crystal sets and adjust the pitch of the second crystal to be nearly in tune and the roll to deliver the beam to nearly the same location for both crystals. It will also return the monochromator to the starting energy.

This takes about 5 minutes.

The change_xtals() plan also runs the rocking curve (Section 6.2) macro to fix the tuning of the second crystal.