spec

Software for Diffraction

sixc

6-circle geometry modes

DESCRIPTION

The sixc configuration is for a standard six-circle diffractometer. (Compare to the psic diffractometer, also with six circles.) The six-circle diffractometer combines the features of four-circle and z-axis instruments.

CONVENTIONS

spec assigns the diffractometer geometry based on the motor mnemonics present in the associated hardware configuration file. The standard six-circle motor names and mnemonics are as follows:

       
  Delta del - Detector arm rotation
  Theta th - Rotates sample circles
  Chi chi - Sample tilt
  Phi phi - Sample rotation
  Mu mu - Diffractometer rotation
  Gamma gam - Out-of-plane detector rotation

Presence of subsets of the following optional motor mnemonics select among a number of pseudomotor configurations, where one or more of the above motors become pseudomotors whose position is determined by one or more of the following real motors.

       
  GamTran gamT - Translation component of gam
  GamRot gamR - Rotation component of gam
  GamScrew gamS - Screw displacement for gam
  MuTran muT - Translation component of mu
  MuRot muR - Rotation component of mu
  GamReal gamr - Real motor associated with gam
  DelReal delr - Real motor associated with del
  DelTran delT - Translation component of del
  MuTran mutrans - Translation component of mu

The Pseudomotors section below details the various configurations.

SIX-CIRCLE MODES

The six-circle modes represent various constraints that can be made on the transformation equations from reciprocal space to diffractometer angles. Use the setmode macro to select a six-circle mode. The modes are as follows:

0 - Omega fixed (mu = gamma = 0, traditional four circle)
1 - Phi fixed (mu = gamma = 0, traditional four circle)
2 - Zone (mu = gamma = 0, traditional four circle)
3 - Azimuth, mu and gamma fixed
4 - Alpha, mu and gamma fixed
5 - Beta, mu and gamma fixed
6 - Azimuth and gamma fixed, mu varies
7 - Alpha and gamma fixed, mu varies
8 - Beta and gamma fixed, mu varies
9 - Azimuth and mu fixed, gamma varies
10 - Alpha and mu fixed, gamma varies
11 - Beta and mu fixed, gamma varies
12 - Z-Axis with azimuth fixed, chi, phi set to -sigma, -tau
13 - Z-Axis with alpha fixed, chi, phi set to -sigma, -tau
14 - Z-Axis with beta fixed, chi, phi set to -sigma, -tau
15 - Specular with theta = 90, gamma = 0 and phi fixed
16 - Chi, phi and mu fixed

When the azimuthal angle is set to 90 degrees in the azimuth-fixed modes (3, 6, 9 and 12), the incident angle alpha will be equal to the exit angle beta.

In the z-axis modes, use the sigtau macro to calculate the azimuthal reference vector from the chi and phi angles used to align the sample.

FROZEN ANGLES

Each of the six-circle modes has associated an angle (or angles) that are fixed in that mode. As a convenience, there is a freeze macro that turns on spec's frozen mode. When in frozen mode, all moves that specify reciprocal space coordinates will use the frozen value(s) of the current mode's fixed angle(s). Thus you can move motors around for lining up, etc., but have the the fixed angle(s) automatically restored to the frozen value when doing reciprocal space scans, br moves, etc. The unfreeze macro turns frozen mode off.

The frozen values are stored in variables (actually macros) named F_OMEGA (omega-fixed mode), F_CHI_Z and F_PHI_Z (zone mode), F_PHI (phi-fixed modes), F_CHI (chi-fixed modes), F_AZIMUTH (azimuth-fixed modes), F_ALPHA (alpha-fixed modes), F_BETA (beta-fixed modes), F_MU (mu-fixed modes) and F_GAMMA (gamma-fixed modes). You can assign values to these variables by hand, or you can pass the values as arguments to the freeze macro. For example, if you are in mode 4 (azimuth, mu and gamma fixed), typing

freeze 90 0 10

will set F_AZIMUTH to 90 degrees F_MU to zero and F_GAMMA to 10 degrees. Without arguments, the freeze macro freezes the corresponding angles at their current values.

CUT POINTS

Cut points affect the direction the diffractometer circles turn to get from one position to the next. For example, if a cut point is at zero, the corresponding circle will only move through angles of 0 to 360 degrees. Thus, to get from 355 (=-5) to 5 degrees, the circle will turn 350 degrees. If a cut point is at -180, the circle will move through angles from -180 to 180. Thus the same motion from -5 to 5 will require only 10 degrees of movement. Use the cuts macro to select cut points for delta, theta, chi, phi, mu and gamma. A cut point exists for the azimuth, CUT_AZI, but only the sign is used to determine the sign of the azimuth angle.

LATTICE PARAMETERS

The setlat and setrlat macros let you set the lattice parameters in direct space or reciprocal space, respectively.

ORIENTATION MATRIX

With known lattice parameters, you need to find two (nonparallel) reflections in order to determine the orientation matrix. The macros or0 H K L and or1 H K L are used to associate the current diffractometer angles with the primary and secondary reflections. Macros called setor0 and setor1 also let you set the orientation reflections, but don't require you to move the diffractometer to the correct position. Instead, you are prompted for each of the angles and values for H, K and L. The or_swap macro is available to exchange the primary and secondary reflections.

You can also fit an orientation matrix if you have three or more known reflections (not all in the same plane), but unknown lattice parameters. Use reflex_beg to initialize a reflections data file. Use reflex H K L to add the current reflection to the file. Use reflex_end to complete the file. You then run the reflections file as a spec command file in order to fit the reflections to obtain a new orientation matrix. To calculate lattice parameters from the new orientation matrix, type calcL. You can then display the lattice parameters with the pa macro. You can edit the reflections file to delete or modify any of the reflection data there.

PSEUDOMOTORS

spec supports configurations where the delta and/or gamma detector rotations and/or the mu diffractometer rotation involves multiple motors or is done indirectly.

In one gamma configuration, the detector is mounted on a small rotation stage that tracks the desired gamma angle. Another motor translates that stage to keep the detector oriented towards the sample. That configuration is selected by configuring two motors having mnemonics gamR and gamT in the config file. The gam motor must be configured with controller NONE. A message identifying the configuration as "pseudo-gamma six-circle" is displayed when spec reads the hardware config file.

If, in addition to the above, the mu rotation is also made up of a rotation and a translation, that configuration is selected if there are motors having mnemonics muR and muT in the config file. The mu motor must have the controller type set to NONE. If detected, this configuration is identified as "pseudo-mu, pseudo-gamma six-circle".

In another gamma configuration, the rotation is created by translating the detector along a curved track using a linear screw pivoted at one end. The screw motor must have the mnemonic gamS. Tne gam motor is configured with the controller set to NONE. This configuration is identified as "pseudo-gamma (screw-type) six-circle".

In a configuration used at ANKA and elsewhere, the gamma and delta circles move independently of the mu circle. The gam and del motors are pseudomotors that depend on the real gamr and delr motors along with mu. The mu motor is itself a pseudomotor that depends on a single translation motor, mutrans. The motors gam, del and mu all have controller type set to NONE. The configuration is identified as "ANKA-style pseudo-delta, pseudo-mu, pseudo-gamma six-circle".

In a configuration similar to the previous, the gamma and delta rotations are accomplished via translations of gamT and delT motors, respectively. The mu motor is again a pseudomotor that depends on the translation done by mutrans. This configuration is identified as "Sirius-style pseudo-delta, pseudo-mu, pseudo-gamma six-circle".

In normal operation, a "tracking" mode is on such that commands to move the pseudomotors del and/or gam and/or mu are automatically converted to motions of the associated real motors. Likewise, when reading angles with tracking on, the pseudomotor positions are calculated based on the positions of the real motors. With tracking mode off, the real motors will be unconnected to the associated pseudomotor. Commands to move the pseudomotors won't affect the real motors, and the real motor positions won't change the value of the pseudomotors. "Tracking" mode is stored in g_track. The ontrack, offtrack and settrack macros can be used to set g_track. The "tracking" macros will apply to all the geometry pseudomotors together.

With the "ANKA-style" and "Sirius-style" configurations, the mu tracking is on by default due to the nature of the hardware. This tracking is not connected to the above tracking macros, but is toggled by the macro setmutrackoff. The value is stored in g_track_mu_off.

GLOBALS AND MACROS

Q[]

a built-in array which holds the following six-circle parameters:

def H 'Q[0]'
Reciprocal space coordinate.
def K 'Q[1]'
Reciprocal space coordinate.
def L 'Q[2]'
Reciprocal space coordinate.
def LAMBDA 'Q[3]'
Wavelength of X rays.
def ALPHA 'Q[4]'
Incident angle, useful for surface diffraction.
def BETA 'Q[5]'
Exit angle, useful for surface diffraction.
def OMEGA 'Q[6]'
The theta - two-theta / 2 parameter.
def TTH 'Q[7]'
The Bragg angle.
def AZIMUTH 'Q[8]'
Rotation angle of a reference vector about the scattering vector, useful for surface diffraction.
def SIGMA 'Q[9]'
With TAU, an alternative description of the azimuthal reference vector.
def TAU 'Q[10]'
With SIGMA, an alternative description of the azimuthal reference vector.
def F_ALPHA 'Q[11]'
Frozen value of ALPHA for alpha-fixed mode.
def F_BETA 'Q[12]'
Frozen value of BETA for beta-fixed mode.
def F_OMEGA 'Q[13]'
Frozen value of OMEGA for omega-fixed mode.
def F_AZIMUTH 'Q[14]'
Frozen value of AZIMUTH for azimuth-fixed mode.
def F_PHI 'Q[15]'
Frozen value of A[phi] for phi-fixed modes.
def F_CHI_Z 'Q[16]'
Frozen value of A[chi] for zone mode.
def F_PHI_Z 'Q[17]'
Frozen value of A[phi] for zone mode.
def F_MU 'Q[18]'
Frozen value of A[mu] for mu-fixed modes.
def F_GAMMA 'Q[19]'
Frozen value of A[gam] for gamma-fixed modes.
def CUT_AZI 'Q[20]'
The azimuth cut point flag.
def CUT_DEL 'Q[21]'
The delta cut point.
def CUT_TH 'Q[22]'
The theta cut point.
def CUT_CHI 'Q[23]'
The chi cut point.
def CUT_PHI 'Q[24]'
The phi cut point.
def CUT_MU 'Q[25]'
The mu cut point.
def CUT_GAM 'Q[26]'
The gamma cut point.
def F_CHI 'Q[27]'
Frozen value of A[chi] for chi-fixed, phi-fixed, mu-fixed mode.
G[]

a built-in array which holds the following six-circle parameters:

def g_mode 'G[0]'
Holds current six-circle mode.
def g_sect 'G[1]'
Holds current six-circle sector.
def g_frz 'G[2]'
Nonzero when frozen mode is on.
def g_haz 'G[3]'
H of azimuthal reference vector.
def g_kaz 'G[4]'
K of azimuthal reference vector.
def g_laz 'G[5]'
L of azimuthal reference vector.
def g_zh0 'G[6]'
H of first zone-mode vector.
def g_zk0 'G[7]'
K of first zone-mode vector.
def g_zl0 'G[8]'
L of first zone-mode vector.
def g_zh1 'G[9]'
H of second zone-mode vector.
def g_zk1 'G[10]'
K of second zone-mode vector.
def g_zl1 'G[11]'
L of second zone-mode vector.
def g_len 'G[12]'
When using either of the gamma-pseudomotor configurations, the distance from the sample to the gamma stage when gamma = 0.
def g_config 'G[13]'
If zero, the default configuration is selected. Otherwise, the alternate configuration is used.
def g_track 'G[14]'
If nonzero, the gamT and gamR motors track the pseudomotor gam. Must be set to zero to move gamT and gamR directly.
def g_sigtau 'G[15]'
If nonzero, SIGMA and TAU are considered fundamental and the azimuthal reference vector is calculated from their values. Otherwise SIGMA and TAU are calculated from the azimuthal reference vector. Use the setconfig macro to change the value of g_sigtau.
def g_len2 'G[16]'
When using the screw gamma-pseudomotor configuration, the distance from the screw pivot point to the gamma stage when gamma = 0.
def g_len3 'G[17]'
When using the gamT and delT motors, the distance from the detector to the sample center of rotation on the diffractometer.
def g_track_mu_off 'G[18]'
When using the mutrans motor, where tracking is on by default, can be set to turn off tracking.
calcHKL
calculates H, K, L, ALPHA, BETA, AZIMUTH, TTH, OMEGA, SIGMA and TAU from the six-circle angles in the motor array A[].
calcA
calculates A[], OMEGA, ALPHA, BETA and AZIMUTH from H, K and L.
calcZ
calculates the phi and chi to put the two vectors specified by the six elements of the built-in Z[] array in the scattering plane.
cz H0 K0 L0 H1 K1 L1
"calculate zone", prints the chi and phi necessary to put the two vectors specified as arguments in the scattering plane.
mz H0 K0 L0 H1 K1 L1
"move zone", moves to the chi and phi values that put the two vectors specified as arguments into the scattering plane. Also sets zone mode and turns on frozen mode using the calculated chi and phi values.
sz H0 K0 L0 H1 K1 L1
"set zone", calculates the chi and phi values that put the two vectors specified as arguments into the scattering plane. Also sets zone mode and turns on frozen mode using the calculated chi and phi values.
setaz [H K L]
Sets the azimuthal reference vector.
sigtau [sigma tau]
Sets the azimuthal reference vector according to the angles given as arguments. If no arguments are given, the macro will prompt for sigma and tau, using the negative of the current values of chi and phi, respectively, as the defaults.
pa
Displays the current geometry parameters.
startgeo
Prompts for the various geometry parameters.
setlen [len1 [len2]]
Sets the various fixed lengths associated with the different pseudomotor calculations. If insufficient arguments are given, prompts for the values.
setdet [len]
In the configuration with delT and gamT motors, sets the distance from the detector to center of rotation.
setconfig [which]
Prompts for the configuration. Zero selects the z-outward configuration. Nonzero selects the z-inward configuration.
settrack [1|0]
Sets the value of g_track to the argument, if any, otherwise prompts for a value.
ontrack
Equivalent to settrack 1.
offtrack
Equivalent to settrack 0.
setmutrackoff [1|0]
Sets the value of g_track_mu_off to the argument, if any, otherwise prompts for a value.
aziscan start finish intervals time
Does a scan of the azimuthal angle.

ZEROS AND ROTATION SENSE

For the two supported diffractometer configurations, the x axis points upward and the y axis points along the direction of the incident beam. The two configurations are mirror images of each other in the x-y plane, but both use a right-handed coordinate system. When all circle are at zero, the default configuration (g_config = 0) has the z axis pointing outward from a sample mounted on the phi circle. In the alternate configuration (g_config != 0), the z axis points inward. The choice of configuration is generally dictated by the the dimensions and layout of a synchrotron hutch.

The rotation sense and zeros of the circles must be set according to the conventions built into the code for the six-circle calculations to work correctly, The rotation sense is defined with respect to the positive unit vectors of the laboratory coordinate system described above. For a right-handed rotation, if a right-hand thumb points along the unit vector that is in line with the rotation axis, the fingers will point in the positive rotation direction.

The rotation sense of an axis can be changed by changing the sign of the steps-per-degree parameter or the sign-of-user*dial parameter in the config file. The sign of the first parameter should be set so that the spec dial positions agree with the dial indicators of each circle. Set the sign of the second parameter as necessary to make the spec user angles agree with the rotation sense described below.

In the default (z-outward) configuration, the mu circle is in the y-z plane, with the rotation axis along the x axis with a right-handed rotation convention. The zero of mu is such that the delta and theta circles are on the negative side of the x-y plane with their rotation axes along the z axis.

The delta, theta and phi circles all have a left-handed rotation sense. The delta circle is at zero when the detector arm is along the negative y direction. Theta is zero when the chi circle is in the x-z plane, with the chi axis along the y axis. The chi rotation is right-handed. The zero of chi puts the phi rotation axis along the z direction with the "surface normal" of the phi table pointed in the positive z direction. The zero of the phi circle is arbitrary.

Finally, with mu and delta at zero, the gamma circle is located in the y-z plane with the zero of gamma chosen so that the detector is pointed in the negative y direction towards the X-ray source. The gamma rotation is right handed.

In the alternate, mirror image, z-inward configuration, all rotations are left handed.

SEE ALSO


geo_sixc.c, C source file for the six-circle geometry calculations.
sixc.src, macro source file for the six-circle macros.
hkl.mac, macro source file for reciprocal space macros.
ub.mac, macro source file for orientation matrix macros.
The Four-Circle Reference in the spec manual.

REFERENCES

Angle calculations and operating modes for a six-circle diffractometer were presented by M. Lohmeier and E. Vlieg in J. Appl. Cryst., 26, 706 (1993). (See http://journals.iucr.org/j/issues/1993/05/00/la0044.)

Extensions, including explicit formulas for the setting of diffractometer motors based on the surface normal direction, were given by D. Abernathy (PhD thesis, MIT 1993), who also assisted in developing the C code used in spec.

The pseudomotor calculations used at the ANKA beamline are described by A. Stierle, et al., in Rev. Sci. Instrum., 75 5302 (2004). (See https://doi.org/10.1063/1.1819552.)