Discussion List Archives

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Base coordinate set for CBF, and Minimal headers.

Here is a very rough first draft of some suggestions for dictionary items
to implement what I _think_ Bob was saying in his message.  I gathered the
goniometer and detector axis items in a new "AXIS" category to avoid
duplication of a lot
of tags.  I have not yet done anything specific about Bob's comments on the
specification of the beam-center.  If I misunderstood various parts of
this, somebody please say so.

Happy New Year
  -- Herbert

########
# AXIS #
########

save_AXIS
    _category.description
;
     Data items in the AXIS category record the information required
     to describe the various goniometer, detector, source and other
     axes needed to specify a data collection.  The location of each
     axis is specified by two vectors: the axis itself, given as a unit
     vector, and an offset to the base of the unit vector.  These vectors
     are referenced to a right-handed laboratory coordinate system with
     its origin in the sample:

                             | Y (to complete right-handed system)
                             |
                             |    /Z (to source)
                             |   /
                             |  /
                             | /
                             |/__________________X
                                      principal goniometer axis

     Axis 1 (X): The mechanical axis, pointing from the sample to the
     principal axis of the goniometer.

     Axis 3 (Z): The source axis, pointing from the sample towards the source
     in the plane of Axis 1 (X) and the source, perpendicular to Z.

     Axis 2 (Y): Completes an orthogonal right-handed system.

     These axes are based on the goniometer, not on the orientation of the
     detector, gravity, etc.  The vectors necessary to specify all other
     axes are given by sets of three components in the order (X, Y, Z).
     If the axis involved is a rotation axis, it is right handed, i.e. as
     one views the object to be rotated from the origin (the tail) of the
     unit vector, the rotation is clockwise.  If a translation axis is
     specified, the directtion of the unit vecotr specifies the sense of
     positive translation.

     For simplicity, all rotations are given in degrees and all translation
     are given in mm.

     Axes may be dependent on one another.  The X-axis is the only goniometer
     axis the direction of which is strictly connected to the hardware.  All
     other axes are specified by the positions they would assume when the
     axes upon which they depend are at their zero points.

     When specifying detector axes, the axis is given to the beam center.
     The location of the beam center on the detector should be given in the
     DIFFRN_DETECTOR category in distortion-corrected mm from the (0,0) corner
     of the detector.
;
    _category.id                   axis
    _category.mandatory_code       no
     loop_
    _category_key.name          '_axis.id'
                                '_axis.equipment'
     loop_
    _category_group.id           'inclusive_group'
                                 'axis_group'
                                 'diffrn_group'
    loop_
    _category_examples.detail
    _catgeory-examples.case
;
        Example 1:

        This example show the axis specification of the axes of a kappa
        geometry goniometer (See "X-Ray Structure Deptermination, A Practical
        Guide", 2nd ed. by  G. H. Stout, L. H. Jensen, Wiley Interscience,
        1989, 453 pp, p 134.).

        There are three axies specified, and no offsets.  The outermost axis,
        omega, is pointed along the X-axis.  The next innermost axis, kappa,
        is at a 50 dgeree angle to the X-axis, pointed away from the source.
        The innermost axis, phi, aligns with the X-axis when omega and
        phi are at their zero-points.  If T-omega, T-kappa and T-phi
        are the ttransormation matrixes derived from the axis settings,
        the complete transformation would be:
            x' = (T-omega) (T-kappa) (T-phi) x
;
;
        loop_
        _axis.id
        _axis.type
        _axis.equipment
        _axis.depends_on
        _axis.vector[1] _axis.vector[2] _axis.vector[3]
        omega rotation goniometer     .    1        0        0
        kappa rotation goniometer omega    -.64279  0       -.76604
        phi   rotation goniometer kappa    1        0        0
;

;
        Example 2:

        This example show the axis specification of the axes of a
        detector, source and gravity.  We have juggled the order as a
        reminder that the ordering of presentation of tokens is not
        significant.  We have taken the center of rotation of the detector
        to be 68 millimeters in the direction away from the source.
;
;
        loop_
        _axis.id
        _axis.type
        _axis.equipment
        _axis.depends_on
        _axis.vector[1] _axis.vector[2] _axis.vector[3]
        _axis.offset[1] _axis.offset[2] _axis.offset[3]
        source       .        source     .       0     0     1   . . .
        gravity      .        gravity    .       0    -1     0   . . .
        tranz     translation detector rotz      0     0     1   0 0 -68
        twotheta  rotation    detector   .       1     0     0   . . .
        roty      rotation    detector twotheta  0     1     0   0 0 -68
        rotz      rotation    detector roty      0     0     1   0 0 -68
;


save_

save__axis.id
    _item_description.description
;             The value of _axis.id must uniquely identify
              each axis relevant to the experiment.  Note that multiple
              pieces of equipment may share the same axis (e.g. a twotheta
              arm), so that the category key for AXIS also includes the
              equipment.
;
    loop_
    _item.name
    _item.category_id
    _item.mandatory_code
             '_axis.id'                         axis                   yes
             '_diffrn_detector_axis.axis_id'    diffrn_detector_axis   yes
             '_diffrn_measurement_axis.axis_id' diffrn_measurment-axis yes

    _item_type.code               code
     loop_
    _item_linked.child_name
    _item_linked.parent_name
             '_axis.depends_on'                   '_axis.id'
             '_diffrn_detector_axis.axis_id'      '_axis.id'
             '_diffrn_measurement_axis.axis_id'   '_axis.id'

     save_

save__axis.type
    _item_description.description
;             The value of _axis.type specifies the type of
              axis:  rotation, translation (or general when the type is
              not relevant, as for gravity)
;
    _item.name                      '_axis.type'
    _item.category_id                 axis
    _item.mandatory_code              no
    _item_type.code                   ucode
    _item_default.value               general
     loop_
    _item_enumeration.value
    _item_enumeration.detail      rotation
                                 'right-handed axis of rotation'
                                  translation
                                 'translation in the direction of the axis'
                                  general
                                 'axis for which the type is not relevant'

     save_

save__axis.equipment
    _item_description.description
;             The value of _axis.type specifies the type of equipment
              using the axis:  goniometer, detector, gravity, source
              or general
;
    _item.name                      '_axis.equipment'
    _item.category_id                 axis
    _item.mandatory_code              no
    _item_type.code                   ucode
    _item_default.value               general
     loop_
    _item_enumeration.value
    _item_enumeration.detail      goniometer
                                 'equipment used to orient or position samples'
                                  detector
                                 'equipment used to detect reflections'
                                  general
                                 'equipment used for general purposes'
                                  gravity
                                 'axis specifying the downward direction'
                                  source
                                 'axis specifying the direction sample to
source'

     save_

save__axis.depends_on
    _item_description.description
;             The value of _axis.type specifies next next outermost
              axis upon which this axis depends.

              This item is a point to axis.id in the same category.
;
    _item.name                      '_axis.depends_on'
    _item.category_id                 axis
    _item.mandatory_code              no

     save_

save__axis.vector[1]
    _item_description.description
;              The [1] element of the 3 element vector used to specify
               the direction of a rotation or translation axis.
               The vector should be normalized to be a unit vector.
;
    _item.name                  '_axis.vector[1]'
    _item.category_id             axis
    _item.mandatory_code          no
    _item_default.value           0.0
    _item_sub_category.id         vector
    _item_type.code               float
     save_

save__axis.vector[2]
    _item_description.description
;              The [2] element of the 3 element vector used to specify
               the direction of a rotation or translation axis.
               The vector should be normalized to be a unit vector.
;
    _item.name                  '_axis.vector[2]'
    _item.category_id             axis
    _item.mandatory_code          no
    _item_default.value           0.0
    _item_sub_category.id         vector
    _item_type.code               float
     save_

save__axis.vector[3]
    _item_description.description
;              The [3] element of the 3 element vector used to specify
               the direction of a rotation or translation axis.
               The vector should be normalized to be a unit vector, and
               is dimensionless.
;
    _item.name                  '_axis.vector[3]'
    _item.category_id             axis
    _item.mandatory_code          no
    _item_default.value           0.0
    _item_sub_category.id         vector
    _item_type.code               float
     save_

save__axis.offset[1]
    _item_description.description
;              The [1] element of the 3 element vector used to specify
               the offset to the base of a rotation or translation axis.

               The vecotr is specified in millimeters
;
    _item.name                  '_axis.offset[1]'
    _item.category_id             axis
    _item.mandatory_code          no
    _item_default.value           0.0
    _item_sub_category.id         vector
    _item_type.code               float
    _item_units.code              mm
     save_

save__axis.offset[2]
    _item_description.description
;              The [2] element of the 3 element vector used to specify
               the offset to the base of a rotation or translation axis.

               The vecotr is specified in millimeters
;
    _item.name                  '_axis.offset[2]'
    _item.category_id             axis
    _item.mandatory_code          no
    _item_default.value           0.0
    _item_sub_category.id         vector
    _item_type.code               float
    _item_units.code              mm
     save_

save__axis.offset[3]
    _item_description.description
;              The [3] element of the 3 element vector used to specify
               the offset to the base of a rotation or translation axis.

               The vecotr is specified in millimeters
;
    _item.name                  '_axis.offset[3]'
    _item.category_id             axis
    _item.mandatory_code          no
    _item_default.value           0.0
    _item_sub_category.id         vector
    _item_type.code               float
    _item_units.code              mm
     save_

###################
# DIFFRN_DETECTOR #
###################

save_DIFFRN_DETECTOR
    _category.description
;
     This category redefinition has been added to extend the key of
     the standard DIFFRN_DETECTOR category.
;
    _category.id                   diffrn_detector
    _category.mandatory_code       no
     loop_
    _category_key.name          '_diffrn_detector.diffrn_id'
                                '_diffrn_detector.id'
     loop_
    _category_group.id           'inclusive_group'
                                 'diffrn_group'
save_

save__diffrn_detector.id
    _item_description.description
;
               The value of _diffrn_detector.id must uniquely identify
               each detector used to collect each diffraction data set.
;
    _item.name                  '_diffrn_detector.id'
    _item.category_id             diffrn_detector
    _item.mandatory_code          implicit
    _item_type.code               code
save_
#

########################
# DIFFRN_DETECTOR_AXIS #
########################

save_DIFFRN_DETECTOR_AXIS
    _category.description
;
     Data items in the DIFFRN_DETECTOR_AXIS category associates
     axes with detectors.
;
    _category.id                   diffrn_detector_axis
    _category.mandatory_code       no
     loop_
    _category_key.name          '_diffrn_detector_axis.id'
                                '_diffrn_detector_axis.axis_id'
     loop_
    _category_group.id           'inclusive_group'
                                 'diffrn_group'
save_

save__diffrn_detector_axis.id
    _item_description.description
;
               This data item is a pointer to _diffrn_detector.id in
               the DIFFRN_DETECTOR category.
;
    _item.name                  '_diffrn_detector_axis.id'
    _item.category_id             diffrn_detector_axis
    _item.mandatory_code          yes
    _item_type.code               code
save_

save__diffrn_detector_axis.axis_id
    _item_description.description
;
               This data item is a pointer to _axis.id in
               the AXIS category.
;
    _item.name                  '_diffrn_detector_axis.axis_id'
    _item.category_id             diffrn_detector_axis
    _item.mandatory_code          yes
    _item_type.code               code
save_

###########################
# DIFFRN_MEASUREMENT_AXIS #
###########################

save_DIFFRN_MEASUREMENT_AXIS
    _category.description
;
     Data items in the DIFFRN_MEASUREMENT_AXIS category associates
     axes with goniometers.
;
    _category.id                   diffrn_measurement_axis
    _category.mandatory_code       no
     loop_
    _category_key.name          '_diffrn_measurement_axis.id'
                                '_diffrn_measurement_axis.axis_id'
     loop_
    _category_group.id           'inclusive_group'
                                 'diffrn_group'
save_

save__diffrn_measurement_axis.id
    _item_description.description
;
               This data item is a pointer to _diffrn_measurement.id in
               the DIFFRN_DETECTOR category.
;
    _item.name                  '_diffrn_measurement_axis.id'
    _item.category_id             diffrn_measurement_axis
    _item.mandatory_code          yes
    _item_type.code               code
save_

save__diffrn_detector_axis.axis_id
    _item_description.description
;
               This data item is a pointer to _axis.id in
               the AXIS category.
;
    _item.name                  '_diffrn_measurement_axis.axis_id'
    _item.category_id             diffrn_measurement_axis
    _item.mandatory_code          yes
    _item_type.code               code
save_

#

=====================================================
****                BERNSTEIN + SONS
*   *       INFORMATION SYSTEMS CONSULTANTS
****     P.O. BOX 177, BELLPORT, NY 11713-0177
*   * ***
**** *            Herbert J. Bernstein
  *   ***     yaya@bernstein-plus-sons.com
 ***     *
  *   *** 1-516-286-1339    FAX: 1-516-286-1999
=====================================================



Reply to: [list | sender only]
International Union of Crystallography

Scientific Union Member of the International Science Council (admitted 1947). Member of CODATA, the ISC Committee on Data. Partner with UNESCO, the United Nations Educational, Scientific and Cultural Organization in the International Year of Crystallography 2014.

International Science Council Scientific Freedom Policy

The IUCr observes the basic policy of non-discrimination and affirms the right and freedom of scientists to associate in international scientific activity without regard to such factors as ethnic origin, religion, citizenship, language, political stance, gender, sex or age, in accordance with the Statutes of the International Council for Science.