Sophie

Sophie

distrib > Fedora > 15 > i386 > by-pkgid > ed9a89d1a661ae07d31ad6783ad92a57 > files > 245

CBFlib-devel-0.9.2.3-2.fc15.i686.rpm

<HTML>
<HEAD>
<TITLE>cif_img.dic v1.4_DRAFT</TITLE>
</HEAD>
<body bgcolor="#FAFAFF" text="#0808A0"
BACKGROUND="../html_graphics/cbflibbackground.jpg">
<font color="#0808A0">
<H1>
# <a href="http://www.iucr.org/iucr-top/welcome.html">
<img alt="[IUCr Home Page]" src="../html_graphics/iucrhome.jpg" ALIGN=MIDDLE></a>
<a href="http://www.iucr.org/iucr-top/cif/home.html">
<img alt="[CIF Home Page]" src="../html_graphics/cifhome.jpg" ALIGN=MIDDLE></a>
<a href="cbf_definition_rev.html"><IMG SRC="../html_graphics/CBFbutton.jpg"
ALT="[CBF/imgCIF]" ALIGN=MIDDLE></a>
<a href="CBFlib.html"><IMG SRC="../html_graphics/cbflibbutton.jpg"
ALT="[CBFlib]" ALIGN=MIDDLE></a> #
</H1>
<H1 ALIGN=CENTER>
# <IMG  SRC="../html_graphics/CBFbig.jpg" ALIGN=MIDDLE ALT="imgCIF/CBF"> #
</H1>
<H1 ALIGN=CENTER># Extensions Dictionary #</H1>
</font><font color="#000000">

<PRE>
##############################################################################
#                                                                            #
#                       Image CIF Dictionary (imgCIF)                        #
#             and Crystallographic Binary File Dictionary (CBF)              #
#            Extending the Macromolecular CIF Dictionary (mmCIF)             #
#                                                                            #
#                             Version 1.4_DRAFT                              #
#                              of 2006-07-04                                 #
#    ###################################################################     #
#    # *** WARNING *** THIS IS A DRAFT FOR DISCUSSSION *** WARNING *** #     #
#    #                 SUBJECT TO CHANGE WITHOUT NOTICE                #     #
#    #     VERSIONS WILL BE POSTED AS cif_img_1.4_DDMMMYY_draft.html   #     #
#    #       SEND COMMENTS TO imgcif-l@iucr.org CITING THE VERSION     #     #
#    ###################################################################     #
#                  This draft edited by H. J. Bernstein                      #
#                                                                            #
#     by Andrew P. Hammersley, Herbert J. Bernstein and John D. Westbrook    #
#                                                                            #
# This dictionary was adapted from format discussed at the imgCIF Workshop,  #
# held at BNL Oct 1997 and the Crystallographic Binary File Format Draft     #
# Proposal by Andrew Hammersley.  The first DDL 2.1 Version was created by   #
# John Westbrook.  This version was drafted by Herbert J. Bernstein and      #
# incorporates comments by I. David Brown, John Westbrook, Brian McMahon,    #
# Bob Sweet, Paul Ellis, Harry Powell, Wilfred Li, Gotzon Madariaga,         #
# Frances C. Bernstein, Chris Nielsen, Nicola Ashcroft and others.           #
##############################################################################

data_cif_img.dic

    _dictionary.title           cif_img.dic
    _dictionary.version         1.4_DRAFT
    _dictionary.datablock_id    cif_img.dic

##############################################################################
#    CONTENTS
#
#        <a href="#CATEGORY_GROUP_LIST">CATEGORY_GROUP_LIST</a>
#        <a href="#SUB_CATEGORY">SUB_CATEGORY</a>
#
#        category  <a href="#ARRAY_DATA">ARRAY_DATA</a>
#
#                  <a href="#_array_data.array_id" >_array_data.array_id</a>
#                  <a href="#_array_data.binary_id" >_array_data.binary_id</a>
#                  <a href="#_array_data.data" >_array_data.data</a>
#
#        category  <a href="#ARRAY_ELEMENT_SIZE">ARRAY_ELEMENT_SIZE</a>
#
#                  <a href="#_array_element_size.array_id" >_array_element_size.array_id</a>
#                  <a href="#_array_element_size.index" >_array_element_size.index</a>
#                  <a href="#_array_element_size.size" >_array_element_size.size</a>
#
#        category  <a href="#ARRAY_INTENSITIES">ARRAY_INTENSITIES</a>
#
#                  <a href="#_array_intensities.array_id" >_array_intensities.array_id</a>
#                  <a href="#_array_intensities.binary_id" >_array_intensities.binary_id</a>
#                  <a href="#_array_intensities.gain" >_array_intensities.gain</a>
#                  <a href="#_array_intensities.gain_esd" >_array_intensities.gain_esd</a>
#                  <a href="#_array_intensities.linearity" >_array_intensities.linearity</a>
#                  <a href="#_array_intensities.offset" >_array_intensities.offset</a>
#                  <a href="#_array_intensities.scaling" >_array_intensities.scaling</a>
#                  <a href="#_array_intensities.overload" >_array_intensities.overload</a>
#                  <a href="#_array_intensities.undefined_value" >_array_intensities.undefined_value</a>
#                  <a href="#_array_intensities.pixel_fast_bin_size" >_array_intensities.pixel_fast_bin_size</a>
#                  <a href="#_array_intensities.pixel_slow_bin_size" >_array_intensities.pixel_slow_bin_size</a>
#                  <a href="#_array_intensities.pixel_binning_method" >_array_intensities.pixel_binning_method</a>
#
#        category  <a href="#ARRAY_STRUCTURE">ARRAY_STRUCTURE</a>
#
#                  <a href="#_array_structure.byte_order" >_array_structure.byte_order</a>
#                  <a href="#_array_structure.compression_type" >_array_structure.compression_type</a>
#                  <a href="#_array_structure.encoding_type" >_array_structure.encoding_type</a>
#                  <a href="#_array_structure.id" >_array_structure.id</a>
#
#        category  <a href="#ARRAY_STRUCTURE_LIST">ARRAY_STRUCTURE_LIST</a>
#
#                  <a href="#_array_structure_list.axis_set_id" >_array_structure_list.axis_set_id</a>
#                  <a href="#_array_structure_list.array_id" >_array_structure_list.array_id</a>
#                  <a href="#_array_structure_list.dimension" >_array_structure_list.dimension</a>
#                  <a href="#_array_structure_list.direction" >_array_structure_list.direction</a>
#                  <a href="#_array_structure_list.index" >_array_structure_list.index</a>
#                  <a href="#_array_structure_list.precedence" >_array_structure_list.precedence</a>
#
#        category  <a href="#ARRAY_STRUCTURE_LIST_AXIS">ARRAY_STRUCTURE_LIST_AXIS</a>
#
#                  <a href="#_array_structure_list_axis.axis_id" >_array_structure_list_axis.axis_id</a>
#                  <a href="#_array_structure_list_axis.axis_set_id" >_array_structure_list_axis.axis_set_id</a>
#                  <a href="#_array_structure_list_axis.angle" >_array_structure_list_axis.angle</a>
#                  <a href="#_array_structure_list_axis.angle_increment" >_array_structure_list_axis.angle_increment</a>
#                  <a href="#_array_structure_list_axis.displacement" >_array_structure_list_axis.displacement</a>
#                  <a href="#_array_structure_list_axis.displacement_increment" >_array_structure_list_axis.displacement_increment</a>
#                  <a href="#_array_structure_list_axis.angular_pitch" >_array_structure_list_axis.angular_pitch</a>
#                  <a href="#_array_structure_list_axis.radial_pitch" >_array_structure_list_axis.radial_pitch</a>
#
#        category  <a href="#AXIS">AXIS</a>
#
#                  <a href="#_axis.depends_on" >_axis.depends_on</a>
#                  <a href="#_axis.equipment" >_axis.equipment</a>
#                  <a href="#_axis.id" >_axis.id</a></a>
#                  <a href="#_axis.offset[1]" >_axis.offset[1]</a>
#                  <a href="#_axis.offset[2]" >_axis.offset[2]</a>
#                  <a href="#_axis.offset[3]" >_axis.offset[3]</a>
#                  <a href="#_axis.type" >_axis.type</a>
#                  <a href="#_axis.vector[1]" >_axis.vector[1]</a>
#                  <a href="#_axis.vector[2]" >_axis.vector[2]</a>
#                  <a href="#_axis.vector[3]" >_axis.vector[3]</a>
#
#        category  <a href="#DIFFRN_DATA_FRAME">DIFFRN_DATA_FRAME</a>
#
#                  <a href="#_diffrn_data_frame.array_id" >_diffrn_data_frame.array_id</a>
#                  <a href="#_diffrn_data_frame.binary_id" >_diffrn_data_frame.binary_id</a>
#                  <a href="#_diffrn_data_frame.detector_element_id" >_diffrn_data_frame.detector_element_id</a>
#                  <a href="#_diffrn_data_frame.id" >_diffrn_data_frame.id</a>
#                  <a href="#_diffrn_data_frame.details">_diffrn_data_frame.details</a>
#
#        category  <a href="#DIFFRN_DETECTOR">DIFFRN_DETECTOR</a>
#
#                  <a href="#_diffrn_detector.details" >_diffrn_detector.details</a>
#                  <a href="#_diffrn_detector.detector" >_diffrn_detector.detector</a>
#                  <a href="#_diffrn_detector.diffrn_id" >_diffrn_detector.diffrn_id</a>
#                  <a href="#_diffrn_detector.dtime" >_diffrn_detector.dtime</a>
#                  <a href="#_diffrn_detector.id" >_diffrn_detector.id</a>
#                  <a href="#_diffrn_detector.number_of_axes" >_diffrn_detector.number_of_axes</a>
#                  <a href="#_diffrn_detector.type" >_diffrn_detector.type</a>
#
#        category  <a href="#DIFFRN_DETECTOR_AXIS">DIFFRN_DETECTOR_AXIS</a>
#
#                  <a href="#_diffrn_detector_axis.axis_id" >_diffrn_detector_axis.axis_id</a>
#                  <a href="#_diffrn_detector_axis.detector_id" >_diffrn_detector_axis.detector_id</a>
#
#        category  <a href="#DIFFRN_DETECTOR_ELEMENT">DIFFRN_DETECTOR_ELEMENT</a>
#
#                  <a href="#_diffrn_detector_element.center[1]" >_diffrn_detector_element.center[1]</a>
#                  <a href="#_diffrn_detector_element.center[2]" >_diffrn_detector_element.center[2]</a>
#                  <a href="#_diffrn_detector_element.id" >_diffrn_detector_element.id</a>
#                  <a href="#_diffrn_detector_element.detector_id" >_diffrn_detector_element.detector_id</a>
#
#        category  <a href="#DIFFRN_MEASUREMENT">DIFFRN_MEASUREMENT</a>
#
#                  <a href="#_diffrn_measurement.diffrn_id" >_diffrn_measurement.diffrn_id</a>
#                  <a href="#_diffrn_measurement.details" >_diffrn_measurement.details</a>
#                  <a href="#_diffrn_measurement.device" >_diffrn_measurement.device</a>
#                  <a href="#_diffrn_measurement.device_details" >_diffrn_measurement.device_details</a>
#                  <a href="#_diffrn_measurement.device_type" >_diffrn_measurement.device_type</a>
#                  <a href="#_diffrn_measurement.id" >_diffrn_measurement.id</a>
#                  <a href="#_diffrn_measurement.method" >_diffrn_measurement.method</a>
#                  <a href="#_diffrn_measurement.number_of_axes" >_diffrn_measurement.number_of_axes</a>
#                  <a href="#_diffrn_measurement.specimen_support" >_diffrn_measurement.specimen_support</a>
#
#        category  <a href="#DIFFRN_MEASUREMENT_AXIS">DIFFRN_MEASUREMENT_AXIS</a>
#
#                  <a href="#_diffrn_measurement_axis.id" >_diffrn_measurement_axis.axis_id</a>
#                  <a href="#_diffrn_measurement_axis.measurement_device" >_diffrn_measurement_axis.measurement_device</a>
#                  <a href="#_diffrn_measurement_axis.measurement_id" >_diffrn_measurement_axis.measurement_id</a>
#
#        category  <a href="#DIFFRN_RADIATION">DIFFRN_RADIATION</a>
#
#                  <a href="#_diffrn_radiation.collimation">_diffrn_radiation.collimation</a>
#                  <a href="#_diffrn_radiation.diffrn_id">_diffrn_radiation.diffrn_id</a>
#                  <a href="#_diffrn_radiation.div_x_source" >_diffrn_radiation.div_x_source</a>
#                  <a href="#_diffrn_radiation.div_y_source" >_diffrn_radiation.div_y_source</a>
#                  <a href="#_diffrn_radiation.div_x_y_source" >_diffrn_radiation.div_x_y_source</a>
#                  <a href="#_diffrn_radiation.filter_edge">_diffrn_radiation.filter_edge</a>'
#                  <a href="#_diffrn_radiation.inhomogeneity">_diffrn_radiation.inhomogeneity</a>
#                  <a href="#_diffrn_radiation.monochromator">_diffrn_radiation.monochromator</a>
#                  <a href="#_diffrn_radiation.polarisn_norm">_diffrn_radiation.polarisn_norm</a>
#                  <a href="#_diffrn_radiation.polarisn_ratio">_diffrn_radiation.polarisn_ratio</a>
#                  <a href="#_diffrn_radiation.polarizn_source_norm" >_diffrn_radiation.polarizn_source_norm</a>
#                  <a href="#_diffrn_radiation.polarizn_source_ratio" >_diffrn_radiation.polarizn_source_ratio</a>
#                  <a href="#_diffrn_radiation.probe">_diffrn_radiation.probe</a>
#                  <a href="#_diffrn_radiation.type">_diffrn_radiation.type</a>
#                  <a href="#_diffrn_radiation.xray_symbol">_diffrn_radiation.xray_symbol</a>
#                  <a href="#_diffrn_radiation.wavelength_id">_diffrn_radiation.wavelength_id</a>
#
#        category  <a href="#DIFFRN_REFLN">DIFFRN_REFLN</a>
#
#                  <a href="#_diffrn_refln.frame_id" >_diffrn_refln.frame_id</a>
#
#        category  <a href="#DIFFRN_SCAN">DIFFRN_SCAN</a>
#
#                  <a href="#_diffrn_scan.id" >_diffrn_scan.id</a>
#                  <a href="#_diffrn_scan.date_end" >_diffrn_scan.date_end</a>
#                  <a href="#_diffrn_scan.date_start" >_diffrn_scan.date_start</a>
#                  <a href="#_diffrn_scan.integration_time" >_diffrn_scan.integration_time</a>
#                  <a href="#_diffrn_scan.frame_id_start" >_diffrn_scan.frame_id_start</a>
#                  <a href="#_diffrn_scan.frame_id_end" >_diffrn_scan.frame_id_end</a>
#                  <a href="#_diffrn_scan.frames" >_diffrn_scan.frames</a>
#
#        category  <a href="#DIFFRN_SCAN_AXIS">DIFFRN_SCAN_AXIS</a>
#
#                  <a href="#_diffrn_scan_axis.axis_id" >_diffrn_scan_axis.axis_id</a>
#                  <a href="#_diffrn_scan_axis.angle_start" >_diffrn_scan_axis.angle_start</a>
#                  <a href="#_diffrn_scan_axis.angle_range" >_diffrn_scan_axis.angle_range</a>
#                  <a href="#_diffrn_scan_axis.angle_increment" >_diffrn_scan_axis.angle_increment</a>
#                  <a href="#_diffrn_scan_axis.angle_rstrt_incr" >_diffrn_scan_axis.angle_rstrt_incr</a>
#                  <a href="#_diffrn_scan_axis.displacement_start" >_diffrn_scan_axis.displacement_start</a>
#                  <a href="#_diffrn_scan_axis.displacement_range" >_diffrn_scan_axis.displacement_range</a>
#                  <a href="#_diffrn_scan_axis.displacement_increment" >_diffrn_scan_axis.displacement_increment</a>
#                  <a href="#_diffrn_scan_axis.displacement_rstrt_incr" >_diffrn_scan_axis.displacement_rstrt_incr</a>
#                  <a href="#_diffrn_scan_axis.scan_id" >_diffrn_scan_axis.scan_id</a>
#
#        category  <a href="#DIFFRN_SCAN_FRAME">DIFFRN_SCAN_FRAME</a>
#
#                  <a href="#_diffrn_scan_frame.date" >_diffrn_scan_frame.date</a>
#                  <a href="#_diffrn_scan_frame.frame_id" >_diffrn_scan_frame.frame_id</a>
#                  <a href="#_diffrn_scan_frame.frame_number" >_diffrn_scan_frame.frame_number</a>
#                  <a href="#_diffrn_scan_frame.integration_time" >_diffrn_scan_frame.integration_time</a>
#                  <a href="#_diffrn_scan_frame.scan_id" >_diffrn_scan_frame.scan_id</a>
#
#        category  <a href="#DIFFRN_SCAN_FRAME_AXIS">DIFFRN_SCAN_FRAME_AXIS</a>
#
#                  <a href="#_diffrn_scan_frame_axis.axis_id" >_diffrn_scan_frame_axis.axis_id</a>
#                  <a href="#_diffrn_scan_frame_axis.angle" >_diffrn_scan_frame_axis.angle</a>
#                  <a href="#_diffrn_scan_frame_axis.angle_increment" >_diffrn_scan_frame_axis.angle_increment</a>
#                  <a href="#_diffrn_scan_frame_axis.angle_rstrt_incr" >_diffrn_scan_frame_axis.angle_rstrt_incr</a>
#                  <a href="#_diffrn_scan_frame_axis.displacement" >_diffrn_scan_frame_axis.displacement</a>
#                  <a href="#_diffrn_scan_frame_axis.displacement_increment" >_diffrn_scan_frame_axis.displacement_increment</a>
#                  <a href="#_diffrn_scan_frame_axis.displacement_rstrt_incr" >_diffrn_scan_frame_axis.displacement_rstrt_incr</a>
#                  <a href="#_diffrn_scan_frame_axis.frame_id" >_diffrn_scan_frame_axis.frame_id</a>
#
#       ***DEPRECATED*** data items
#
#                  <a href="#_diffrn_detector_axis.id" >_diffrn_detector_axis.id</a>
#                  <a href="#_diffrn_measurement_axis.id" >_diffrn_measurement_axis.id</a>
#
#       ***DEPRECATED*** category  <a href="#DIFFRN_FRAME_DATA">DIFFRN_FRAME_DATA</a>
#
#                  <a href="#_diffrn_frame_data.array_id" >_diffrn_frame_data.array_id</a>
#                  <a href="#_diffrn_frame_data.binary_id" >_diffrn_frame_data.binary_id</a>
#                  <a href="#_diffrn_frame_data.detector_element_id" >_diffrn_frame_data.detector_element_id</a>
#                  <a href="#_diffrn_frame_data.id" >_diffrn_frame_data.id</a>
#                  <a href="#_diffrn_frame_data.details">_diffrn_frame_data.details</a>
#
#
#        <a href="#ITEM_TYPE_LIST">ITEM_TYPE_LIST</a>
#        <a href="#ITEM_UNITS_LIST">ITEM_UNITS_LIST</a>
#        <a href="#DICTIONARY_HISTORY">DICTIONARY_HISTORY</a>
#
##############################################################################


#########################
## <a name="CATEGORY_GROUP_LIST">CATEGORY_GROUP_LIST</a> ##
#########################

     loop_
    _category_group_list.id
    _category_group_list.parent_id
    _category_group_list.description
             'inclusive_group'   .
;             Categories that belong to the dictionary extension.
;
             'array_data_group'
             'inclusive_group'
;             Categories that describe array data.
;
             'axis_group'
             'inclusive_group'
;             Categories that describe axes.
;
             'diffrn_group'
             'inclusive_group'
;            Categories that describe details of the diffraction experiment.
;


##################
## <a name="SUB_CATEGORY">SUB_CATEGORY</a> ##
##################

     loop_
    _sub_category.id
    _sub_category.description
              'matrix'
;              The collection of elements of a matrix.
;
              'vector'
;              The collection of elements of a vector.
;




##############
# <a name="ARRAY_DATA">ARRAY_DATA</a> #
##############


save_ARRAY_DATA
    _category.description
;    Data items in the <a href="#ARRAY_DATA">ARRAY_DATA</a> category are the containers for
     the array data items described in the category <a href="#ARRAY_STRUCTURE">ARRAY_STRUCTURE</a>.
;
    _category.id                   array_data
    _category.mandatory_code       no
     loop_
    _category_key.name             '<a href="#_array_data.array_id" >_array_data.array_id</a>'
                                   '<a href="#_array_data.binary_id" >_array_data.binary_id</a>'
    loop_
    _category_group.id             'inclusive_group'
                                   'array_data_group'
    loop_
    _category_examples.detail
    _category_examples.case
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;
        Example 1 -

        This example shows two binary data blocks.  The first one
        was compressed by the CBF_CANONICAL compression algorithm and is
        presented as hexadecimal data.  The first character 'H' on the
        data lines means hexadecimal.  It could have been 'O' for octal
        or 'D' for decimal.  The second character on the line shows
        the number of bytes in each word (in this case '4'), which then
        requires eight hexadecimal digits per word.  The third character
        gives the order of octets within a word, in this case '&lt;'
        for the ordering 4321 (i.e. 'big-endian').  Alternatively, the
        character '&gt;' could have been used for the ordering 1234
        (i.e. 'little-endian').  The block has a 'message digest'
        to check the integrity of the data.

        The second block is similar, but uses CBF_PACKED compression
        and BASE64 encoding.  Note that the size and the digest are
        different.
;
;

        loop_
        <a href="#_array_data.array_id" >_array_data.array_id</a>
        <a href="#_array_data.binary_id" >_array_data.binary_id</a>
        <a href="#_array_data.data" >_array_data.data</a>
        image_1 1
        ;
        --CIF-BINARY-FORMAT-SECTION--
        Content-Type: application/octet-stream;
             conversions=&quot;x-CBF_CANONICAL&quot;
        Content-Transfer-Encoding: X-BASE16
        X-Binary-Size: 3927126
        X-Binary-ID: 1
        Content-MD5: u2sTJEovAHkmkDjPi+gWsg==

        # Hexadecimal encoding, byte 0, byte order ...21
        #
        H4&lt; 0050B810 00000000 00000000 00000000 000F423F 00000000 00000000 ...
        ....
        --CIF-BINARY-FORMAT-SECTION----
        ;
        image_2 2
        ;
        --CIF-BINARY-FORMAT-SECTION--
        Content-Type: application/octet-stream;
             conversions=&quot;x-CBF-PACKED&quot;
        Content-Transfer-Encoding: BASE64
        X-Binary-Size: 3745758
        X-Binary-ID: 2
        Content-MD5: 1zsJjWPfol2GYl2V+QSXrw==

        ELhQAAAAAAAA...
        ...
        --CIF-BINARY-FORMAT-SECTION----
        ;
;
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
save_


save_<a name="_array_data.array_id" >_array_data.array_id</a>
    _item_description.description
;             This item is a pointer to <a href="#_array_structure.id" >_array_structure.id</a> in the
              <a href="#ARRAY_STRUCTURE">ARRAY_STRUCTURE</a> category.
;
    _item.name                  '<a href="#_array_data.array_id" >_array_data.array_id</a>'
    _item.category_id             array_data
    _item.mandatory_code          yes
    _item_type.code               code
     save_


save_<a name="_array_data.binary_id" >_array_data.binary_id</a>
    _item_description.description
;             This item is an integer identifier which, along with
              <a href="#_array_data.array_id" >_array_data.array_id</a>, should uniquely identify the
              particular block of array data.

              If <a href="#_array_data.binary_id" >_array_data.binary_id</a> is not explicitly given,
              it defaults to 1.

              The value of <a href="#_array_data.binary_id" >_array_data.binary_id</a> distinguishes
              among multiple sets of data with the same array
              structure.

              If the MIME header of the data array specifies a
              value for X-Binary-ID, the value of  <a href="#_array_data.binary_id" >_array_data.binary_id</a>
              should be equal to the value given for X-Binary-ID.
;
     loop_
    _item.name
    _item.category_id
    _item.mandatory_code
             '<a href="#_array_data.binary_id" >_array_data.binary_id</a>'            array_data
                                                                implicit
             '<a href="#_diffrn_data_frame.binary_id" >_diffrn_data_frame.binary_id</a>'     diffrn_data_frame
                                                                implicit
             '<a href="#_array_intensities.binary_id" >_array_intensities.binary_id</a>'     array_intensities
                                                                implicit
     loop_
    _item_linked.child_name
    _item_linked.parent_name
             '<a href="#_diffrn_data_frame.binary_id" >_diffrn_data_frame.binary_id</a>'     '<a href="#_array_data.binary_id" >_array_data.binary_id</a>'
             '<a href="#_array_intensities.binary_id" >_array_intensities.binary_id</a>'     '<a href="#_array_data.binary_id" >_array_data.binary_id</a>'

    _item_default.value           1
    _item_type.code               int
     loop_
    _item_range.maximum
    _item_range.minimum
                            1  1
                            .  1
     save_


save_<a name="_array_data.data" >_array_data.data</a>
    _item_description.description
;             The value of <a href="#_array_data.data" >_array_data.data</a> contains the array data
              encapsulated in a STAR string.

              The representation used is a variant on the
              Multipurpose Internet Mail Extensions (MIME) specified
              in RFC 2045-2049 by N. Freed et al.  The boundary
              delimiter used in writing an imgCIF or CBF is
              '\n--CIF-BINARY-FORMAT-SECTION--' (including the
              required initial '\n--').

              The Content-Type may be any of the discrete types permitted
              in RFC 2045; 'application/octet-stream' is recommended.
              If an octet stream was compressed, the compression should
              be specified by the parameter 'conversions=&quot;x-CBF_PACKED&quot;'
              or the parameter 'conversions=&quot;x-CBF_CANONICAL&quot;'.

              The Content-Transfer-Encoding may be 'BASE64',
              'Quoted-Printable', 'X-BASE8', 'X-BASE10',
              'X-BASE16' or 'X-BASE32K', for an imgCIF or 'BINARY'
              for a CBF.  The octal, decimal and hexadecimal transfer
              encodings are provided for convenience in debugging and
              are not recommended for archiving and data interchange.

              In a CIF, one of the parameters 'charset=us-ascii',
              'charset=utf-8' or 'charset=utf-16' may be used on the
              Content-Transfer-Encoding to specify the character set
              used for the external presentation of the encoded data.
              If no charset parameter is given, the character set of
              the enclosing CIF is assumed.  In any case, if a BOM
              flag is detected (FE FF for big-endian UTF-16, FF FE for
              little-endian UTF-16 or EF BB BF for UTF-8) is detected,
              the indicated charset will be assumed until the end of the
              encoded data or the detection of a different BOM.  The
              charset of the Content-Transfer-Encoding is not the character
              set of the encoded data, only the character set of the
              presentation of the encoded data and should be respecified
              for each distinct STAR string.

              In an imgCIF file, the encoded binary data begins after
              the empty line terminating the header.  In an imgCIF file,
              the encoded binary data ends with the terminating boundary
              delimiter '\n--CIF-BINARY-FORMAT-SECTION----'
              in the currently effective charset or with the '\n; '
              that terminates the STAR string.

              In a CBF, the raw binary data begins after an empty line
              terminating the header and after the sequence:

              Octet   Hex   Decimal  Purpose
                0     0C       12    (ctrl-L) Page break
                1     1A       26    (ctrl-Z) Stop listings in MS-DOS
                2     04       04    (Ctrl-D) Stop listings in UNIX
                3     D5      213    Binary section begins

              None of these octets are included in the calculation of
              the message size or in the calculation of the
              message digest.

              The X-Binary-Size header specifies the size of the
              equivalent binary data in octets.  If compression was
              used, this size is the size after compression, including
              any book-keeping fields.  An adjustment is made for
              the deprecated binary formats in which eight bytes of binary
              header are used for the compression type.  In this case,
              the eight bytes used for the compression type are subtracted
              from the size, so that the same size will be reported
              if the compression type is supplied in the MIME header.
              Use of the MIME header is the recommended way to
              supply the compression type.  In general, no portion of
              the  binary header is included in the calculation of the size.

              The X-Binary-Element-Type header specifies the type of
              binary data in the octets, using the same descriptive
              phrases as in <a href="#_array_structure.encoding_type">_array_structure.encoding_type</a>.  The default
              value is 'unsigned 32-bit integer'.

              An MD5 message digest may, optionally, be used. The 'RSA Data
              Security, Inc. MD5 Message-Digest Algorithm' should be used.
              No portion of the header is included in the calculation of the
              message digest.

              If the Transfer Encoding is 'X-BASE8', 'X-BASE10' or
              'X-BASE16', the data are presented as octal, decimal or
              hexadecimal data organized into lines or words.  Each word
              is created by composing octets of data in fixed groups of
              2, 3, 4, 6 or 8 octets, either in the order ...4321 ('big-
              endian') or 1234... ('little-endian').  If there are fewer
              than the specified number of octets to fill the last word,
              then the missing octets are presented as '==' for each
              missing octet.  Exactly two equal signs are used for each
              missing octet even for octal and decimal encoding.
              The format of lines is:

              rnd xxxxxx xxxxxx xxxxxx

              where r is 'H', 'O' or 'D' for hexadecimal, octal or
              decimal, n is the number of octets per word and d is '&lt;'
              or '&gt;' for the '...4321' and '1234...' octet orderings,
              respectively.  The '==' padding for the last word should
              be on the appropriate side to correspond to the missing
              octets, e.g.

              H4&lt; FFFFFFFF FFFFFFFF 07FFFFFF ====0000

              or

              H3&gt; FF0700 00====

              For these hexadecimal, octal and decimal formats only,
              comments beginning with '#' are permitted to improve
              readability.

              BASE64 encoding follows MIME conventions.  Octets are
              in groups of three: c1, c2, c3.  The resulting 24 bits
              are broken into four six-bit quantities, starting with
              the high-order six bits (c1 &gt;&gt; 2) of the first octet, then
              the low-order two bits of the first octet followed by the
              high-order four bits of the second octet [(c1 & 3)&lt;&lt;4 | (c2&gt;&gt;4)],
              then the bottom four bits of the second octet followed by the
              high-order two bits of the last octet [(c2 & 15)&lt;&lt;2 | (c3&gt;&gt;6)],
              then the bottom six bits of the last octet (c3 & 63).  Each
              of these four quantities is translated into an ASCII character
              using the mapping:

                        1         2         3         4         5         6
              0123456789012345678901234567890123456789012345678901234567890123
              |         |         |         |         |         |         |
              ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

              With short groups of octets padded on the right with one '='
              if c3 is missing, and with '==' if both c2 and c3 are missing.

              X-BASE32K encoding is similar to BASE64 encoding, except that
              sets of 15 octets are encoded as sets of 8 16-bit unicode
              characters, by breaking the 120 bits into 8 15-bit quantities.
              256 is added to each 15 bit quantity to bring it into a
              printable uncode range.  When encoding, zero padding is used
              to fill out the last 15 bit quantity.  If 8 or more bits of
              padding are used, a single equals sign (hexadecimal 003D) is
              appended.  Embedded whitespace and newlines are introduced
              to produce lines of no more than 80 characters each.  On
              decoding, all printable ascii characters and ascii whitespace
              characters are ignored except for any trailing equals signs.
              The number of trailing equals signs indicated the number of
              trailing octets to be trimmed from the end of the decoded data.
              (see Georgi Darakev, Vassil Litchev, Kostadin Z. Mitev, Herbert
              J. Bernstein, 'Efficient Support of Binary Data in the XML
              Implementation of the NeXus File Format',absract W0165,
              ACA Summer Meeting, Honolulu, HI, July 2006).

              QUOTED-PRINTABLE encoding also follows MIME conventions, copying
              octets without translation if their ASCII values are 32...38,
              42, 48...57, 59, 60, 62, 64...126 and the octet is not a ';'
              in column 1.  All other characters are translated to =nn, where
              nn is the hexadecimal encoding of the octet.  All lines are
              'wrapped' with a terminating '=' (i.e. the MIME conventions
              for an implicit line terminator are never used).
;
    _item.name                  '<a href="#_array_data.data" >_array_data.data</a>'
    _item.category_id             array_data
    _item.mandatory_code          yes
    _item_type.code               binary
save_


######################
# <a name="ARRAY_ELEMENT_SIZE">ARRAY_ELEMENT_SIZE</a> #
######################


save_ARRAY_ELEMENT_SIZE
    _category.description
;    Data items in the <a href="#ARRAY_ELEMENT_SIZE">ARRAY_ELEMENT_SIZE</a> category record the physical
     size of array elements along each array dimension.
;
    _category.id                   array_element_size
    _category.mandatory_code       no
     loop_
    _category_key.name             '<a href="#_array_element_size.array_id" >_array_element_size.array_id</a>'
                                   '<a href="#_array_element_size.index" >_array_element_size.index</a>'
    loop_
    _category_group.id             'inclusive_group'
                                   'array_data_group'
    loop_
    _category_examples.detail
    _category_examples.case
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;       Example 1 - A regular 2D array with a uniform element dimension
                    of 1220 nanometres.
;
;
        loop_
       <a href="#_array_element_size.array_id" >_array_element_size.array_id</a>
       <a href="#_array_element_size.index" >_array_element_size.index</a>
       <a href="#_array_element_size.size" >_array_element_size.size</a>
        image_1   1    1.22e-6
        image_1   2    1.22e-6
;
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     save_


save_<a name="_array_element_size.array_id" >_array_element_size.array_id</a>
    _item_description.description
;             This item is a pointer to <a href="#_array_structure.id" >_array_structure.id</a> in the
              <a href="#ARRAY_STRUCTURE">ARRAY_STRUCTURE</a> category.
;
    _item.name                  '<a href="#_array_element_size.array_id" >_array_element_size.array_id</a>'
    _item.category_id             array_element_size
    _item.mandatory_code          yes
    _item_type.code               code
     save_


save_<a name="_array_element_size.index" >_array_element_size.index</a>
    _item_description.description
;             This item is a pointer to <a href="#_array_structure_list.index" >_array_structure_list.index</a> in
              the ARRAY_STRUCTURE_LIST category.
;
    _item.name                  '<a href="#_array_element_size.index" >_array_element_size.index</a>'
    _item.category_id             array_element_size
    _item.mandatory_code          yes
    _item_type.code               code
     save_


save_<a name="_array_element_size.size" >_array_element_size.size</a>
    _item_description.description
;              The size in metres of an image element in this
               dimension. This supposes that the elements are arranged
               on a regular grid.
;
    _item.name               '<a href="#_array_element_size.size" >_array_element_size.size</a>'
    _item.category_id          array_element_size
    _item.mandatory_code       yes
    _item_type.code            float
    _item_units.code           'metres'
     loop_
    _item_range.maximum
    _item_range.minimum
                            .   0.0
     save_


#####################
# <a name="ARRAY_INTENSITIES">ARRAY_INTENSITIES</a> #
#####################


save_ARRAY_INTENSITIES
    _category.description
;             Data items in the <a href="#ARRAY_INTENSITIES">ARRAY_INTENSITIES</a> category record the
              information required to recover the intensity data from
              the set of data values stored in the <a href="#ARRAY_DATA">ARRAY_DATA</a> category.

              The detector may have a complex relationship
              between the raw intensity values and the number of
              incident photons.  In most cases, the number stored
              in the final array will have a simple linear relationship
              to the actual number of incident photons, given by
              <a href="#_array_intensities.gain">_array_intensities.gain</a>.  If raw, uncorrected values
              are presented (e.g. for calibration experiments), the
              value of <a href="#_array_intensities.linearity">_array_intensities.linearity</a> will be 'raw'
              and <a href="#_array_intensities.gain">_array_intensities.gain</a> will not be used.

;
    _category.id                   array_intensities
    _category.mandatory_code       no
    loop_
    _category_key.name             '<a href="#_array_intensities.array_id" >_array_intensities.array_id</a>'
                                   '<a href="#_array_intensities.binary_id" >_array_intensities.binary_id</a>'
    loop_
    _category_group.id             'inclusive_group'
                                   'array_data_group'
    loop_
    _category_examples.detail
    _category_examples.case
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;
        Example 1
;
;
        loop_
        <a href="#_array_intensities.array_id" >_array_intensities.array_id</a>
        <a href="#_array_intensities.linearity" >_array_intensities.linearity</a>
        <a href="#_array_intensities.gain" >_array_intensities.gain</a>
        <a href="#_array_intensities.overload" >_array_intensities.overload</a>
        <a href="#_array_intensities.undefined_value" >_array_intensities.undefined_value</a>
        <a href="#_array_intensities.pixel_fast_bin_size" >_array_intensities.pixel_fast_bin_size</a>
        <a href="#_array_intensities.pixel_slow_bin_size" >_array_intensities.pixel_slow_bin_size</a>
        <a href="#_array_intensities.pixel_binning_method" >_array_intensities.pixel_binning_method</a>
        image_1   linear  1.2    655535   0   2   2    hardware
;
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     save_


save_<a name="_array_intensities.array_id" >_array_intensities.array_id</a>
    _item_description.description
;             This item is a pointer to <a href="#_array_structure.id" >_array_structure.id</a> in the
              <a href="#ARRAY_STRUCTURE">ARRAY_STRUCTURE</a> category.
;
    _item.name                  '<a href="#_array_intensities.array_id" >_array_intensities.array_id</a>'
    _item.category_id             array_intensities
    _item.mandatory_code          yes
    _item_type.code               code
     save_


save_<a name="_array_intensities.binary_id" >_array_intensities.binary_id</a>
    _item_description.description
;             This item is a pointer to <a href="#_array_data.binary_id" >_array_data.binary_id</a> in the
              <a href="#ARRAY_DATA">ARRAY_DATA</a> category.
;
    _item.name                  '<a href="#_array_intensities.binary_id" >_array_intensities.binary_id</a>'
    _item.category_id             array_intensities
    _item.mandatory_code          implicit
    _item_type.code               int
     save_


save_<a name="_array_intensities.gain" >_array_intensities.gain</a>
    _item_description.description
;              Detector 'gain'. The factor by which linearized
               intensity count values should be divided to produce
               true photon counts.
;
    _item.name              '<a href="#_array_intensities.gain" >_array_intensities.gain</a>'
    _item.category_id          array_intensities
    _item.mandatory_code       yes
    _item_type.code            float
     loop_
    _item_range.maximum
    _item_range.minimum
                            .   0.0
    _item_units.code           'counts_per_photon'
     loop_
    _item_related.related_name
    _item_related.function_code  '<a href="#_array_intensities.gain_esd" >_array_intensities.gain_esd</a>'
                                 'associated_value'
    save_


save_<a name="_array_intensities.gain_esd" >_array_intensities.gain_esd</a>
    _item_description.description
;            The estimated standard deviation in detector 'gain'.
;
    _item.name              '<a href="#_array_intensities.gain_esd" >_array_intensities.gain_esd</a>'
    _item.category_id          array_intensities
    _item.mandatory_code       yes
    _item_type.code            float
     loop_
    _item_range.maximum
    _item_range.minimum
                            .   0.0

    _item_units.code          'counts_per_photon'
     loop_
    _item_related.related_name
    _item_related.function_code  '<a href="#_array_intensities.gain" >_array_intensities.gain</a>'
                                 'associated_esd'
    save_


save_<a name="_array_intensities.linearity" >_array_intensities.linearity</a>
    _item_description.description
;              The intensity linearity scaling method used to convert
               from the raw intensity to the stored element value:

               'linear' is linear.

               'offset'  means that the value defined by
               <a href="#_array_intensities.offset" >_array_intensities.offset</a> should be added to each
                element value.

               'scaling' means that the value defined by
               <a href="#_array_intensities.scaling">_array_intensities.scaling</a> should be multiplied with each
               element value.

               'scaling_offset' is the combination of the two previous cases,
               with the scale factor applied before the offset value.

               'sqrt_scaled' means that the square root of raw
               intensities multiplied by <a href="#_array_intensities.scaling">_array_intensities.scaling</a> is
               calculated and stored, perhaps rounded to the nearest
               integer. Thus, linearization involves dividing the stored
               values by <a href="#_array_intensities.scaling">_array_intensities.scaling</a> and squaring the
               result.

               'logarithmic_scaled' means that the logarithm base 10 of
               raw intensities multiplied by <a href="#_array_intensities.scaling">_array_intensities.scaling</a>
               is calculated and stored, perhaps rounded to the nearest
               integer. Thus, linearization involves dividing the stored
               values by <a href="#_array_intensities.scaling">_array_intensities.scaling</a> and calculating 10
               to the power of this number.

               'raw' means that the data are a set of raw values straight
               from the detector.
;

    _item.name               '<a href="#_array_intensities.linearity" >_array_intensities.linearity</a>'
    _item.category_id          array_intensities
    _item.mandatory_code       yes
    _item_type.code            code
     loop_
    _item_enumeration.value
    _item_enumeration.detail
                              'linear' .
                              'offset'
;              The value defined by  <a href="#_array_intensities.offset" >_array_intensities.offset</a> should
               be added to each element value.
;
                              'scaling'
;              The value defined by <a href="#_array_intensities.scaling">_array_intensities.scaling</a> should be
               multiplied with each element value.
;
                              'scaling_offset'
;              The combination of the scaling and offset
               with the scale factor applied before the offset value.
;
                              'sqrt_scaled'
;              The square root of raw intensities multiplied by
               <a href="#_array_intensities.scaling">_array_intensities.scaling</a> is calculated and stored,
               perhaps rounded to the nearest integer. Thus,
               linearization involves dividing the stored
               values by <a href="#_array_intensities.scaling">_array_intensities.scaling</a> and squaring the
               result.
;
                              'logarithmic_scaled'
;              The logarithm base 10 of raw intensities multiplied by
               <a href="#_array_intensities.scaling">_array_intensities.scaling</a>  is calculated and stored,
               perhaps rounded to the nearest integer. Thus,
               linearization involves dividing the stored values by
               <a href="#_array_intensities.scaling">_array_intensities.scaling</a> and calculating 10 to the
               power of this number.
;
                              'raw'
;              The array consists of raw values to which no corrections have
               been applied.  While the handling of the data is similar to
               that given for 'linear' data with no offset, the meaning of
               the data differs in that the number of incident photons is
               not necessarily linearly related to the number of counts
               reported.  This value is intended for use either in
               calibration experiments or to allow for handling more
               complex data-fitting algorithms than are allowed for by
               this data item.
;

    save_


save_<a name="_array_intensities.offset" >_array_intensities.offset</a>
    _item_description.description
;              Offset value to add to array element values in the manner
               described by the item <a href="#_array_intensities.linearity" >_array_intensities.linearity</a>.
;
    _item.name                 '<a href="#_array_intensities.offset" >_array_intensities.offset</a>'
    _item.category_id          array_intensities
    _item.mandatory_code       no
    _item_type.code            float
    save_


save_<a name="_array_intensities.overload" >_array_intensities.overload</a>
    _item_description.description
;              The saturation intensity level for this data array.
;
    _item.name                 '<a href="#_array_intensities.overload" >_array_intensities.overload</a>'
    _item.category_id          array_intensities
    _item.mandatory_code       no
    _item_type.code            float
    _item_units.code          'counts'
    save_


save_<a name="_array_intensities.pixel_fast_bin_size" >_array_intensities.pixel_fast_bin_size</a>
    _item_description.description
;              The value of <a href=#_array_intensities.pixel_fast_bin_size" >_array_intensities.pixel_fast_bin_size</a> specifies
               the number of pixels that compose one element in the direction
               of the most rapidly varying array dimension.

               Typical values are 1, 2, 4 or 8.  When there is 1 pixel per
               array element in both directions, the value given for
               <a href="#_array_intensities.pixel_binning_method" >_array_intensities.pixel_binning_method</a> normally should be
               'none'.

               It is specified as a float to allow for binning algorithms that
               create array elements that are not integer multiples of the 
               detector pixel size.
;
    _item.name              '<a href="#_array_intensities.pixel_fast_bin_size" >_array_intensities.pixel_fast_bin_size</a>'
    _item.category_id          array_intensities
    _item.mandatory_code       implicit
    _item_type.code            float
    _item_default.value        1.
     loop_
    _item_range.maximum
    _item_range.minimum
                            .   0.0
    _item_units.code           'pixels_per_element'
    save_


save_<a name="_array_intensities.pixel_slow_bin_size" >_array_intensities.pixel_slow_bin_size</a>
    _item_description.description
;              The value of <a href=#_array_intensities.pixel_slow_bin_size" >_array_intensities.pixel_slow_bin_size</a> specifies
               the number of pixels that compose one element in the direction
               of the second most rapidly varying array dimension.

               Typical values are 1, 2, 4 or 8.  When there is 1 pixel per
               array element in both directions, the value given for
               <a href="#_array_intensities.pixel_binning_method" >_array_intensities.pixel_binning_method</a> normally should be
               'none'.

               It is specified as a float to allow for binning algorithms that
               create array elements that are not integer multiples of the
               detector pixel size.
;
    _item.name              '<a href="#_array_intensities.pixel_slow_bin_size" >_array_intensities.pixel_slow_bin_size</a>'
    _item.category_id          array_intensities
    _item.mandatory_code       implicit
    _item_type.code            float
    _item_default.value        1.
     loop_
    _item_range.maximum
    _item_range.minimum
                            .   0.0
    _item_units.code           'pixels_per_element'
    save_


save_<a name="_array_intensities.pixel_binning_method" >_array_intensities.pixel_binning_method</a>
    _item_description.description
;              The value of <a href="#_array_intensities.pixel_binning_method">_array_intensities.pixel_binning_method</a> specifies
               the method used to derive array elements from multiple pixels.
;
    _item.name              '<a href="#_array_intensities.pixel_binning_method" >_array_intensities.pixel_binning_method</a>'
    _item.category_id          array_intensities
    _item.mandatory_code       implicit
    _item_type.code            code
     loop_
    _item_enumeration.value
    _item_enumeration.detail
                               'hardware'
;              The element intensities were derived from the raw data of one
               or more pixels by used of hardware in the detector, e.g. by use
               of shift registers in a CCD to combine pixels into super-pixels.
;
                               'software'
;              The element intensities were derived from the raw data of more
               than one pixel by use of software.
;
                               'combined'
;              The element intensities were derived from the raw data of more
               than one pixel by use of both hardware and software, as when
               hardware binning is used in one direction and software in the
               other.
;
                               'none'
;              In the both directions, the data has not been binned.  The
               number of pixels is equal to the number of elements.

               When the value of <a href="#_array_intensities.pixel_binning_method" >_array_intensities.pixel_binning_method</a> is
               'none' the values of <a href="#_array_intensities.pixel_fast_bin_size" >_array_intensities.pixel_fast_bin_size</a>
               and <a href="#_array_intensities.pixel_slow_bin_size" >_array_intensities.pixel_slow_bin_size</a> both must be 1.
;
                               'unspecified'
;              The method used to derive element intensities is not specified.
;
    _item_default.value        'unspecified'
    save_

save_<a name="_array_intensities.scaling" >_array_intensities.scaling</a>
    _item_description.description
;              Multiplicative scaling value to be applied to array data
               in the manner described by item
               <a href="#_array_intensities.linearity" >_array_intensities.linearity</a>.
;
    _item.name                 '<a href="#_array_intensities.scaling" >_array_intensities.scaling</a>'
    _item.category_id          array_intensities
    _item.mandatory_code       no
    _item_type.code            float
    save_



save_<a name="_array_intensities.undefined_value" >_array_intensities.undefined_value</a>
    _item_description.description
;              A value to be substituted for undefined values in
               the data array.
;
    _item.name                 '<a href="#_array_intensities.undefined_value" >_array_intensities.undefined_value</a>'
    _item.category_id          array_intensities
    _item.mandatory_code       no
    _item_type.code            float
    save_


###################
# <a name="ARRAY_STRUCTURE">ARRAY_STRUCTURE</a> #
###################


save_ARRAY_STRUCTURE
    _category.description
;    Data items in the <a href="#ARRAY_STRUCTURE">ARRAY_STRUCTURE</a> category record the organization and
     encoding of array data that may be stored in the <a href="#ARRAY_DATA">ARRAY_DATA</a> category.
;
    _category.id                   array_structure
    _category.mandatory_code       no
    _category_key.name             '<a href="#_array_structure.id" >_array_structure.id</a>'
    loop_
    _category_group.id             'inclusive_group'
                                   'array_data_group'
    loop_
    _category_examples.detail
    _category_examples.case
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;   Example 1 -
;
;
     loop_
    _array_structure.id
    _array_structure.encoding_type
    _array_structure.compression_type
    _array_structure.byte_order
     image_1       "unsigned 16-bit integer"  none  little_endian
;
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     save_


save_<a name="_array_structure.byte_order" >_array_structure.byte_order</a>
    _item_description.description
;              The order of bytes for integer values which require more
               than 1 byte.

               (IBM-PC's and compatibles and DEC VAXs use low-byte-first
               ordered integers, whereas Hewlett Packard 700
               series, Sun-4 and Silicon Graphics use high-byte-first
               ordered integers.  DEC Alphas can produce/use either
               depending on a compiler switch.)
;

    _item.name                     '<a href="#_array_structure.byte_order" >_array_structure.byte_order</a>'
    _item.category_id               array_structure
    _item.mandatory_code            yes
    _item_type.code                 code
     loop_
    _item_enumeration.value
    _item_enumeration.detail
                                   'big_endian'
;       The first byte in the byte stream of the bytes which make up an
        integer value is the most significant byte of an integer.
;
                                   'little_endian'
;       The last byte in the byte stream of the bytes which make up an
        integer value is the most significant byte of an integer.
;
     save_


save_<a name="_array_structure.compression_type" >_array_structure.compression_type</a>
    _item_description.description
;             Type of data-compression method used to compress the array
              data.
;
    _item.name                   '<a href="#_array_structure.compression_type" >_array_structure.compression_type</a>'
    _item.category_id             array_structure
    _item.mandatory_code          no
    _item_type.code               code
    _item_default.value           'none'
     loop_
    _item_enumeration.value
    _item_enumeration.detail
                                  'none'
;       Data are stored in normal format as defined by
        <a href="#_array_structure.encoding_type" >_array_structure.encoding_type</a> and
        <a href="#_array_structure.byte_order" >_array_structure.byte_order</a>.
;
                                  'packed'
;       Using the 'packed' compression scheme, a CCP4-style packing
        (International Tables for Crystallography Volume G,
        Section 5.6.3.2)
;
                                  'canonical'
;       Using the 'canonical' compression scheme (International Tables
        for Crystallography Volume G, Section 5.6.3.1)
;
    save_


save_<a name="_array_structure.encoding_type" >_array_structure.encoding_type</a>
    _item_description.description
;              Data encoding of a single element of array data.

               In several cases, the IEEE format is referenced.
               See IEEE Standard 754-1985 (IEEE, 1985).

               Ref: IEEE (1985). IEEE Standard for Binary Floating-Point
               Arithmetic. ANSI/IEEE Std 754-1985. New York: Institute of
               Electrical and Electronics Engineers.
;

    _item.name                '<a href="#_array_structure.encoding_type" >_array_structure.encoding_type</a>'
    _item.category_id          array_structure
    _item.mandatory_code       yes
    _item_type.code            uline
     loop_
    _item_enumeration.value
                              'unsigned 8-bit integer'
                              'signed 8-bit integer'
                              'unsigned 16-bit integer'
                              'signed 16-bit integer'
                              'unsigned 32-bit integer'
                              'signed 32-bit integer'
                              'signed 32-bit real IEEE'
                              'signed 64-bit real IEEE'
                              'signed 32-bit complex IEEE'
     save_


save_<a name="_array_structure.id" >_array_structure.id</a>
    _item_description.description
;             The value of <a href="#_array_structure.id" >_array_structure.id</a> must uniquely identify
              each item of array data.
;
    loop_
    _item.name
    _item.category_id
    _item.mandatory_code
             '<a href="#_array_structure.id" >_array_structure.id</a>'              array_structure      yes
             '<a href="#_array_data.array_id" >_array_data.array_id</a>'             array_data           yes
             '<a href="#_array_structure_list.array_id" >_array_structure_list.array_id</a>'   array_structure_list yes
             '<a href="#_array_intensities.array_id" >_array_intensities.array_id</a>'      array_intensities    yes
             '<a href="#_diffrn_data_frame.array_id" >_diffrn_data_frame.array_id</a>'      diffrn_data_frame    yes


    _item_type.code               code
     loop_
    _item_linked.child_name
    _item_linked.parent_name
             '<a href="#_array_data.array_id" >_array_data.array_id</a>'             '<a href="#_array_structure.id" >_array_structure.id</a>'
             '<a href="#_array_structure_list.array_id" >_array_structure_list.array_id</a>'   '<a href="#_array_structure.id" >_array_structure.id</a>'
             '<a href="#_array_intensities.array_id" >_array_intensities.array_id</a>'      '<a href="#_array_structure.id" >_array_structure.id</a>'
             '<a href="#_diffrn_data_frame.array_id" >_diffrn_data_frame.array_id</a>'      '<a href="#_array_structure.id" >_array_structure.id</a>'

     save_


########################
# <a name="ARRAY_STRUCTURE_LIST">ARRAY_STRUCTURE_LIST</a> #
########################


save_ARRAY_STRUCTURE_LIST
    _category.description
;    Data items in the <a href="#ARRAY_STRUCTURE_LIST">ARRAY_STRUCTURE_LIST</a> category record the size
     and organization of each array dimension.

     The relationship to physical axes may be given.
;
    _category.id                   array_structure_list
    _category.mandatory_code       no
     loop_
    _category_key.name             '<a href="#_array_structure_list.array_id" >_array_structure_list.array_id</a>'
                                   '<a href="#_array_structure_list.index" >_array_structure_list.index</a>'
    loop_
    _category_group.id             'inclusive_group'
                                   'array_data_group'
    loop_
    _category_examples.detail
    _category_examples.case
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;       Example 1 - An image array of 1300 x 1200 elements.  The raster
                    order of the image is left to right (increasing) in the
                    first dimension and bottom to top (decreasing) in
                    the second dimension.
;
;
        loop_
       <a href="#_array_structure_list.array_id" >_array_structure_list.array_id</a>
       <a href="#_array_structure_list.index" >_array_structure_list.index</a>
       <a href="#_array_structure_list.dimension" >_array_structure_list.dimension</a>
       <a href="#_array_structure_list.precedence" >_array_structure_list.precedence</a>
       <a href="#_array_structure_list.direction" >_array_structure_list.direction</a>
       <a href="#_array_structure_list.axis_id" >_array_structure_list.axis_set_id</a>
        image_1   1    1300    1     increasing  ELEMENT_X
        image_1   2    1200    2     decreasing  ELEMENY_Y
;
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     save_


save_<a name="_array_structure_list.array_id" >_array_structure_list.array_id</a>
    _item_description.description
;             This item is a pointer to <a href="#_array_structure.id" >_array_structure.id</a> in the
              <a href="#ARRAY_STRUCTURE">ARRAY_STRUCTURE</a> category.
;
    _item.name                  '<a href="#_array_structure_list.array_id" >_array_structure_list.array_id</a>'
    _item.category_id             array_structure_list
    _item.mandatory_code          yes
    _item_type.code               code
save_


save_<a name="_array_structure_list.axis_set_id" >_array_structure_list.axis_set_id</a>
    _item_description.description
;              This is a descriptor for the physical axis or set of axes
               corresponding to an array index.

               This data item is related to the axes of the detector
               itself given in <a href="#DIFFRN_DETECTOR_AXIS">DIFFRN_DETECTOR_AXIS</a>, but usually differs
               in that the axes in this category are the axes of the
               coordinate system of reported data points, while the axes in
               <a href="#DIFFRN_DETECTOR_AXIS">DIFFRN_DETECTOR_AXIS</a> are the physical axes
               of the detector describing the 'poise' of the detector as an
               overall physical object.

               If there is only one axis in the set, the identifier of
               that axis should be used as the identifier of the set.
;
     loop_
    _item.name
    _item.category_id
    _item.mandatory_code
           '<a href="#_array_structure_list.axis_set_id" >_array_structure_list.axis_set_id</a>'
                                  array_structure_list            yes
           '<a href="#_array_structure_list_axis.axis_set_id" >_array_structure_list_axis.axis_set_id</a>'
                                  array_structure_list_axis       implicit
    _item_type.code               code
     loop_
    _item_linked.child_name
    _item_linked.parent_name
           '<a href="#_array_structure_list_axis.axis_set_id" >_array_structure_list_axis.axis_set_id</a>'
                               '<a href="#_array_structure_list.axis_set_id" >_array_structure_list.axis_set_id</a>'


     save_


save_<a name="_array_structure_list.dimension" >_array_structure_list.dimension</a>
    _item_description.description
;              The number of elements stored in the array structure in this
               dimension.
;
    _item.name                '<a href="#_array_structure_list.dimension" >_array_structure_list.dimension</a>'
    _item.category_id          array_structure_list
    _item.mandatory_code       yes
    _item_type.code            int
     loop_
    _item_range.maximum
    _item_range.minimum
                            1  1
                            .  1
     save_


save_<a name="_array_structure_list.direction" >_array_structure_list.direction</a>
    _item_description.description
;             Identifies the direction in which this array index changes.
;
    _item.name                '<a href="#_array_structure_list.direction" >_array_structure_list.direction</a>'
    _item.category_id          array_structure_list
    _item.mandatory_code       yes
    _item_type.code            code
     loop_
    _item_enumeration.value
    _item_enumeration.detail

                              'increasing'
;        Indicates the index changes from 1 to the maximum dimension.
;
                              'decreasing'
;        Indicates the index changes from the maximum dimension to 1.
;
     save_


save_<a name="_array_structure_list.index" >_array_structure_list.index</a>
    _item_description.description
;              Identifies the one-based index of the row or column in the
               array structure.
;
     loop_
    _item.name
    _item.category_id
    _item.mandatory_code
           '<a href="#_array_structure_list.index" >_array_structure_list.index</a>'        array_structure_list   yes
           '<a href="#_array_structure_list.precedence" >_array_structure_list.precedence</a>'   array_structure_list   yes
           '<a href="#_array_element_size.index" >_array_element_size.index</a>'          array_element_size     yes

    _item_type.code            int

     loop_
    _item_linked.child_name
    _item_linked.parent_name
          '<a href="#_array_element_size.index" >_array_element_size.index</a>'         '<a href="#_array_structure_list.index" >_array_structure_list.index</a>'
     loop_
    _item_range.maximum
    _item_range.minimum
                            1  1
                            .  1
     save_


save_<a name="_array_structure_list.precedence" >_array_structure_list.precedence</a>
    _item_description.description
;              Identifies the rank order in which this array index changes
               with respect to other array indices.  The precedence of 1
               indicates the index which changes fastest.
;
    _item.name                '<a href="#_array_structure_list.precedence" >_array_structure_list.precedence</a>'
    _item.category_id          array_structure_list
    _item.mandatory_code       yes
    _item_type.code            int
     loop_
    _item_range.maximum
    _item_range.minimum
                            1  1
                            .  1
     save_


#############################
# <a name="ARRAY_STRUCTURE_LIST_AXIS">ARRAY_STRUCTURE_LIST_AXIS</a> #
#############################

save_ARRAY_STRUCTURE_LIST_AXIS
    _category.description
;    Data items in the <a href="#ARRAY_STRUCTURE_LIST_AXIS">ARRAY_STRUCTURE_LIST_AXIS</a> category describe
     the physical settings of sets of axes for the centres of pixels that
     correspond to data points described in the
     <a href="#ARRAY_STRUCTURE_LIST">ARRAY_STRUCTURE_LIST</a> category.

     In the simplest cases, the physical increments of a single axis correspond
     to the increments of a single array index.  More complex organizations,
     e.g. spiral scans, may require coupled motions along multiple axes.

     Note that a spiral scan uses two coupled axes: one for the angular
     direction and one for the radial direction.  This differs from a
     cylindrical scan for which the two axes are not coupled into one set.
;
    _category.id                   array_structure_list_axis
    _category.mandatory_code       no
     loop_
    _category_key.name
                                  '<a href="#_array_structure_list_axis.axis_set_id" >_array_structure_list_axis.axis_set_id</a>'
                                  '<a href="#_array_structure_list_axis.axis_id" >_array_structure_list_axis.axis_id</a>'
     loop_
    _category_group.id           'inclusive_group'
                                 'array_data_group'
     save_


save_<a name="_array_structure_list_axis.axis_id" >_array_structure_list_axis.axis_id</a>
    _item_description.description
;              The value of this data item is the identifier of one of
               the axes in the set of axes for which settings are being
               specified.

               Multiple axes may be specified for the same value of
               <a href="#_array_structure_list_axis.axis_set_id" >_array_structure_list_axis.axis_set_id</a>.

               This item is a pointer to <a href="#_axis.id" >_axis.id</a> in the
               <a href="#AXIS">AXIS</a> category.
;
    _item.name                 '<a href="#_array_structure_list_axis.axis_id" >_array_structure_list_axis.axis_id</a>'
    _item.category_id          array_structure_list_axis
    _item.mandatory_code       yes
    _item_type.code            code
     save_


save_<a name="_array_structure_list_axis.axis_set_id" >_array_structure_list_axis.axis_set_id</a>
    _item_description.description
;              The value of this data item is the identifier of the
               set of axes for which axis settings are being specified.

               Multiple axes may be specified for the same value of
               <a href="#_array_structure_list_axis.axis_set_id" >_array_structure_list_axis.axis_set_id</a>.

               This item is a pointer to
               <a href="#_array_structure_list.axis_set_id" >_array_structure_list.axis_set_id</a>
               in the <a href="#ARRAY_STRUCTURE_LIST">ARRAY_STRUCTURE_LIST</a> category.

               If this item is not specified, it defaults to the corresponding
               axis identifier.
;
    _item.name                 '<a href="#_array_structure_list_axis.axis_set_id" >_array_structure_list_axis.axis_set_id</a>'
    _item.category_id          array_structure_list_axis
    _item.mandatory_code       implicit
    _item_type.code            code
     save_


save_<a name="_array_structure_list_axis.angle" >_array_structure_list_axis.angle</a>
    _item_description.description
;              The setting of the specified axis in degrees for the first
               data point of the array index with the corresponding value
               of <a href="#_array_structure_list.axis_set_id">_array_structure_list.axis_set_id</a>.  If the index is
               specified as 'increasing', this will be the centre of the
               pixel with index value 1.  If the index is specified as
               'decreasing', this will be the centre of the pixel with
               maximum index value.
;
    _item.name                 '<a href="#_array_structure_list_axis.angle" >_array_structure_list_axis.angle</a>'
    _item.category_id          array_structure_list_axis
    _item.mandatory_code       no
    _item_default.value        0.0
    _item_type.code            float
    _item_units.code           'degrees'
     save_


save_<a name="_array_structure_list_axis.angle_increment">_array_structure_list_axis.angle_increment</a>
    _item_description.description
;              The pixel-centre-to-pixel-centre increment in the angular
               setting of the specified axis in degrees.  This is not
               meaningful in the case of 'constant velocity' spiral scans
               and should not be specified for this case.

               See <a href="#_array_structure_list_axis.angular_pitch">_array_structure_list_axis.angular_pitch</a>.

;
    _item.name                 '<a href="#_array_structure_list_axis.angle_increment">_array_structure_list_axis.angle_increment</a>'
    _item.category_id          array_structure_list_axis
    _item.mandatory_code       no
    _item_default.value        0.0
    _item_type.code            float
    _item_units.code           'degrees'
     save_


save_<a name="_array_structure_list_axis.displacement" >_array_structure_list_axis.displacement</a>
    _item_description.description
;              The setting of the specified axis in millimetres for the first
               data point of the array index with the corresponding value
               of <a href="#_array_structure_list.axis_set_id">_array_structure_list.axis_set_id</a>.  If the index is
               specified as 'increasing', this will be the centre of the
               pixel with index value 1.  If the index is specified as
               'decreasing', this will be the centre of the pixel with
               maximum index value.
;
    _item.name               '<a href="#_array_structure_list_axis.displacement" >_array_structure_list_axis.displacement</a>'
    _item.category_id          array_structure_list_axis
    _item.mandatory_code       no
    _item_default.value        0.0
    _item_type.code            float
    _item_units.code           'millimetres'
     save_


save_<a name="_array_structure_list_axis.displacement_increment">_array_structure_list_axis.displacement_increment</a>
    _item_description.description
;              The pixel-centre-to-pixel-centre increment for the displacement
               setting of the specified axis in millimetres.
;
    _item.name
        '<a href="#_array_structure_list_axis.displacement_increment">_array_structure_list_axis.displacement_increment</a>'
    _item.category_id          array_structure_list_axis
    _item.mandatory_code       no
    _item_default.value        0.0
    _item_type.code            float
    _item_units.code           'millimetres'
     save_


save_<a name="_array_structure_list_axis.angular_pitch">_array_structure_list_axis.angular_pitch</a>
    _item_description.description
;              The pixel-centre-to-pixel-centre distance for a one-step
               change in the setting of the specified axis in millimetres.

               This is meaningful only for 'constant velocity' spiral scans
               or for uncoupled angular scans at a constant radius
               (cylindrical scans) and should not be specified for cases
               in which the angle between pixels (rather than the distance
               between pixels) is uniform.

               See <a href="#_array_structure_list_axis.angle_increment">_array_structure_list_axis.angle_increment</a>.
;
    _item.name               '<a href="#_array_structure_list_axis.angular_pitch">_array_structure_list_axis.angular_pitch</a>'
    _item.category_id          array_structure_list_axis
    _item.mandatory_code       no
    _item_default.value        0.0
    _item_type.code            float
    _item_units.code           'millimetres'
     save_


save_<a name="_array_structure_list_axis.radial_pitch">_array_structure_list_axis.radial_pitch</a>
    _item_description.description
;              The radial distance from one 'cylinder' of pixels to the
               next in millimetres.  If the scan is a 'constant velocity'
               scan with differing angular displacements between pixels,
               the value of this item may differ significantly from the
               value of <a href="#_array_structure_list_axis.displacement_increment">_array_structure_list_axis.displacement_increment</a>.
;
    _item.name               '<a href="#_array_structure_list_axis.radial_pitch">_array_structure_list_axis.radial_pitch</a>'
    _item.category_id          array_structure_list_axis
    _item.mandatory_code       no
    _item_default.value        0.0
    _item_type.code            float
    _item_units.code           'millimetres'
     save_



########
# <a name="AXIS">AXIS</a> #
########

save_AXIS
    _category.description
;    Data items in the <a href="#AXIS">AXIS</a> 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 or specimen:

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



     Axis 1 (X): The X-axis is aligned to the mechanical axis pointing from
     the sample or specimen along the  principal axis of the goniometer.

     Axis 2 (Y): The Y-axis completes an orthogonal right-handed system
     defined by the X-axis and the Z-axis (see below).

     Axis 3 (Z): The Z-axis is derived from the source axis which goes from
     the sample to the source.  The Z-axis is the component of the source axis
     in the direction of the source orthogonal to the X-axis in the plane
     defined by the X-axis and the source axis.

     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 direction of the unit vector specifies the sense of
     positive translation.

     Note:  This choice of coordinate system is similar to but significantly
     different from the choice in MOSFLM (Leslie & Powell, 2004).  In MOSFLM,
     X is along the X-ray beam (the CBF/imgCIF Z axis) and Z is along the
     rotation axis.

     All rotations are given in degrees and all translations 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 centre.
     The location of the beam centre on the detector should be given in the
     <a href="#DIFFRN_DETECTOR">DIFFRN_DETECTOR</a> category in distortion-corrected millimetres from
     the (0,0) corner of the detector.

     It should be noted that many different origins arise in the definition
     of an experiment.  In particular, as noted above, it is necessary to
     specify the location of the beam centre on the detector in terms
     of the origin of the detector, which is, of course, not coincident
     with the centre of the sample.

     Ref:  Leslie, A. G. W. &  Powell, H. (2004). MOSFLM v6.11.
     MRC Laboratory of Molecular Biology, Hills Road, Cambridge, England.
     http://www.CCP4.ac.uk/dist/x-windows/Mosflm/.
;
    _category.id                   axis
    _category.mandatory_code       no
     loop_
    _category_key.name          '<a href="#_axis.id" >_axis.id</a>'
                                '_axis.equipment'
     loop_
    _category_group.id           'inclusive_group'
                                 'axis_group'
                                 'diffrn_group'
    loop_
    _category_examples.detail
    _category_examples.case
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;       Example 1 -

        This example shows the axis specification of the axes of a kappa-
        geometry goniometer [see Stout, G. H. & Jensen, L. H. (1989). X-ray
        structure determination. A practical
        guide, 2nd ed. p. 134. New York: Wiley Interscience].

        There are three axes specified, and no offsets.  The outermost axis,
        omega, is pointed along the X axis.  The next innermost axis, kappa,
        is at a 50 degree 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 transformation matrices derived from the axis settings,
        the complete transformation would be:
            x' = (T-omega) (T-kappa) (T-phi) x
;
;
         loop_
        <a href="#_axis.id" >_axis.id</a>
        <a href="#_axis.type" >_axis.type</a>
        <a href="#_axis.equipment" >_axis.equipment</a>
        <a href="#_axis.depends_on" >_axis.depends_on</a>
        <a href="#_axis.vector[1]" >_axis.vector[1]</a> <a href="#_axis.vector[2]" >_axis.vector[2]</a> <a href="#_axis.vector[3]" >_axis.vector[3]</a>
        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.  The order has been changed as a
        reminder that the ordering of presentation of tokens is not
        significant.  The centre of rotation of the detector has been taken
        to be 68 millimetres in the direction away from the source.
;
;
        loop_
        <a href="#_axis.id" >_axis.id</a>
        <a href="#_axis.type" >_axis.type</a>
        <a href="#_axis.equipment" >_axis.equipment</a>
        <a href="#_axis.depends_on" >_axis.depends_on</a>
        <a href="#_axis.vector[1]" >_axis.vector[1]</a> <a href="#_axis.vector[2]" >_axis.vector[2]</a> <a href="#_axis.vector[3]" >_axis.vector[3]</a>
        <a href="#_axis.offset[1]">_axis.offset[1]</a> <a href="#_axis.offset[2]">_axis.offset[2]</a> <a href="#_axis.offset[3]">_axis.offset[3]</a>
        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_<a name="_axis.depends_on" >_axis.depends_on</a>
    _item_description.description
;             The value of <a href="#_axis.depends_on" >_axis.depends_on</a> specifies the next outermost
              axis upon which this axis depends.

              This item is a pointer to <a href="#_axis.id">_axis.id</a> in the same category.
;
    _item.name                      '<a href="#_axis.depends_on">_axis.depends_on</a>'
    _item.category_id                 axis
    _item.mandatory_code              no

     save_


save_<a name="_axis.equipment" >_axis.equipment</a>
    _item_description.description
;             The value of  <a href="#_axis.equipment" >_axis.equipment</a> specifies the type of
              equipment using the axis:  'goniometer', 'detector',
              'gravity', 'source' or 'general'.
;
    _item.name                      '<a href="#_axis.equipment">_axis.equipment</a>'
    _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_<a name="_axis.offset[1]" >_axis.offset[1]</a>
    _item_description.description
;              The [1] element of the three-element vector used to specify
               the offset to the base of a rotation or translation axis.

               The vector is specified in millimetres.
;
    _item.name                  '<a href="#_axis.offset[1]">_axis.offset[1]</a>'
    _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              millimetres
     save_


save_<a name="_axis.offset[2]" >_axis.offset[2]</a>
    _item_description.description
;              The [2] element of the three-element vector used to specify
               the offset to the base of a rotation or translation axis.

               The vector is specified in millimetres.
;
    _item.name                  '<a href="#_axis.offset[2]">_axis.offset[2]</a>'
    _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              millimetres
     save_


save_<a name="_axis.offset[3]" >_axis.offset[3]</a>
    _item_description.description
;              The [3] element of the three-element vector used to specify
               the offset to the base of a rotation or translation axis.

               The vector is specified in millimetres.
;
    _item.name                  '<a href="#_axis.offset[3]">_axis.offset[3]</a>'
    _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              millimetres
     save_


save_<a name="_axis.id" >_axis.id</a></a>
    _item_description.description
;             The value of <a href="#_axis.id" >_axis.id</a> 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 the category key for <a href="#AXIS">AXIS</a> also includes the
              equipment.
;
    loop_
    _item.name
    _item.category_id
    _item.mandatory_code
         '<a href="#_axis.id" >_axis.id</a>'                         axis                    yes
         '<a href="#_array_structure_list_axis.axis_id" >_array_structure_list_axis.axis_id</a>'
                                            array_structure_list_axis
                                                                    yes
         '<a href="#_diffrn_detector_axis.axis_id" >_diffrn_detector_axis.axis_id</a>'    diffrn_detector_axis    yes
         '<a href="#_diffrn_measurement_axis.axis_id" >_diffrn_measurement_axis.axis_id</a>' diffrn_measurement_axis yes
         '<a href="#_diffrn_scan_axis.axis_id" >_diffrn_scan_axis.axis_id</a>'        diffrn_scan_axis        yes
         '<a href="#_diffrn_scan_frame_axis.axis_id" >_diffrn_scan_frame_axis.axis_id</a>'  diffrn_scan_frame_axis  yes

    _item_type.code               code
     loop_
    _item_linked.child_name
    _item_linked.parent_name
         '<a href="#_axis.depends_on" >_axis.depends_on</a>'                   '<a href="#_axis.id" >_axis.id</a>'
         '<a href="#_array_structure_list_axis.axis_id" >_array_structure_list_axis.axis_id</a>' '<a href="#_axis.id" >_axis.id</a>'
         '<a href="#_diffrn_detector_axis.axis_id" >_diffrn_detector_axis.axis_id</a>'      '<a href="#_axis.id" >_axis.id</a>'
         '<a href="#_diffrn_measurement_axis.axis_id" >_diffrn_measurement_axis.axis_id</a>'   '<a href="#_axis.id" >_axis.id</a>'
         '<a href="#_diffrn_scan_axis.axis_id" >_diffrn_scan_axis.axis_id</a>'          '<a href="#_axis.id" >_axis.id</a>'
         '<a href="#_diffrn_scan_frame_axis.axis_id" >_diffrn_scan_frame_axis.axis_id</a>'    '<a href="#_axis.id" >_axis.id</a>'

     save_


save_<a name="_axis.type" >_axis.type</a>
    _item_description.description
;             The value of <a href="#_axis.type" >_axis.type</a> specifies the type of
              axis:  'rotation' or 'translation' (or 'general' when
              the type is not relevant, as for gravity).
;
    _item.name                      '<a href="#_axis.type">_axis.type</a>'
    _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_<a name="_axis.vector[1]" >_axis.vector[1]</a>
    _item_description.description
;              The [1] element of the three-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                  '<a href="#_axis.vector[1]" >_axis.vector[1]</a>'
    _item.category_id             axis
    _item.mandatory_code          no
    _item_default.value           0.0
    _item_sub_category.id         vector
    _item_type.code               float
     save_

save_<a name="_axis.vector[2]" >_axis.vector[2]</a>
    _item_description.description
;              The [2] element of the three-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                  '<a href="#_axis.vector[2]" >_axis.vector[2]</a>'
    _item.category_id             axis
    _item.mandatory_code          no
    _item_default.value           0.0
    _item_sub_category.id         vector
    _item_type.code               float
     save_

save_<a name="_axis.vector[3]" >_axis.vector[3]</a>
    _item_description.description
;              The [3] element of the three-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                  '<a href="#_axis.vector[3]" >_axis.vector[3]</a>'
    _item.category_id             axis
    _item.mandatory_code          no
    _item_default.value           0.0
    _item_sub_category.id         vector
    _item_type.code               float
     save_



#####################
# <a name="DIFFRN_DATA_FRAME" >DIFFRN_DATA_FRAME</a> #
#####################


save_DIFFRN_DATA_FRAME
    _category.description
;             Data items in the <a href="#DIFFRN_DATA_FRAME">DIFFRN_DATA_FRAME</a> category record
              the details about each frame of data.

              The items in this category were previously in a
              DIFFRN_FRAME_DATA category, which is now deprecated.
              The items from the old category are provided
              as aliases but should not be used for new work.
;
    _category.id                   diffrn_data_frame
    _category.mandatory_code       no
     loop_
    _category_key.name             '<a href="#_diffrn_data_frame.id" >_diffrn_data_frame.id</a>'
                                   '<a href="#_diffrn_data_frame.detector_element_id" >_diffrn_data_frame.detector_element_id</a>'
    loop_
    _category_group.id             'inclusive_group'
                                   'array_data_group'
    loop_
    _category_examples.detail
    _category_examples.case
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;   Example 1 - A frame containing data from 4 frame elements.
                Each frame element has a common array configuration
                'array_1' described in <a href="#ARRAY_STRUCTURE">ARRAY_STRUCTURE</a> and related
                categories.  The data for each detector element are
                stored in four groups of binary data in the
                <a href="#ARRAY_DATA">ARRAY_DATA</a> category, linked by the array_id and
                binary_id.
;
;
        loop_
        <a href="#_diffrn_data_frame.id" >_diffrn_data_frame.id</a>
        <a href="#_diffrn_data_frame.detector_element_id" >_diffrn_data_frame.detector_element_id</a>
        <a href="#_diffrn_data_frame.array_id" >_diffrn_data_frame.array_id</a>
        <a href="#_diffrn_data_frame.binary_id" >_diffrn_data_frame.binary_id</a>
        frame_1   d1_ccd_1  array_1  1
        frame_1   d1_ccd_2  array_1  2
        frame_1   d1_ccd_3  array_1  3
        frame_1   d1_ccd_4  array_1  4
;
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    save_


save_<a name="_diffrn_data_frame.array_id" >_diffrn_data_frame.array_id</a>
    _item_description.description
;             This item is a pointer to <a href="#_array_structure.id" >_array_structure.id</a> in the
              <a href="#ARRAY_STRUCTURE">ARRAY_STRUCTURE</a> category.
;
    _item.name                  '<a href="#_diffrn_data_frame.array_id" >_diffrn_data_frame.array_id</a>'
    _item.category_id             diffrn_data_frame
    _item.mandatory_code          yes
    _item_aliases.alias_name    '_diffrn_frame_data.array_id'
    _item_aliases.dictionary      cif_img.dic
    _item_aliases.version         1.0
    _item_type.code               code
     save_


save_<a name="_diffrn_data_frame.binary_id" >_diffrn_data_frame.binary_id</a>
    _item_description.description
;             This item is a pointer to <a href="#_array_data.binary_id" >_array_data.binary_id</a> in the
              <a href="#ARRAY_DATA">ARRAY_DATA</a> category.
;
    _item.name                  '<a href="#_diffrn_data_frame.binary_id" >_diffrn_data_frame.binary_id</a>'
    _item.category_id             diffrn_data_frame
    _item.mandatory_code          implicit
    _item_aliases.alias_name    '_diffrn_frame_data.binary_id'
    _item_aliases.dictionary      cif_img.dic
    _item_aliases.version         1.0
    _item_type.code               int
     save_


save_<a name="_diffrn_data_frame.detector_element_id" >_diffrn_data_frame.detector_element_id</a>
    _item_description.description
;              This item is a pointer to <a href="#_diffrn_detector_element.id">_diffrn_detector_element.id</a>
               in the <a href="#DIFFRN_DETECTOR_ELEMENT">DIFFRN_DETECTOR_ELEMENT</a> category.
;
    _item.name                  '<a href="#_diffrn_data_frame.detector_element_id" >_diffrn_data_frame.detector_element_id</a>'
    _item.category_id             diffrn_data_frame
    _item.mandatory_code          yes
    _item_aliases.alias_name    '_diffrn_frame_data.detector_element_id'
    _item_aliases.dictionary      cif_img.dic
    _item_aliases.version         1.0
    _item_type.code               code
     save_


save_<a name="_diffrn_data_frame.id" >_diffrn_data_frame.id</a>
    _item_description.description
;             The value of <a href="#_diffrn_data_frame.id" >_diffrn_data_frame.id</a> must uniquely identify
              each complete frame of data.
;
     loop_
    _item.name
    _item.category_id
    _item.mandatory_code
           '<a href="#_diffrn_data_frame.id" >_diffrn_data_frame.id</a>'        diffrn_data_frame  yes
           '<a href="#_diffrn_refln.frame_id" >_diffrn_refln.frame_id</a>'       diffrn_refln       yes
           '<a href="#_diffrn_scan.frame_id_start" >_diffrn_scan.frame_id_start</a>'  diffrn_scan        yes
           '<a href="#_diffrn_scan.frame_id_end" >_diffrn_scan.frame_id_end</a>'    diffrn_scan        yes
           '<a href="#_diffrn_scan_frame.frame_id" >_diffrn_scan_frame.frame_id</a>'  diffrn_scan_frame  yes
           '<a href="#_diffrn_scan_frame_axis.frame_id" >_diffrn_scan_frame_axis.frame_id</a>'
                                          diffrn_scan_frame_axis
                                                             yes
    _item_aliases.alias_name    '_diffrn_frame_data.id'
    _item_aliases.dictionary      cif_img.dic
    _item_aliases.version         1.0
    _item_type.code               code
     loop_
    _item_linked.child_name
    _item_linked.parent_name
           '<a href="#_diffrn_refln.frame_id" >_diffrn_refln.frame_id</a>'        '<a href="#_diffrn_data_frame.id" >_diffrn_data_frame.id</a>'
           '<a href="#_diffrn_scan.frame_id_start" >_diffrn_scan.frame_id_start</a>'   '<a href="#_diffrn_data_frame.id" >_diffrn_data_frame.id</a>'
           '<a href="#_diffrn_scan.frame_id_end" >_diffrn_scan.frame_id_end</a>'     '<a href="#_diffrn_data_frame.id" >_diffrn_data_frame.id</a>'
           '<a href="#_diffrn_scan_frame.frame_id" >_diffrn_scan_frame.frame_id</a>'   '<a href="#_diffrn_data_frame.id" >_diffrn_data_frame.id</a>'
           '<a href="#_diffrn_scan_frame_axis.frame_id" >_diffrn_scan_frame_axis.frame_id</a>'
                                           '<a href="#_diffrn_data_frame.id" >_diffrn_data_frame.id</a>'
     save_


save_<a name="_diffrn_data_frame.details" >_diffrn_data_frame.details</a>
     _item_description.description
;              The value of <a href="#_diffrn_data_frame.details" >_diffrn_data_frame.details</a> should give a
               description of special aspects of each frame of data.

               This is an appropriate location in which to record
               information from vendor headers as presented in those
               headers, but it should never be used as a substitute
               for providing the fully parsed information within
               the appropriate imgCIF/CBF categories.
;
    _item.name                  '<a name="_diffrn_data_frame.details" >_diffrn_data_frame.details</a>'
    _item.category_id             diffrn_data_frame
    _item.mandatory_code          no
    _item_aliases.alias_name    '_diffrn_frame_data.details'
    _item_aliases.dictionary      cif_img.dic
    _item_aliases.version         1.4
    _item_type.code               text
     loop_
    _item_examples.case
    _item_examples.detail
;
 HEADER_BYTES = 512;
 DIM = 2;
 BYTE_ORDER = big_endian;
 TYPE = unsigned_short;
 SIZE1 = 3072;
 SIZE2 = 3072;
 PIXEL_SIZE = 0.102588;
 BIN = 2x2;
 DETECTOR_SN = 901;
 TIME = 29.945155;
 DISTANCE = 200.000000;
 PHI = 85.000000;
 OSC_START = 85.000000;
 OSC_RANGE = 1.000000;
 WAVELENGTH = 0.979381;
 BEAM_CENTER_X = 157.500000;
 BEAM_CENTER_Y = 157.500000;
 PIXEL SIZE = 0.102588;
 OSCILLATION RANGE = 1;
 EXPOSURE TIME = 29.9452;
 TWO THETA = 0;
 BEAM CENTRE = 157.5 157.5;
;
;               Example of header information extracted from an ADSC Quantum
                315 detector header by CBFlib_0.7.6.  Image provided by Chris
                Nielsen of ADSC from a data collection at SSRL beamline 1-5.
;
      save_



##########################################################################
#  The following is a restatement of the mmCIF <a href="#DIFFRN_DETECTOR">DIFFRN_DETECTOR</a>,          #
#  <a href="#DIFFRN_MEASUREMENT">DIFFRN_MEASUREMENT</a> and <a href="#DIFFRN_RADIATION">DIFFRN_RADIATION</a> categories, modified for      #
#  the CBF/imgCIF extensions                                             #
##########################################################################

###################
# <a name="DIFFRN_DETECTOR">DIFFRN_DETECTOR</a> #
###################


save_DIFFRN_DETECTOR
    _category.description
;              Data items in the <a href="#DIFFRN_DETECTOR">DIFFRN_DETECTOR</a> category describe the
               detector used to measure the scattered radiation, including
               any analyser and post-sample collimation.
;
    _category.id                  diffrn_detector
    _category.mandatory_code      no
     loop_
    _category_key.name          '<a href="#_diffrn_detector.diffrn_id" >_diffrn_detector.diffrn_id</a>'
                                '<a href="#_diffrn_detector.id" >_diffrn_detector.id</a>'
     loop_
    _category_group.id           'inclusive_group'
                                 'diffrn_group'
     loop_
    _category_examples.detail
    _category_examples.case
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;   Example 1 - based on PDB entry 5HVP and laboratory records for the
                structure corresponding to PDB entry 5HVP.
;
;
    <a href="#_diffrn_detector.diffrn_id" >_diffrn_detector.diffrn_id</a>             'd1'
    <a href="#_diffrn_detector.detector" >_diffrn_detector.detector</a>              'multiwire'
    <a href="#_diffrn_detector.type" >_diffrn_detector.type</a>                  'Siemens'
;
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     save_


save_<a name="_diffrn_detector.details" >_diffrn_detector.details</a>
    _item_description.description
;              A description of special aspects of the radiation detector.
;
    _item.name                  '<a href="#_diffrn_detector.details" >_diffrn_detector.details</a>'
    _item.category_id             diffrn_detector
    _item.mandatory_code          no
    _item_aliases.alias_name    '_diffrn_detector_details'
    _item_aliases.dictionary      cif_core.dic
    _item_aliases.version         2.0.1
    _item_type.code                   text
    _item_examples.case        'slow mode'
     save_


save_<a name="_diffrn_detector.detector" >_diffrn_detector.detector</a>
    _item_description.description
;              The general class of the radiation detector.
;
    _item.name                  '<a href="#_diffrn_detector.detector" >_diffrn_detector.detector</a>'
    _item.category_id             diffrn_detector
    _item.mandatory_code          no
     loop_
    _item_aliases.alias_name
    _item_aliases.dictionary
    _item_aliases.version       '_diffrn_radiation_detector'
                                  cifdic.c91
                                  1.0
                                '_diffrn_detector'
                                  cif_core.dic
                                  2.0
    _item_type.code               text
     loop_
    _item_examples.case          'photographic film'
                                 'scintillation counter'
                                 'CCD plate'
                                 'BF~3~ counter'
     save_


save_<a name="_diffrn_detector.diffrn_id" >_diffrn_detector.diffrn_id</a>
    _item_description.description
;              This data item is a pointer to <a href="#_diffrn.id">_diffrn.id</a> in the DIFFRN
               category.

               The value of <a href="#_diffrn.id">_diffrn.id</a> uniquely defines a set of
               diffraction data.
;
    _item.name                  '<a href="#_diffrn_detector.diffrn_id" >_diffrn_detector.diffrn_id</a>'
    _item.mandatory_code          yes
    _item_type.code               code
     save_


save_<a name="_diffrn_detector.dtime" >_diffrn_detector.dtime</a>
    _item_description.description
;              The deadtime in microseconds of the detector(s) used to
               measure the diffraction intensities.
;
    _item.name                  '<a href="#_diffrn_detector.dtime" >_diffrn_detector.dtime</a>'
    _item.category_id             diffrn_detector
    _item.mandatory_code          no
     loop_
    _item_aliases.alias_name
    _item_aliases.dictionary
    _item_aliases.version       '_diffrn_radiation_detector_dtime'
                                  cifdic.c91
                                  1.0
                                '_diffrn_detector_dtime'
                                  cif_core.dic
                                  2.0
     loop_
    _item_range.maximum
    _item_range.minimum            .    0.0
                                  0.0   0.0
    _item_type.code               float
    _item_units.code              microseconds
     save_


save_<a name="_diffrn_detector.id" >_diffrn_detector.id</a>
    _item_description.description
;              The value of <a href="#_diffrn_detector.id" >_diffrn_detector.id</a> must uniquely identify
               each detector used to collect each diffraction data set.

               If the value of <a href="#_diffrn_detector.id" >_diffrn_detector.id</a> is not given, it is
               implicitly equal to the value of
               <a href="#_diffrn_detector.diffrn_id" >_diffrn_detector.diffrn_id</a>.
;
     loop_
    _item.name
    _item.category_id
    _item.mandatory_code
             '<a href="#_diffrn_detector.id" >_diffrn_detector.id</a>'         diffrn_detector       implicit
             '<a href="#_diffrn_detector_axis.detector_id" >_diffrn_detector_axis.detector_id</a>'
                                           diffrn_detector_axis       yes
     loop_
    _item_linked.child_name
    _item_linked.parent_name
             '<a href="#_diffrn_detector_axis.detector_id" >_diffrn_detector_axis.detector_id</a>'
                                         '_diffrn_detector.id'

    _item_type.code               code
     save_


save_<a name="_diffrn_detector.number_of_axes" >_diffrn_detector.number_of_axes</a>
    _item_description.description
;              The value of <a href="#_diffrn_detector.number_of_axes" >_diffrn_detector.number_of_axes</a> gives the
               number of axes of the positioner for the detector identified
               by <a href="#_diffrn_detector.id" >_diffrn_detector.id</a>.

               The word 'positioner' is a general term used in
               instrumentation design for devices that are used to change
               the positions of portions of apparatus by linear
               translation, rotation or combinations of such motions.

               Axes which are used to provide a coordinate system for the
               face of an area detetctor should not be counted for this
               data item.

               The description of each axis should be provided by entries
               in <a href="#DIFFRN_DETECTOR_AXIS">DIFFRN_DETECTOR_AXIS</a>.
;
    _item.name                  '<a href="#_diffrn_detector.number_of_axes" >_diffrn_detector.number_of_axes</a>'
    _item.category_id             diffrn_detector
    _item.mandatory_code          no
     loop_
    _item_range.maximum
    _item_range.minimum           .   1
                                  1   1
    _item_type.code               int
     save_


save_<a name="_diffrn_detector.type" >_diffrn_detector.type</a>
    _item_description.description
;              The make, model or name of the detector device used.
;
    _item.name                  '<a href="#_diffrn_detector.type" >_diffrn_detector.type</a>'
    _item.category_id             diffrn_detector
    _item.mandatory_code          no
    _item_aliases.alias_name    '_diffrn_detector_type'
    _item_aliases.dictionary      cif_core.dic
    _item_aliases.version         2.0.1
    _item_type.code               text
     save_


########################
# <a name="DIFFRN_DETECTOR_AXIS" >DIFFRN_DETECTOR_AXIS</a> #
########################


save_DIFFRN_DETECTOR_AXIS
    _category.description
;    Data items in the <a href="#DIFFRN_DETECTOR_AXIS">DIFFRN_DETECTOR_AXIS</a> category associate
     axes with detectors.
;
    _category.id                   diffrn_detector_axis
    _category.mandatory_code       no
     loop_
    _category_key.name          '<a href="#_diffrn_detector_axis.detector_id" >_diffrn_detector_axis.detector_id</a>'
                                '_diffrn_detector_axis.axis_id'
     loop_
    _category_group.id           'inclusive_group'
                                 'diffrn_group'
     save_


save_<a name="_diffrn_detector_axis.axis_id" >_diffrn_detector_axis.axis_id</a>
    _item_description.description
;              This data item is a pointer to <a href="#_axis.id" >_axis.id</a> in
               the AXIS category.
;
    _item.name                  '<a href="#_diffrn_detector_axis.axis_id">_diffrn_detector_axis.axis_id</a>'
    _item.category_id             diffrn_detector_axis
    _item.mandatory_code          yes
    _item_type.code               code
     save_


save_<a name="_diffrn_detector_axis.detector_id" >_diffrn_detector_axis.detector_id</a>
    _item_description.description
;              This data item is a pointer to <a href="#_diffrn_detector.id" >_diffrn_detector.id</a> in
               the <a href="#DIFFRN_DETECTOR">DIFFRN_DETECTOR</a> category.

               This item was previously named _diffrn_detector_axis.id
               which is now a deprecated name.  The old name is
               provided as an alias but should not be used for new work.
;
    _item.name                  '<a href="#_diffrn_detector_axis.detector_id" >_diffrn_detector_axis.detector_id</a>'
    _item.category_id             diffrn_detector_axis
    _item.mandatory_code          yes
    _item_aliases.alias_name    '_diffrn_detector_axis.id'
    _item_aliases.dictionary      cif_img.dic
    _item_aliases.version         1.0
    _item_type.code               code
     save_


###########################
# <a name="DIFFRN_DETECTOR_ELEMENT">DIFFRN_DETECTOR_ELEMENT</a> #
###########################


save_DIFFRN_DETECTOR_ELEMENT
    _category.description
;             Data items in the <a href="#DIFFRN_DETECTOR_ELEMENT">DIFFRN_DETECTOR_ELEMENT</a> category record
              the details about spatial layout and other characteristics
              of each element of a detector which may have multiple elements.

              In most cases, giving more detailed information
              in <a href="#ARRAY_STRUCTURE_LIST">ARRAY_STRUCTURE_LIST</a> and <a href="#ARRAY_STRUCTURE_LIST_AXIS">ARRAY_STRUCTURE_LIST_AXIS</a>
              is preferable to simply providing the centre of the
              detector element.
;
    _category.id                   diffrn_detector_element
    _category.mandatory_code       no
     loop_
    _category_key.name             '<a href="#_diffrn_detector_element.id" >_diffrn_detector_element.id</a>'
                                   '<a href="#_diffrn_detector_element.detector_id" >_diffrn_detector_element.detector_id</a>'
    loop_
    _category_group.id             'inclusive_group'
                                   'array_data_group'
    loop_
    _category_examples.detail
    _category_examples.case
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;       Example 1 - Detector d1 is composed of four CCD detector elements,
        each 200 mm by 200 mm, arranged in a square, in the pattern

                   1     2
                      *
                   3     4

        Note that the beam centre is slightly displaced from each of the
        detector elements, just beyond the lower right corner of 1,
        the lower left corner of 2, the upper right corner of 3 and
        the upper left corner of 4.
;
;
        loop_
        <a href="#_diffrn_detector_element.detector_id" >_diffrn_detector_element.detector_id</a>
        <a href="#_diffrn_detector_element.id" >_diffrn_detector_element.id</a>
        <a href="#_diffrn_detector_element.center[1]" >_diffrn_detector_element.center[1]</a>
        <a href="#_diffrn_detector_element.center[2]" >_diffrn_detector_element.center[2]</a>
        d1     d1_ccd_1  201.5 -1.5
        d1     d1_ccd_2  -1.8  -1.5
        d1     d1_ccd_3  201.6 201.4
        d1     d1_ccd_4  -1.7  201.5
;
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    save_


save_<a name="_diffrn_detector_element.center[1]" >_diffrn_detector_element.center[1]</a>
    _item_description.description
;             The value of <a href="#_diffrn_detector_element.center[1]" >_diffrn_detector_element.center[1]</a> is the X
              component of the distortion-corrected beam centre in
              millimetres from the (0, 0) (lower-left) corner of the
              detector element viewed from the sample side.

              The X and Y axes are the laboratory coordinate system
              coordinates defined in the <a href="#AXIS">AXIS category</a> measured
              when all positioning axes for the detector are at their zero
              settings.  If the resulting X or Y axis is then orthogonal to the
              detector, the Z axis is used instead of the orthogonal axis.

;
    _item.name                  '<a href="#_diffrn_detector_element.center[1]" >_diffrn_detector_element.center[1]</a>'
    _item.category_id             diffrn_detector_element
    _item.mandatory_code          no
    _item_default.value           0.0
    _item_sub_category.id         vector
    _item_type.code               float
    _item_units.code              millimetres

    save_


save_<a name="_diffrn_detector_element.center[2]" >_diffrn_detector_element.center[2]</a>
    _item_description.description
;             The value of <a href="#_diffrn_detector_element.center[2]" >_diffrn_detector_element.center[2]</a> is the Y
              component of the distortion-corrected beam centre in
              millimetres from the (0, 0) (lower-left) corner of the
              detector element viewed from the sample side.

              The X and Y axes are the laboratory coordinate system
              coordinates defined in the <a href="#AXIS">AXIS category</a> measured
              when all positioning axes for the detector are at their zero
              settings.  If the resulting X or Y axis is then orthogonal to the
              detector, the Z axis is used instead of the orthogonal axis.

;
    _item.name                  '<a href="#_diffrn_detector_element.center[2]" >_diffrn_detector_element.center[2]</a>'
    _item.category_id             diffrn_detector_element
    _item.mandatory_code          no
    _item_default.value           0.0
    _item_sub_category.id         vector
    _item_type.code               float
    _item_units.code              millimetres

    save_


save_<a name="_diffrn_detector_element.id" >_diffrn_detector_element.id</a>
    _item_description.description
;             The value of <a href="#_diffrn_detector_element.id" >_diffrn_detector_element.id</a> must uniquely
              identify each element of a detector.
;
     loop_
    _item.name
    _item.category_id
    _item.mandatory_code
           '<a href="#_diffrn_detector_element.id" >_diffrn_detector_element.id</a>'
           diffrn_detector_element
           yes
    _item_type.code               code
     loop_
    _item_linked.child_name
    _item_linked.parent_name
           '<a href="#_diffrn_data_frame.detector_element_id" >_diffrn_data_frame.detector_element_id</a>'
           '<a href="#_diffrn_detector_element.id" >_diffrn_detector_element.id</a>'

     save_


save_<a name="_diffrn_detector_element.detector_id" >_diffrn_detector_element.detector_id</a>
    _item_description.description
;              This item is a pointer to <a href="#_diffrn_detector.id" >_diffrn_detector.id</a>
               in the <a href="#DIFFRN_DETECTOR">DIFFRN_DETECTOR</a> category.
;
    _item.name                  '<a href="#_diffrn_detector_element.detector_id" >_diffrn_detector_element.detector_id</a>'
    _item.category_id             diffrn_detector_element
    _item.mandatory_code          yes
    _item_type.code               code
     save_



########################
## <a name="DIFFRN_MEASUREMENT" >DIFFRN_MEASUREMENT</a> ##
########################


save_DIFFRN_MEASUREMENT
    _category.description
;              Data items in the <a href="#DIFFRN_MEASUREMENT">DIFFRN_MEASUREMENT</a> category record details
               about the device used to orient and/or position the crystal
               during data measurement and the manner in which the
               diffraction data were measured.
;
    _category.id                  diffrn_measurement
    _category.mandatory_code      no
     loop_
    _category_key.name          '<a href="#_diffrn_measurement.device" >_diffrn_measurement.device</a>'
                                '<a href="#_diffrn_measurement.diffrn_id" >_diffrn_measurement.diffrn_id</a>'
                                '<a href="#_diffrn_measurement.id" >_diffrn_measurement.id</a>'
     loop_
    _category_group.id           'inclusive_group'
                                 'diffrn_group'
     loop_
    _category_examples.detail
    _category_examples.case
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;    Example 1 - based on PDB entry 5HVP and laboratory records for the
                 structure corresponding to PDB entry 5HVP
;
;
    <a href="#_diffrn_measurement.diffrn_id" >_diffrn_measurement.diffrn_id</a>          'd1'
    <a href="#_diffrn_measurement.device" >_diffrn_measurement.device</a>             '3-circle camera'
    <a href="#_diffrn_measurement.device_type" >_diffrn_measurement.device_type</a>        'Supper model x'
    <a href="#_diffrn_measurement.device_details" >_diffrn_measurement.device_details</a>     'none'
    <a href="#_diffrn_measurement.method" >_diffrn_measurement.method</a>             'omega scan'
    <a href="#_diffrn_measurement.details" >_diffrn_measurement.details</a>
    ; 440 frames, 0.20 degrees, 150 sec, detector distance 12 cm, detector
      angle 22.5 degrees
    ;
;
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;     Example 2 - based on data set TOZ of Willis, Beckwith & Tozer
                  [Acta Cryst. (1991), C47, 2276-2277].
;
;
    <a href="#_diffrn_measurement.diffrn_id" >_diffrn_measurement.diffrn_id</a>       's1'
    <a href="#_diffrn_measurement.device_type" >_diffrn_measurement.device_type</a>     'Philips PW1100/20 diffractometer'
    <a href="#_diffrn_measurement.method" >_diffrn_measurement.method</a>          'theta/2theta (\q/2\q)'
;
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     save_


save_<a name="_diffrn_measurement.device" >_diffrn_measurement.device</a>
    _item_description.description
;              The general class of goniometer or device used to support
               and orient the specimen.

               If the value of <a href="#_diffrn_measurement.device">_diffrn_measurement.device</a> is not given,
               it is implicitly equal to the value of
               <a href="#_diffrn_measurement.diffrn_id">_diffrn_measurement.diffrn_id</a>.

               Either <a href="#_diffrn_measurement.device">_diffrn_measurement.device</a> or
               <a href="#_diffrn_measurement.id">_diffrn_measurement.id</a> may be used to link to other
               categories.  If the experimental setup admits multiple
               devices, then <a href="#_diffrn_measurement.id">_diffrn_measurement.id</a> is used to provide
               a unique link.
;
     loop_
    _item.name
    _item.category_id
    _item.mandatory_code
             '<a href="#_diffrn_measurement.device">_diffrn_measurement.device</a>'  diffrn_measurement      implicit
             '<a href="#_diffrn_measurement_axis.measurement_device">_diffrn_measurement_axis.measurement_device</a>'
                                           diffrn_measurement_axis implicit
     loop_
    _item_linked.child_name
    _item_linked.parent_name
             '<a href="#_diffrn_measurement_axis.measurement_device">_diffrn_measurement_axis.measurement_device</a>'
                                         '_diffrn_measurement.device'
    _item_aliases.alias_name    '_diffrn_measurement_device'
    _item_aliases.dictionary      cif_core.dic
    _item_aliases.version         2.0.1
    _item_type.code               text
     loop_
    _item_examples.case          '3-circle camera'
                                 '4-circle camera'
                                 'kappa-geometry camera'
                                 'oscillation camera'
                                 'precession camera'
     save_


save_<a name="_diffrn_measurement.device_details" >_diffrn_measurement.device_details</a>
    _item_description.description
;              A description of special aspects of the device used to
               measure the diffraction intensities.
;
    _item.name                  '<a href="#_diffrn_measurement.device_details" >_diffrn_measurement.device_details</a>'
    _item.category_id             diffrn_measurement
    _item.mandatory_code          no
    _item_aliases.alias_name    '_diffrn_measurement_device_details'
    _item_aliases.dictionary      cif_core.dic
    _item_aliases.version         2.0.1
    _item_type.code               text
    _item_examples.case
;                                 commercial goniometer modified locally to
                                  allow for 90\% \t arc
;
     save_


save_<a name="_diffrn_measurement.device_type" >_diffrn_measurement.device_type</a>
    _item_description.description
;              The make, model or name of the measurement device
               (goniometer) used.
;
    _item.name                  '<a href="#_diffrn_measurement.device_type" >_diffrn_measurement.device_type</a>'
    _item.category_id             diffrn_measurement
    _item.mandatory_code          no
    _item_aliases.alias_name    '_diffrn_measurement_device_type'
    _item_aliases.dictionary      cif_core.dic
    _item_aliases.version         2.0.1
    _item_type.code               text
     loop_
    _item_examples.case          'Supper model q'
                                 'Huber model r'
                                 'Enraf-Nonius model s'
                                 'home-made'
     save_


save_<a name="_diffrn_measurement.diffrn_id" >_diffrn_measurement.diffrn_id</a>
    _item_description.description
;              This data item is a pointer to <a href="#_diffrn.id">_diffrn.id</a> in the DIFFRN
               category.
;
    _item.name                  '<a href="#_diffrn_measurement.diffrn_id" >_diffrn_measurement.diffrn_id</a>'
    _item.mandatory_code          yes
    _item_type.code               code
     save_


save_<a name="_diffrn_measurement.details" >_diffrn_measurement.details</a>
    _item_description.description
;              A description of special aspects of the intensity
               measurement.
;
    _item.name                  '<a href="#_diffrn_measurement.details" >_diffrn_measurement.details</a>'
    _item.category_id             diffrn_measurement
    _item.mandatory_code          no
    _item_aliases.alias_name    '_diffrn_measurement_details'
    _item_aliases.dictionary      cif_core.dic
    _item_aliases.version         2.0.1
    _item_type.code               text
    _item_examples.case
;                                 440 frames, 0.20 degrees, 150 sec, detector
                                  distance 12 cm, detector angle 22.5 degrees
;
     save_


save_<a name="_diffrn_measurement.id" >_diffrn_measurement.id</a>
    _item_description.description
;              The value of <a href="#_diffrn_measurement.id" >_diffrn_measurement.id</a> must uniquely identify
               the set of mechanical characteristics of the device used to
               orient and/or position the sample used during the collection
               of each diffraction data set.

               If the value of <a href="#_diffrn_measurement.id" >_diffrn_measurement.id</a> is not given, it is
               implicitly equal to the value of
               <a href="#_diffrn_measurement.diffrn_id" >_diffrn_measurement.diffrn_id</a>.

               Either <a href="#_diffrn_measurement.device">_diffrn_measurement.device</a> or
               <a href="#_diffrn_measurement.id">_diffrn_measurement.id</a> may be used to link to other
               categories.  If the experimental setup admits multiple
               devices, then <a href="#_diffrn_measurement.id">_diffrn_measurement.id</a> is used to provide
               a unique link.
;
     loop_
    _item.name
    _item.category_id
    _item.mandatory_code
             '<a href="#_diffrn_measurement.id" >_diffrn_measurement.id</a>'      diffrn_measurement      implicit
             '<a href="#_diffrn_measurement_axis.measurement_id" >_diffrn_measurement_axis.measurement_id</a>'
                                           diffrn_measurement_axis implicit
     loop_
    _item_linked.child_name
    _item_linked.parent_name
             '<a href="#_diffrn_measurement_axis.measurement_id" >_diffrn_measurement_axis.measurement_id</a>'
                                         '<a href="#_diffrn_measurement.id" >_diffrn_measurement.id</a>'

    _item_type.code               code
     save_


save_<a name="_diffrn_measurement.method" >_diffrn_measurement.method</a>
    _item_description.description
;              Method used to measure intensities.
;
    _item.name                  '<a href="#_diffrn_measurement.method" >_diffrn_measurement.method</a>'
    _item.category_id             diffrn_measurement
    _item.mandatory_code          no
    _item_aliases.alias_name    '_diffrn_measurement_method'
    _item_aliases.dictionary      cif_core.dic
    _item_aliases.version         2.0.1
    _item_type.code               text
    _item_examples.case
      'profile data from theta/2theta (\q/2\q) scans'
     save_


save_<a name="_diffrn_measurement.number_of_axes" >_diffrn_measurement.number_of_axes</a>
    _item_description.description
;              The value of <a href="#_diffrn_measurement.number_of_axes" >_diffrn_measurement.number_of_axes</a> gives the
               number of axes of the positioner for the goniometer or
               other sample orientation or positioning device identified
               by <a href="#_diffrn_measurement.id" >_diffrn_measurement.id</a>.

               The description of the axes should be provided by entries in
               <a href="#DIFFRN_MEASUREMENT_AXIS">DIFFRN_MEASUREMENT_AXIS</a>.
;
    _item.name                  '<a href="#_diffrn_measurement.number_of_axes" >_diffrn_measurement.number_of_axes</a>'
    _item.category_id             diffrn_measurement
    _item.mandatory_code          no
     loop_
    _item_range.maximum
    _item_range.minimum           .   1
                                  1   1
    _item_type.code               int
     save_


save_<a name="_diffrn_measurement.specimen_support" >_diffrn_measurement.specimen_support</a>
    _item_description.description
;              The physical device used to support the crystal during data
               collection.
;
    _item.name                  '<a href="#_diffrn_measurement.specimen_support" >_diffrn_measurement.specimen_support</a>'
    _item.category_id             diffrn_measurement
    _item.mandatory_code          no
    _item_aliases.alias_name    '_diffrn_measurement_specimen_support'
    _item_aliases.dictionary      cif_core.dic
    _item_aliases.version         2.0.1
    _item_type.code               text
     loop_
    _item_examples.case          'glass capillary'
                                 'quartz capillary'
                                 'fiber'
                                 'metal loop'
     save_


###########################
# <a name="DIFFRN_MEASUREMENT_AXIS">DIFFRN_MEASUREMENT_AXIS</a> #
###########################


save_DIFFRN_MEASUREMENT_AXIS
    _category.description
;    Data items in the <a href="#DIFFRN_MEASUREMENT_AXIS">DIFFRN_MEASUREMENT_AXIS</a> category associate
     axes with goniometers.
;
    _category.id                   diffrn_measurement_axis
    _category.mandatory_code       no
     loop_
    _category_key.name
                              '<a href="#_diffrn_measurement_axis.measurement_device" >_diffrn_measurement_axis.measurement_device</a>'
                                '<a href="#_diffrn_measurement_axis.measurement_id" >_diffrn_measurement_axis.measurement_id</a>'
                                '<a href="#_diffrn_measurement_axis.axis_id" >_diffrn_measurement_axis.axis_id</a>'
     loop_
    _category_group.id           'inclusive_group'
                                 'diffrn_group'
     save_


save_<a name="_diffrn_measurement_axis.axis_id" >_diffrn_measurement_axis.axis_id</a>
    _item_description.description
;              This data item is a pointer to <a href="#_axis.id" >_axis.id</a> in
               the <a href="#AXIS">AXIS</a> category.
;
    _item.name                  '<a href="#_diffrn_measurement_axis.axis_id" >_diffrn_measurement_axis.axis_id</a>'
    _item.category_id             diffrn_measurement_axis
    _item.mandatory_code          yes
    _item_type.code               code
     save_


save_<A name="_diffrn_measurement_axis.measurement_device">_diffrn_measurement_axis.measurement_device</a>
    _item_description.description
;              This data item is a pointer to <a href="#_diffrn_measurement.device">_diffrn_measurement.device</a>
               in the <a href="#DIFFRN_MEASUREMENT">DIFFRN_MEASUREMENT</a> category.
;
    _item.name
      '<a href="#_diffrn_measurement_axis.measurement_device">_diffrn_measurement_axis.measurement_device</a>'
    _item.category_id             diffrn_measurement_axis
    _item.mandatory_code          implicit
    _item_type.code               text
     save_


save_<a name="_diffrn_measurement_axis.measurement_id">_diffrn_measurement_axis.measurement_id</a>
    _item_description.description
;              This data item is a pointer to <a href="#_diffrn_measurement.id">_diffrn_measurement.id</a> in
               the <a href="#DIFFRN_MEASUREMENT">DIFFRN_MEASUREMENT</a> category.

               This item was previously named _diffrn_measurement_axis.id,
               which is now a deprecated name.  The old name is
               provided as an alias but should not be used for new work.
;
    _item.name                  '<a href="#_diffrn_measurement_axis.measurement_id">_diffrn_measurement_axis.measurement_id</a>'
    _item.category_id             diffrn_measurement_axis
    _item.mandatory_code          implicit
    _item_aliases.alias_name    '_diffrn_measurement_axis.id'
    _item_aliases.dictionary      cif_img.dic
    _item_aliases.version         1.0
    _item_type.code               code
     save_


####################
# <a name="DIFFRN_RADIATION">DIFFRN_RADIATION</a> #
####################


save_DIFFRN_RADIATION
    _category.description
;              Data items in the <a href="#DIFFRN_RADIATION">DIFFRN_RADIATION</a> category describe
               the radiation used for measuring diffraction intensities,
               its collimation and monochromatization before the sample.

               Post-sample treatment of the beam is described by data
               items in the <a href="#DIFFRN_DETECTOR">DIFFRN_DETECTOR</a> category.
;
    _category.id                  diffrn_radiation
    _category.mandatory_code      no
    _category_key.name          '<a href="#_diffrn_radiation.diffrn_id">_diffrn_radiation.diffrn_id</a>'
     loop_
    _category_group.id           'inclusive_group'
                                 'diffrn_group'
     loop_
    _category_examples.detail
    _category_examples.case
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;   Example 1 - based on PDB entry 5HVP and laboratory records for the
                structure corresponding to PDB entry 5HVP
;
;
    <a href="#_diffrn_radiation.diffrn_id">_diffrn_radiation.diffrn_id</a>            'set1'

    <a href="#_diffrn_radiation.collimation">_diffrn_radiation.collimation</a>          '0.3 mm double pinhole'
    <a href="#_diffrn_radiation.monochromator">_diffrn_radiation.monochromator</a>        'graphite'
    <a href="#_diffrn_radiation.type">_diffrn_radiation.type</a>                 'Cu K\a'
    <a href="#_diffrn_radiation.wavelength_id">_diffrn_radiation.wavelength_id</a>         1
;
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;    Example 2 - based on data set TOZ of Willis, Beckwith & Tozer
                [Acta Cryst. (1991), C47, 2276-2277].
;
;
    <a href="#_diffrn_radiation.wavelength_id">_diffrn_radiation.wavelength_id</a>    1
    <a href="#_diffrn_radiation.type">_diffrn_radiation.type</a>             'Cu K\a'
    <a href="#_diffrn_radiation.monochromator">_diffrn_radiation.monochromator</a>    'graphite'
;
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     save_

save_<A name="_diffrn_radiation.collimation">_diffrn_radiation.collimation</a>
    _item_description.description
;              The collimation or focusing applied to the radiation.
;
    _item.name                  '<a href="#_diffrn_radiation.collimation">_diffrn_radiation.collimation</a>'
    _item.category_id             diffrn_radiation
    _item.mandatory_code          no
    _item_aliases.alias_name    '_diffrn_radiation_collimation'
    _item_aliases.dictionary      cif_core.dic
    _item_aliases.version         2.0.1
    _item_type.code               text
     loop_
    _item_examples.case          '0.3 mm double-pinhole'
                                 '0.5 mm'
                                 'focusing mirrors'
     save_


save_<A name="_diffrn_radiation.diffrn_id">_diffrn_radiation.diffrn_id</a>
    _item_description.description
;              This data item is a pointer to <a href="#_diffrn.id">_diffrn.id</a> in the DIFFRN
               category.
;
    _item.name                  '<a href="#_diffrn_radiation.diffrn_id">_diffrn_radiation.diffrn_id</a>'
    _item.mandatory_code          yes
    _item_type.code               code
     save_



save_<a name="_diffrn_radiation.div_x_source">_diffrn_radiation.div_x_source</a>
    _item_description.description
;              Beam crossfire in degrees parallel to the laboratory X axis
               (see <a href="#AXIS">AXIS</a> category).

               This is a characteristic of the X-ray beam as it illuminates
               the sample (or specimen) after all monochromation and
               collimation.

               This is the standard uncertainty (e.s.d.)  of the directions of
               photons in the XZ plane around the mean source beam
               direction.

               Note that for some synchrotrons this value is specified
               in milliradians, in which case a conversion is needed.
               To convert a value in milliradians to a value in degrees,
               multiply by 0.180 and divide by \p.
;
    _item.name                  '<a href="#_diffrn_radiation.div_x_source">_diffrn_radiation.div_x_source</a>'
    _item.category_id             diffrn_radiation
    _item.mandatory_code          no
    _item_type.code               float
    _item_units.code              degrees
     save_


save_<A name="_diffrn_radiation.div_y_source">_diffrn_radiation.div_y_source</a>
    _item_description.description
;              Beam crossfire in degrees parallel to the laboratory Y axis
               (see <a href="#AXIS">AXIS</a> category).

               This is a characteristic of the X-ray beam as it illuminates
               the sample (or specimen) after all monochromation and
               collimation.

               This is the standard uncertainty (e.s.d.) of the directions
               of photons in the YZ plane around the mean source beam
               direction.

               Note that for some synchrotrons this value is specified
               in milliradians, in which case a conversion is needed.
               To convert a value in milliradians to a value in degrees,
               multiply by 0.180 and divide by \p.
;
    _item.name                  '<a href="#_diffrn_radiation.div_y_source">_diffrn_radiation.div_y_source</a>'
    _item.category_id             diffrn_radiation
    _item.mandatory_code          no
    _item_type.code               float
    _item_units.code              degrees
    _item_default.value           0.0
     save_


save_<A name="_diffrn_radiation.div_x_y_source">_diffrn_radiation.div_x_y_source</a>
    _item_description.description
;              Beam crossfire correlation degrees^<sup>2</sup>^ between the
               crossfire laboratory X-axis component and the crossfire
               laboratory Y-axis component (see <a href="#AXIS">AXIS</a> category).

               This is a characteristic of the X-ray beam as it illuminates
               the sample (or specimen) after all monochromation and
               collimation.

               This is the mean of the products of the deviations of the
               direction of each photon in XZ plane times the deviations
               of the direction of the same photon in the YZ plane
               around the mean source beam direction.  This will be zero
               for uncorrelated crossfire.

               Note that some synchrotrons, this value is specified in
               milliradians^<sup>2</sup>^, in which case a conversion would be needed.
               To go from a value in milliradians^<sup>2</sup>^ to a value in
               degrees^<sup>2</sup>^, multiply by 0.180^<sup>2</sup>^ and divide by \p^<sup>2</sup>^.

;
    _item.name                  '<a href="#_diffrn_radiation.div_x_y_source">_diffrn_radiation.div_x_y_source</a>'
    _item.category_id             diffrn_radiation
    _item.mandatory_code          no
    _item_type.code               float
    _item_units.code              degrees_squared
    _item_default.value           0.0
     save_

save_<A name="_diffrn_radiation.filter_edge">_diffrn_radiation.filter_edge</a>
    _item_description.description
;              Absorption edge in \%Angstroms of the radiation filter used.
;
    _item.name                  '<a href="#_diffrn_radiation.filter_edge">_diffrn_radiation.filter_edge</a>'
    _item.category_id             diffrn_radiation
    _item.mandatory_code          no
    _item_aliases.alias_name    '_diffrn_radiation_filter_edge'
    _item_aliases.dictionary      cif_core.dic
    _item_aliases.version         2.0.1
     loop_
    _item_range.maximum
    _item_range.minimum            .    0.0
                                  0.0   0.0
    _item_type.code               float
    _item_units.code              angstroms
     save_

save_<A name="_diffrn_radiation.inhomogeneity">_diffrn_radiation.inhomogeneity</a>
    _item_description.description
;              Half-width in millimetres of the incident beam in the
               direction perpendicular to the diffraction plane.
;
    _item.name                  '<a href="#_diffrn_radiation.inhomogeneity">_diffrn_radiation.inhomogeneity</a>'
    _item.category_id             diffrn_radiation
    _item.mandatory_code          no
    _item_aliases.alias_name    '_diffrn_radiation_inhomogeneity'
    _item_aliases.dictionary      cif_core.dic
    _item_aliases.version         2.0.1
     loop_
    _item_range.maximum
    _item_range.minimum            .    0.0
                                  0.0   0.0
    _item_type.code               float
    _item_units.code              millimetres
     save_

save_<A name="_diffrn_radiation.monochromator">_diffrn_radiation.monochromator</a>
    _item_description.description
;              The method used to obtain monochromatic radiation. If a
               monochromator crystal is used, the material and the
               indices of the Bragg reflection are specified.
;
    _item.name                  '<a href="#_diffrn_radiation.monochromator">_diffrn_radiation.monochromator</a>'
    _item.category_id             diffrn_radiation
    _item.mandatory_code          no
    _item_aliases.alias_name    '_diffrn_radiation_monochromator'
    _item_aliases.dictionary      cif_core.dic
    _item_aliases.version         2.0.1
    _item_type.code               text
     loop_
    _item_examples.case          'Zr filter'
                                 'Ge 220'
                                 'none'
                                 'equatorial mounted graphite'
     save_

save_<A name="_diffrn_radiation.polarisn_norm">_diffrn_radiation.polarisn_norm</a>
    _item_description.description
;              The angle in degrees, as viewed from the specimen, between the
               perpendicular component of the polarization and the diffraction
               plane. See _diffrn_radiation_polarisn_ratio.
;
    _item.name                  '<a href="#_diffrn_radiation.polarisn_norm">_diffrn_radiation.polarisn_norm</a>'
    _item.category_id             diffrn_radiation
    _item.mandatory_code          no
    _item_aliases.alias_name    '_diffrn_radiation_polarisn_norm'
    _item_aliases.dictionary      cif_core.dic
    _item_aliases.version         2.0.1
     loop_
    _item_range.maximum
    _item_range.minimum           90.0  90.0
                                  90.0 -90.0
                                 -90.0 -90.0
    _item_type.code               float
    _item_units.code              degrees
     save_

save_<A name="_diffrn_radiation.polarisn_ratio">_diffrn_radiation.polarisn_ratio</a>
    _item_description.description
;              Polarization ratio of the diffraction beam incident on the
               crystal. This is the ratio of the perpendicularly polarized to
               the parallel polarized component of the radiation. The
               perpendicular component forms an angle of
               <a href="#_diffrn_radiation.polarisn_norm">_diffrn_radiation.polarisn_norm</a> to the normal to the
               diffraction plane of the sample (i.e. the plane containing
               the incident and reflected beams).
;
    _item.name                  '<a href="#_diffrn_radiation.polarisn_ratio">_diffrn_radiation.polarisn_ratio</a>'
    _item.category_id             diffrn_radiation
    _item.mandatory_code          no
    _item_aliases.alias_name    '_diffrn_radiation_polarisn_ratio'
    _item_aliases.dictionary      cif_core.dic
    _item_aliases.version         2.0.1
     loop_
    _item_range.maximum
    _item_range.minimum            .    0.0
                                  0.0   0.0
    _item_type.code               float
     save_



save_<a name="_diffrn_radiation.polarizn_source_norm">_diffrn_radiation.polarizn_source_norm</a>
    _item_description.description
;              The angle in degrees, as viewed from the specimen, between
               the normal to the polarization plane and the laboratory Y
               axis as defined in the <a href="#AXIS">AXIS</a> category.

               Note that this is the angle of polarization of the source
               photons, either directly from a synchrotron beamline or
               from a monochromater.

               This differs from the value of
               <a href="#_diffrn_radiation.polarisn_norm">_diffrn_radiation.polarisn_norm</a>
               in that <a href="#_diffrn_radiation.polarisn_norm">_diffrn_radiation.polarisn_norm</a> refers to
               polarization relative to the diffraction plane rather than
               to the laboratory axis system.

               In the case of an unpolarized beam, or a beam with true
               circular polarization, in which no single plane of
               polarization can be determined, the plane should be taken
               as the XZ plane and the angle as 0.

               See <a href="#_diffrn_radiation.polarizn_source_ratio">_diffrn_radiation.polarizn_source_ratio</a>.
;
    _item.name                  '<a href="#_diffrn_radiation.polarizn_source_norm">_diffrn_radiation.polarizn_source_norm</a>'
    _item.category_id             diffrn_radiation
    _item.mandatory_code          no
     loop_
    _item_range.maximum
    _item_range.minimum           90.0   90.0
                                  90.0  -90.0
                                 -90.0  -90.0
    _item_type.code               float
    _item_units.code              degrees
    _item_default.value           0.0
     save_


save_<a name="_diffrn_radiation.polarizn_source_ratio">_diffrn_radiation.polarizn_source_ratio</a>
    _item_description.description
;              (Ip-In)/(Ip+In), where Ip is the intensity
               (amplitude squared) of the electric vector in the plane of
               polarization and In is the intensity (amplitude squared)
               of the electric vector in the plane of the normal to the
               plane of polarization.

               In the case of an unpolarized beam, or a beam with true
               circular polarization, in which no single plane of
               polarization can be determined, the plane is to be taken
               as the XZ plane and the normal is parallel to the Y axis.

               Thus, if there was complete polarization in the plane of
               polarization, the value of
               <a href="#_diffrn_radiation.polarizn_source_ratio">_diffrn_radiation.polarizn_source_ratio</a> would be 1, and
               for an unpolarized beam
               <a href="#_diffrn_radiation.polarizn_source_ratio">_diffrn_radiation.polarizn_source_ratio</a> would have a
               value of 0.

               If the X axis has been chosen to lie in the plane of
               polarization, this definition will agree with the definition
               of 'MONOCHROMATOR' in the Denzo glossary, and values of near
               1 should be expected for a bending-magnet source.  However,
               if the X axis were perpendicular to the polarization plane
               (not a common choice), then the Denzo value would be the
               negative of <a href="#_diffrn_radiation.polarizn_source_ratio">_diffrn_radiation.polarizn_source_ratio</a>.

               See <a href="http://www.hkl-xray.com">http://www.hkl-xray.com</a> for information on Denzo and
               Otwinowski & Minor (1997).

               This differs both in the choice of ratio and choice of
               orientation from <a href="#_diffrn_radiation.polarisn_ratio">_diffrn_radiation.polarisn_ratio</a>, which,
               unlike <a href="#_diffrn_radiation.polarizn_source_ratio">_diffrn_radiation.polarizn_source_ratio</a>, is
               unbounded.

               Reference: Otwinowski, Z. & Minor, W. (1997). 'Processing of
               X-ray diffraction data collected in oscillation mode.' Methods
               Enzymol. 276, 307-326.
;
    _item.name                  '<a href="#_diffrn_radiation.polarizn_source_ratio">_diffrn_radiation.polarizn_source_ratio</a>'
    _item.category_id             diffrn_radiation
    _item.mandatory_code          no
     loop_
    _item_range.maximum
    _item_range.minimum           1.0    1.0
                                  1.0   -1.0
                                 -1.0   -1.0
    _item_type.code               float
     save_


save_<A name="_diffrn_radiation.probe">_diffrn_radiation.probe</a>
    _item_description.description
;              Name of the type of radiation used. It is strongly
               recommended that this be given so that the
               probe radiation is clearly specified.
;
    _item.name                  '<a href="#_diffrn_radiation.probe">_diffrn_radiation.probe</a>'
    _item.category_id             diffrn_radiation
    _item.mandatory_code          no
    _item_aliases.alias_name    '_diffrn_radiation_probe'
    _item_aliases.dictionary      cif_core.dic
    _item_aliases.version         2.0.1
    _item_type.code               line
     loop_
    _item_enumeration.value      'x-ray'
                                 'neutron'
                                 'electron'
                                 'gamma'
     save_

save_<A name="_diffrn_radiation.type">_diffrn_radiation.type</a>
    _item_description.description
;              The nature of the radiation. This is typically a description
               of the X-ray wavelength in Siegbahn notation.
;
    _item.name                  '<a href="#_diffrn_radiation.type">_diffrn_radiation.type</a>'
    _item.category_id             diffrn_radiation
    _item.mandatory_code          no
    _item_aliases.alias_name    '_diffrn_radiation_type'
    _item_aliases.dictionary      cif_core.dic
    _item_aliases.version         2.0.1
    _item_type.code               line
     loop_
    _item_examples.case          'CuK\a'
                                 'Cu K\a~1~'
                                 'Cu K-L~2,3~'
                                 'white-beam'

     save_

save_<A name="_diffrn_radiation.xray_symbol">_diffrn_radiation.xray_symbol</a>
    _item_description.description
;              The IUPAC symbol for the X-ray wavelength for the probe
               radiation.
;
    _item.name                  '<a href="#_diffrn_radiation.xray_symbol">_diffrn_radiation.xray_symbol</a>'
    _item.category_id             diffrn_radiation
    _item.mandatory_code          no
    _item_aliases.alias_name    '_diffrn_radiation_xray_symbol'
    _item_aliases.dictionary      cif_core.dic
    _item_aliases.version         2.0.1
    _item_type.code               line
     loop_
    _item_enumeration.value
    _item_enumeration.detail     'K-L~3~'
                                 'K\a~1~ in older Siegbahn notation'
                                 'K-L~2~'
                                 'K\a~2~ in older Siegbahn notation'
                                 'K-M~3~'
                                 'K\b~1~ in older Siegbahn notation'
                                 'K-L~2,3~'
                                 'use where K-L~3~ and K-L~2~ are not resolved'
     save_

save_<A name="_diffrn_radiation.wavelength_id">_diffrn_radiation.wavelength_id</a>
    _item_description.description
;              This data item is a pointer to
               <a href="#_diffrn_radiation_wavelength.id">_diffrn_radiation_wavelength.id</a> in the
               DIFFRN_RADIATION_WAVELENGTH category.
;
    _item.name                  '<a href="#_diffrn_radiation.wavelength_id">_diffrn_radiation.wavelength_id</a>'
    _item.category_id             diffrn_radiation
    _item.mandatory_code          yes
    _item_type.code               code
     save_



################
# <a name="DIFFRN_REFLN">DIFFRN_REFLN</a> #
################


save_DIFFRN_REFLN
    _category.description
;    This category redefinition has been added to extend the key of
     the standard <a href="#DIFFRN_REFLN">DIFFRN_REFLN</a> category.
;
    _category.id                   diffrn_refln
    _category.mandatory_code       no
    _category_key.name             '<a href="#_diffrn_refln.frame_id" >_diffrn_refln.frame_id</a>'
     loop_
    _category_group.id             'inclusive_group'
                                   'diffrn_group'
     save_


save_<a name="_diffrn_refln.frame_id" >_diffrn_refln.frame_id</a>
    _item_description.description
;              This item is a pointer to <a href="#_diffrn_data_frame.id" >_diffrn_data_frame.id</a>
               in the <a href="#DIFFRN_DATA_FRAME">DIFFRN_DATA_FRAME</a> category.
;
    _item.name                  '<a href="#_diffrn_refln.frame_id" >_diffrn_refln.frame_id</a>'
    _item.category_id             diffrn_refln
    _item.mandatory_code          yes
    _item_type.code               code
     save_


###############
# <a name="DIFFRN_SCAN">DIFFRN_SCAN</a> #
###############

save_DIFFRN_SCAN
    _category.description
;    Data items in the <a href="#DIFFRN_SCAN">DIFFRN_SCAN</a> category describe the parameters of one
     or more scans, relating axis positions to frames.

;
    _category.id                   diffrn_scan
    _category.mandatory_code       no
    _category_key.name            '<a href="#_diffrn_scan.id" >_diffrn_scan.id</a>'
     loop_
    _category_group.id            'inclusive_group'
                                  'diffrn_group'
     loop_
    _category_examples.detail
    _category_examples.case
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;   Example 1 - derived from a suggestion by R. M. Sweet.

   The vector of each axis is not given here, because it is provided in
   the <a href="#AXIS">AXIS</a> category.  By making <a href="#_diffrn_scan_axis.scan_id" >_diffrn_scan_axis.scan_id</a> and
   <a href="#_diffrn_scan_axis.axis_id" >_diffrn_scan_axis.axis_id</a> keys of the <a href="#DIFFRN_SCAN_AXIS">DIFFRN_SCAN_AXIS</a> category,
   an arbitrary number of scanning and fixed axes can be specified for a
   scan.  In this example, three rotation axes and one translation axis
   at nonzero values are specified, with one axis stepping.  There is no
   reason why more axes could not have been specified to step. Range
   information has been specified, but note that it can be calculated from
   the  number of frames and the increment, so the data item
   <a href="#_diffrn_scan_axis.angle_range">_diffrn_scan_axis.angle_range</a> could be dropped.

   Both the sweep data and the data for a single frame are specified.

   Note that the information on how the axes are stepped is given twice,
   once in terms of the overall averages in the value of
   <a href="#_diffrn_scan.integration_time" >_diffrn_scan.integration_time</a> and the values for <a href="#DIFFRN_SCAN_AXIS">DIFFRN_SCAN_AXIS</a>,
   and precisely for the given frame in the value for
   <a href="#_diffrn_scan_frame.integration_time" >_diffrn_scan_frame.integration_time</a> and the values for
   <a href="#DIFFRN_SCAN_FRAME_AXIS">DIFFRN_SCAN_FRAME_AXIS</a>.  If dose-related adjustments are made to
   scan times and nonlinear stepping is done, these values may differ.
   Therefore, in interpreting the data for a particular frame it is
   important to use the frame-specific data.
;
;
      <a href="#_diffrn_scan.id">_diffrn_scan.id</a>                   1
      <a href="#_diffrn_scan.date_start" >_diffrn_scan.date_start</a>         '2001-11-18T03:26:42'
      <a href="#_diffrn_scan.date_end" >_diffrn_scan.date_end</a>           '2001-11-18T03:36:45'
      <a href="#_diffrn_scan.integration_time" >_diffrn_scan.integration_time</a>    3.0
      <a href="#_diffrn_scan.frame_id_start" >_diffrn_scan.frame_id_start</a>      mad_L2_000
      <a href="#_diffrn_scan.frame_id_end" >_diffrn_scan.frame_id_end</a>        mad_L2_200
      <a href="#_diffrn_scan.frames" >_diffrn_scan.frames</a>              201

       loop_
      <a href="#_diffrn_scan_axis.scan_id" >_diffrn_scan_axis.scan_id</a>
      <a href="#_diffrn_scan_axis.axis_id" >_diffrn_scan_axis.axis_id</a>
      <a href="#_diffrn_scan_axis.angle_start" >_diffrn_scan_axis.angle_start</a>
      <a href="#_diffrn_scan_axis.angle_range" >_diffrn_scan_axis.angle_range</a>
      <a href="#_diffrn_scan_axis.angle_increment" >_diffrn_scan_axis.angle_increment</a>
      <a href="#_diffrn_scan_axis.displacement_start" >_diffrn_scan_axis.displacement_start</a>
      <a href="#_diffrn_scan_axis.displacement_range" >_diffrn_scan_axis.displacement_range</a>
      <a href="#_diffrn_scan_axis.displacement_increment" >_diffrn_scan_axis.displacement_increment</a>

       1 omega 200.0 20.0 0.1 . . .
       1 kappa -40.0  0.0 0.0 . . .
       1 phi   127.5  0.0 0.0 . . .
       1 tranz  . . .   2.3 0.0 0.0

      <a href="#_diffrn_scan_frame.scan_id" >_diffrn_scan_frame.scan_id</a>                   1
      <a href="#_diffrn_scan_frame.date" >_diffrn_scan_frame.date</a>               '2001-11-18T03:27:33'
      <a href="#_diffrn_scan_frame.integration_time" >_diffrn_scan_frame.integration_time</a>    3.0
      <a href="#_diffrn_scan_frame.frame_id" >_diffrn_scan_frame.frame_id</a>            mad_L2_018
      <a href="#_diffrn_scan_frame.frame_number" >_diffrn_scan_frame.frame_number</a>        18

      loop_
      <a href="#_diffrn_scan_frame_axis.frame_id" >_diffrn_scan_frame_axis.frame_id</a>
      <a href="#_diffrn_scan_frame_axis.axis_id" >_diffrn_scan_frame_axis.axis_id</a>
      <a href="#_diffrn_scan_frame_axis.angle">_diffrn_scan_frame_axis.angle</a>
      <a href="#_diffrn_scan_frame_axis.angle_increment" >_diffrn_scan_frame_axis.angle_increment</a>
      <a href="#_diffrn_scan_frame_axis.displacement" >_diffrn_scan_frame_axis.displacement</a>
      <a href="#_diffrn_scan_frame_axis.displacement_increment" >_diffrn_scan_frame_axis.displacement_increment</a>

       mad_L2_018 omega 201.8  0.1 . .
       mad_L2_018 kappa -40.0  0.0 . .
       mad_L2_018 phi   127.5  0.0 . .
       mad_L2_018 tranz  .     .  2.3 0.0
;

;  Example 2 - a more extensive example (R. M. Sweet, P. J. Ellis &
   H. J. Bernstein).

   A detector is placed 240 mm along the Z axis from the goniometer.
   This leads to a choice:  either the axes of
   the detector are defined at the origin, and then a Z setting of -240
   is entered, or the axes are defined with the necessary Z offset.
   In this case, the setting is used and the offset is left as zero.
   This axis is called DETECTOR_Z.

   The axis for positioning the detector in the Y direction depends
   on the detector Z axis.  This axis is called DETECTOR_Y.

   The axis for positioning the detector in the X direction depends
   on the detector Y axis (and therefore on the detector Z axis).
   This axis is called DETECTOR_X.

   This detector may be rotated around the Y axis.  This rotation axis
   depends on the three translation axes.  It is called DETECTOR_PITCH.

   A coordinate system is defined on the face of the detector in terms of
   2300 0.150 mm pixels in each direction.  The ELEMENT_X axis is used to
   index the first array index of the data array and the ELEMENT_Y
   axis is used to index the second array index.  Because the pixels
   are 0.150mm x 0.150mm, the centre of the first pixel is at (0.075,
   0.075) in this coordinate system.
;

;    ###CBF: VERSION 1.1

     data_image_1

     # category DIFFRN
     _diffrn.id P6MB
     _diffrn.crystal_id P6MB_CRYSTAL7

     # category DIFFRN_SOURCE
     loop_
     _diffrn_source.diffrn_id
     _diffrn_source.source
     _diffrn_source.type
      P6MB synchrotron 'SSRL beamline 9-1'

     # category <a href="#DIFFRN_RADIATION">DIFFRN_RADIATION</a>
     loop_
     <a href="#_diffrn_radiation.diffrn_id">_diffrn_radiation.diffrn_id</a>
     <a href="#_diffrn_radiation.wavelength_id">_diffrn_radiation.wavelength_id</a>
     <a href="#_diffrn_radiation.monochromator">_diffrn_radiation.monochromator</a>
     <a href="#_diffrn_radiation.polarizn_source_ratio">_diffrn_radiation.polarizn_source_ratio</a>
     <a href="#_diffrn_radiation.polarizn_source_norm">_diffrn_radiation.polarizn_source_norm</a>
     <a href="#_diffrn_radiation.div_x_source">_diffrn_radiation.div_x_source</a>
     <a href="#_diffrn_radiation.div_y_source">_diffrn_radiation.div_y_source</a>
     <a href="#_diffrn_radiation.div_x_y_source">_diffrn_radiation.div_x_y_source</a>
      P6MB WAVELENGTH1 'Si 111' 0.8 0.0 0.08
     0.01 0.00

     # category DIFFRN_RADIATION_WAVELENGTH
     loop_
     _diffrn_radiation_wavelength.id
     _diffrn_radiation_wavelength.wavelength
     _diffrn_radiation_wavelength.wt
      WAVELENGTH1 0.98 1.0

     # category <a href="#DIFFRN_DETECTOR">DIFFRN_DETECTOR</a>
     loop_
     <a href="#_diffrn_detector.diffrn_id">_diffrn_detector.diffrn_id</a>
     <a href="#_diffrn_detector.id">_diffrn_detector.id</a>
     <a href="#_diffrn_detector.type">_diffrn_detector.type</a>
     <a href="#_diffrn_detector.number_of_axes">_diffrn_detector.number_of_axes</a>
      P6MB MAR345-SN26 'MAR 345' 4

     # category <a href="#DIFFRN_DETECTOR_AXIS">DIFFRN_DETECTOR_AXIS</a>
     loop_
     <a href="#_diffrn_detector_axis.detector_id">_diffrn_detector_axis.detector_id</a>
     <a href="#_diffrn_detector_axis.axis_id">_diffrn_detector_axis.axis_id</a>
      MAR345-SN26 DETECTOR_X
      MAR345-SN26 DETECTOR_Y
      MAR345-SN26 DETECTOR_Z
      MAR345-SN26 DETECTOR_PITCH

     # category <a href="#DIFFRN_DETECTOR_ELEMENT">DIFFRN_DETECTOR_ELEMENT</a>
     loop_
     <a href="#_diffrn_detector_element.id">_diffrn_detector_element.id</a>
     <a href="#_diffrn_detector_element.detector_id#">_diffrn_detector_element.detector_id</a>
      ELEMENT1 MAR345-SN26

     # category <a href="#DIFFRN_DATA_FRAME">DIFFRN_DATA_FRAME</a>
     loop_
     <a href="#_diffrn_data_frame.id">_diffrn_data_frame.id</a>
     <a href="#_diffrn_data_frame.detector_element_id">_diffrn_data_frame.detector_element_id</a>
     <a href="#_diffrn_data_frame.array_id">_diffrn_data_frame.array_id</a>
     <a href="#_diffrn_data_frame.binary_id">_diffrn_data_frame.binary_id</a>
      FRAME1 ELEMENT1 ARRAY1 1

     # category <a href="#DIFFRN_MEASUREMENT">DIFFRN_MEASUREMENT</a>
     loop_
     <a href="#_diffrn_measurement.diffrn_id">_diffrn_measurement.diffrn_id</a>
     <a href="#_diffrn_measurement.id">_diffrn_measurement.id</a>
     <a href="#_diffrn_measurement.number_of_axes">_diffrn_measurement.number_of_axes</a>
     <a href="#_diffrn_measurement.method">_diffrn_measurement.method</a>
      P6MB GONIOMETER 3 rotation

     # category <a href="#DIFFRN_MEASUREMENT_AXIS">DIFFRN_MEASUREMENT_AXIS</a>
     loop_
     <a href="#_diffrn_measurement_axis.measurement_id">_diffrn_measurement_axis.measurement_id</a>
     <a href="#_diffrn_measurement_axis.axis_id">_diffrn_measurement_axis.axis_id</a>
      GONIOMETER GONIOMETER_PHI
      GONIOMETER GONIOMETER_KAPPA
      GONIOMETER GONIOMETER_OMEGA

     # category <a href="#DIFFRN_SCAN">DIFFRN_SCAN</a>
     loop_
     <a href="#_diffrn_scan.id" >_diffrn_scan.id</a>
     <a href="#_diffrn_scan.frame_id_start" >_diffrn_scan.frame_id_start</a>
     <a href="#_diffrn_scan.frame_id_end" >_diffrn_scan.frame_id_end</a>
     <a href="#_diffrn_scan.frames" >_diffrn_scan.frames</a>
      SCAN1 FRAME1 FRAME1 1

     # category <a href="#DIFFRN_SCAN_AXIS">DIFFRN_SCAN_AXIS</a>
     loop_
     <a href="#_diffrn_scan_axis.scan_id" >_diffrn_scan_axis.scan_id</a>
     <a href="#_diffrn_scan_axis.axis_id" >_diffrn_scan_axis.axis_id</a>
     <a href="#_diffrn_scan_axis.angle_start" >_diffrn_scan_axis.angle_start</a>
     <a href="#_diffrn_scan_axis.angle_range" >_diffrn_scan_axis.angle_range</a>
     <a href="#_diffrn_scan_axis.angle_increment" >_diffrn_scan_axis.angle_increment</a>
     <a href="#_diffrn_scan_axis.displacement_start" >_diffrn_scan_axis.displacement_start</a>
     <a href="#_diffrn_scan_axis.displacement_range" >_diffrn_scan_axis.displacement_range</a>
     <a href="#_diffrn_scan_axis.displacement_increment" >_diffrn_scan_axis.displacement_increment</a>
      SCAN1 GONIOMETER_OMEGA 12.0 1.0 1.0 0.0 0.0 0.0
      SCAN1 GONIOMETER_KAPPA 23.3 0.0 0.0 0.0 0.0 0.0
      SCAN1 GONIOMETER_PHI -165.8 0.0 0.0 0.0 0.0 0.0
      SCAN1 DETECTOR_Z 0.0 0.0 0.0 -240.0 0.0 0.0
      SCAN1 DETECTOR_Y 0.0 0.0 0.0 0.6 0.0 0.0
      SCAN1 DETECTOR_X 0.0 0.0 0.0 -0.5 0.0 0.0
      SCAN1 DETECTOR_PITCH 0.0 0.0 0.0 0.0 0.0 0.0

     # category <a href="#DIFFRN_SCAN_FRAME">DIFFRN_SCAN_FRAME</a>
     loop_
     <a href="#_diffrn_scan_frame.frame_id" >_diffrn_scan_frame.frame_id</a>
     <a href="#_diffrn_scan_frame.frame_number" >_diffrn_scan_frame.frame_number</a>
     <a href="#_diffrn_scan_frame.integration_time" >_diffrn_scan_frame.integration_time</a>
     <a href="#_diffrn_scan_frame.scan_id" >_diffrn_scan_frame.scan_id</a>
     <a href="#_diffrn_scan_frame.date" >_diffrn_scan_frame.date</a>
      FRAME1 1 20.0 SCAN1 1997-12-04T10:23:48

     # category <a href="#DIFFRN_SCAN_FRAME_AXIS">DIFFRN_SCAN_FRAME_AXIS</a>
     loop_
     <a href="#_diffrn_scan_frame_axis.frame_id" >_diffrn_scan_frame_axis.frame_id</a>
     <a href="#_diffrn_scan_frame_axis.axis_id" >_diffrn_scan_frame_axis.axis_id</a>
     <a href="#_diffrn_scan_frame_axis.angle" >_diffrn_scan_frame_axis.angle</a>
     <a href="#_diffrn_scan_frame_axis.displacement" >_diffrn_scan_frame_axis.displacement</a>
      FRAME1 GONIOMETER_OMEGA 12.0 0.0
      FRAME1 GONIOMETER_KAPPA 23.3 0.0
      FRAME1 GONIOMETER_PHI -165.8 0.0
      FRAME1 DETECTOR_Z 0.0 -240.0
      FRAME1 DETECTOR_Y 0.0 0.6
      FRAME1 DETECTOR_X 0.0 -0.5
      FRAME1 DETECTOR_PITCH 0.0 0.0

     # category <a href="#AXIS">AXIS</a>
     loop_
     <a href="#_axis.id">_axis.id</a>
     <a href="#_axis.type">_axis.type</a>
     <a href="#_axis.equipment">_axis.equipment</a>
     <a href="#_axis.depends_on">_axis.depends_on</a>
     <a href="#_axis.vector[1]">_axis.vector[1]</a> <a href="#_axis.vector[2]">_axis.vector[2]</a> <a href="#_axis.vector[3]">_axis.vector[3]</a>
     <a href="#_axis.offset[1]">_axis.offset[1]</a> <a href="#_axis.offset[2]">_axis.offset[2]</a> <a href="#_axis.offset[3]">_axis.offset[3]</a>
      GONIOMETER_OMEGA rotation goniometer . 1 0 0 . . .
      GONIOMETER_KAPPA rotation goniometer GONIOMETER_OMEGA 0.64279
      0 0.76604 . . .
      GONIOMETER_PHI   rotation goniometer GONIOMETER_KAPPA 1 0 0
     . . .
      SOURCE           general source . 0 0 1 . . .
      GRAVITY          general gravity . 0 -1 0 . . .
      DETECTOR_Z       translation detector . 0 0 1 0 0 0
      DETECTOR_Y       translation detector DETECTOR_Z 0 1 0 0 0 0
      DETECTOR_X       translation detector DETECTOR_Y 1 0 0 0 0 0
      DETECTOR_PITCH   rotation    detector DETECTOR_X 0 1 0 0 0 0
      ELEMENT_X        translation detector DETECTOR_PITCH
     1 0 0 172.43 -172.43 0
      ELEMENT_Y        translation detector ELEMENT_X
     0 1 0 0 0 0

     # category <a href="#ARRAY_STRUCTURE_LIST">ARRAY_STRUCTURE_LIST</a>
     loop_
     <a href="#_array_structure_list.array_id">_array_structure_list.array_id</a>
     <a href="#_array_structure_list.index">_array_structure_list.index</a>
     <a href="#_array_structure_list.dimension">_array_structure_list.dimension</a>
     <a href="#_array_structure_list.precedence">_array_structure_list.precedence</a>
     <a href="#_array_structure_list.direction">_array_structure_list.direction</a>
     <a href="#_array_structure_list.axis_set_id">_array_structure_list.axis_set_id</a>
      ARRAY1 1 2300 1 increasing ELEMENT_X
      ARRAY1 2 2300 2 increasing ELEMENT_Y

     # category <a href="#ARRAY_STRUCTURE_LIST_AXIS">ARRAY_STRUCTURE_LIST_AXIS</a>
     loop_
     <a href="#_array_structure_list_axis.axis_set_id">_array_structure_list_axis.axis_set_id</a>
     <a href="#_array_structure_list_axis.axis_id">_array_structure_list_axis.axis_id</a>
     <a href="#_array_structure_list_axis.displacement">_array_structure_list_axis.displacement</a>
     <a href="#_array_structure_list_axis.displacement_increment">_array_structure_list_axis.displacement_increment</a>
      ELEMENT_X ELEMENT_X 0.075 0.150
      ELEMENT_Y ELEMENT_Y 0.075 0.150

     # category <a href="#ARRAY_ELEMENT_SIZE">ARRAY_ELEMENT_SIZE</a>
     loop_
     <a href="#_array_element_size.array_id">_array_element_size.array_id</a>
     <a href="#_array_element_size.index">_array_element_size.index</a>
     <a href="#_array_element_size.index">_array_element_size.size</a>
      ARRAY1 1 150e-6
      ARRAY1 2 150e-6

     # category <a href="#ARRAY_INTENSITIES">ARRAY_INTENSITIES</a>
     loop_
     <a href="#_array_intensities.array_id">_array_intensities.array_id</a>
     <a href="#_array_intensities.binary_id">_array_intensities.binary_id</a>
     <a href="#_array_intensities.linearity">_array_intensities.linearity</a>
     <a href="#_array_intensities.gain">_array_intensities.gain</a>
     <a href="#_array_intensities.gain_esd">_array_intensities.gain_esd</a>
     <a href="#_array_intensities.overload">_array_intensities.overload</a>
     <a href="#_array_intensities.undefined_value">_array_intensities.undefined_value</a>
      ARRAY1 1 linear 1.15 0.2 240000 0

      # category <a href="#ARRAY_STRUCTURE">ARRAY_STRUCTURE</a>
      loop_
      <a href="#_array_structure.id">_array_structure.id</a>
      <a href="#_array_structure.encoding_type">_array_structure.encoding_type</a>
      <a href="#_array_structure.compression_type">_array_structure.compression_type</a>
      <a href="#_array_structure.byte_order">_array_structure.byte_order</a>
      ARRAY1 "signed 32-bit integer" packed little_endian

     # category <a href="#ARRAY_DATA">ARRAY_DATA</a>
     loop_
     <a href="#_array_data.array_id">_array_data.array_id</a>
     <a href="#_array_data.binary_id">_array_data.binary_id</a>
     <a href="#_array_data.data">_array_data.data</a>
      ARRAY1 1
     ;
     --CIF-BINARY-FORMAT-SECTION--
     Content-Type: application/octet-stream;
         conversions="x-CBF_PACKED"
     Content-Transfer-Encoding: BASE64
     X-Binary-Size: 3801324
     X-Binary-ID: 1
     X-Binary-Element-Type: "signed 32-bit integer"
     Content-MD5: 07lZFvF+aOcW85IN7usl8A==

     AABRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZBQSr1sKNBOeOe9HITdMdDUnbq7bg
     ...
     8REo6TtBrxJ1vKqAvx9YDMD6J18Qg83OMr/tgssjMIJMXATDsZobL90AEXc4KigE

     --CIF-BINARY-FORMAT-SECTION----
     ;
;

;   Example 3 - Example 2 revised for a spiral scan (R. M. Sweet,
    P. J. Ellis & H. J. Bernstein).

   A detector is placed 240 mm along the Z axis from the
   goniometer, as in Example 2 above, but in this example the
   image plate is scanned in a spiral pattern from the outside edge in.

   The axis for positioning the detector in the Y direction depends
   on the detector Z axis.  This axis is called DETECTOR_Y.

   The axis for positioning the detector in the X direction depends
   on the detector Y axis (and therefore on the detector Z axis).
   This axis is called DETECTOR_X.

   This detector may be rotated around the Y axis.  This rotation axis
   depends on the three translation axes.  It is called DETECTOR_PITCH.

   A coordinate system is defined on the face of the detector in
   terms of a coupled rotation axis and radial scan axis to form
   a spiral scan.  The rotation axis is called  ELEMENT_ROT  and the
   radial axis is called ELEMENT_RAD.  A 150 micrometre radial pitch
   and a 75 micrometre 'constant velocity' angular pitch are assumed.

   Indexing is carried out first on the rotation axis and the radial axis
   is made to be dependent on it.

   The two axes are coupled to form an axis set ELEMENT_SPIRAL.
;
;    ###CBF: VERSION 1.1

     data_image_1

     # category DIFFRN
     _diffrn.id P6MB
     _diffrn.crystal_id P6MB_CRYSTAL7

     # category DIFFRN_SOURCE
     loop_
     _diffrn_source.diffrn_id
     _diffrn_source.source
     _diffrn_source.type
      P6MB synchrotron 'SSRL beamline 9-1'

     # category <a href="#DIFFRN_RADIATION">DIFFRN_RADIATION</a>
          loop_
     <a href="#_diffrn_radiation.diffrn_id">_diffrn_radiation.diffrn_id</a>
     <a href="#_diffrn_radiation.wavelength_id">_diffrn_radiation.wavelength_id</a>
     <a href="#_diffrn_radiation.monochromator">_diffrn_radiation.monochromator</a>
     <a href="#_diffrn_radiation.polarizn_source_ratio">_diffrn_radiation.polarizn_source_ratio</a>
     <a href="#_diffrn_radiation.polarizn_source_norm">_diffrn_radiation.polarizn_source_norm</a>
     <a href="#_diffrn_radiation.div_x_source">_diffrn_radiation.div_x_source</a>
     <a href="#_diffrn_radiation.div_y_source">_diffrn_radiation.div_y_source</a>
     <a href="#_diffrn_radiation.div_x_y_source">_diffrn_radiation.div_x_y_source</a>
      P6MB WAVELENGTH1 'Si 111' 0.8 0.0 0.08
     0.01 0.00

     # category DIFFRN_RADIATION_WAVELENGTH
     loop_
     _diffrn_radiation_wavelength.id
     _diffrn_radiation_wavelength.wavelength
     _diffrn_radiation_wavelength.wt
      WAVELENGTH1 0.98 1.0

     # category <a href="#DIFFRN_DETECTOR">DIFFRN_DETECTOR</a>
     loop_
     <a href="#_diffrn_detector.diffrn_id">_diffrn_detector.diffrn_id</a>
     <a href="#_diffrn_detector.id">_diffrn_detector.id</a>
     <a href="#_diffrn_detector.type">_diffrn_detector.type</a>
     <a href="#_diffrn_detector.number_of_axes">_diffrn_detector.number_of_axes</a>
      P6MB MAR345-SN26 'MAR 345' 4

     # category <a href="#DIFFRN_DETECTOR_AXIS">DIFFRN_DETECTOR_AXIS</a>
     loop_
     <a href="#_diffrn_detector_axis.detector_id">_diffrn_detector_axis.detector_id</a>
     <a href="#_diffrn_detector_axis.axis_id">_diffrn_detector_axis.axis_id</a>
      MAR345-SN26 DETECTOR_X
      MAR345-SN26 DETECTOR_Y
      MAR345-SN26 DETECTOR_Z
      MAR345-SN26 DETECTOR_PITCH

     # category <a href="#DIFFRN_DETECTOR_ELEMENT">DIFFRN_DETECTOR_ELEMENT</a>
     loop_
     <a href="#_diffrn_detector_element.id">_diffrn_detector_element.id</a>
     <a href="#_diffrn_detector_element.detector_id#">_diffrn_detector_element.detector_id</a>
      ELEMENT1 MAR345-SN26

     # category <a href="#DIFFRN_DATA_FRAME">DIFFRN_DATA_FRAME</a>
     loop_
     <a href="#_diffrn_data_frame.id">_diffrn_data_frame.id</a>
     <a href="#_diffrn_data_frame.detector_element_id">_diffrn_data_frame.detector_element_id</a>
     <a href="#_diffrn_data_frame.array_id">_diffrn_data_frame.array_id</a>
     <a href="#_diffrn_data_frame.binary_id">_diffrn_data_frame.binary_id</a>
      FRAME1 ELEMENT1 ARRAY1 1

     # category <a href="#DIFFRN_MEASUREMENT">DIFFRN_MEASUREMENT</a>
     loop_
     <a href="#_diffrn_measurement.diffrn_id">_diffrn_measurement.diffrn_id</a>
     <a href="#_diffrn_measurement.id">_diffrn_measurement.id</a>
     <a href="#_diffrn_measurement.number_of_axes">_diffrn_measurement.number_of_axes</a>
     <a href="#_diffrn_measurement.method">_diffrn_measurement.method</a>
      P6MB GONIOMETER 3 rotation

     # category <a href="#DIFFRN_MEASUREMENT_AXIS">DIFFRN_MEASUREMENT_AXIS</a>
     loop_
     <a href="#_diffrn_measurement_axis.measurement_id">_diffrn_measurement_axis.measurement_id</a>
     <a href="#_diffrn_measurement_axis.axis_id">_diffrn_measurement_axis.axis_id</a>
      GONIOMETER GONIOMETER_PHI
      GONIOMETER GONIOMETER_KAPPA
      GONIOMETER GONIOMETER_OMEGA

     # category <a href="#DIFFRN_SCAN">DIFFRN_SCAN</a>
     loop_
     <a href="#_diffrn_scan.id" >_diffrn_scan.id</a>
     <a href="#_diffrn_scan.frame_id_start" >_diffrn_scan.frame_id_start</a>
     <a href="#_diffrn_scan.frame_id_end" >_diffrn_scan.frame_id_end</a>
     <a href="#_diffrn_scan.frames" >_diffrn_scan.frames</a>
      SCAN1 FRAME1 FRAME1 1

     # category <a href="#DIFFRN_SCAN_AXIS">DIFFRN_SCAN_AXIS</a>
     loop_
     <a href="#_diffrn_scan_axis.scan_id" >_diffrn_scan_axis.scan_id</a>
     <a href="#_diffrn_scan_axis.axis_id" >_diffrn_scan_axis.axis_id</a>
     <a href="#_diffrn_scan_axis.angle_start" >_diffrn_scan_axis.angle_start</a>
     <a href="#_diffrn_scan_axis.angle_range" >_diffrn_scan_axis.angle_range</a>
     <a href="#_diffrn_scan_axis.angle_increment" >_diffrn_scan_axis.angle_increment</a>
     <a href="#_diffrn_scan_axis.displacement_start" >_diffrn_scan_axis.displacement_start</a>
     <a href="#_diffrn_scan_axis.displacement_range" >_diffrn_scan_axis.displacement_range</a>
     <a href="#_diffrn_scan_axis.displacement_increment" >_diffrn_scan_axis.displacement_increment</a>
      SCAN1 GONIOMETER_OMEGA 12.0 1.0 1.0 0.0 0.0 0.0
      SCAN1 GONIOMETER_KAPPA 23.3 0.0 0.0 0.0 0.0 0.0
      SCAN1 GONIOMETER_PHI -165.8 0.0 0.0 0.0 0.0 0.0
      SCAN1 DETECTOR_Z 0.0 0.0 0.0 -240.0 0.0 0.0
      SCAN1 DETECTOR_Y 0.0 0.0 0.0 0.6 0.0 0.0
      SCAN1 DETECTOR_X 0.0 0.0 0.0 -0.5 0.0 0.0
      SCAN1 DETECTOR_PITCH 0.0 0.0 0.0 0.0 0.0 0.0

     # category <a href="#DIFFRN_SCAN_FRAME">DIFFRN_SCAN_FRAME</a>
     loop_
     <a href="#_diffrn_scan_frame.frame_id" >_diffrn_scan_frame.frame_id</a>
     <a href="#_diffrn_scan_frame.frame_number" >_diffrn_scan_frame.frame_number</a>
     <a href="#_diffrn_scan_frame.integration_time" >_diffrn_scan_frame.integration_time</a>
     <a href="#_diffrn_scan_frame.scan_id" >_diffrn_scan_frame.scan_id</a>
     <a href="#_diffrn_scan_frame.date" >_diffrn_scan_frame.date</a>
      FRAME1 1 20.0 SCAN1 1997-12-04T10:23:48

     # category <a href="#DIFFRN_SCAN_FRAME_AXIS">DIFFRN_SCAN_FRAME_AXIS</a>
     loop_
     <a href="#_diffrn_scan_frame_axis.frame_id" >_diffrn_scan_frame_axis.frame_id</a>
     <a href="#_diffrn_scan_frame_axis.axis_id" >_diffrn_scan_frame_axis.axis_id</a>
     <a href="#_diffrn_scan_frame_axis.angle" >_diffrn_scan_frame_axis.angle</a>
     <a href="#_diffrn_scan_frame_axis.displacement" >_diffrn_scan_frame_axis.displacement</a>
      FRAME1 GONIOMETER_OMEGA 12.0 0.0
      FRAME1 GONIOMETER_KAPPA 23.3 0.0
      FRAME1 GONIOMETER_PHI -165.8 0.0
      FRAME1 DETECTOR_Z 0.0 -240.0
      FRAME1 DETECTOR_Y 0.0 0.6
      FRAME1 DETECTOR_X 0.0 -0.5
      FRAME1 DETECTOR_PITCH 0.0 0.0

     # category <a href="#AXIS">AXIS</a>
     loop_
     <a href="#_axis.id">_axis.id</a>
     <a href="#_axis.type">_axis.type</a>
     <a href="#_axis.equipment">_axis.equipment</a>
     <a href="#_axis.depends_on">_axis.depends_on</a>
     <a href="#_axis.vector[1]">_axis.vector[1]</a> <a href="#_axis.vector[2]">_axis.vector[2]</a> <a href="#_axis.vector[3]">_axis.vector[3]</a>
     <a href="#_axis.offset[1]">_axis.offset[1]</a> <a href="#_axis.offset[2]">_axis.offset[2]</a> <a href="#_axis.offset[3]">_axis.offset[3]</a>
      GONIOMETER_OMEGA rotation goniometer . 1 0 0 . . .
      GONIOMETER_KAPPA rotation goniometer GONIOMETER_OMEGA 0.64279
      0 0.76604 . . .
      GONIOMETER_PHI   rotation goniometer GONIOMETER_KAPPA 1 0 0
     . . .
      SOURCE           general source . 0 0 1 . . .
      GRAVITY          general gravity . 0 -1 0 . . .
      DETECTOR_Z       translation detector . 0 0 1 0 0 0
      DETECTOR_Y       translation detector DETECTOR_Z 0 1 0 0 0 0
      DETECTOR_X       translation detector DETECTOR_Y 1 0 0 0 0 0
      DETECTOR_PITCH   rotation    detector DETECTOR_X 0 1 0 0 0 0
      ELEMENT_ROT      translation detector DETECTOR_PITCH 0 0 1 0 0 0
      ELEMENT_RAD      translation detector ELEMENT_ROT 0 1 0 0 0 0

     # category <a href="#ARRAY_STRUCTURE_LIST">ARRAY_STRUCTURE_LIST</a>
     loop_
     <a href="#_array_structure_list.array_id">_array_structure_list.array_id</a>
     <a href="#_array_structure_list.index">_array_structure_list.index</a>
     <a href="#_array_structure_list.dimension">_array_structure_list.dimension</a>
     <a href="#_array_structure_list.precedence">_array_structure_list.precedence</a>
     <a href="#_array_structure_list.direction">_array_structure_list.direction</a>
     <a href="#_array_structure_list.axis_set_id">_array_structure_list.axis_set_id</a>
      ARRAY1 1 8309900 1 increasing ELEMENT_SPIRAL

     # category <a href="#ARRAY_STRUCTURE_LIST_AXIS">ARRAY_STRUCTURE_LIST_AXIS</a>
     loop_
     <a href="#_array_structure_list_axis.axis_set_id">_array_structure_list_axis.axis_set_id</a>
     <a href="#_array_structure_list_axis.axis_id">_array_structure_list_axis.axis_id</a>
     <a href="#_array_structure_list_axis.angle">_array_structure_list_axis.angle</a>
     <a href="#_array_structure_list_axis.displacement">_array_structure_list_axis.displacement</a>
     <a href="#_array_structure_list_axis.angular_pitch">_array_structure_list_axis.angular_pitch</a>
     <a href="#_array_structure_list_axis.radial_pitch">_array_structure_list_axis.radial_pitch</a>
      ELEMENT_SPIRAL ELEMENT_ROT 0    .  0.075   .
      ELEMENT_SPIRAL ELEMENT_RAD . 172.5  .    -0.150

     # category <a href="#ARRAY_ELEMENT_SIZE">ARRAY_ELEMENT_SIZE</a>
     # the actual pixels are 0.075 by 0.150 mm
     # We give the coarser dimension here.
     loop_
     <a href="#_array_element_size.array_id">_array_element_size.array_id</a>
     <a href="#_array_element_size.index">_array_element_size.index</a>
     <a href="#_array_element_size.index">_array_element_size.size</a>
      ARRAY1 1 150e-6

     # category <a href="#ARRAY_INTENSITIES">ARRAY_INTENSITIES</a>
     loop_
     <a href="#_array_intensities.array_id">_array_intensities.array_id</a>
     <a href="#_array_intensities.binary_id">_array_intensities.binary_id</a>
     <a href="#_array_intensities.linearity">_array_intensities.linearity</a>
     <a href="#_array_intensities.gain">_array_intensities.gain</a>
     <a href="#_array_intensities.gain_esd">_array_intensities.gain_esd</a>
     <a href="#_array_intensities.overload">_array_intensities.overload</a>
     <a href="#_array_intensities.undefined_value">_array_intensities.undefined_value</a>
      ARRAY1 1 linear 1.15 0.2 240000 0

      # category <a href="#ARRAY_STRUCTURE">ARRAY_STRUCTURE</a>
      loop_
      <a href="#_array_structure.id">_array_structure.id</a>
      <a href="#_array_structure.encoding_type">_array_structure.encoding_type</a>
      <a href="#_array_structure.compression_type">_array_structure.compression_type</a>
      <a href="#_array_structure.byte_order">_array_structure.byte_order</a>
      ARRAY1 "signed 32-bit integer" packed little_endian

     # category <a href="#ARRAY_DATA">ARRAY_DATA</a>
     loop_
     <a href="#_array_data.array_id">_array_data.array_id</a>
     <a href="#_array_data.binary_id">_array_data.binary_id</a>
     <a href="#_array_data.data">_array_data.data</a>
      ARRAY1 1
     ;
     --CIF-BINARY-FORMAT-SECTION--
     Content-Type: application/octet-stream;
         conversions="x-CBF_PACKED"
     Content-Transfer-Encoding: BASE64
     X-Binary-Size: 3801324
     X-Binary-ID: 1
     X-Binary-Element-Type: "signed 32-bit integer"
     Content-MD5: 07lZFvF+aOcW85IN7usl8A==

     AABRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZBQSr1sKNBOeOe9HITdMdDUnbq7bg
     ...
     8REo6TtBrxJ1vKqAvx9YDMD6J18Qg83OMr/tgssjMIJMXATDsZobL90AEXc4KigE

     --CIF-BINARY-FORMAT-SECTION----
     ;
;
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
       save_


save_<a name="_diffrn_scan.id" >_diffrn_scan.id</a>
    _item_description.description
;             The value of <a href="#_diffrn_scan.id" >_diffrn_scan.id</a> uniquely identifies each
              scan.  The identifier is used to tie together all the
              information about the scan.
;
     loop_
    _item.name
    _item.category_id
    _item.mandatory_code
       '<a href="#_diffrn_scan.id" >_diffrn_scan.id</a>'                 diffrn_scan             yes
       '<a href="#_diffrn_scan_axis.scan_id" >_diffrn_scan_axis.scan_id</a>'       diffrn_scan_axis        yes
       '<a href="#_diffrn_scan_frame.scan_id" >_diffrn_scan_frame.scan_id</a>'      diffrn_scan_frame       yes
    _item_type.code               code
     loop_
    _item_linked.child_name
    _item_linked.parent_name
       '<a href="#_diffrn_scan_axis.scan_id" >_diffrn_scan_axis.scan_id</a>'          '<a href="#_diffrn_scan.id" >_diffrn_scan.id</a>'
       '<a href="#_diffrn_scan_frame.scan_id" >_diffrn_scan_frame.scan_id</a>'         '<a href="#_diffrn_scan.id" >_diffrn_scan.id</a>'
     save_


save_<a name="_diffrn_scan.date_end">_diffrn_scan.date_end</a>
    _item_description.description
;              The date and time of the end of the scan.  Note that this
               may be an estimate generated during the scan, before the
               precise time of the end of the scan is known.
;
    _item.name                 '<a href="#_diffrn_scan.date_end">_diffrn_scan.date_end</a>'
    _item.category_id          diffrn_scan
    _item.mandatory_code       no
    _item_type.code            yyyy-mm-dd
     save_


save_<a name="_diffrn_scan.date_start">_diffrn_scan.date_start</a>
    _item_description.description
;              The date and time of the start of the scan.
;
    _item.name                 '<a href="#_diffrn_scan.date_start">_diffrn_scan.date_start</a>'
    _item.category_id          diffrn_scan
    _item.mandatory_code       no
    _item_type.code            yyyy-mm-dd
     save_


save_<a name="_diffrn_scan.integration_time" >_diffrn_scan.integration_time</a>
    _item_description.description
;              Approximate average time in seconds to integrate each
               step of the scan.  The precise time for integration
               of each particular step must be provided in
               <a href="#_diffrn_scan_frame.integration_time" >_diffrn_scan_frame.integration_time</a>, even
               if all steps have the same integration time.
;
    _item.name                 '<a href="#_diffrn_scan.integration_time" >_diffrn_scan.integration_time</a>'
    _item.category_id          diffrn_scan
    _item.mandatory_code       no
    _item_type.code            float
    _item_units.code           'seconds'
     loop_
    _item_range.maximum
    _item_range.minimum
                            .   0.0
     save_


save_<a name="_diffrn_scan.frame_id_start" >_diffrn_scan.frame_id_start</a>
    _item_description.description
;              The value of this data item is the identifier of the
               first frame in the scan.

               This item is a pointer to <a href="#_diffrn_data_frame.id" >_diffrn_data_frame.id</a> in the
               <a href="#DIFFRN_DATA_FRAME">DIFFRN_DATA_FRAME</a> category.
;
    _item.name                 '<a href="#_diffrn_scan.frame_id_start" >_diffrn_scan.frame_id_start</a>'
    _item.category_id          diffrn_scan
    _item.mandatory_code       yes
    _item_type.code            code
     save_


save_<a name="_diffrn_scan.frame_id_end" >_diffrn_scan.frame_id_end</a>
    _item_description.description
;              The value of this data item is the identifier of the
               last frame in the scan.

               This item is a pointer to <a href="#_diffrn_data_frame.id" >_diffrn_data_frame.id</a> in the
               <a href="#DIFFRN_DATA_FRAME">DIFFRN_DATA_FRAME</a> category.
;
    _item.name                 '<a href="#_diffrn_scan.frame_id_end" >_diffrn_scan.frame_id_end</a>'
    _item.category_id          diffrn_scan
    _item.mandatory_code       yes
    _item_type.code            code
     save_


save_<a name="_diffrn_scan.frames" >_diffrn_scan.frames</a>
    _item_description.description
;              The value of this data item is the number of frames in
               the scan.
;
    _item.name                 '<a href="#_diffrn_scan.frames" >_diffrn_scan.frames</a>'
    _item.category_id          diffrn_scan
    _item.mandatory_code       no
    _item_type.code            int
     loop_
    _item_range.maximum
    _item_range.minimum
                            .   1
                            1   1
     save_


####################
# <a name="DIFFRN_SCAN_AXIS">DIFFRN_SCAN_AXIS</a> #
####################

save_DIFFRN_SCAN_AXIS
    _category.description
;    Data items in the <a href="#DIFFRN_SCAN_AXIS">DIFFRN_SCAN_AXIS</a> category describe the settings of
     axes for particular scans.  Unspecified axes are assumed to be at
     their zero points.
;
    _category.id                   diffrn_scan_axis
    _category.mandatory_code       no
     loop_
    _category_key.name
                                  '<a href="#_diffrn_scan_axis.scan_id" >_diffrn_scan_axis.scan_id</a>'
                                  '<a href="#_diffrn_scan_axis.axis_id" >_diffrn_scan_axis.axis_id</a>'
     loop_
    _category_group.id           'inclusive_group'
                                 'diffrn_group'
     save_


save_<a name="_diffrn_scan_axis.scan_id" >_diffrn_scan_axis.scan_id</a>
    _item_description.description
;              The value of this data item is the identifier of the
               scan for which axis settings are being specified.

               Multiple axes may be specified for the same value of
               <a href="#_diffrn_scan.id" >_diffrn_scan.id</a>.

               This item is a pointer to <a href="#_diffrn_scan.id" >_diffrn_scan.id</a> in the
               <a href="#DIFFRN_SCAN">DIFFRN_SCAN</a> category.
;
    _item.name                 '<a href="#_diffrn_scan_axis.scan_id" >_diffrn_scan_axis.scan_id</a>'
    _item.category_id          diffrn_scan_axis
    _item.mandatory_code       yes
    _item_type.code            code
     save_


save_<a name="_diffrn_scan_axis.axis_id" >_diffrn_scan_axis.axis_id</a>
    _item_description.description
;              The value of this data item is the identifier of one of
               the axes for the scan for which settings are being specified.

               Multiple axes may be specified for the same value of
               <a href="#_diffrn_scan.id" >_diffrn_scan.id</a>.

               This item is a pointer to <a href="#_axis.id" >_axis.id</a> in the
               AXIS category.
;
    _item.name                 '<a href="#_diffrn_scan_axis.axis_id" >_diffrn_scan_axis.axis_id</a>'
    _item.category_id          diffrn_scan_axis
    _item.mandatory_code       yes
    _item_type.code            code
     save_


save_<a name="_diffrn_scan_axis.angle_start" >_diffrn_scan_axis.angle_start</a>
    _item_description.description
;              The starting position for the specified axis in degrees.
;
    _item.name                 '<a href="#_diffrn_scan_axis.angle_start" >_diffrn_scan_axis.angle_start</a>'
    _item.category_id          diffrn_scan_axis
    _item.mandatory_code       no
    _item_default.value        0.0
    _item_type.code            float
    _item_units.code           'degrees'
     save_


save_<a name="_diffrn_scan_axis.angle_range" >_diffrn_scan_axis.angle_range</a>
    _item_description.description
;              The range from the starting position for the specified axis
               in degrees.
;
    _item.name                 '<a href="#_diffrn_scan_axis.angle_range" >_diffrn_scan_axis.angle_range</a>'
    _item.category_id          diffrn_scan_axis
    _item.mandatory_code       no
    _item_default.value        0.0
    _item_type.code            float
    _item_units.code           'degrees'
     save_


save_<a name="_diffrn_scan_axis.angle_increment" >_diffrn_scan_axis.angle_increment</a>
    _item_description.description
;              The increment for each step for the specified axis
               in degrees.  In general, this will agree with
               <a href="#_diffrn_scan_frame_axis.angle_increment" >_diffrn_scan_frame_axis.angle_increment</a>. The
               sum of the values of <a href="#_diffrn_scan_frame_axis.angle">_diffrn_scan_frame_axis.angle</a> and
               <a href="#_diffrn_scan_frame_axis.angle_increment">_diffrn_scan_frame_axis.angle_increment</a> is the
               angular setting of the axis at the end of the integration
               time for a given frame.  If the individual frame values
               vary, then the value of
               <a href="#_diffrn_scan_axis.angle_increment">_diffrn_scan_axis.angle_increment</a> will be
               representative
               of the ensemble of values of
               <a href="#_diffrn_scan_frame_axis.angle_increment">_diffrn_scan_frame_axis.angle_increment</a> (e.g.
               the mean).
;
    _item.name                 '<a href="#_diffrn_scan_axis.angle_increment" >_diffrn_scan_axis.angle_increment</a>'
    _item.category_id          diffrn_scan_axis
    _item.mandatory_code       no
    _item_default.value        0.0
    _item_type.code            float
    _item_units.code           'degrees'
     save_


save_<a name="_diffrn_scan_axis.angle_rstrt_incr">_diffrn_scan_axis.angle_rstrt_incr</a>
    _item_description.description
;              The increment after each step for the specified axis
               in degrees.  In general, this will agree with
               <a href="#_diffrn_scan_frame_axis.angle_rstrt_incr" >_diffrn_scan_frame_axis.angle_rstrt_incr</a>.  The
               sum of the values of <a href="#_diffrn_scan_frame_axis.angle" >_diffrn_scan_frame_axis.angle</a>,
               <a href="#_diffrn_scan_frame_axis.angle_increment" >_diffrn_scan_frame_axis.angle_increment</a>
               and  <a href="#_diffrn_scan_frame_axis.angle_rstrt_incr" >_diffrn_scan_frame_axis.angle_rstrt_incr</a> is the
               angular setting of the axis at the start of the integration
               time for the next frame relative to a given frame and
               should equal <a href="#_diffrn_scan_frame_axis.angle" >_diffrn_scan_frame_axis.angle</a> for this
               next frame.   If the individual frame values
               vary, then the value of
               <a href="#_diffrn_scan_axis.angle_rstrt_incr" >_diffrn_scan_axis.angle_rstrt_incr</a> will be
               representative
               of the ensemble of values of
               <a href="#_diffrn_scan_frame_axis.angle_rstrt_incr" >_diffrn_scan_frame_axis.angle_rstrt_incr</a> (e.g.
               the mean).
;
    _item.name                 '<a href="#_diffrn_scan_axis.angle_rstrt_incr">_diffrn_scan_axis.angle_rstrt_incr</a>'
    _item.category_id          diffrn_scan_axis
    _item.mandatory_code       no
    _item_default.value        0.0
    _item_type.code            float
    _item_units.code           'degrees'
     save_


save_<a name="_diffrn_scan_axis.displacement_start" >_diffrn_scan_axis.displacement_start</a>
    _item_description.description
;              The starting position for the specified axis in millimetres.
;
    _item.name                 '<a href="#_diffrn_scan_axis.displacement_start" >_diffrn_scan_axis.displacement_start</a>'
    _item.category_id          diffrn_scan_axis
    _item.mandatory_code       no
    _item_default.value        0.0
    _item_type.code            float
    _item_units.code           'millimetres'
     save_


save_<a name="_diffrn_scan_axis.displacement_range" >_diffrn_scan_axis.displacement_range</a>
    _item_description.description
;              The range from the starting position for the specified axis
               in millimetres.
;
    _item.name                 '<a href="#_diffrn_scan_axis.displacement_range" >_diffrn_scan_axis.displacement_range</a>'
    _item.category_id          diffrn_scan_axis
    _item.mandatory_code       no
    _item_default.value        0.0
    _item_type.code            float
    _item_units.code           'millimetres'
     save_


save_<a name="_diffrn_scan_axis.displacement_increment" >_diffrn_scan_axis.displacement_increment</a>
    _item_description.description
;              The increment for each step for the specified axis
               in millimetres.  In general, this will agree with
               <a href="#_diffrn_scan_frame_axis.displacement_increment">_diffrn_scan_frame_axis.displacement_increment</a>.
               The sum of the values of
               <a href="#_diffrn_scan_frame_axis.displacement" >_diffrn_scan_frame_axis.displacement</a> and
               <a href="#_diffrn_scan_frame_axis.displacement_increment" >_diffrn_scan_frame_axis.displacement_increment</a> is the
               angular setting of the axis at the end of the integration
               time for a given frame.  If the individual frame values
               vary, then the value of
               <a href="#_diffrn_scan_axis.displacement_increment" >_diffrn_scan_axis.displacement_increment</a> will be
               representative
               of the ensemble of values of
               <a href="#_diffrn_scan_frame_axis.displacement_increment" >_diffrn_scan_frame_axis.displacement_increment</a> (e.g.
               the mean).
;
    _item.name                 '<a href="#_diffrn_scan_axis.displacement_increment" >_diffrn_scan_axis.displacement_increment</a>'
    _item.category_id          diffrn_scan_axis
    _item.mandatory_code       no
    _item_default.value        0.0
    _item_type.code            float
    _item_units.code           'millimetres'
     save_


save_<a name="_diffrn_scan_axis.displacement_rstrt_incr">_diffrn_scan_axis.displacement_rstrt_incr</a>
    _item_description.description
;              The increment for each step for the specified axis
               in millimetres.  In general, this will agree with
               <a href="#_diffrn_scan_frame_axis.displacement_rstrt_incr">_diffrn_scan_frame_axis.displacement_rstrt_incr</a>.
               The sum of the values of
               <a href="#_diffrn_scan_frame_axis.displacement" >_diffrn_scan_frame_axis.displacement</a>,
               <a href="#_diffrn_scan_frame_axis.displacement_increment" >_diffrn_scan_frame_axis.displacement_increment</a> and
               <a href="#_diffrn_scan_frame_axis.displacement_rstrt_incr" >_diffrn_scan_frame_axis.displacement_rstrt_incr</a> is the
               angular setting of the axis at the start of the integration
               time for the next frame relative to a given frame and
               should equal <a href="#_diffrn_scan_frame_axis.displacement" >_diffrn_scan_frame_axis.displacement</a>
               for this next frame.  If the individual frame values
               vary, then the value of
               <a href="#_diffrn_scan_axis.displacement_rstrt_incr" >_diffrn_scan_axis.displacement_rstrt_incr</a> will be
               representative
               of the ensemble of values of
               <a href="#_diffrn_scan_frame_axis.displacement_rstrt_incr" >_diffrn_scan_frame_axis.displacement_rstrt_incr</a> (e.g.
               the mean).
;
    _item.name                 '<a href="#_diffrn_scan_axis.displacement_rstrt_incr">_diffrn_scan_axis.displacement_rstrt_incr</a>'
    _item.category_id          diffrn_scan_axis
    _item.mandatory_code       no
    _item_default.value        0.0
    _item_type.code            float
    _item_units.code           'millimetres'
     save_


#####################
# <a name="DIFFRN_SCAN_FRAME">DIFFRN_SCAN_FRAME</a> #
#####################

save_DIFFRN_SCAN_FRAME
    _category.description
;           Data items in the <a href="#DIFFRN_SCAN_FRAME">DIFFRN_SCAN_FRAME</a> category describe
            the relationships of particular frames to scans.
;
    _category.id                   diffrn_scan_frame
    _category.mandatory_code       no
     loop_
    _category_key.name
                                  '<a href="#_diffrn_scan_frame.scan_id" >_diffrn_scan_frame.scan_id</a>'
                                  '<a href="#_diffrn_scan_frame.frame_id" >_diffrn_scan_frame.frame_id</a>'
     loop_
    _category_group.id            'inclusive_group'
                                  'diffrn_group'
     save_


save_<a name="_diffrn_scan_frame.date">_diffrn_scan_frame.date</a>
    _item_description.description
;              The date and time of the start of the frame being scanned.
;
    _item.name                 '<a href="#_diffrn_scan_frame.date">_diffrn_scan_frame.date</a>'
    _item.category_id          diffrn_scan_frame
    _item.mandatory_code       no
    _item_type.code            yyyy-mm-dd
     save_


save_<a name="_diffrn_scan_frame.frame_id" >_diffrn_scan_frame.frame_id</a>
    _item_description.description
;              The value of this data item is the identifier of the
               frame being examined.

               This item is a pointer to <a href="#_diffrn_data_frame.id" >_diffrn_data_frame.id</a> in the
               <a href="#DIFFRN_DATA_FRAME">DIFFRN_DATA_FRAME</a> category.
;
    _item.name                 '<a href="#_diffrn_scan_frame.frame_id" >_diffrn_scan_frame.frame_id</a>'
    _item.category_id          diffrn_scan_frame
    _item.mandatory_code       yes
    _item_type.code            code
     save_


save_<a name="_diffrn_scan_frame.frame_number" >_diffrn_scan_frame.frame_number</a>
    _item_description.description
;              The value of this data item is the number of the frame
               within the scan, starting with 1.  It is not necessarily
               the same as the value of <a href="#_diffrn_scan_frame.frame_id">_diffrn_scan_frame.frame_id</a>,
               but it may be.

;
    _item.name                 '<a href="#_diffrn_scan_frame.frame_number" >_diffrn_scan_frame.frame_number</a>'
    _item.category_id          diffrn_scan_frame
    _item.mandatory_code       no
    _item_type.code            int
     loop_
    _item_range.maximum
    _item_range.minimum
                            .   0
                            0   0
     save_


save_<a name="_diffrn_scan_frame.integration_time">_diffrn_scan_frame.integration_time</a>
    _item_description.description
;              The time in seconds to integrate this step of the scan.
               This should be the precise time of integration of each
               particular frame.  The value of this data item should
               be given explicitly for each frame and not inferred
               from the value of <a href="#_diffrn_scan.integration_time" >_diffrn_scan.integration_time</a>.
;
    _item.name                 '<a href="#_diffrn_scan_frame.integration_time" >_diffrn_scan_frame.integration_time</a>'
    _item.category_id          diffrn_scan_frame
    _item.mandatory_code       yes
    _item_type.code            float
    _item_units.code           'seconds'
     loop_
    _item_range.maximum
    _item_range.minimum
                            .   0.0
     save_


save_<a name="_diffrn_scan_frame.scan_id" >_diffrn_scan_frame.scan_id</a>
    _item_description.description
;             The value of <a href="#_diffrn_scan_frame.scan_id" >_diffrn_scan_frame.scan_id</a> identifies the scan
              containing this frame.

              This item is a pointer to <a href="#_diffrn_scan.id" >_diffrn_scan.id</a> in the
              <a href="#DIFFRN_SCAN">DIFFRN_SCAN</a> category.
;
    _item.name             '<a href="#_diffrn_scan_frame.scan_id">_diffrn_scan_frame.scan_id</a>'
    _item.category_id        diffrn_scan_frame
    _item.mandatory_code     yes
    _item_type.code          code
     save_


##########################
# <a name="DIFFRN_SCAN_FRAME_AXIS">DIFFRN_SCAN_FRAME_AXIS</a> #
##########################

save_DIFFRN_SCAN_FRAME_AXIS
    _category.description
;    Data items in the <a href="#DIFFRN_SCAN_FRAME_AXIS">DIFFRN_SCAN_FRAME_AXIS</a> category describe the
     settings of axes for particular frames.  Unspecified axes are
     assumed to be at their zero points.  If, for any given frame,
     nonzero values apply for any of the data items in this category,
     those values should be given explicitly in this category and not
     simply inferred from values in <a href="#DIFFRN_SCAN_AXIS">DIFFRN_SCAN_AXIS</a>.
;
    _category.id                   diffrn_scan_frame_axis
    _category.mandatory_code       no
     loop_
    _category_key.name
                                  '<a href="#_diffrn_scan_frame_axis.frame_id" >_diffrn_scan_frame_axis.frame_id</a>'
                                  '<a href="#_diffrn_scan_frame_axis.axis_id" >_diffrn_scan_frame_axis.axis_id</a>'
     loop_
    _category_group.id           'inclusive_group'
                                 'diffrn_group'
     save_


save_<a name="_diffrn_scan_frame_axis.axis_id" >_diffrn_scan_frame_axis.axis_id</a>
    _item_description.description
;              The value of this data item is the identifier of one of
               the axes for the frame for which settings are being specified.

               Multiple axes may be specified for the same value of
               <a href="#_diffrn_scan_frame.id" >_diffrn_scan_frame.frame_id</a>.

               This item is a pointer to <a href="#_axis.id" >_axis.id</a> in the
               <a href="#AXIS">AXIS</a> category.
;
    _item.name                 '<a href="#_diffrn_scan_frame_axis.axis_id" >_diffrn_scan_frame_axis.axis_id</a>'
    _item.category_id          diffrn_scan_frame_axis
    _item.mandatory_code       yes
    _item_type.code            code
     save_


save_<a name="_diffrn_scan_frame_axis.angle" >_diffrn_scan_frame_axis.angle</a>
    _item_description.description
;              The setting of the specified axis in degrees for this frame.
               This is the setting at the start of the integration time.
;
    _item.name                 '<a href="#_diffrn_scan_frame_axis.angle" >_diffrn_scan_frame_axis.angle</a>'
    _item.category_id          diffrn_scan_frame_axis
    _item.mandatory_code       no
    _item_default.value        0.0
    _item_type.code            float
    _item_units.code           'degrees'
     save_


save_<a name="_diffrn_scan_frame_axis.angle_increment">_diffrn_scan_frame_axis.angle_increment</a>
    _item_description.description
;              The increment for this frame for the angular setting of
               the specified axis in degrees.  The sum of the values
               of <a href="#_diffrn_scan_frame_axis.angle">_diffrn_scan_frame_axis.angle</a> and
               <a href="#_diffrn_scan_frame_axis.angle_increment">_diffrn_scan_frame_axis.angle_increment</a> is the
               angular setting of the axis at the end of the integration
               time for this frame.
;
    _item.name                 '<a href="#_diffrn_scan_frame_axis.angle_increment">_diffrn_scan_frame_axis.angle_increment</a>'
    _item.category_id          diffrn_scan_frame_axis
    _item.mandatory_code       no
    _item_default.value        0.0
    _item_type.code            float
    _item_units.code           'degrees'
     save_


save_<a name="_diffrn_scan_frame_axis.angle_rstrt_incr">_diffrn_scan_frame_axis.angle_rstrt_incr</a>
    _item_description.description
;              The increment after this frame for the angular setting of
               the specified axis in degrees.  The sum of the values
               of <a href="#_diffrn_scan_frame_axis.angle">_diffrn_scan_frame_axis.angle</a>,
               <a href="#_diffrn_scan_frame_axis.angle_increment">_diffrn_scan_frame_axis.angle_increment</a> and
               <a href="#_diffrn_scan_frame_axis.angle_rstrt_incr">_diffrn_scan_frame_axis.angle_rstrt_incr</a> is the
               angular setting of the axis at the start of the integration
               time for the next frame and should equal
               <a href="#_diffrn_scan_frame_axis.angle">_diffrn_scan_frame_axis.angle</a> for this next frame.
;
    _item.name               '<a href="#_diffrn_scan_frame_axis.angle_rstrt_incr">_diffrn_scan_frame_axis.angle_rstrt_incr</a>'
    _item.category_id          diffrn_scan_frame_axis
    _item.mandatory_code       no
    _item_default.value        0.0
    _item_type.code            float
    _item_units.code           'degrees'
     save_


save_<a name="_diffrn_scan_frame_axis.displacement" >_diffrn_scan_frame_axis.displacement</a>
    _item_description.description
;              The setting of the specified axis in millimetres for this
               frame.  This is the setting at the start of the integration
               time.
;
    _item.name               '<a href="#_diffrn_scan_frame_axis.displacement" >_diffrn_scan_frame_axis.displacement</a>'
    _item.category_id          diffrn_scan_frame_axis
    _item.mandatory_code       no
    _item_default.value        0.0
    _item_type.code            float
    _item_units.code           'millimetres'
     save_


save_<a name="_diffrn_scan_frame_axis.displacement_increment">_diffrn_scan_frame_axis.displacement_increment</a>
    _item_description.description
;              The increment for this frame for the displacement setting of
               the specified axis in millimetres.  The sum of the values
               of <a href="#_diffrn_scan_frame_axis.displacement">_diffrn_scan_frame_axis.displacement</a> and
               <a href="#_diffrn_scan_frame_axis.displacement_increment">_diffrn_scan_frame_axis.displacement_increment</a> is the
               angular setting of the axis at the end of the integration
               time for this frame.
;
    _item.name               '<a href="#_diffrn_scan_frame_axis.displacement_increment">_diffrn_scan_frame_axis.displacement_increment</a>'
    _item.category_id          diffrn_scan_frame_axis
    _item.mandatory_code       no
    _item_default.value        0.0
    _item_type.code            float
    _item_units.code           'millimetres'
     save_


save_<a name="_diffrn_scan_frame_axis.displacement_rstrt_incr">_diffrn_scan_frame_axis.displacement_rstrt_incr</a>
    _item_description.description
;              The increment for this frame for the displacement setting of
               the specified axis in millimetres.  The sum of the values
               of <a href="#_diffrn_scan_frame_axis.displacement">_diffrn_scan_frame_axis.displacement</a>,
               <a href="#_diffrn_scan_frame_axis.displacement_increment">_diffrn_scan_frame_axis.displacement_increment</a> and
               <a href="#_diffrn_scan_frame_axis.displacement_rstrt_incr">_diffrn_scan_frame_axis.displacement_rstrt_incr</a> is the
               angular setting of the axis at the start of the integration
               time for the next frame and should equal
               <a href="#_diffrn_scan_frame_axis.displacement">_diffrn_scan_frame_axis.displacement</a> for this next frame.
;
    _item.name               '<a href="#_diffrn_scan_frame_axis.displacement_rstrt_incr">_diffrn_scan_frame_axis.displacement_rstrt_incr</a>'
    _item.category_id          diffrn_scan_frame_axis
    _item.mandatory_code       no
    _item_default.value        0.0
    _item_type.code            float
    _item_units.code           'millimetres'
     save_

save_<a name="_diffrn_scan_frame_axis.frame_id" >_diffrn_scan_frame_axis.frame_id</a>
    _item_description.description
;              The value of this data item is the identifier of the
               frame for which axis settings are being specified.

               Multiple axes may be specified for the same value of
               <a href="#_diffrn_scan_frame.frame_id" >_diffrn_scan_frame.frame_id</a>.

               This item is a pointer to <a href="#_diffrn_data_frame.id" >_diffrn_data_frame.id</a> in the
               <a href="#DIFFRN_DATA_FRAME">DIFFRN_DATA_FRAME</a> category.
;
    _item.name               '<a href="#_diffrn_scan_frame_axis.frame_id" >_diffrn_scan_frame_axis.frame_id</a>'
    _item.category_id          diffrn_scan_frame_axis
    _item.mandatory_code       yes
    _item_type.code            code
     save_

########################   DEPRECATED DATA ITEMS ########################

save_<a name="_diffrn_detector_axis.id">_diffrn_detector_axis.id</a>
    _item_description.description
;              This data item is a pointer to <a href="#_diffrn_detector.id">_diffrn_detector.id</a> in
               the <a href="#DIFFRN_DETECTOR">DIFFRN_DETECTOR</a> category.

               DEPRECATED -- DO NOT USE
;
    _item.name                  '<a href="#_diffrn_detector_axis.id">_diffrn_detector_axis.id</a>'
    _item.category_id             diffrn_detector_axis
    _item.mandatory_code          yes
    _item_type.code               code
     save_

save_<a name="_diffrn_measurement_axis.id">_diffrn_measurement_axis.id</a>
    _item_description.description
;              This data item is a pointer to <a href="#_diffrn_measurement.id">_diffrn_measurement.id</a> in
               the <a href="#DIFFRN_MEASUREMENT">DIFFRN_MEASUREMENT</a> category.

               DEPRECATED -- DO NOT USE
;
    _item.name                  '<a href="#_diffrn_measurement_axis.id">_diffrn_measurement_axis.id</a>'
    _item.category_id             diffrn_measurement_axis
    _item.mandatory_code          yes
    _item_type.code               code
     save_

#########################   DEPRECATED CATEGORY #########################
#####################
# <a name="DIFFRN_FRAME_DATA" >DIFFRN_FRAME_DATA</a> #
#####################


save_DIFFRN_FRAME_DATA
    _category.description
;             Data items in the DIFFRN_FRAME_DATA category record
              the details about each frame of data.

              The items in this category are now in the
              <a href="#DIFFRN_DATA_FRAME">DIFFRN_DATA_FRAME</a> category.

              The items in the DIFFRN_FRAME_DATA category
              are now deprecated.  The items from this category
              are provided as aliases in the 1.0 dictionary
              or, in the case of _diffrn_frame_data.details,
              in the 1.4 dictionary.  THESE ITEMS SHOULD NOT
              BE USED FOR NEW WORK.

              The items from the old category are provided
              in this dictionary for completeness
              but should not be used or cited.  To avoid
              confusion, the example has been removed
              and the redundant parent-child links to other
              categories have been removed.
;
    _category.id                   diffrn_frame_data
    _category.mandatory_code       no
     loop_
    _category_key.name             '<a href="#_diffrn_frame_data.id" >_diffrn_frame_data.id</a>'
                                   '<a href="#_diffrn_frame_data.detector_element_id" >_diffrn_frame_data.detector_element_id</a>'
    loop_
    _category_group.id             'inclusive_group'
                                   'array_data_group'
    loop_
    _category_examples.detail
    _category_examples.case
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;
    THE DIFFRN_FRAME_DATA category is deprecated and should not be used.
;
;
       # EXAMPLE REMOVED #
;
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    save_


save_<a name="_diffrn_frame_data.array_id" >_diffrn_frame_data.array_id</a>
    _item_description.description
;             This item is a pointer to <a href="#_array_structure.id" >_array_structure.id</a> in the
              ARRAY_STRUCTURE category.

              DEPRECATED -- DO NOT USE
;
    _item.name                  '<a href="#_diffrn_frame_data.array_id" >_diffrn_frame_data.array_id</a>'
    _item.category_id             diffrn_frame_data
    _item.mandatory_code          yes
    _item_type.code               code
     save_


save_<a name="_diffrn_frame_data.binary_id" >_diffrn_frame_data.binary_id</a>
    _item_description.description
;             This item is a pointer to <a href="#_array_data.binary_id" >_array_data.binary_id</a> in the
              ARRAY_STRUCTURE category.

              DEPRECATED -- DO NOT USE
;
    _item.name                  '<a href="#_diffrn_frame_data.binary_id" >_diffrn_frame_data.binary_id</a>'
    _item.category_id             diffrn_frame_data
    _item.mandatory_code          implicit
    _item_type.code               int
     save_


save_<a name="_diffrn_frame_data.detector_element_id" >_diffrn_frame_data.detector_element_id</a>
    _item_description.description
;             This item is a pointer to <a href="#_diffrn_detector_element.id">_diffrn_detector_element.id</a>
              in the DIFFRN_DETECTOR_ELEMENT category.

              DEPRECATED -- DO NOT USE
;
    _item.name                  '<a href="#_diffrn_frame_data.detector_element_id" >_diffrn_frame_data.detector_element_id</a>'
    _item.category_id             diffrn_frame_data
    _item.mandatory_code          yes
    _item_type.code               code
     save_


save_<a name="_diffrn_frame_data.id" >_diffrn_frame_data.id</a>
    _item_description.description
;             The value of <a href="#_diffrn_frame_data.id" >_diffrn_frame_data.id</a> must uniquely identify
              each complete frame of data.

              DEPRECATED -- DO NOT USE
;
     loop_
    _item.name
    _item.category_id
    _item.mandatory_code
           '<a href="#_diffrn_frame_data.id" >_diffrn_frame_data.id</a>'        diffrn_frame_data  yes
    _item_type.code               code
     save_

 save_<a name="_diffrn_frame_data.details" >_diffrn_frame_data.details</a>
     _item_description.description
;             The value of <a href="#_diffrn_data_frame.details" >_diffrn_data_frame.details</a> should give a
              description of special aspects of each frame of data.

              DEPRECATED -- DO NOT USE
;
     _item.name                  '<a name="_diffrn_frame_data.details" >_diffrn_frame_data.details</a>'
     _item.category_id             diffrn_frame_data
     _item.mandatory_code          no
     _item_type.code               text
      save_

################ END DEPRECATED SECTION ###########


####################
## <a name="ITEM_TYPE_LIST">ITEM_TYPE_LIST</a> ##
####################
#
#
#  The regular expressions defined here are not compliant
#  with the POSIX 1003.2 standard as they include the
#  '\n' and '\t' special characters.  These regular expressions
#  have been tested using version 0.12 of Richard Stallman's
#  GNU regular expression library in POSIX mode.
#  In order to allow presentation of a regular expression
#  in a text field concatenate any line ending in a backslash
#  with the following line, after discarding the backslash.
#
#  A formal definition of the '\n' and '\t' special characters
#  is most properly done in the DDL, but for completeness, please
#  note that '\n' is the line termination character ('newline')
#  and '\t' is the horizontal tab character.  There is a formal
#  ambiguity in the use of '\n' for line termination, in that
#  the intention is that the equivalent machine/OS-dependent line
#  termination character sequence should be accepted as a match, e.g.
#
#      '\r' (control-M) under MacOS
#      '\n' (control-J) under Unix
#      '\r\n' (control-M control-J) under DOS and MS Windows
#
     loop_
    _item_type_list.code
    _item_type_list.primitive_code
    _item_type_list.construct
    _item_type_list.detail
               code      char
               '[_,.;:&quot;&amp;&lt;&gt;()/\{}'`~!@#$%A-Za-z0-9*|+-]*'
;              code item types/single words ...
;
               ucode      uchar
               '[_,.;:&quot;&amp;&lt;&gt;()/\{}'`~!@#$%A-Za-z0-9*|+-]*'
;              code item types/single words (case insensitive) ...
;
               line      char
               '[][ \t_(),.;:&quot;&amp;&lt;&gt;/\{}'`~!@#$%?+=*A-Za-z0-9|^-]*'
;              char item types / multi-word items ...
;
               uline     uchar
               '[][ \t_(),.;:&quot;&amp;&lt;&gt;/\{}'`~!@#$%?+=*A-Za-z0-9|^-]*'
;              char item types / multi-word items (case insensitive)...
;
               text      char
             '[][ \n\t()_,.;:&quot;&amp;&lt;&gt;/\{}'`~!@#$%?+=*A-Za-z0-9|^-]*'
;              text item types / multi-line text ...
;
               binary    char
;\n--CIF-BINARY-FORMAT-SECTION--\n\
[][ \n\t()_,.;:&quot;&amp;&lt;&gt;/\{}'`~!@#$%?+=*A-Za-z0-9|^-]*\
\n--CIF-BINARY-FORMAT-SECTION----
;
;              binary items are presented as MIME-like ascii-encoded
               sections in an imgCIF.  In a CBF, raw octet streams
               are used to convey the same information.
;
               int       numb
               '-?[0-9]+'
;              int item types are the subset of numbers that are the negative
               or positive integers.
;
               float     numb
          '-?(([0-9]+)[.]?|([0-9]*[.][0-9]+))([(][0-9]+[)])?([eE][+-]?[0-9]+)?'
;              float item types are the subset of numbers that are the floating
               point numbers.
;
               any       char
               '.*'
;              A catch all for items that may take any form...
;
               yyyy-mm-dd  char
;\
[0-9]?[0-9]?[0-9][0-9]-[0-9]?[0-9]-[0-9]?[0-9]\
((T[0-2][0-9](:[0-5][0-9](:[0-5][0-9](.[0-9]+)?)?)?)?\
([+-][0-5][0-9]:[0-5][0-9]))?
;
;
               Standard format for CIF date and time strings (see
               http://www.iucr.org/iucr-top/cif/spec/datetime.html),
               consisting of a yyyy-mm-dd date optionally followed by
               the character 'T' followed by a 24-hour clock time,
               optionally followed by a signed time-zone offset.

               The IUCr standard has been extended to allow for an optional
               decimal fraction on the seconds of time.

               Time is local time if no time-zone offset is given.

               Note that this type extends the mmCIF yyyy-mm-dd type
               but does not conform to the mmCIF yyyy-mm-dd:hh:mm
               type that uses a ':' in place if the 'T' specified
               by the IUCr standard.  For reading, both forms should
               be accepted,  but for writing, only the IUCr form should
               be used.

               For maximal compatibility, the special time zone
               indicator 'Z' (for 'zulu') should be accepted on
               reading in place of '+00:00' for GMT.
;


#####################
## <a name="ITEM_UNITS_LIST">ITEM_UNITS_LIST</a> ##
#####################

     loop_
    _item_units_list.code
    _item_units_list.detail
#
     'metres'                 'metres'
     'centimetres'            'centimetres (metres * 10^<sup>( -2)</sup>^)'
     'millimetres'            'millimetres (metres * 10^<sup>( -3)</sup>^)'
     'nanometres'             'nanometres  (metres * 10^<sup>( -9)</sup>^)'
     'angstroms'              '\%Angstroms   (metres * 10^<sup>(-10)</sup>^)'
     'picometres'             'picometres  (metres * 10^<sup>(-12)</sup>^)'
     'femtometres'            'femtometres (metres * 10^<sup>(-15)</sup>^)'
#
     'reciprocal_metres'      'reciprocal metres (metres^<sup>(-1)</sup>^)'
     'reciprocal_centimetres'
        'reciprocal centimetres ((metres * 10^<sup>( -2)</sup>^)^<sup>(-1)</sup>^)'
     'reciprocal_millimetres'
        'reciprocal millimetres ((metres * 10^<sup>( -3)</sup>^)^<sup>(-1)</sup>^)'
     'reciprocal_nanometres'
        'reciprocal nanometres  ((metres * 10^<sup>( -9)</sup>^)^<sup>(-1)</sup>^)'
     'reciprocal_angstroms'
        'reciprocal \%Angstroms   ((metres * 10^<sup>(-10)</sup>^)^<sup>(-1)</sup>^)'
     'reciprocal_picometres'
        'reciprocal picometres  ((metres * 10^<sup>(-12)</sup>^)^<sup>(-1)</sup>^)'
#
     'nanometres_squared'     'nanometres squared (metres * 10^<sup>( -9)</sup>^)^<sup>2</sup>^'
     'angstroms_squared'      '\%Angstroms squared  (metres * 10^<sup>(-10)</sup>^)^<sup>2</sup>^'
     '8pi2_angstroms_squared'
       '8\p^<sup>2</sup>^ * \%Angstroms squared (metres * 10^<sup>(-10)</sup>^)^<sup>2</sup>^'
     'picometres_squared'     'picometres squared (metres * 10^<sup>(-12)</sup>^)^<sup>2</sup>^'
#
     'nanometres_cubed'       'nanometres cubed (metres * 10^<sup>( -9)</sup>^)^<sup>3</sup>^'
     'angstroms_cubed'        '\%Angstroms cubed  (metres * 10^<sup>(-10)</sup>^)^<sup>3</sup>^'
     'picometres_cubed'       'picometres cubed (metres * 10^<sup>(-12)</sup>^)^<sup>3</sup>^'
#
     'kilopascals'            'kilopascals'
     'gigapascals'            'gigapascals'
#
     'hours'                  'hours'
     'minutes'                'minutes'
     'seconds'                'seconds'
     'microseconds'           'microseconds'
#
     'degrees'                'degrees (of arc)'
     'degrees_squared'        'degrees (of arc) squared'
#
     'degrees_per_minute'     'degrees (of arc) per minute'
#
     'celsius'                'degrees (of temperature) Celsius'
     'kelvins'                'degrees (of temperature) Kelvin'
#
     'counts'                 'counts'
     'counts_per_photon'      'counts per photon'
#
     'electrons'              'electrons'
#
     'electrons_squared'      'electrons squared'
#
     'electrons_per_nanometres_cubed'
; electrons per nanometres cubed (electrons/(metres * 10^<sup>( -9)</sup>^)^<sup>(-3)</sup>^)
;
     'electrons_per_angstroms_cubed'
; electrons per \%Angstroms cubed (electrons/(metres * 10^<sup>(-10)</sup>^)^<sup>(-3)</sup>^)
;
     'electrons_per_picometres_cubed'
; electrons per picometres cubed (electrons/(metres * 10^<sup>(-12)</sup>^)^<sup>(-3)</sup>^)
;
     'kilowatts'              'kilowatts'
     'milliamperes'           'milliamperes'
     'kilovolts'              'kilovolts'
#
     'pixels_per_element'     '(image) pixels per (array) element'
#
     'arbitrary'
; arbitrary system of units.
;
#

     loop_
    _item_units_conversion.from_code
    _item_units_conversion.to_code
    _item_units_conversion.operator
    _item_units_conversion.factor
###
     'metres'                   'centimetres'              '*'   1.0E+02
     'metres'                   'millimetres'              '*'   1.0E+03
     'metres'                   'nanometres'               '*'   1.0E+09
     'metres'                   'angstroms'                '*'   1.0E+10
     'metres'                   'picometres'               '*'   1.0E+12
     'metres'                   'femtometres'              '*'   1.0E+15
#
     'centimetres'              'metres'                   '*'   1.0E-02
     'centimetres'              'millimetres'              '*'   1.0E+01
     'centimetres'              'nanometres'               '*'   1.0E+07
     'centimetres'              'angstroms'                '*'   1.0E+08
     'centimetres'              'picometres'               '*'   1.0E+10
     'centimetres'              'femtometres'              '*'   1.0E+13
#
     'millimetres'              'metres'                   '*'   1.0E-03
     'millimetres'              'centimetres'              '*'   1.0E-01
     'millimetres'              'nanometres'               '*'   1.0E+06
     'millimetres'              'angstroms'                '*'   1.0E+07
     'millimetres'              'picometres'               '*'   1.0E+09
     'millimetres'              'femtometres'              '*'   1.0E+12
#
     'nanometres'               'metres'                   '*'   1.0E-09
     'nanometres'               'centimetres'              '*'   1.0E-07
     'nanometres'               'millimetres'              '*'   1.0E-06
     'nanometres'               'angstroms'                '*'   1.0E+01
     'nanometres'               'picometres'               '*'   1.0E+03
     'nanometres'               'femtometres'              '*'   1.0E+06
#
     'angstroms'                'metres'                   '*'   1.0E-10
     'angstroms'                'centimetres'              '*'   1.0E-08
     'angstroms'                'millimetres'              '*'   1.0E-07
     'angstroms'                'nanometres'               '*'   1.0E-01
     'angstroms'                'picometres'               '*'   1.0E+02
     'angstroms'                'femtometres'              '*'   1.0E+05
#
     'picometres'               'metres'                   '*'   1.0E-12
     'picometres'               'centimetres'              '*'   1.0E-10
     'picometres'               'millimetres'              '*'   1.0E-09
     'picometres'               'nanometres'               '*'   1.0E-03
     'picometres'               'angstroms'                '*'   1.0E-02
     'picometres'               'femtometres'              '*'   1.0E+03
#
     'femtometres'              'metres'                   '*'   1.0E-15
     'femtometres'              'centimetres'              '*'   1.0E-13
     'femtometres'              'millimetres'              '*'   1.0E-12
     'femtometres'              'nanometres'               '*'   1.0E-06
     'femtometres'              'angstroms'                '*'   1.0E-05
     'femtometres'              'picometres'               '*'   1.0E-03
###
     'reciprocal_centimetres'   'reciprocal_metres'        '*'   1.0E+02
     'reciprocal_centimetres'   'reciprocal_millimetres'   '*'   1.0E-01
     'reciprocal_centimetres'   'reciprocal_nanometres'    '*'   1.0E-07
     'reciprocal_centimetres'   'reciprocal_angstroms'     '*'   1.0E-08
     'reciprocal_centimetres'   'reciprocal_picometres'    '*'   1.0E-10
#
     'reciprocal_millimetres'   'reciprocal_metres'        '*'   1.0E+03
     'reciprocal_millimetres'   'reciprocal_centimetres'   '*'   1.0E+01
     'reciprocal_millimetres'   'reciprocal_nanometres'    '*'   1.0E-06
     'reciprocal_millimetres'   'reciprocal_angstroms'     '*'   1.0E-07
     'reciprocal_millimetres'   'reciprocal_picometres'    '*'   1.0E-09
#
     'reciprocal_nanometres'    'reciprocal_metres'        '*'   1.0E+09
     'reciprocal_nanometres'    'reciprocal_centimetres'   '*'   1.0E+07
     'reciprocal_nanometres'    'reciprocal_millimetres'   '*'   1.0E+06
     'reciprocal_nanometres'    'reciprocal_angstroms'     '*'   1.0E-01
     'reciprocal_nanometres'    'reciprocal_picometres'    '*'   1.0E-03
#
     'reciprocal_angstroms'     'reciprocal_metres'        '*'   1.0E+10
     'reciprocal_angstroms'     'reciprocal_centimetres'   '*'   1.0E+08
     'reciprocal_angstroms'     'reciprocal_millimetres'   '*'   1.0E+07
     'reciprocal_angstroms'     'reciprocal_nanometres'    '*'   1.0E+01
     'reciprocal_angstroms'     'reciprocal_picometres'    '*'   1.0E-02
#
     'reciprocal_picometres'    'reciprocal_metres'        '*'   1.0E+12
     'reciprocal_picometres'    'reciprocal_centimetres'   '*'   1.0E+10
     'reciprocal_picometres'    'reciprocal_millimetres'   '*'   1.0E+09
     'reciprocal_picometres'    'reciprocal_nanometres'    '*'   1.0E+03
     'reciprocal_picometres'    'reciprocal_angstroms'     '*'   1.0E+01
###
     'nanometres_squared'       'angstroms_squared'        '*'   1.0E+02
     'nanometres_squared'       'picometres_squared'       '*'   1.0E+06
#
     'angstroms_squared'        'nanometres_squared'       '*'   1.0E-02
     'angstroms_squared'        'picometres_squared'       '*'   1.0E+04
     'angstroms_squared'        '8pi2_angstroms_squared'   '*'   78.9568

#
     'picometres_squared'       'nanometres_squared'       '*'   1.0E-06
     'picometres_squared'       'angstroms_squared'        '*'   1.0E-04
###
     'nanometres_cubed'         'angstroms_cubed'          '*'   1.0E+03
     'nanometres_cubed'         'picometres_cubed'         '*'   1.0E+09
#
     'angstroms_cubed'          'nanometres_cubed'         '*'   1.0E-03
     'angstroms_cubed'          'picometres_cubed'         '*'   1.0E+06
#
     'picometres_cubed'         'nanometres_cubed'         '*'   1.0E-09
     'picometres_cubed'         'angstroms_cubed'          '*'   1.0E-06
###
     'kilopascals'              'gigapascals'              '*'   1.0E-06
     'gigapascals'              'kilopascals'              '*'   1.0E+06
###
     'hours'                    'minutes'                  '*'   6.0E+01
     'hours'                    'seconds'                  '*'   3.6E+03
     'hours'                    'microseconds'             '*'   3.6E+09
#
     'minutes'                  'hours'                    '/'   6.0E+01
     'minutes'                  'seconds'                  '*'   6.0E+01
     'minutes'                  'microseconds'             '*'   6.0E+07
#
     'seconds'                  'hours'                    '/'   3.6E+03
     'seconds'                  'minutes'                  '/'   6.0E+01
     'seconds'                  'microseconds'             '*'   1.0E+06
#
     'microseconds'             'hours'                    '/'   3.6E+09
     'microseconds'             'minutes'                  '/'   6.0E+07
     'microseconds'             'seconds'                  '/'   1.0E+06
###
     'celsius'                  'kelvins'                  '-'     273.0
     'kelvins'                  'celsius'                  '+'     273.0
###
     'electrons_per_nanometres_cubed'
     'electrons_per_angstroms_cubed'                       '*'   1.0E+03
     'electrons_per_nanometres_cubed'
     'electrons_per_picometres_cubed'                      '*'   1.0E+09
#
     'electrons_per_angstroms_cubed'
     'electrons_per_nanometres_cubed'                      '*'   1.0E-03
     'electrons_per_angstroms_cubed'
     'electrons_per_picometres_cubed'                      '*'   1.0E+06
#
     'electrons_per_picometres_cubed'
     'electrons_per_nanometres_cubed'                      '*'   1.0E-09
     'electrons_per_picometres_cubed'
     'electrons_per_angstroms_cubed'                       '*'   1.0E-06
###

########################
## <a name="DICTIONARY_HISTORY">DICTIONARY_HISTORY</a> ##
########################

     loop_
    _dictionary_history.version
    _dictionary_history.update
    _dictionary_history.revision

   1.4     2005-07-04

;  This is a change to reintegrate all changes made in the course of
   publication of ITVG, by the RCSB from April 2005 through
   August 2008 and changes for the 2006 imgCIF workshop in
   Hawaii.

   2006-07-04 Consolidated changes for the 2006 imgCIF workshop (edited by HJB)
     + Correct type of '<a href="#_array_structure_list.direction">_array_structure_list.direction</a>' from 'int' to 'code'.
     + Added new data items suggested by CN
       '<a href="#_diffrn_data_frame.details">_diffrn_data_frame.details</a>'
       '<a href="#_array_intensities.pixel_fast_bin_size" >_array_intensities.pixel_fast_bin_size</a>',
       '<a href="#_array_intensities.pixel_slow_bin_size" >_array_intensities.pixel_slow_bin_size</a> and
       '<a href="#_array_intensities.pixel_binning_method" >_array_intensities.pixel_binning_method</a>
     + Added deprecated item for completeness
       '<a href="#_diffrn_frame_data.details">_diffrn_frame_data.details</a>'
     + Added entry for missing item in contents list
       '<a href="#_array_structure_list_axis.displacement" >_array_structure_list_axis.displacement</a>'
     + Added new MIME type X-BASE32K based on work by VL, KM, GD, HJB
     + Correct description of MIME boundary delimiter to start in
       column 1.
     + General cleanup of text fields to conform to changes for ITVG
       by removing empty lines at start and finish of text field.
     + Amend example for ARRAY_INTENSITIES to include binning.
     + Add local copy of type specification (as 'code') for all children
       of '<a href="#_diffrn.id">_diffrn.id</a>'.
     + For consistency, change all references to 'pi' to '\p' and all
       references to 'Angstroms' to '\%Angstroms'.
     + Clean up all powers to use IUCr convention of '^power^', as in
       '10^3^' for '10**3'.
     + Update 'yyyy-mm-dd' type regex to allow truncation from the right
       and improve comments to explain handling of related mmCIF
       'yyyy-mm-dd:hh:mm' type, and use of 'Z' for GMT time zone.

   2005-03-08 and
   2004-08-08 fixed cases where _item_units.code  used
              instead of _item_type.code (JDW)
   2004-04-15 fixed item ordering in
               _diffrn_measurement_axis.measurement_id
               added sub_category 'vector' (JDW)
;

   1.3.2   2005-06-25

;  2005-06-25 ITEM_TYPE_LIST: code, ucode, line, uline regexps updated
              to those of current mmCIF; float modified by allowing integers
              terminated by a point as valid. The 'time' part of
              yyyy-mm-dd types made optional in the regexp. (BM)

   2005-06-17 Minor corrections as for proofs for IT G Chapter 4.6
   (NJA)

   2005-02-21  Minor corrections to spelling and punctuation
   (NJA)

   2005-01-08 Changes as per Nicola Ashcroft.
   + Updated example 1 for DIFFRN_MEASUREMENT to agree with mmCIF.
   + Spelled out "micrometres" for "um" and "millimetres" for "mm".
   + Removed phrase "which may be stored" from ARRAY_STRUCTURE
     description.
   + Removed unused 'byte-offsets' compressions and updated
     cites to ITVG for '_array_structure.compression_type'.
   (HJB)
;

   1.3.1   2003-08-13
;
   Changes as per Frances C. Bernstein.
   + Identify initials.
   + Adopt British spelling for centre in text.
   + Set \p and \%Angstrom and powers.
   + Clean up commas and unclear wordings.
   + Clean up tenses in history.
   Changes as per Gotzon Madariaga.
   + Fix the ARRAY_DATA example to align '_array_data.binary_id'
   and X-Binary-ID.
   + Add a range to '<a href="#_array_intensities.gain_esd">_array_intensities.gain_esd</a>'.
   + In the example of DIFFRN_DETECTOR_ELEMENT,
   '<a href="#_diffrn_detector_element.id">_diffrn_detector_element.id</a>' and
   '<a href="#_diffrn_detector_element.detector_id">_diffrn_detector_element.detector_id</a>' interchanged.
   + Fix typos for direction, detector and axes.
   + Clarify description of polarisation.
   + Clarify axes in '<a href="#_diffrn_detector_element.center[1]">_diffrn_detector_element.center[1]</a>'
    '<a href="#_diffrn_detector_element.center[2]">_diffrn_detector_element.center[2]</a>'.
   + Add local item types for items that are pointers.
   (HJB)
;


   1.3.0   2003-07-24
;
   Changes as per Brian McMahon.
   + Consistently quote tags embedded in text.
   + Clean up introductory comments.
   + Adjust line lengths to fit in 80 character window.
   + Fix several descriptions in AXIS category which
     referred to '_axis.type' instead of the current item.
   + Fix erroneous use of deprecated item
     '_diffrn_detector_axis.id' in examples for
     DIFFRN_SCAN_AXIS.
   + Add deprecated items '_diffrn_detector_axis.id'
     and '_diffrn_measurement_axis.id'.
   (HJB)
;


   1.2.4   2003-07-14
;
   Changes as per I. David Brown.
   + Enhance descriptions in DIFFRN_SCAN_AXIS to make them less
     dependent on the descriptions in DIFFRN_SCAN_FRAME_AXIS.
   + Provide a copy of the deprecated DIFFRN_FRAME_DATA
     category for completeness.
   (HJB)
;


   1.2.3   2003-07-03
;
   Cleanup to conform to ITVG.
   + Correct sign error in ..._cubed units.
   + Correct '_diffrn_radiation.polarisn_norm' range.
   (HJB)
;


   1.2.2   2003-03-10
;
   Correction of typos in various DIFFRN_SCAN_AXIS descriptions.
   (HJB)
;


   1.2.1   2003-02-22
;
   Correction of ATOM_ for ARRAY_ typos in various descriptions.
   (HJB)
;


   1.2     2003-02-07
;
   Corrections to encodings (remove extraneous hyphens) remove
   extraneous underscore in '<a href="#_array_structure.encoding_type">_array_structure.encoding_type</a>'
   enumeration.  Correct typos in items units list.  (HJB)
;


   1.1.3   2001-04-19
;
   Another typo corrections by Wilfred Li, and cleanup by HJB.
;


   1.1.2   2001-03-06
;
   Several typo corrections by Wilfred Li.
;


   1.1.1   2001-02-16
;
   Several typo corrections by JW.
;


   1.1     2001-02-06
;
   Draft resulting from discussions on header for use at NSLS.  (HJB)

   + Change DIFFRN_FRAME_DATA to <a href="#DIFFRN_DATA_FRAME">DIFFRN_DATA_FRAME</a>.

   + Change '_diffrn_detector_axis.id' to '<a href="#_diffrn_detector_axis.detector_id">_diffrn_detector_axis.detector_id</a>'.

   + Add '<a href="#_diffrn_measurement_axis.measurement_device">_diffrn_measurement_axis.measurement_device</a>' and change
     '_diffrn_measurement_axis.id' to
     '<a href="#_diffrn_measurement_axis.measurement_id">_diffrn_measurement_axis.measurement_id</a>'.

   + Add '<a href="#_diffrn_radiation.div_x_source">_diffrn_radiation.div_x_source</a>', '<a href="#_diffrn_radiation.div_y_source">_diffrn_radiation.div_y_source</a>',
    '<a href="#_diffrn_radiation.div_x_y_source">_diffrn_radiation.div_x_y_source</a>',
    '<a href="#_diffrn_radiation.polarizn_source_norm">_diffrn_radiation.polarizn_source_norm</a>',
   '<a href="#_diffrn_radiation.polarizn_source_ratio">_diffrn_radiation.polarizn_source_ratio</a>', '<a href="#_diffrn_scan.date_end">_diffrn_scan.date_end</a>',
   '<a href="#_diffrn_scan.date_start">_diffrn_scan.date_start</a>', '<a href="#_diffrn_scan_axis.angle_rstrt_incr">_diffrn_scan_axis.angle_rstrt_incr</a>',
   '<a href="#_diffrn_scan_axis.displacement_rstrt_incr">_diffrn_scan_axis.displacement_rstrt_incr</a>',
   '<a href="#_diffrn_scan_frame_axis.angle_increment">_diffrn_scan_frame_axis.angle_increment</a>',
   '<a href="#_diffrn_scan_frame_axis.angle_rstrt_incr">_diffrn_scan_frame_axis.angle_rstrt_incr</a>',
   '<a href="#_diffrn_scan_frame_axis.displacement">_diffrn_scan_frame_axis.displacement</a>',
   '<a href="#_diffrn_scan_frame_axis.displacement_increment">_diffrn_scan_frame_axis.displacement_increment</a>',and
   '<a href="#_diffrn_scan_frame_axis.displacement_rstrt_incr">_diffrn_scan_frame_axis.displacement_rstrt_incr</a>'.

   + Add '<a href="#_diffrn_measurement.device">_diffrn_measurement.device</a>' to category key.

   + Update yyyy-mm-dd to allow optional time with fractional seconds
     for time stamps.

   + Fix typos caught by RS.

   + Add <a href="#ARRAY_STRUCTURE_LIST_AXIS">ARRAY_STRUCTURE_LIST_AXIS</a> category, and use concept of axis sets to
     allow for coupled axes, as in spiral scans.

   + Add examples for fairly complete headers thanks to R. Sweet and P.
     Ellis.
;


   1.0     2000-12-21
;
   Release version - few typos and tidying up.  (BM &amp; HJB)

   + Move ITEM_TYPE_LIST, ITEM_UNITS_LIST and DICTIONARY_HISTORY to end
   of dictionary.

   + Alphabetize dictionary.
;


   0.7.1   2000-09-29
;
   Cleanup fixes.  (JW)

   + Correct spelling of diffrn_measurement_axis in '<a href="#_axis.id">_axis.id</a>'

   + Correct ordering of uses of '_item.mandatory_code' and
   '_item_default.value'.
;


   0.7.0   2000-09-09
;
   Respond to comments by I. David Brown.  (HJB)

   + Add further comments on '\n' and '\t'.

   + Update ITEM_UNITS_LIST by taking section from mmCIF dictionary
     and adding metres.  Change 'meter' to 'metre' throughout.

   + Add missing enumerations to '<a href="#_array_structure.compression_type">_array_structure.compression_type</a>'
     and make 'none' the default.

   + Remove parent-child relationship between
     '<a href="#_array_structure_list.index">_array_structure_list.index</a>' and '<a href="#_array_structure_list.precedence">_array_structure_list.precedence</a>'.

   + Improve alphabetization.

   + Fix '<a href="#_array_intensities.gain_esd">_array_intensities_gain.esd</a>' related function.

   + Improve comments in <a href="#AXIS">AXIS</a>.

   + Fix DIFFRN_FRAME_DATA example.

   + Remove erroneous <a href="#DIFFRN_MEASUREMENT">DIFFRN_MEASUREMENT</a> example.

   + Add '<a href="#_diffrn_measurement_axis.id">_diffrn_measurement_axis.id</a>' to the category key.
;


   0.6.0   1999-01-14
;
   Remove redundant information for ENC_NONE data.  (HJB)

   + After the D5 remove binary section identifier, size and
     compression type.

   + Add Control-L to header.
;


   0.5.1   1999-01-03
;
   Cleanup of typos and syntax errors.  (HJB)

   + Cleanup example details for <a href="#DIFFRN_SCAN">DIFFRN_SCAN</a> category.

   + Add missing quote marks for '<a href="#_diffrn_scan.id" >_diffrn_scan.id</a>' definition.
;


   0.5   1999-01-01
;
   Modifications for axis definitions and reduction of binary header.  (HJB)

   + Restore '<a href="#_diffrn_detector.diffrn_id" >_diffrn_detector.diffrn_id</a>' to <a href="#DIFFRN_DETECTOR">DIFFRN_DETECTOR</a> KEY.

   + Add <a href="#AXIS">AXIS</a> category.

   + Bring in complete <a href="#DIFFRN_DETECTOR">DIFFRN_DETECTOR</a> and <a href="#DIFFRN_MEASUREMENT">DIFFRN_MEASUREMENT</a> categories
     from cif_mm.dic for clarity.

   + Change '<a href="#_array_structure.encoding_type">_array_structure.encoding_type</a>' from type code to uline and
     added X-Binary-Element-Type to MIME header.

   + Add detector beam centre '<a href="#_diffrn_detector_element.center[1]">_diffrn_detector_element.center[1]</a>' and
     '<a href="#_diffrn_detector_element.center[2]">_diffrn_detector_element.center[2]</a>'.

   + Correct item name of '<a href="#_diffrn_refln.frame_id">_diffrn_refln.frame_id</a>'.

   + Replace reference to '_array_intensities.undefined' by
     '_array_intensities.undefined_value'.

   + Replace references to '_array_intensity.scaling' with
     '_array_intensities.scaling'.

   + Add <a href="#DIFFRN_SCAN">DIFFRN_SCAN</a>... categories.
;


   0.4   1998-08-11
;
   Modifications to the 0.3 imgCIF draft.  (HJB)

   + Reflow comment lines over 80 characters and corrected typos.

   + Update examples and descriptions of MIME encoded data.

   + Change name to cbfext98.dic.
;


   0.3   1998-07-04
;
   Modifications for imgCIF.  (HJB)

   + Add binary type, which is a text field containing a variant on
     MIME encoded data.

   + Change type of '<a href="#_array_data.data" >_array_data.data</a>' to binary and specify internal
     structure of raw binary data.

   + Add '<a href="#_array_data.binary_id" >_array_data.binary_id</a>', and make
     '<a href="#_diffrn_frame_data.binary_id" >_diffrn_frame_data.binary_id</a>' and '<a href="#_array_intensities.binary_id" >_array_intensities.binary_id</a>'
     into pointers to this item.
;


   0.2   1997-12-02
;
   Modifications to the CBF draft.  (JW)

   + Add category hierarchy for describing frame data developed from
     discussions at the BNL imgCIF Workshop Oct 1997.   The following
     changes are made in implementing the workshop draft.  Category
     DIFFRN_ARRAY_DATA is renamed to DIFFRN_FRAME_DATA.  Category
     DIFFRN_FRAME_TYPE is renamed to <a href="#DIFFRN_DETECTOR_ELEMENT">DIFFRN_DETECTOR_ELEMENT</a>.   The
     parent item for '<a href="#_diffrn_frame_data.array_id" >_diffrn_frame_data.array_id</a>' is changed from
     '_array_structure_list.array_id' to '_array_structure.id'. Item
     '_diffrn_detector.array_id' is deleted.
   + Add data item '<a href="#_diffrn_frame_data.binary_id" >_diffrn_frame_data.binary_id</a>' to identify data
     groups within a binary section.  The formal identification of the
     binary section is still fuzzy.
;


   0.1   1997-01-24
;
   First draft of this dictionary in DDL 2.1 compliant format by John
   Westbrook (JW).  This version is adapted from the Crystallographic
   Binary File (CBF) Format Draft Proposal provided by Andy Hammersley
   (AH).

   Modifications to the CBF draft.  (JW)

   + In this version the array description has been cast in the categories
     <a href="#ARRAY_STRUCTURE">ARRAY_STRUCTURE</a> and <a href="#ARRAY_STRUCTURE_LIST">ARRAY_STRUCTURE_LIST</a>.  These categories
     have been generalized to describe array data  of arbitrary dimension.

   + Array data in this description are contained in the category
     <a href="#ARRAY_DATA">ARRAY_DATA</a>.  This departs from the CBF notion of data existing
     in some special comment. In this description, data are handled as an
     ordinary data item encapsulated in a character data type.   Although
     data this manner deviates from CIF conventions, it does not violate
     any DDL 2.1 rules.  DDL 2.1 regular expressions can be used to define
     the binary representation which will permit some level of data
     validation.  In this version, the placeholder type code "any" has
     been used. This translates to a regular expression which will match
     any pattern.

     It should be noted that DDL 2.1 already supports array data objects
     although these have not been used in the current mmCIF dictionary.
     It may be possible to use the DDL 2.1 ITEM_STRUCTURE and
     ITEM_STRUCTURE_LIST categories to provide the information that is
     carried in by the <a href="#ARRAY_STRUCTURE">ARRAY_STRUCTURE</a> and <a href="#ARRAY_STRUCTURE_LIST">ARRAY_STRUCTURE_LIST</a>.  By
     moving the array structure to the DDL level it would be possible to
     define an array type as well as a regular expression defining the
     data format.

   + Multiple array sections can be properly handled within a single
     datablock.
;


#-eof-eof-eof-eof-eof-eof-eof-eof-eof-eof-eof-eof-eof-eof-eof-eof-eof-eof-eof
</PRE>
</BODY>
</HTML>