Crystallographic Information Framework

CIF dictionary browser

CIF

Expanded view
View CIF syntax

ModStruct CIF dictionary

Version 3.2.1 (2019-09-25)

The DICTIONARY group encompassing the definitions of data items for the study of modulated structures with the Crystallographic Information Framework (CIF).

Category tree view of data-item definitions

ATOM_SITES_AXES
CIF
Data items in the ATOM_SITES_AXES category record
details about the transformation matrices that define the
displacements and rotations of atoms and rigid groups. Details
for individual atom sites are described by data items in
the ATOM_SITE_DISPLACE_* and ATOM_SITE_ROT_* categories.
save_ATOM_SITES_AXES

    _definition.id               ATOM_SITES_AXES
    _definition.scope            Category
    _definition.class            Loop
    _definition.update           2017-03-11
    _description.text                   
;

      Data items in the ATOM_SITES_AXES category record
      details about the transformation matrices that define the
      displacements and rotations of atoms and rigid groups. Details 
      for individual atom sites are described by data items in
      the ATOM_SITE_DISPLACE_* and ATOM_SITE_ROT_* categories.
;
    _name.category_id            MS_GROUP
    _name.object_id              ATOM_SITES_AXES
    loop_
      _category_key.name         '_atom_site_sites_axes.matrix_seq_id'
save_
_atom_sites_axes.matrix
CIF
A 3x3 matrix, A, that relates the axes used to describe the atomic
or molecular displacements to the crystallographic axes of the
reference structure as follows:
(a1,a2,a3) = (a~r~,b~r~,c~r~) A
save_atom_sites_axes.matrix

    _definition.id               '_atom_sites_axes.matrix'
    _definition.update           2019-04-01
    _description.text                   
;

      A 3x3 matrix, A, that relates the axes used to describe the atomic 
      or molecular displacements to the crystallographic axes of the 
      reference structure as follows:
                       
                    (a1,a2,a3) = (a~r~,b~r~,c~r~) A

;
    _name.category_id            atom_sites_axes
    _name.object_id              matrix
    _type.purpose                Number
    _type.source                 Assigned
    _type.container              Matrix
    _type.contents               Real
    _type.dimension              '[3,3]'
    _enumeration.default         [[1.0 0.0 0.0]
                                  [0.0 1.0 0.0]
                                  [0.0 0.0 1.0]]

save_
_atom_sites_axes.matrix_seq_id
CIF
A numeric code to identify each transformation matrix given
in _atom_sites_axes.matrix.
save_atom_sites_axes.matrix_seq_id

    _definition.id               '_atom_sites_axes.matrix_seq_id'
    _definition.update           2019-09-25
    _description.text                   
;

      A numeric code to identify each transformation matrix given
      in _atom_sites_axes.matrix. 
;
    _name.category_id            atom_sites_axes
    _name.object_id              matrix_seq_id
    _type.purpose                Key
    _type.source                 Related
    _type.container              Single
    _type.contents               Integer
    _enumeration.range           0:

save_
_atom_sites_axes.transf_description
CIF
The definition of the axes described by the transformation
given by _atom_sites_axes.matrix.
Example:
a1 and a2 are respectively the long molecular axis and the axis normal
      to the mean molecular plane.
save_atom_sites_axes.transf_description

    _definition.id               '_atom_sites_axes.transf_description'
    _definition.update           2014-06-27
    _description.text                   
;

      The definition of the axes described by the transformation 
      given by _atom_sites_axes.matrix.
;
    _name.category_id            atom_sites_axes
    _name.object_id              transf_description
    _type.purpose                Describe
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Text
    loop_
      _description_example.case
            
; 
      a1 and a2 are respectively the long molecular axis and the axis normal 
      to the mean molecular plane.
; 

save_
ATOM_SITES_DISPLACE_FOURIER
CIF
Data items in the ATOM_SITES_DISPLACE_FOURIER category record
details common to the displacive modulation of atom sites in a
modulated structure.
Details for individual atom sites are described by data items in
the ATOM_SITE_DISPLACE_FOURIER category.
save_ATOM_SITES_DISPLACE_FOURIER

    _definition.id               ATOM_SITES_DISPLACE_FOURIER
    _definition.scope            Category
    _definition.class            Set
    _definition.update           2017-03-11
    _description.text                   
;

      Data items in the ATOM_SITES_DISPLACE_FOURIER category record
      details common to the displacive modulation of atom sites in a
      modulated structure.
      Details for individual atom sites are described by data items in
      the ATOM_SITE_DISPLACE_FOURIER category.
;
    _name.category_id            MS_GROUP
    _name.object_id              ATOM_SITES_DISPLACE_FOURIER
save_
_atom_sites_displace_Fourier.axes_description
CIF
DEPRECATED. This data name should not be used. It has been replaced
by the ATOM_SITES_AXES data names.
The definition of the axes used for describing the displacive
modulation, parameterized by Fourier series, when they are other
than the crystallographic axes.
Example:
a1 and a2 are respectively the long molecular axis
                  and the axis normal to the mean molecular plane.
save_atom_sites_displace_Fourier.axes_description

    _definition.id               '_atom_sites_displace_Fourier.axes_description'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_sites_displace_Fourier_axes_description' 
    _description.text                   
;

      DEPRECATED. This data name should not be used. It has been replaced
      by the ATOM_SITES_AXES data names.

      The definition of the axes used for describing the displacive
      modulation, parameterized by Fourier series, when they are other
      than the crystallographic axes.
;
    _name.category_id            atom_sites_displace_Fourier
    _name.object_id              axes_description
    _type.purpose                Describe
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Text
    loop_
    _description_example.case
            
; a1 and a2 are respectively the long molecular axis
                  and the axis normal to the mean molecular plane.
; 

save_
ATOM_SITES_MODULATION
CIF
Data items in the ATOM_SITES_MODULATION category record details
common to the modulation of atom sites in a modulated structure.
save_ATOM_SITES_MODULATION

    _definition.id               ATOM_SITES_MODULATION
    _definition.scope            Category
    _definition.class            Set
    _definition.update           2017-03-11
    _description.text                   
;

      Data items in the ATOM_SITES_MODULATION category record details
      common to the modulation of atom sites in a modulated structure.
;
    _name.category_id            MS_GROUP
    _name.object_id              ATOM_SITES_MODULATION

save_
_atom_sites_modulation.global_phase_list
CIF
The initial phases, in cycles, of the modulation waves. For
incommensurate structures they are irrelevant. However, they are
essential for the description of commensurate structures within
the superspace formalism, since they determine the space group
of the commensurate superstructure [see Perez-Mato,
Madariaga, Zuiga & Garcia Arribas (1987), van\
Smaalen (1995) or van Smaalen (2012)]. Note that for composites described
using a single data block, the initial phases for each subsystem
are derived using the W matrices (see _cell_subsystem.matrix_W_*)
from a unique set of global phases whose values are assigned to
_atom_sites_modulation_global_phase_t_. Detailed information can
be found in van Smaalen (1995).
References: Perez-Mato, J. M., Madariaga, G., Zuiga, F. J.
& Garcia Arribas, A. (1987). Acta Cryst. A43, 216-226.
On the structure and symmetry of incommensurate phases.
A practical formulation
Smaalen, S. van(1995). Crystallogr. Rev. 4, 79-202.
Incommensurate crystal structures
Smaalen, S. van(2012).
Incommensurate Crystallography. Oxford University Press.
save_atom_sites_modulation.global_phase_list

    _definition.id               '_atom_sites_modulation.global_phase_list'
    _definition.update           2014-06-27
    _description.text                   
;

      The initial phases, in cycles, of the modulation waves. For
      incommensurate structures they are irrelevant. However, they are
      essential for the description of commensurate structures within
      the superspace formalism, since they determine the space group
      of the commensurate superstructure [see Perez-Mato,
      Madariaga, Zu\~niga & Garcia Arribas (1987), van\
      Smaalen (1995) or van Smaalen (2012)]. Note that for composites described
      using a single data block, the initial phases for each subsystem
      are derived using the W matrices (see _cell_subsystem.matrix_W_*)
      from a unique set of global phases whose values are assigned to
      _atom_sites_modulation_global_phase_t_. Detailed information can
      be found in van Smaalen (1995).
      References: Perez-Mato, J. M., Madariaga, G., Zu\~niga, F. J. 
                  & Garcia Arribas, A. (1987). Acta Cryst. A43, 216-226. 
                  On the structure and symmetry of incommensurate phases. 
                  A practical formulation 
                  Smaalen, S. van(1995). Crystallogr. Rev. 4, 79-202.
                  Incommensurate crystal structures
                  Smaalen, S. van(2012). 
                  Incommensurate Crystallography. Oxford University Press.
;
    _name.category_id            atom_sites_modulation
    _name.object_id              'global_phase_list'
    _type.purpose                Number
    _type.source                 Assigned
    _type.container              List
    _type.contents               Real
    _type.dimension              '[]'
    _enumeration.default         [0.0]
    loop_
    _method.purpose
    _method.expression
     Evaluation    
;
     With m  as  atom_sites_modulation

     temp_global_phase_list =
                               [m.global_phase_t_1, m.global_phase_t_2, 
                                m.global_phase_t_3, m.global_phase_t_4,  
                                m.global_phase_t_5, m.global_phase_t_6, 
                                m.global_phase_t_7, m.global_phase_t_8]
     atom_sites_modulation.global_phase_list = 
                           temp.global_phase_list[0:_cell.modulation_dimension -1 ] 

; 

save_
_atom_sites_modulation.global_phase_t_1
CIF
Initial phase component in _atom_sites_modulation.global_phase_list.
save_atom_sites_modulation.global_phase_t_1

    _definition.id               '_atom_sites_modulation.global_phase_t_1'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_sites_modulation_global_phase_t_1' 
    _description.text                   
;

     Initial phase component in _atom_sites_modulation.global_phase_list.
;
    _name.category_id            atom_sites_modulation
    _name.object_id              'global_phase_t_1'
    _type.purpose                Number
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.range           -1.0:1.0
    _units.code                             cycles

save_
_atom_sites_modulation.global_phase_t_2
CIF
Initial phase component in _atom_sites_modulation.global_phase_list.
save_atom_sites_modulation.global_phase_t_2

    _definition.id               '_atom_sites_modulation.global_phase_t_2'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_sites_modulation_global_phase_t_2' 
    _description.text                   
;

     Initial phase component in _atom_sites_modulation.global_phase_list.
;
    _name.category_id            atom_sites_modulation
    _name.object_id              'global_phase_t_2'
    _type.purpose                Number
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    _enumeration.range           -1.0:1.0
_units.code                             cycles

save_
_atom_sites_modulation.global_phase_t_3
CIF
Initial phase component in _atom_sites_modulation.global_phase_list.
save_atom_sites_modulation.global_phase_t_3

    _definition.id               '_atom_sites_modulation.global_phase_t_3'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_sites_modulation_global_phase_t_3' 
    _description.text                   
;

     Initial phase component in _atom_sites_modulation.global_phase_list.
;
    _name.category_id            atom_sites_modulation
    _name.object_id              'global_phase_t_3'
    _type.purpose                Number
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.range           -1.0:1.0
_units.code                             cycles

save_
_atom_sites_modulation.global_phase_t_4
CIF
Initial phase component in _atom_sites_modulation.global_phase_list.
save_atom_sites_modulation.global_phase_t_4

    _definition.id               '_atom_sites_modulation.global_phase_t_4'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_sites_modulation_global_phase_t_4' 
    _description.text                   
;

     Initial phase component in _atom_sites_modulation.global_phase_list.
;
    _name.category_id            atom_sites_modulation
    _name.object_id              'global_phase_t_4'
    _type.purpose                Number
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.range           -1.0:1.0
_units.code                             cycles

save_
_atom_sites_modulation.global_phase_t_5
CIF
Initial phase component in _atom_sites_modulation.global_phase_list.
save_atom_sites_modulation.global_phase_t_5

    _definition.id               '_atom_sites_modulation.global_phase_t_5'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_sites_modulation_global_phase_t_5' 
    _description.text                   
;

     Initial phase component in _atom_sites_modulation.global_phase_list.
;
    _name.category_id            atom_sites_modulation
    _name.object_id              'global_phase_t_5'
    _type.purpose                Number
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.range           -1.0:1.0
_units.code                             cycles

save_
_atom_sites_modulation.global_phase_t_6
CIF
Initial phase component in _atom_sites_modulation.global_phase_list.
save_atom_sites_modulation.global_phase_t_6

    _definition.id               '_atom_sites_modulation.global_phase_t_6'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_sites_modulation_global_phase_t_6' 
    _description.text                   
;

     Initial phase component in _atom_sites_modulation.global_phase_list.
;
    _name.category_id            atom_sites_modulation
    _name.object_id              'global_phase_t_6'
    _type.purpose                Number
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.range           -1.0:1.0
_units.code                             cycles

save_
_atom_sites_modulation.global_phase_t_7
CIF
Initial phase component in _atom_sites_modulation.global_phase_list.
save_atom_sites_modulation.global_phase_t_7

    _definition.id               '_atom_sites_modulation.global_phase_t_7'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_sites_modulation_global_phase_t_7' 
    _description.text                   
;

     Initial phase component in _atom_sites_modulation.global_phase_list.
;
    _name.category_id            atom_sites_modulation
    _name.object_id              'global_phase_t_7'
    _type.purpose                Number
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.range           -1.0:1.0
_units.code                             cycles

save_
_atom_sites_modulation.global_phase_t_8
CIF
Initial phase component in _atom_sites_modulation.global_phase_list.
save_atom_sites_modulation.global_phase_t_8

    _definition.id               '_atom_sites_modulation.global_phase_t_8'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_sites_modulation_global_phase_t_8' 
    _description.text                   
;

     Initial phase component in _atom_sites_modulation.global_phase_list.
;
    _name.category_id            atom_sites_modulation
    _name.object_id              'global_phase_t_8'
    _type.purpose                Number
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.range           -1.0:1.0
_units.code                             cycles

save_
ATOM_SITES_ORTHO
CIF
Data items in the ATOM_SITES_ORTHO category record
details about the orthogonalized functions defined to solve
correlation problems during the refinement of the modulation
parameters when the atomic domain of a given atom is restricted
by a Crenel function (see Petricek et al., 2016).
The functions are constructed selecting Fourier harmonics
until a desired degree of orthogonality and completeness is
reached (see_atom_site_occ_special_func.crenel_ortho_eps).
References: Petricek, V., Van Der Lee & Evain, M. (1995).
Acta Cryst. A51, 529-535. DOI 10.1107/S0108767395000365
On the Use of Crenel Functions for Occupationally Modulated
Structures
Petricek, V., Eigner, V., Dusek, M. & Cejchan, A. (2016). Z.
Kristallogr. 231(5), 301-312. DOI 10.1515/zkri-2015-1913
Discontinuous modulation functions and their application for
analysis of modulated structures with the computing system JANA2006
save_ATOM_SITES_ORTHO

    _definition.id               ATOM_SITES_ORTHO
    _definition.scope            Category
    _definition.class            Loop
    _definition.update           2014-06-27
    _description.text                   
;
 
      Data items in the ATOM_SITES_ORTHO category record
      details about the orthogonalized functions defined to solve 
      correlation problems during the refinement of the modulation 
      parameters when the atomic domain of a given atom is restricted 
      by a Crenel function (see Petricek et al., 2016). 
      The functions are constructed selecting Fourier harmonics 
      until a desired degree of orthogonality and completeness is 
      reached (see_atom_site_occ_special_func.crenel_ortho_eps).

      References: Petricek, V., Van Der Lee & Evain, M. (1995).
                  Acta Cryst. A51, 529-535. DOI 10.1107/S0108767395000365
                  On the Use of Crenel Functions for Occupationally Modulated  
                  Structures 

                  Petricek, V., Eigner, V., Dusek, M. & Cejchan, A. (2016). Z. 
                  Kristallogr. 231(5), 301-312. DOI 10.1515/zkri-2015-1913 
                  Discontinuous modulation functions and their application for 
                  analysis of modulated structures with the computing system JANA2006
;
    _name.category_id            MS_GROUP
    _name.object_id              ATOM_SITES_ORTHO
    loop_
      _category_key.name         '_atom_sites_ortho.func_id'
  
save_
_atom_sites_ortho.coeff_cos_list
CIF
The list of cosine components of an orthogonalized function
labeled by atom_sites_ortho.func_id corresponding to the wave
vector list given by _atom_sites_ortho.wave_vector_seq_id_list
save_atom_sites_ortho.coeff_cos_list

    _definition.id               '_atom_sites_ortho.coeff_cos_list'
    _definition.update           2019-04-01
    _description.text                   
;

      The list of cosine components of an orthogonalized function 
      labeled by atom_sites_ortho.func_id corresponding to the wave 
      vector list given by _atom_sites_ortho.wave_vector_seq_id_list
;
    _name.category_id            atom_sites_ortho
    _name.object_id              coeff_cos_list
    _type.purpose                Number
    _type.source                 Assigned
    _type.container              List
    _type.contents               Real
    _type.dimension              '[]'
    _enumeration.default         [0.0]

save_
_atom_sites_ortho.coeff_sin_list
CIF
The list of sine components of an orthogonalized function
labeled by atom_sites_ortho.func_id corresponding to the wave
vector list given by _atom_sites_ortho.wave_vector_seq_id_list
save_atom_sites_ortho.coeff_sin_list

    _definition.id               '_atom_sites_ortho.coeff_sin_list'
    _definition.update           2019-04-01
    _description.text                   
;

      The list of sine components of an orthogonalized function 
      labeled by atom_sites_ortho.func_id corresponding to the wave 
      vector list given by _atom_sites_ortho.wave_vector_seq_id_list
;
    _name.category_id            atom_sites_ortho
    _name.object_id              coeff_sin
    _type.purpose                Number
    _type.source                 Assigned
    _type.container              List
    _type.contents               Real
    _type.dimension              '[]'
    _enumeration.default         [0.0]

save_
_atom_sites_ortho.func_id
CIF
A code that identifies an orthogonalized function or any
of its components.
save_atom_sites_ortho.func_id

    _definition.id               '_atom_sites_ortho.func_id '
    _definition.update           2017-03-11
    _description.text                   
;

      A code that identifies an orthogonalized function or any
      of its components. 
;
    _name.category_id            atom_sites_ortho
    _name.object_id              func_id
    _type.purpose                Key
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_sites_ortho.wave_vector_seq_id
CIF
A code that identifies each of the harmonics chosen for the
definition of an orthogonalized function. It links the wave vectors
defined in _atom_site_Fourier_wave_vector.*
save_atom_sites_ortho.wave_vector_seq_id

    _definition.id               '_atom_sites_ortho.wave_vector_seq_id'
    _definition.update           2019-09-25
    _description.text                   
;

      A code that identifies each of the harmonics chosen for the
      definition of an orthogonalized function. It links the wave vectors 
      defined in _atom_site_Fourier_wave_vector.*
;
    _name.category_id            atom_sites_ortho
    _name.object_id              wave_vector_seq_id
    _name.linked_item_id         '_atom_site_Fourier_wave_vector.seq_id'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Integer
    _enumeration.range           0:
    _enumeration.default         0

save_
_atom_sites_ortho.wave_vector_seq_id_list
CIF
A list of codes that identifies the harmonics chosen for the
definition of an orthogonalized function. It links the wave vectors
defined in _atom_site_Fourier_wave_vector.*
save_atom_sites_ortho.wave_vector_seq_id_list

    _definition.id               '_atom_sites_ortho.wave_vector_seq_id_list'
    _definition.update           2019-09-25
    _description.text                   
;

      A list of codes that identifies the harmonics chosen for the
      definition of an orthogonalized function. It links the wave vectors 
      defined in _atom_site_Fourier_wave_vector.*
;
    _name.category_id            atom_sites_ortho
    _name.object_id              wave_vector_seq_id_list
    _name.linked_item_id         '_atom_site_Fourier_wave_vector.seq_id'
    _type.purpose                Link
    _type.source                 Related
    _type.container              List
    _type.contents               Integer
    _type.dimension              '[]'
    _enumeration.range           0:
    _enumeration.default         [0]

save_
ATOM_SITES_ROT_FOURIER
CIF
Data items in the ATOM_SITES_ROT_FOURIER category record
details about the rotational component of the displacive
modulation of a given rigid group as a whole.
Details for individual atom sites are described by data items in
the ATOM_SITES_ROT_FOURIER category.
save_ATOM_SITES_ROT_FOURIER

    _definition.id               ATOM_SITES_ROT_FOURIER
    _definition.scope            Category
    _definition.class            Set
    _definition.update           2014-06-27
    _description.text                   
;

      Data items in the ATOM_SITES_ROT_FOURIER category record
      details about the rotational component of the displacive
      modulation of a given rigid group as a whole.

      Details for individual atom sites are described by data items in
      the ATOM_SITES_ROT_FOURIER category.
;
    _name.category_id            MS_GROUP
    _name.object_id              ATOM_SITES_ROT_FOURIER

save_
_atom_sites_rot_Fourier.axes_description
CIF
DEPRECATED. This data name should not be used. It has been replaced
by the ATOM_SITES_AXES data names.
The definition of the axes used for describing the rotational
part of the displacive modulation of a given rigid group,
parameterized by Fourier series, when they are other than the
crystallographic axes.
Example:
a1 and a2 are respectively the long molecular axis
      and the axis normal to the mean molecular plane.
save_atom_sites_rot_Fourier.axes_description

    _definition.id               '_atom_sites_rot_Fourier.axes_description'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_sites_rot_Fourier_axes_description' 
    _description.text                   
;

      DEPRECATED. This data name should not be used. It has been replaced
      by the ATOM_SITES_AXES data names.

      The definition of the axes used for describing the rotational
      part of the displacive modulation of a given rigid group,
      parameterized by Fourier series, when they are other than the
      crystallographic axes.
;
    _name.category_id            atom_sites_rot_Fourier
    _name.object_id              axes_description
    _type.purpose                Describe
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Text
    loop_
    _description_example.case
            
;
      a1 and a2 are respectively the long molecular axis
      and the axis normal to the mean molecular plane.
; 

save_
ATOM_SITE_DISPLACE_FOURIER
CIF
Data items in the ATOM_SITE_DISPLACE_FOURIER category record
details about the Fourier components of the displacive modulation
of an atom site in a modulated structure. In the case of rigid
groups, items in this category would only include the
translational part of the modulation. The rotational part would
appear in a separate list of items belonging to the
ATOM_SITE_ROT_FOURIER category. The (in general complex)
coefficients of each Fourier component belong to the child category
ATOM_SITE_DISPLACE_FOURIER_PARAM and may be listed separately.
save_ATOM_SITE_DISPLACE_FOURIER

    _definition.id               ATOM_SITE_DISPLACE_FOURIER
    _definition.scope            Category
    _definition.class            Loop
    _definition.update           2014-06-27
    _description.text                   
;
 
      Data items in the ATOM_SITE_DISPLACE_FOURIER category record
      details about the Fourier components of the displacive modulation
      of an atom site in a modulated structure. In the case of rigid
      groups, items in this category would only include the
      translational part of the modulation. The rotational part would
      appear in a separate list of items belonging to the
      ATOM_SITE_ROT_FOURIER category. The (in general complex)
      coefficients of each Fourier component belong to the child category
      ATOM_SITE_DISPLACE_FOURIER_PARAM and may be listed separately.
;
    _name.category_id            MS_GROUP
    _name.object_id              ATOM_SITE_DISPLACE_FOURIER
    loop_
    _category_key.name           '_atom_site_displace_Fourier.id'

save_
_atom_site_displace_Fourier.atom_site_label
CIF
Modulation parameters are usually looped in separate lists.
Modulated parameters are the atom positions (displacive
modulation), the atomic occupation (occupational modulation)
and/or the anisotropic (or isotropic) ADP.
_atom_site_displace_Fourier.atom_site_label is the
code that identifies an atom or rigid group in a loop in which
the Fourier components of its displacive modulation are listed.
In the case of a rigid group, this list would only include the
translational part of its displacive modulation. The rotational
part (if any) would appear in a separate list (see
_atom_site_rot_Fourier.atom_site_label). This code must match
the _atom_site.label of the associated coordinate list and
conform to the rules described in _atom_site.label.
save_atom_site_displace_Fourier.atom_site_label

    _definition.id               '_atom_site_displace_Fourier.atom_site_label'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_displace_Fourier_atom_site_label' 
    _description.text                   
;

      Modulation parameters are usually looped in separate lists.
      Modulated parameters are the atom positions (displacive
      modulation), the atomic occupation (occupational modulation)
      and/or the anisotropic (or isotropic) ADP.
      _atom_site_displace_Fourier.atom_site_label is the
      code that identifies an atom or rigid group in a loop in which
      the Fourier components of its displacive modulation are listed.
      In the case of a rigid group, this list would only include the
      translational part of its displacive modulation. The rotational
      part (if any) would appear in a separate list (see
      _atom_site_rot_Fourier.atom_site_label). This code must match
      the _atom_site.label of the associated coordinate list and
      conform to the rules described in _atom_site.label.
;
    _name.category_id            atom_site_displace_Fourier
    _name.object_id              atom_site_label
    _name.linked_item_id         '_atom_site.label'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_displace_Fourier.axis
CIF
A label identifying the displacement component of a given atom
or rigid group that is being parameterized by Fourier series. a,
b and c are the basic lattice vectors of the reference structure.
For composites they refer to the reference structure of each
subsystem. a~1~, a~2~ and a~3~ are defined by the
items belonging to the ATOM_SITES_AXES category, through
_atom_site_displace_Fourier.matrix_seq_id.
Use of _atom_sites_displace_Fourier.axes_description is deprecated
and retained only for backward compatibility.
save_atom_site_displace_Fourier.axis

    _definition.id               '_atom_site_displace_Fourier.axis'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_displace_Fourier_axis' 
    _description.text                   
;

      A label identifying the displacement component of a given atom
      or rigid group that is being parameterized by Fourier series. a,
      b and c are the basic lattice vectors of the reference structure.
      For composites they refer to the reference structure of each
      subsystem. a~1~, a~2~ and a~3~ are defined by the
      items belonging to the ATOM_SITES_AXES category, through 
      _atom_site_displace_Fourier.matrix_seq_id.
      Use of _atom_sites_displace_Fourier.axes_description is deprecated 
      and retained only for backward compatibility.

;
    _name.category_id            atom_site_displace_Fourier
    _name.object_id              axis
    _type.purpose                State
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Code
    loop_
    _enumeration_set.state
    _enumeration_set.detail
              x             'displacement along the a axis'          
              y             'displacement along the b axis'          
              z             'displacement along the c axis'          
              a1            'displacement along an arbitrary a1 axis'          
              a2            'displacement along an arbitrary a2 axis'          
              a3            'displacement along an arbitrary a3 axis' 

save_
_atom_site_displace_Fourier.id
CIF
A code identifying each component of the displacive modulation of
a given atom or rigid group when the modulation is expressed in
terms of Fourier series. In the case of a rigid group, it
applies only to the translational part of the distortion.
save_atom_site_displace_Fourier.id

    _definition.id               '_atom_site_displace_Fourier.id'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_displace_Fourier_id' 
    _description.text                   
;

      A code identifying each component of the displacive modulation of
      a given atom or rigid group when the modulation is expressed in
      terms of Fourier series. In the case of a rigid group, it
      applies only to the translational part of the distortion.
;
    _name.category_id            atom_site_displace_Fourier
    _name.object_id              id
    _type.purpose                Key
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Code

save_
_atom_site_displace_Fourier.matrix_seq_id
CIF
A numeric code identifying the transformation matrix that defines
the arbitrary axes a1, a2 and a3 in terms of the crystallographic axes.
This code must match _atom_sites_axes.matrix_seq_id.
save_atom_site_displace_Fourier.matrix_seq_id

    _definition.id               '_atom_site_displace_Fourier.matrix_seq_id'
    _definition.update           2017-09-28
    _description.text                   
;

      A numeric code identifying the transformation matrix that defines
      the arbitrary axes a1, a2 and a3 in terms of the crystallographic axes. 
      This code must match _atom_sites_axes.matrix_seq_id.
;
    _name.category_id            atom_site_displace_Fourier
    _name.object_id              matrix_seq_id
    _name.linked_item_id         '_atom_sites_axes.matrix_seq_id'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_displace_Fourier.wave_vector_seq_id
CIF
A numeric code identifying the wave vectors of the Fourier terms
used in the structural model to describe the displacive
modulation of an atom or rigid group. In the case of a rigid
group, it applies only to the translational part of the
distortion. This code must match
_atom_site_Fourier_wave_vector.seq_id.
save_atom_site_displace_Fourier.wave_vector_seq_id

    _definition.id               '_atom_site_displace_Fourier.wave_vector_seq_id'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_displace_Fourier_wave_vector_seq_id' 
    _description.text                   
;

      A numeric code identifying the wave vectors of the Fourier terms
      used in the structural model to describe the displacive
      modulation of an atom or rigid group. In the case of a rigid
      group, it applies only to the translational part of the
      distortion. This code must match
      _atom_site_Fourier_wave_vector.seq_id.
;
    _name.category_id            atom_site_displace_Fourier
    _name.object_id              wave_vector_seq_id
    _name.linked_item_id         '_atom_site_Fourier_wave_vector.seq_id'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
ATOM_SITE_DISPLACE_FOURIER_PARAM
CIF
Data items in the ATOM_SITE_DISPLACE_FOURIER_PARAM category
record details about the coefficients of the Fourier series
used to describe the displacive modulation of an atom or rigid
group. In the case of rigid groups, items in this category would
only include the translational part of the modulation. The
rotational part would appear in a separate list of items
belonging to the ATOM_SITE_ROT_FOURIER_PARAM category. The
Fourier components are defined in the parent category
ATOM_SITE_DISPLACE_FOURIER. Notice that items in this category
may be listed together with those of the ATOM_SITE_DISPLACE_FOURIER
category.
save_ATOM_SITE_DISPLACE_FOURIER_PARAM

    _definition.id               ATOM_SITE_DISPLACE_FOURIER_PARAM
    _definition.scope            Category
    _definition.class            Loop
    _definition.update           2014-06-27
    _description.text                   
;

      Data items in the ATOM_SITE_DISPLACE_FOURIER_PARAM category
      record details about the coefficients of the Fourier series
      used to describe the displacive modulation of an atom or rigid
      group. In the case of rigid groups, items in this category would
      only include the translational part of the modulation. The
      rotational part would appear in a separate list of items
      belonging to the ATOM_SITE_ROT_FOURIER_PARAM category. The
      Fourier components are defined in the parent category
      ATOM_SITE_DISPLACE_FOURIER. Notice that items in this category 
      may be listed together with those of the ATOM_SITE_DISPLACE_FOURIER 
      category.
;
    _name.category_id            ATOM_SITE_DISPLACE_FOURIER
    _name.object_id              ATOM_SITE_DISPLACE_FOURIER_PARAM
    loop_
        _category_key.name           '_atom_site_displace_Fourier_param.id'

save_
_atom_site_displace_Fourier_param.cos
CIF
The displacive distortion of a given atom or rigid group (see
also _atom_site_rot_Fourier_param.cos) is usually parameterized
by Fourier series. Each term of the series commonly adopts two
different representations: the sine-cosine form,
Ac cos(2\p k r)+As sin(2\p k r),
and the modulus-argument form,
|A| cos(2\p k r+\f),
where k is the wave vector of the term and r is the atomic
average position. _atom_site_displace_Fourier_param.cos is the
cosine coefficient (Ac) corresponding to the Fourier term defined
_atom_site_displace_Fourier.atom_site_label,
_atom_site_displace_Fourier.axis and
_atom_site_displace_Fourier.wave_vector.seq_id. Atomic or rigid-
group displacements must be expressed as fractions of the unit
cell or in angstroms if the modulations are referred to some
special axes defined by the items belonging to the ATOM_SITES_AXES
category, through _atom_site_displace_Fourier.matrix_seq_id.
Use of _atom_sites_displace_Fourier.axes_description is deprecated
and retained only for backward compatibility.
save_atom_site_displace_Fourier_param.cos

    _definition.id               '_atom_site_displace_Fourier_param.cos'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_displace_Fourier_param_cos' 
    _description.text                   
;

      The displacive distortion of a given atom or rigid group (see
      also _atom_site_rot_Fourier_param.cos) is usually parameterized
      by Fourier series. Each term of the series commonly adopts two
      different representations: the sine-cosine form,
               Ac cos(2\\p k r)+As sin(2\\p k r),
      and the modulus-argument form,
               |A| cos(2\\p k r+\\f),
      where k is the wave vector of the term and r is the atomic
      average position. _atom_site_displace_Fourier_param.cos is the
      cosine coefficient (Ac) corresponding to the Fourier term defined
      _atom_site_displace_Fourier.atom_site_label,
      _atom_site_displace_Fourier.axis and
      _atom_site_displace_Fourier.wave_vector.seq_id. Atomic or rigid-
      group displacements must be expressed as fractions of the unit
      cell or in angstroms if the modulations are referred to some
      special axes defined by the items belonging to the ATOM_SITES_AXES 
      category, through _atom_site_displace_Fourier.matrix_seq_id.
      Use of _atom_sites_displace_Fourier.axes_description is deprecated 
      and retained only for backward compatibility.

;
    _name.category_id            atom_site_displace_Fourier_param
    _name.object_id              cos
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    loop_
      _method.purpose
      _method.expression
      Evaluation    
;
      With  p  as  atom_site_displace_Fourier_param

       atom_site_displace_Fourier_param.cos =  p.modulus*Cos(TwoPi*p.phase)
; 


save_
_atom_site_displace_Fourier_param.id
CIF
A code identifying the (in general complex) coefficient of each
term present in the Fourier series describing the displacive
modulation of a given atom or rigid group. In the case of a rigid
group, it applies only to the translational part of the
distortion. This code must match _atom_site_displace_Fourier.id.
save_atom_site_displace_Fourier_param.id

    _definition.id               '_atom_site_displace_Fourier_param.id'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_displace_Fourier_param_id' 
    _description.text                   
;

      A code identifying the (in general complex) coefficient of each
      term present in the Fourier series describing the displacive
      modulation of a given atom or rigid group. In the case of a rigid
      group, it applies only to the translational part of the
      distortion. This code must match _atom_site_displace_Fourier.id.
;
    _name.category_id            atom_site_displace_Fourier_param
    _name.object_id              id
    _name.linked_item_id         '_atom_site_displace_Fourier.id'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_displace_Fourier_param.modulus
CIF
The displacive distortion of a given atom or rigid group (see
also _atom_site_rot_Fourier_param.modulus) is usually
parameterized by Fourier series. Each term of the series commonly
adopts two different representations: the sine-cosine form,
Ac cos(2\p k r)+As sin(2\p k r),
and the modulus-argument form,
|A| cos(2\p k r+\f),
where k is the wave vector of the term and r is the atomic
average position. _atom_site_displace_Fourier_param.modulus is
the modulus (|A|) of the complex amplitude corresponding to the
Fourier term defined by
_atom_site_displace_Fourier.atom_site_label,
_atom_site_displace_Fourier.axis and
_atom_site_displace_Fourier.wave_vector_seq_id. Atomic or rigid-
group displacements must be expressed as fractions of the unit
cell or in angstroms if the modulations are referred to some
special axes defined by the items belonging to the ATOM_SITES_AXES
category, through _atom_site_displace_Fourier.matrix_seq_id.
Use of _atom_sites_displace_Fourier.axes_description is deprecated
and retained only for backward compatibility.
save_atom_site_displace_Fourier_param.modulus

    _definition.id               '_atom_site_displace_Fourier_param.modulus'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_displace_Fourier_param_modulus' 
    _description.text                   
;

      The displacive distortion of a given atom or rigid group (see
      also _atom_site_rot_Fourier_param.modulus) is usually
      parameterized by Fourier series. Each term of the series commonly
      adopts two different representations: the sine-cosine form,
               Ac cos(2\\p k r)+As sin(2\\p k r),
      and the modulus-argument form,
               |A| cos(2\\p k r+\\f),
      where k is the wave vector of the term and r is the atomic
      average position. _atom_site_displace_Fourier_param.modulus is
      the modulus (|A|) of the complex amplitude corresponding to the
      Fourier term defined by
      _atom_site_displace_Fourier.atom_site_label,
      _atom_site_displace_Fourier.axis and
      _atom_site_displace_Fourier.wave_vector_seq_id. Atomic or rigid-
      group displacements must be expressed as fractions of the unit
      cell or in angstroms if the modulations are referred to some
      special axes defined by the items belonging to the ATOM_SITES_AXES 
      category, through _atom_site_displace_Fourier.matrix_seq_id.
      Use of _atom_sites_displace_Fourier.axes_description is deprecated 
      and retained only for backward compatibility.
;
    _name.category_id            atom_site_displace_Fourier_param
    _name.object_id              modulus
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    _enumeration.range           0.0:
     loop_
      _method.purpose
      _method.expression
      Evaluation    
;
      With  p  as  atom_site_displace_Fourier_param

       atom_site_displace_Fourier_param.modulus =  Sqrt(p.cos**2 + p.sin**2)
; 


save_
_atom_site_displace_Fourier_param.phase
CIF
The displacive distortion of a given atom or rigid group (see
also _atom_site_rot_Fourier_param.phase) is usually parameterized
by Fourier series. Each term of the series commonly adopts two
different representations: the sine-cosine form,
Ac cos(2\p k r)+As sin(2\p k r),
and the modulus-argument form,
|A| cos(2\p k r+\f),
where k is the wave vector of the term and r is the atomic
average position. _atom_site_displace_Fourier_param.phase is the
phase (/2\p) in cycles of the complex amplitude corresponding\
to the Fourier term defined by
_atom_site_displace_Fourier.atom_site_label,
_atom_site_displace_Fourier.axis and
_atom_site_displace_Fourier.wave_vector_seq_id.
save_atom_site_displace_Fourier_param.phase

    _definition.id               '_atom_site_displace_Fourier_param.phase'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_displace_Fourier_param_phase' 
    _description.text                   
;

      The displacive distortion of a given atom or rigid group (see
      also _atom_site_rot_Fourier_param.phase) is usually parameterized
      by Fourier series. Each term of the series commonly adopts two
      different representations: the sine-cosine form,
               Ac cos(2\\p k r)+As sin(2\\p k r),
      and the modulus-argument form,
               |A| cos(2\\p k r+\\f),
      where k is the wave vector of the term and r is the atomic
      average position. _atom_site_displace_Fourier_param.phase is the
      phase (\f/2\\p) in cycles of the complex amplitude corresponding\
      to the Fourier term defined by
      _atom_site_displace_Fourier.atom_site_label,
      _atom_site_displace_Fourier.axis and
      _atom_site_displace_Fourier.wave_vector_seq_id.
;
    _name.category_id            atom_site_displace_Fourier_param
    _name.object_id              phase
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    _enumeration.range           -1.0:1.0
    _units.code                  cycles
    loop_
      _method.purpose
      _method.expression
      Evaluation    
;
      With  p  as  atom_site_displace_Fourier_param

       atom_site_displace_Fourier_param.phase =  Phase(Complex(p.cos,-p.sin)/2/Pi
; 


save_
_atom_site_displace_Fourier_param.sin
CIF
The displacive distortion of a given atom or rigid group (see
also _atom_site_rot_Fourier_param.sin) is usually parameterized
by Fourier series. Each term of the series commonly adopts two
different representations: the sine-cosine form,
Ac cos(2\p k r)+As sin(2\p k r),
and the modulus-argument form,
|A| cos(2\p k r+\f),
where k is the wave vector of the term and r is the atomic
average position. _atom_site_displace_Fourier_param.sin is the
sine coefficient (As) corresponding to the Fourier term defined
_atom_site_displace_Fourier.atom_site_label,
_atom_site_displace_Fourier.axis, and
_atom_site_displace_Fourier.wave_vector_seq_id. Atomic or rigid-
group displacements must be expressed as fractions of the unit
cell or in angstroms if the modulations are referred to some
special axes defined by
the items belonging to the ATOM_SITES_AXES
category, through _atom_site_displace_Fourier.matrix_seq_id.
Use of _atom_sites_displace_Fourier.axes_description is deprecated
and retained only for backward compatibility.
save_atom_site_displace_Fourier_param.sin

    _definition.id               '_atom_site_displace_Fourier_param.sin'
    _definition.update           2017-09-28
    loop_
      _alias.definition_id
          '_atom_site_displace_Fourier_param_sin' 
    _description.text                   
;

      The displacive distortion of a given atom or rigid group (see
      also _atom_site_rot_Fourier_param.sin) is usually parameterized
      by Fourier series. Each term of the series commonly adopts two
      different representations: the sine-cosine form,
               Ac cos(2\\p k r)+As sin(2\\p k r),
      and the modulus-argument form,
               |A| cos(2\\p k r+\\f),
      where k is the wave vector of the term and r is the atomic
      average position. _atom_site_displace_Fourier_param.sin is the
      sine coefficient (As) corresponding to the Fourier term defined
      _atom_site_displace_Fourier.atom_site_label,
      _atom_site_displace_Fourier.axis, and
      _atom_site_displace_Fourier.wave_vector_seq_id. Atomic or rigid-
      group displacements must be expressed as fractions of the unit
      cell or in angstroms if the modulations are referred to some
      special axes defined by
      the items belonging to the ATOM_SITES_AXES 
      category, through _atom_site_displace_Fourier.matrix_seq_id.
      Use of _atom_sites_displace_Fourier.axes_description is deprecated 
      and retained only for backward compatibility.
;
    _name.category_id            atom_site_displace_Fourier_param
    _name.object_id              sin
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    loop_
      _method.purpose
      _method.expression
      Evaluation    
;
      With  p  as  atom_site_displace_Fourier_param

       atom_site_displace_Fourier_param.sin = -p.modulus*Sin(TwoPi*p.phase)
; 


save_
ATOM_SITE_DISPLACE_LEGENDRE
CIF
The set of harmonic functions used in the Fourier series describing the
Modulation functions is orthogonal and complete in the interval [0,1).
However within the x4 interval defined by a Crenel function orthogonality
is no longer preserved and therefore the Fourier coefficients are correlated
and the refinement becomes fragile. There are several ways to avoid this
technical problem (see Petricek et al., 2016). One of them is to use
orthogonal or orthogonalized sets of functions defined within the Crenel
interval. This procedure is more robust than the orthogonalization of harmonics
described in *_ORTHO. categories. Moreover these sets of functions are
complete. Two different sets of orthogonal or orthogonalized functions have
been implemented in JANA2006: Legendre polynomials and the so-called X-
harmonics. Legendre polynomials are orthogonal in the Crenel interval and can
be easily calculated by the recurrence relation:
P~0~(x) = 1
P~1~(x) (x) = x
(n+1)P~n+1~(x) = (2n+1)x P~n~(x) - nP~n-1~(x)
Notice that Legendre polynomials are restricted to one-dimensional cases and
include as a particular case the sawtooth modulation.
Data items in the ATOM_SITE_DISPLACE_LEGENDRE category record
details about the Legendre polynomials used to describe the displacive
modulations when the atomic domain of a given atom is restricted
by a Crenel function. In the case of rigid groups, items in this category would
only include the translational part of the modulation. The rotational
part would appear in a separate list of items belonging to the
ATOM_SITE_ROT_LEGENDRE category.
References: Petricek, V., Van Der Lee & Evain, M. (1995).
Acta Cryst. A51, 529-535. DOI 10.1107/S0108767395000365
On the Use of Crenel Functions for Occupationally Modulated
Structures
Petricek, V., Eigner, V., Dusek, M. & Cejchan, A. (2016). Z.
Kristallogr. 231(5), 301-312. DOI 10.1515/zkri-2015-1913
Discontinuous modulation functions and their application for
analysis of modulated structures with the computing system JANA2006
save_ATOM_SITE_DISPLACE_LEGENDRE

    _definition.id               ATOM_SITE_DISPLACE_LEGENDRE
    _definition.scope            Category
    _definition.class            Loop
    _definition.update           2017-09-28
    _description.text                   
;
 
      The set of harmonic functions used in the Fourier series describing the 
      Modulation functions is orthogonal and complete in the interval [0,1). 
      However within the x4 interval defined by a Crenel function orthogonality
      is no longer preserved and therefore the Fourier coefficients are correlated
      and the refinement becomes fragile. There are several ways to avoid this
      technical problem (see Petricek et al., 2016). One of them is to use
      orthogonal or orthogonalized sets of functions defined within the Crenel
      interval. This procedure is more robust than the orthogonalization of harmonics 
      described in *_ORTHO. categories. Moreover these sets of functions are 
      complete. Two different sets of orthogonal or orthogonalized functions have 
      been implemented in JANA2006: Legendre polynomials and the so-called X-
      harmonics. Legendre polynomials are orthogonal in the Crenel interval and can 
      be easily calculated by the recurrence relation:

      P~0~(x) = 1
      P~1~(x) (x) = x
      (n+1)P~n+1~(x) = (2n+1)x P~n~(x) - nP~n-1~(x)

      Notice that Legendre polynomials are restricted to one-dimensional cases and 
      include as a particular case the sawtooth modulation.

      Data items in the ATOM_SITE_DISPLACE_LEGENDRE category record
      details about the Legendre polynomials used to describe the displacive 
      modulations when the atomic domain of a given atom is restricted 
      by a Crenel function. In the case of rigid groups, items in this category would 
      only include the translational part of the modulation. The rotational 
      part would appear in a separate list of items belonging to the
      ATOM_SITE_ROT_LEGENDRE category.
.

      References: Petricek, V., Van Der Lee & Evain, M. (1995).
                  Acta Cryst. A51, 529-535. DOI 10.1107/S0108767395000365
                  On the Use of Crenel Functions for Occupationally Modulated  
                  Structures 

                  Petricek, V., Eigner, V., Dusek, M. & Cejchan, A. (2016). Z. 
                  Kristallogr. 231(5), 301-312. DOI 10.1515/zkri-2015-1913 
                  Discontinuous modulation functions and their application for 
                  analysis of modulated structures with the computing system JANA2006
;
    _name.category_id            MS_GROUP
    _name.object_id              ATOM_SITE_DISPLACE_LEGENDRE
    loop_
      _category_key.name         '_atom_site_displace_Legendre.id'
  
save_
_atom_site_displace_Legendre.atom_site_label
CIF
Modulation parameters are usually looped in separate lists.
Modulated parameters are the atom positions (displacive
modulation), the atomic occupation (occupational modulation)
and/or the anisotropic (or isotropic) ADP.
_atom_site_displace_Legendre.atom_site_label is the
code that identifies an atom or rigid group in a loop in which
the Legendre components of its displacive modulation are listed.
In the case of a rigid group, this list would only include the
translational part of its displacive modulation. The rotational
part (if any) would appear in a separate list (see
_atom_site_rot_Legendre.atom_site_label). This code must match
the _atom_site.label of the associated coordinate list and
conform to the rules described in _atom_site.label.
save_atom_site_displace_Legendre.atom_site_label

    _definition.id               '_atom_site_displace_Legendre.atom_site_label'
    _definition.update           2017-09-28
    _description.text                   
;

      Modulation parameters are usually looped in separate lists.
      Modulated parameters are the atom positions (displacive
      modulation), the atomic occupation (occupational modulation)
      and/or the anisotropic (or isotropic) ADP.  
      _atom_site_displace_Legendre.atom_site_label is the
      code that identifies an atom or rigid group in a loop in which
      the Legendre components of its displacive modulation are listed.
      In the case of a rigid group, this list would only include the
      translational part of its displacive modulation. The rotational
      part (if any) would appear in a separate list (see
      _atom_site_rot_Legendre.atom_site_label). This code must match
      the _atom_site.label of the associated coordinate list and
      conform to the rules described in _atom_site.label.
;
    _name.category_id            atom_site_displace_Legendre
    _name.object_id              atom_site_label
    _name.linked_item_id         '_atom_site.label'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_displace_Legendre.axis
CIF
A label identifying the displacement component of a given atom
or rigid group that is being parameterized by Legendre polynomials.
a, b and c are the basic lattice vectors of the reference
structure. For composites they refer to the reference structure of
each subsystem. a~1~, a~2~ and a~3~ are defined by the
items belonging to the ATOM_SITES_AXES category, through
_atom_site_displace_Legendre.matrix_seq_id.
save_atom_site_displace_Legendre.axis

    _definition.id               '_atom_site_displace_Legendre.axis'
    _definition.update           2017-09-28
    _description.text                   
;

      A label identifying the displacement component of a given atom
      or rigid group that is being parameterized by Legendre polynomials. 
      a, b and c are the basic lattice vectors of the reference  
      structure. For composites they refer to the reference structure of 
      each subsystem. a~1~, a~2~ and a~3~ are defined by the
      items belonging to the ATOM_SITES_AXES category, through 
      _atom_site_displace_Legendre.matrix_seq_id.
;
    _name.category_id            atom_site_displace_Legendre
    _name.object_id              axis
    _type.purpose                State
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Code
    loop_
      _enumeration_set.state
      _enumeration_set.detail
              x             'displacement along the a axis'          
              y             'displacement along the b axis'          
              z             'displacement along the c axis'          
              a1            'displacement along an arbitrary a1 axis'          
              a2            'displacement along an arbitrary a2 axis'          
              a3            'displacement along an arbitrary a3 axis' 

save_
_atom_site_displace_Legendre.coeff
CIF
The coefficient corresponding to the Legendre function
defined by _atom_site_displace_Legendre.atom_site_label,
_atom_site_displace_Legendre.axis and _atom_site_displace_Legendre.order.
Atomic or rigid-group displacements must be expressed as fractions
of the unit cell or in angstroms if the modulations are referred to some
special axes defined by defined by the items belonging to the
ATOM_SITES_AXES category, through _atom_site_rot_Legendre.matrix_seq_id.
save_atom_site_displace_Legendre.coeff

    _definition.id               '_atom_site_displace_Legendre.coeff'
    _definition.update           2017-09-28
    _description.text                   
;
      The coefficient corresponding to the Legendre function 
      defined by _atom_site_displace_Legendre.atom_site_label,
      _atom_site_displace_Legendre.axis and _atom_site_displace_Legendre.order.  
      Atomic or rigid-group displacements must be expressed as fractions 
      of the unit cell or in angstroms if the modulations are referred to some
      special axes defined by defined by the items belonging to the 
      ATOM_SITES_AXES category, through _atom_site_rot_Legendre.matrix_seq_id.
;
    _name.category_id            atom_site_displace_Legendre
    _name.object_id              coeff
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0

save_
_atom_site_displace_Legendre.id
CIF
A code identifying each component of the displacive modulation of
a given atom or rigid group when the modulation is expressed in
terms of Legendre polynomials. In the case of a rigid group, it
applies only to the translational part of the distortion.
save_atom_site_displace_Legendre.id

    _definition.id               '_atom_site_displace_Legendre.id'
    _definition.update           2017-09-28
    _description.text                   
;

      A code identifying each component of the displacive modulation of
      a given atom or rigid group when the modulation is expressed in
      terms of Legendre polynomials. In the case of a rigid group, it
      applies only to the translational part of the distortion.
;
    _name.category_id            atom_site_displace_Legendre
    _name.object_id              id
    _type.purpose                Key
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_displace_Legendre.matrix_seq_id
CIF
A numeric code identifying the transformation matrix that defines
the arbitrary axes a1, a2 and a3 in terms of the crystallographic axes.
This code must match _atom_sites_axes.matrix_seq_id.
save_atom_site_displace_Legendre.matrix_seq_id

    _definition.id               '_atom_site_displace_Legendre.matrix_seq_id'
    _definition.update           2017-09-28
    _description.text                   
;

      A numeric code identifying the transformation matrix that defines
      the arbitrary axes a1, a2 and a3 in terms of the crystallographic axes. 
      This code must match _atom_sites_axes.matrix_seq_id.
;
    _name.category_id            atom_site_displace_Legendre
    _name.object_id              matrix_seq_id
    _name.linked_item_id         '_atom_sites_axes.matrix_seq_id'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_displace_Legendre.order
CIF
The order of the Legendre polynomial.
save_atom_site_displace_Legendre.order

    _definition.id               '_atom_site_displace_Legendre.order'
    _definition.update           2019-09-25
    _description.text                   
;

      The order of the Legendre polynomial.
;
    _name.category_id            atom_site_displace_Legendre
    _name.object_id              order
    _type.purpose                Key
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Integer
    _enumeration.range           0:

save_
ATOM_SITE_DISPLACE_ORTHO
CIF
Data items in the ATOM_SITE_DISPLACE_ORTHO category record
details about the orthogonalized functions defined to solve
correlation problems during the refinement of displacive
modulations when the atomic domain of a given atom is restricted
by a Crenel function. The functions are constructed selecting
Fourier harmonics until the desired degree of orthogonality and
completeness is reached (see
_atom_site_occ_special_func.crenel_ortho_eps).
In the case of rigid groups, items in this category would only
include the translational part of the modulation. The rotational
part would appear in a separate list of items belonging to the
ATOM_SITE_ROT_ORTHO category.
Notice that the global results could also be expressed (losing
information) using the data items defined in the categories
ATOM_SITE_DISPLACE_FOURIER and ATOM_SITE_DISPLACE_FOURIER_PARAM.
save_ATOM_SITE_DISPLACE_ORTHO

    _definition.id               ATOM_SITE_DISPLACE_ORTHO
    _definition.scope            Category
    _definition.class            Loop
    _definition.update           2014-06-27
    _description.text                   
;
 
      Data items in the ATOM_SITE_DISPLACE_ORTHO category record
      details about the orthogonalized functions defined to solve 
      correlation problems during the refinement of displacive 
      modulations when the atomic domain of a given atom is restricted 
      by a Crenel function. The functions are constructed selecting 
      Fourier harmonics until the desired degree of orthogonality and
      completeness is reached (see
      _atom_site_occ_special_func.crenel_ortho_eps). 
      In the case of rigid groups, items in this category would only 
      include the translational part of the modulation. The rotational 
      part would appear in a separate list of items belonging to the
      ATOM_SITE_ROT_ORTHO category. 

      Notice that the global results could also be expressed (losing 
      information) using the data items defined in the categories 
      ATOM_SITE_DISPLACE_FOURIER and ATOM_SITE_DISPLACE_FOURIER_PARAM.
;
    _name.category_id            MS_GROUP
    _name.object_id              ATOM_SITE_DISPLACE_ORTHO
    loop_
      _category_key.name         '_atom_site_displace_ortho.id'
  
save_
_atom_site_displace_ortho.atom_site_label
CIF
Modulation parameters are usually looped in separate lists.
Modulated parameters are the atom positions (displacive
modulation), the atomic occupation (occupational modulation)
and/or the anisotropic (or isotropic) ADP.
_atom_site_displace_ortho.atom_site_label is the
code that identifies an atom or rigid group in a loop in which
the ortho components of its displacive modulation are listed.
In the case of a rigid group, this list would only include the
translational part of its displacive modulation. The rotational
part (if any) would appear in a separate list (see
_atom_site_rot_ortho.atom_site_label). This code must match
the _atom_site.label of the associated coordinate list and
conform to the rules described in _atom_site.label.
save_atom_site_displace_ortho.atom_site_label

    _definition.id               '_atom_site_displace_ortho.atom_site_label'
    _definition.update           2017-09-28 
    _description.text                   
;

      Modulation parameters are usually looped in separate lists.
      Modulated parameters are the atom positions (displacive
      modulation), the atomic occupation (occupational modulation)
      and/or the anisotropic (or isotropic) ADP.  
      _atom_site_displace_ortho.atom_site_label is the
      code that identifies an atom or rigid group in a loop in which
      the ortho components of its displacive modulation are listed.
      In the case of a rigid group, this list would only include the
      translational part of its displacive modulation. The rotational
      part (if any) would appear in a separate list (see
      _atom_site_rot_ortho.atom_site_label). This code must match
      the _atom_site.label of the associated coordinate list and
      conform to the rules described in _atom_site.label.
;
    _name.category_id            atom_site_displace_ortho
    _name.object_id              atom_site_label
    _name.linked_item_id         '_atom_site.label'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_displace_ortho.axis
CIF
A label identifying the displacement component of a given atom
or rigid group that is being parameterized by orthogonalized
functions. a, b and c are the basic lattice vectors of the reference
structure. For composites they refer to the reference structure of
each subsystem. a~1~, a~2~ and a~3~ are defined by the
items belonging to the ATOM_SITES_AXES category, through
_atom_site_displace_ortho.matrix_seq_id.
save_atom_site_displace_ortho.axis

    _definition.id               '_atom_site_displace_ortho.axis'
    _definition.update           2017-09-28
    _description.text                   
;

      A label identifying the displacement component of a given atom
      or rigid group that is being parameterized by orthogonalized 
      functions. a, b and c are the basic lattice vectors of the reference  
      structure. For composites they refer to the reference structure of 
      each subsystem. a~1~, a~2~ and a~3~ are defined by the
      items belonging to the ATOM_SITES_AXES category, through 
      _atom_site_displace_ortho.matrix_seq_id.
;
    _name.category_id            atom_site_displace_ortho
    _name.object_id              axis
    _type.purpose                State
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Code
    loop_
      _enumeration_set.state
      _enumeration_set.detail
              x             'displacement along the a axis'          
              y             'displacement along the b axis'          
              z             'displacement along the c axis'          
              a1            'displacement along an arbitrary a1 axis'          
              a2            'displacement along an arbitrary a2 axis'          
              a3            'displacement along an arbitrary a3 axis' 

save_
_atom_site_displace_ortho.coeff
CIF
The coefficient corresponding to the orthogonalized function
Defined by _atom_site_displace_ortho.atom_site_label,
_atom_site_displace_ortho.axis and _atom_site_displace_ortho.func_id.
Atomic or rigid-group displacements must be expressed as fractions
of the unit cell or in angstroms if the modulations are referred to some
special axes defined by defined by the items belonging to the
ATOM_SITES_AXES category, through _atom_site_rot_ortho.matrix_seq_id.
save_atom_site_displace_ortho.coeff

    _definition.id               '_atom_site_displace_ortho.coeff'
    _definition.update           2014-06-27
    _description.text                   
;

      The coefficient corresponding to the orthogonalized function 
      Defined by _atom_site_displace_ortho.atom_site_label,
      _atom_site_displace_ortho.axis and _atom_site_displace_ortho.func_id.  
      Atomic or rigid-group displacements must be expressed as fractions 
      of the unit cell or in angstroms if the modulations are referred to some
      special axes defined by defined by the items belonging to the 
      ATOM_SITES_AXES category, through _atom_site_rot_ortho.matrix_seq_id.
;
    _name.category_id            atom_site_displace_ortho
    _name.object_id              coeff
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0

save_
_atom_site_displace_ortho.func_id
CIF
A code identifying the orthogonalized function used in the
structural model to describe the displacive modulation of an atom
or rigid group. In the case of a rigid group, it applies only
to the translational part of the distortion. This code must match
_atom_sites_ortho_func_id.
save_atom_site_displace_ortho.func_id

    _definition.id               '_atom_site_displace_ortho.func_id'
    _definition.update           2017-09-28
    _description.text                   
;

      A code identifying the orthogonalized function used in the 
      structural model to describe the displacive modulation of an atom 
      or rigid group. In the case of a rigid group, it applies only 
      to the translational part of the distortion. This code must match  
      _atom_sites_ortho_func_id.
;
    _name.category_id            atom_site_displace_ortho
    _name.object_id              func_id
    _name.linked_item_id         '_atom_sites_ortho.func_id '
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_displace_ortho.id
CIF
A code identifying each component of the displacive modulation of
a given atom or rigid group when the modulation is expressed in
terms of ortho series. In the case of a rigid group, it
applies only to the translational part of the distortion.
save_atom_site_displace_ortho.id

    _definition.id               '_atom_site_displace_ortho.id'
    _definition.update           2014-06-27
    _description.text                   
;

      A code identifying each component of the displacive modulation of
      a given atom or rigid group when the modulation is expressed in
      terms of ortho series. In the case of a rigid group, it
      applies only to the translational part of the distortion.
;
    _name.category_id            atom_site_displace_ortho
    _name.object_id              id
    _type.purpose                Key
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_displace_ortho.matrix_seq_id
CIF
A numeric code identifying the transformation matrix that defines
the arbitrary axes a1, a2 and a3 in terms of the crystallographic axes.
This code must match _atom_sites_axes.matrix_seq_id.
save_atom_site_displace_ortho.matrix_seq_id

    _definition.id               '_atom_site_displace_ortho.matrix_seq_id'
    _definition.update           2014-06-27
    _description.text                   
;

      A numeric code identifying the transformation matrix that defines
      the arbitrary axes a1, a2 and a3 in terms of the crystallographic axes. 
      This code must match _atom_sites_axes.matrix_seq_id.
;
    _name.category_id            atom_site_displace_ortho
    _name.object_id              matrix_seq_id
    _name.linked_item_id         '_atom_sites_axes.matrix_seq_id'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
ATOM_SITE_DISPLACE_SPECIAL_FUNC
CIF
Data items in the ATOM_SITE_DISPLACE_SPECIAL_FUNC category record
details about the displacive modulation of an atom site in a
modulated structure when it is not described by Fourier series.
Special functions are effective in some cases where the
modulations are highly anharmonic, since the number of parameters
is drastically reduced. However, they are in general
discontinuous or with discontinuous derivatives and therefore
these functions describe an ideal situation that never occurs
in a real modulated crystal. Up to now, only a few types of
special functions have been used and all of them come from the
JANA2006 suite of programs (Petricek, Dusek & Palatinus, 2014).
Although this approach is far from
being general, it has the advantage that the functions are
tightly defined and therefore the atomic displacements and
occupations can be calculated easily. In this dictionary,
only the special functions available in JANA2006 have been
included. These are:
(1) Sawtooth functions for the displacive modulation of atoms and
    rigid groups.
(2) Zig-Zag functions for the displacive modulation of atoms and
    rigid groups.
(3) Crenel functions for the occupational modulation of atoms
    and rigid groups. Both of these only apply to
    one-dimensional modulated structures.
References: Petricek, V., Dusek, M. & Palatinus, L. (2014).
          Z. Kristallogr. 229(5), 345-352.  DOI 10.1515/zkri-2014-1737
          Crystallographic Computing System JANA2006: General features
          Petricek, V., Eigner, V., Dusek, M. & Cejchan, A. (2016). Z.
          Kristallogr. 231(5), 301-312. DOI 10.1515/zkri-2015-1913
          Discontinuous modulation functions and their application for
          analysis of modulated structures with the computing system JANA2006
save_ATOM_SITE_DISPLACE_SPECIAL_FUNC

    _definition.id               ATOM_SITE_DISPLACE_SPECIAL_FUNC
    _definition.scope            Category
    _definition.class            Loop
    _definition.update           2014-06-27
    _description.text                   
;

      Data items in the ATOM_SITE_DISPLACE_SPECIAL_FUNC category record
      details about the displacive modulation of an atom site in a
      modulated structure when it is not described by Fourier series.
      Special functions are effective in some cases where the
      modulations are highly anharmonic, since the number of parameters
      is drastically reduced. However, they are in general
      discontinuous or with discontinuous derivatives and therefore
      these functions describe an ideal situation that never occurs
      in a real modulated crystal. Up to now, only a few types of
      special functions have been used and all of them come from the
      JANA2006 suite of programs (Petricek, Dusek & Palatinus, 2014).
      Although this approach is far from
      being general, it has the advantage that the functions are
      tightly defined and therefore the atomic displacements and
      occupations can be calculated easily. In this dictionary,
      only the special functions available in JANA2006 have been
      included. These are:
        (1) Sawtooth functions for the displacive modulation of atoms and 
            rigid groups.
        (2) Zig-Zag functions for the displacive modulation of atoms and
            rigid groups.
        (3) Crenel functions for the occupational modulation of atoms
            and rigid groups. Both of these only apply to
            one-dimensional modulated structures.

      References: Petricek, V., Dusek, M. & Palatinus, L. (2014).
                  Z. Kristallogr. 229(5), 345-352.  DOI 10.1515/zkri-2014-1737     
                  Crystallographic Computing System JANA2006: General features

                  Petricek, V., Eigner, V., Dusek, M. & Cejchan, A. (2016). Z. 
                  Kristallogr. 231(5), 301-312. DOI 10.1515/zkri-2015-1913 
                  Discontinuous modulation functions and their application for 
                  analysis of modulated structures with the computing system JANA2006
;
    _name.category_id            MS_GROUP
    _name.object_id              ATOM_SITE_DISPLACE_SPECIAL_FUNC
    loop_
    _category_key.name           '_atom_site_displace_special_func.atom_site_label'

save_
_atom_site_displace_special_func.atom_site_label
CIF
The code that identifies an atom or rigid group in a loop in which
the special function that describes its displacive modulation is being
defined. This code must match the _atom_site.label of the
associated coordinate list and conform to the rules described in
_atom_site.label.
save_atom_site_displace_special_func.atom_site_label

    _definition.id               '_atom_site_displace_special_func.atom_site_label'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_displace_special_func_atom_site_label' 
    _description.text                   
;

      The code that identifies an atom or rigid group in a loop in which
      the special function that describes its displacive modulation is being
      defined. This code must match the _atom_site.label of the
      associated coordinate list and conform to the rules described in
      _atom_site.label.
;
    _name.category_id            atom_site_displace_special_func
    _name.object_id              atom_site_label
    _name.linked_item_id         '_atom_site.label'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_displace_special_func.matrix_seq_id
CIF
A numeric code identifying the transformation matrix that defines
the arbitrary axes a1, a2 and a3 in terms of the crystallographic axes.
This code must match _atom_sites_axes.matrix_seq_id.
save_atom_site_displace_special_func.matrix_seq_id

    _definition.id               '_atom_site_displace_special_func.matrix_seq_id'
    _definition.update           2017-09-28
    _description.text                   
;

      A numeric code identifying the transformation matrix that defines
      the arbitrary axes a1, a2 and a3 in terms of the crystallographic axes. 
      This code must match _atom_sites_axes.matrix_seq_id.
;
    _name.category_id            atom_site_displace_special_func
    _name.object_id              matrix_seq_id
    _name.linked_item_id         '_atom_sites_axes.matrix_seq_id'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_displace_special_func.sawtooth
CIF
_atom_site_displace_special_func_sawtooth_ items are the
adjustable parameters of a sawtooth function.
A displacive sawtooth function along the internal space is
defined as follows:
      [ux, uy, uz] = 2* [ax, ay, az] * ((x4-c)/w)
for x4 belonging to the interval [c-(w/2), c+(w/2)], where ax,
ay and az are the amplitudes (maximum displacements)
along each crystallographic axis, w is its width, x4 is the
internal coordinate and c is the centre of the function in
internal space. ux, uy and uz must be expressed in relative
units or in angstroms if the modulations are referred to some
special axes defined by the items belonging to the ATOM_SITES_AXES
category, through _atom_site_displace_special_funcs.matrix_seq_id.
The use of this function is restricted to
one-dimensional modulated structures. For more details, see
the manual for JANA2006 (Petricek, Dusek & Palatinus, 2014) and
(Petricek, Eigner, Dusek & Cejchan, 2016). In the case of rigid groups,
items in this
category would only include the translational part of the modulation.
The rotational part would appear in a separate list of items belonging
to the ATOM_SITE_ROT_SPECIAL_FUNC category.
References: Petricek, V., Dusek, M. & Palatinus, L. (2014).
           Z. Kristallogr. 229(5), 345-352.  DOI 10.1515/zkri-2014-1737
           Crystallographic Computing System JANA2006: General features
           Petricek, V., Eigner, V., Dusek, M. & Cejchan, A. (2016). Z.
           Kristallogr. 231(5), 301-312. DOI 10.1515/zkri-2015-1913
           Discontinuous modulation functions and their application for
           analysis of modulated structures with the computing system JANA2006
save_atom_site_displace_special_func.sawtooth

    _definition.id               '_atom_site_displace_special_func.sawtooth'
    _definition.update           2019-04-01
    _description.text                   
;

       _atom_site_displace_special_func_sawtooth_ items are the
       adjustable parameters of a sawtooth function.
       A displacive sawtooth function along the internal space is
       defined as follows:
             [ux, uy, uz] = 2* [ax, ay, az] * ((x4-c)/w)

       for x4 belonging to the interval [c-(w/2), c+(w/2)], where ax,
       ay and az are the amplitudes (maximum displacements)
       along each crystallographic axis, w is its width, x4 is the
       internal coordinate and c is the centre of the function in
       internal space. ux, uy and uz must be expressed in relative
       units or in angstroms if the modulations are referred to some
       special axes defined by the items belonging to the ATOM_SITES_AXES 
       category, through _atom_site_displace_special_funcs.matrix_seq_id.

       The use of this function is restricted to
       one-dimensional modulated structures. For more details, see
       the manual for JANA2006 (Petricek, Dusek & Palatinus, 2014) and
       (Petricek, Eigner, Dusek & Cejchan, 2016). In the case of rigid groups,
       items in this 
      category would only include the translational part of the modulation. 
      The rotational part would appear in a separate list of items belonging 
      to the ATOM_SITE_ROT_SPECIAL_FUNC category.

      References: Petricek, V., Dusek, M. & Palatinus, L. (2014).
                  Z. Kristallogr. 229(5), 345-352.  DOI 10.1515/zkri-2014-1737     
                  Crystallographic Computing System JANA2006: General features

                  Petricek, V., Eigner, V., Dusek, M. & Cejchan, A. (2016). Z.
                  Kristallogr. 231(5), 301-312. DOI 10.1515/zkri-2015-1913 
                  Discontinuous modulation functions and their application for 
                  analysis of modulated structures with the computing system JANA2006
;
    _name.category_id            atom_site_displace_special_func
    _name.object_id              sawtooth
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Matrix
    _type.contents               Real
    _type.dimension              '[3]'
    _enumeration.default         [0.0 0.0 0.0]
# JRH notes
# Does the dREL below take into account the use of matrix_seq_id?
#
    loop_
    _method.purpose
    _method.expression
     Evaluation    
;
      With  f  as  atom_site_displace_special_func

      _atom_site_displace_special_func.sawtooth =  [
          
         2 * [f.sawtooth_ax, f.sawtooth_ay, f.sawtooth_az] * 
                     (( f.sawtooth_x4 - f.sawtooth_c) / f.sawtooth_w )]
; 

save_
_atom_site_displace_special_func.sawtooth_axyz
CIF
The vector of amplitudes (maximum displacements) along the a (or a1),
b (or a2) and c (or a3) axis of the sawtooth function described in
_atom_site_displace_special_func.sawtooth
save_atom_site_displace_special_func.sawtooth_axyz

    _definition.id               '_atom_site_displace_special_func.sawtooth_axyz'
    _definition.update           2019-04-01
    _description.text
;

    The vector of amplitudes (maximum displacements) along the a (or a1), 
    b (or a2) and c (or a3) axis of the sawtooth function described in 
    _atom_site_displace_special_func.sawtooth
;
    _name.category_id            atom_site_displace_special_func
    _name.object_id              sawtooth_axyz
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Array
    _type.contents               Real
    _type.dimension              '[3]'
    _enumeration.default         [0.0 0.0 0.0]
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  s  as  atom_site_displace_special_func
            atom_site_displace_special_func.sawtooth_axyz = 
                              [ s.sawtooth_ax, s.sawtooth_ay, s.sawtooth_az ]
; 

save_
_atom_site_displace_special_func.sawtooth_ax
CIF
The amplitude (maximum displacement) along the a (or a1) axis of the
sawtooth function described in _atom_site_displace_special_func.sawtooth
save_atom_site_displace_special_func.sawtooth_ax

    _definition.id               '_atom_site_displace_special_func.sawtooth_ax'
    _definition.update           2017-09-28
    loop_
      _alias.definition_id
          '_atom_site_displace_special_func_sawtooth_ax' 
    _description.text                   
;

    The amplitude (maximum displacement) along the a (or a1) axis of the
    sawtooth function described in _atom_site_displace_special_func.sawtooth
;

    _name.category_id            atom_site_displace_special_func
    _name.object_id              sawtooth_ax
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  s  as  atom_site_displace_special_func

            atom_site_displace_special_func.sawtooth_ax = s.sawtooth_axyz[0]
; 

save_
_atom_site_displace_special_func.sawtooth_ay
CIF
The amplitude (maximum displacement) along the b (or a2) axis of the
sawtooth function described in _atom_site_displace_special_func.sawtooth
save_atom_site_displace_special_func.sawtooth_ay

    _definition.id               '_atom_site_displace_special_func.sawtooth_ay'
    _definition.update           2017-09-28
    loop_
      _alias.definition_id
          '_atom_site_displace_special_func_sawtooth_ay' 
    _description.text                   
;

    The amplitude (maximum displacement) along the b (or a2) axis of the
    sawtooth function described in _atom_site_displace_special_func.sawtooth
;
    _name.category_id            atom_site_displace_special_func
    _name.object_id              sawtooth_ay
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  s  as  atom_site_displace_special_func

            atom_site_displace_special_func.sawtooth_ay = s.sawtooth_axyz[1]
; 

save_
_atom_site_displace_special_func.sawtooth_az
CIF
The amplitude (maximum displacement) along the c (or a3) axis of the
sawtooth function described in _atom_site_displace_special_func.sawtooth
save_atom_site_displace_special_func.sawtooth_az

    _definition.id               '_atom_site_displace_special_func.sawtooth_az'
    _definition.update           2017-09-28
    loop_
      _alias.definition_id
          '_atom_site_displace_special_func_sawtooth_az' 
    _description.text                   
;

     The amplitude (maximum displacement) along the c (or a3) axis of the
     sawtooth function described in _atom_site_displace_special_func.sawtooth
;
    _name.category_id            atom_site_displace_special_func
    _name.object_id              sawtooth_az
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  s  as  atom_site_displace_special_func

            atom_site_displace_special_func.sawtooth_az = s.sawtooth_axyz[2]
; 

save_
_atom_site_displace_special_func.sawtooth_c
CIF
The centre of the sawtooth function described in
_atom_site_displace_special_func.sawtooth
save_atom_site_displace_special_func.sawtooth_c

    _definition.id               '_atom_site_displace_special_func.sawtooth_c'
    _definition.update           2017-09-28
    loop_
      _alias.definition_id
          '_atom_site_displace_special_func_sawtooth_c' 
    _description.text                   
;

    The centre of the sawtooth function described in
    _atom_site_displace_special_func.sawtooth
;
    _name.category_id            atom_site_displace_special_func
    _name.object_id              sawtooth_c
    _type.purpose                Measurand
    _type.source                 Derived
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    _enumeration.range           0.0:1.0

save_
_atom_site_displace_special_func.sawtooth_w
CIF
The width of the sawtooth function described in
_atom_site_displace_special_func.sawtooth
save_atom_site_displace_special_func.sawtooth_w

    _definition.id               '_atom_site_displace_special_func.sawtooth_w'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_displace_special_func_sawtooth_w' 
    _description.text                   
;

    The width of the sawtooth function described in
    _atom_site_displace_special_func.sawtooth
;
    _name.category_id            atom_site_displace_special_func
    _name.object_id              sawtooth_w
    _type.purpose                Measurand
    _type.source                 Derived
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    _enumeration.range           0.0:1.0
save_
_atom_site_displace_special_func.zigzag
CIF
_atom_site_displace_special_func.zigzag_ items are the
adjustable parameters of a zigzag function.
A displacive zigzag function along the internal space is
defined as follows:
 2*[ax,ay,az]*(x4-c)/w for x4 in [c-(w/2),c+(w/2)]
[ux,uy,uz] =
-2*[ax,ay,az]*(x4-c)/w for x4 in [c+1/2-(w/2),c+1/2+(w/2)]
where ax,ay and az are the amplitudes (maximum displacements)
along each crystallographic axis, w is its width, x4 is the
internal coordinate and c is the centre of the function in
internal space. ux, uy and uz must be expressed in relative
units or in angstroms if the modulations are referred to some
special axes defined by the items belonging to the ATOM_SITES_AXES
category, through _atom_site_displace_Fourier.matrix_seq_id.
The use of this function is restricted to one-dimensional
modulated structures. For more details, see (Elcoro et al., 2008;
Petricek, Dusek & Palatinus, 2014 and Petricek, Eigner, Dusek
& Cejchan, 2016). In the case of rigid groups, items in this
category would only include the translational part of the modulation.
The rotational part would appear in a separate list of items belonging
to the ATOM_SITE_ROT_SPECIAL_FUNC category.
References: Luis Elcoro, J.M. Perez-Mato, Karen Friese, Vaclav Petricek,
Tonci Balic-Zunic & Lars Arnskov Olsen (2008)
Acta Cryst. B64, 684-701. doi:10.1107/S0108768108031492
Modular crystals as modulated structures: the case of the
lillianite homologous series
Petricek, V., Dusek, M. & Palatinus, L. (2014).
Z. Kristallogr. 229(5), 345-352.  DOI 10.1515/zkri-2014-1737
Crystallographic Computing System JANA2006: General features
Petricek, V., Eigner, V., Dusek, M. & Cejchan, A. (2016). Z.
Kristallogr. 231(5), 301-312. DOI 10.1515/zkri-2015-1913
Discontinuous modulation functions and their application for
analysis of modulated structures with the computing system
JANA2006
save_atom_site_displace_special_func.zigzag

    _definition.id               '_atom_site_displace_special_func.zigzag'
    _definition.update           2019-04-01
    _description.text                   
;

      _atom_site_displace_special_func.zigzag_ items are the
      adjustable parameters of a zigzag function.
      A displacive zigzag function along the internal space is
      defined as follows:

                   2*[ax,ay,az]*(x4-c)/w for x4 in [c-(w/2),c+(w/2)]
      [ux,uy,uz] = 
                  -2*[ax,ay,az]*(x4-c)/w for x4 in [c+1/2-(w/2),c+1/2+(w/2)]

      where ax,ay and az are the amplitudes (maximum displacements)
      along each crystallographic axis, w is its width, x4 is the
      internal coordinate and c is the centre of the function in
      internal space. ux, uy and uz must be expressed in relative
      units or in angstroms if the modulations are referred to some
      special axes defined by the items belonging to the ATOM_SITES_AXES 
      category, through _atom_site_displace_Fourier.matrix_seq_id.
      The use of this function is restricted to one-dimensional 
      modulated structures. For more details, see (Elcoro et al., 2008; 
      Petricek, Dusek & Palatinus, 2014 and Petricek, Eigner, Dusek 
      & Cejchan, 2016). In the case of rigid groups, items in this 
      category would only include the translational part of the modulation. 
      The rotational part would appear in a separate list of items belonging 
      to the ATOM_SITE_ROT_SPECIAL_FUNC category.

      References: Luis Elcoro, J.M. Perez-Mato, Karen Friese, Vaclav Petricek,
                  Tonci Balic-Zunic & Lars Arnskov Olsen (2008)
                  Acta Cryst. B64, 684-701. doi:10.1107/S0108768108031492
                  Modular crystals as modulated structures: the case of the 
                  lillianite homologous series

                  Petricek, V., Dusek, M. & Palatinus, L. (2014).
                  Z. Kristallogr. 229(5), 345-352.  DOI 10.1515/zkri-2014-1737     
                  Crystallographic Computing System JANA2006: General features

                  Petricek, V., Eigner, V., Dusek, M. & Cejchan, A. (2016). Z.
                  Kristallogr. 231(5), 301-312. DOI 10.1515/zkri-2015-1913 
                  Discontinuous modulation functions and their application for 
                  analysis of modulated structures with the computing system  
                  JANA2006
;
    _name.category_id            atom_site_displace_special_func
    _name.object_id              zigzag
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Matrix
    _type.contents               Real
    _type.dimension              '[3]'
    _enumeration.default         [0.0 0.0 0.0]
    loop_
      _method.purpose
      _method.expression
      Evaluation    
;
      With  f  as  atom_site_displace_special_func

      atom_site_displace_special_func.zigzag =  [
          
         2 * [f.zigzag_ax, f.zigzag_ay, f.zigzag_az] * 
                     (( zigzag_x4  f.zigzag_c) / f.zigzag_w )]
; 

save_
_atom_site_displace_special_func.zigzag_axyz
CIF
The vector of amplitudes (maximum displacements) along the a (or a1),
b (or a2) and c (or a3) axis of the zigzag function described in
_atom_site_displace_special_func.zigzag
save_atom_site_displace_special_func.zigzag_axyz

    _definition.id               '_atom_site_displace_special_func.zigzag_axyz'
    _definition.update           2019-04-01
    _description.text                   
;

    The vector of amplitudes (maximum displacements) along the a (or a1), 
    b (or a2) and c (or a3) axis of the zigzag function described in   
    _atom_site_displace_special_func.zigzag
;
    _name.category_id            atom_site_displace_special_func
    _name.object_id              zigzag_axyz
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Array
    _type.contents               Real
    _type.dimension              '[3]'
    _enumeration.default         [0.0 0.0 0.0]

save_
_atom_site_displace_special_func.zigzag_c
CIF
The centre of the zigzag function described in
_atom_site_displace_special_func.zigzag
save_atom_site_displace_special_func.zigzag_c

    _definition.id               '_atom_site_displace_special_func.zigzag_c'
    _definition.update           2014-06-27
    _description.text                   
;

    The centre of the zigzag function described in 
    _atom_site_displace_special_func.zigzag
;
    _name.category_id            atom_site_displace_special_func
    _name.object_id              zigzag_c
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    _enumeration.range           0.0:1.0
    

save_
_atom_site_displace_special_func.zigzag_w
CIF
The width of the zigzag function described in
_atom_site_displace_special_func.zigzag
save_atom_site_displace_special_func.zigzag_w

    _definition.id               '_atom_site_displace_special_func.zigzag_w'
    _definition.update           2014-06-27
    _description.text                   
;

    The width of the zigzag function described in 
    _atom_site_displace_special_func.zigzag
;
    _name.category_id            atom_site_displace_special_func
    _name.object_id              zigzag_w
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    _enumeration.range           0.0:1.0

save_
ATOM_SITE_DISPLACE_XHARM
CIF
The set of harmonic functions used in the Fourier series describing the
Modulation functions is orthogonal and complete in the interval [0,1).
However within of the x4 interval defined by a Crenel function orthogonality
is no longer preserved and therefore the Fourier coefficients are correlated
and the refinement becomes fragile. There are several ways to avoid this
technical problem (see Petricek et al., 2016). One of them is to use
orthogonal or orthogonalized sets of functions defined within the Crenel
interval. This procedure is more robust than the orthogonalization of harmonics
described in *_ORTHO. categories. Moreover these sets of functions are
complete. Two different sets of orthogonal or orthogonalized functions have
been implemented in JANA2006: Legendre polynomials and the so-called
x-harmonics. x-harmonic functions are defined from the set (Petricek, Eigner,
Dusek & Cejchan, 2016):
{1, x, sin( x), cos( x), ... , sin(n x), cos(n x)}
and a subsequent orthogonalization (see the above reference and the
supplementary material) owing to the presence of x which is not orthogonal to
sin(n x) (for any n). Notice that x-harmonics are restricted to one-
dimensional cases and include as a particular case the sawtooth modulation.
Data items in the ATOM_SITE_DISPLACE_XHARM category record details about the
x-harmonic functions used to describe the displacive modulations when the
atomic domain of a given atom is restricted by a crenel function. In the case
of rigid groups, items in this category would only include the translational
part of the modulation. The rotational part would appear in a separate list of
items belonging to the ATOM_SITE_ROT_XHARM category.
References: Petricek, V., Van Der Lee & Evain, M. (1995).
Acta Cryst. A51, 529-535. DOI 10.1107/S0108767395000365
On the Use of Crenel Functions for Occupationally Modulated
Structures
Petricek, V., Eigner, V., Dusek, M. & Cejchan, A. (2016). Z.
Kristallogr. 231(5), 301-312. DOI 10.1515/zkri-2015-1913
Discontinuous modulation functions and their application for
analysis of modulated structures with the computing system JANA2006
save_ATOM_SITE_DISPLACE_XHARM

    _definition.id               ATOM_SITE_DISPLACE_XHARM
    _definition.scope            Category
    _definition.class            Loop
    _definition.update           2014-06-27
    _description.text                   
;
 
      The set of harmonic functions used in the Fourier series describing the 
      Modulation functions is orthogonal and complete in the interval [0,1). 
      However within of the x4 interval defined by a Crenel function orthogonality
      is no longer preserved and therefore the Fourier coefficients are correlated
      and the refinement becomes fragile. There are several ways to avoid this
      technical problem (see Petricek et al., 2016). One of them is to use
      orthogonal or orthogonalized sets of functions defined within the Crenel
      interval. This procedure is more robust than the orthogonalization of harmonics 
      described in *_ORTHO. categories. Moreover these sets of functions are 
      complete. Two different sets of orthogonal or orthogonalized functions have 
      been implemented in JANA2006: Legendre polynomials and the so-called 
      x-harmonics. x-harmonic functions are defined from the set (Petricek, Eigner, 
      Dusek & Cejchan, 2016):

      {1, x, sin(\p x), cos(\p x), ... , sin(n\p x), cos(n\p x)}

      and a subsequent orthogonalization (see the above reference and the 
      supplementary material) owing to the presence of x which is not orthogonal to 
      sin(n\p x) (for any n). Notice that x-harmonics are restricted to one-
      dimensional cases and include as a particular case the sawtooth modulation.

      Data items in the ATOM_SITE_DISPLACE_XHARM category record details about the 
      x-harmonic functions used to describe the displacive modulations when the 
      atomic domain of a given atom is restricted by a crenel function. In the case 
      of rigid groups, items in this category would only include the translational 
      part of the modulation. The rotational part would appear in a separate list of 
      items belonging to the ATOM_SITE_ROT_XHARM category. 

      References: Petricek, V., Van Der Lee & Evain, M. (1995).
                  Acta Cryst. A51, 529-535. DOI 10.1107/S0108767395000365
                  On the Use of Crenel Functions for Occupationally Modulated  
                  Structures 

                  Petricek, V., Eigner, V., Dusek, M. & Cejchan, A. (2016). Z. 
                  Kristallogr. 231(5), 301-312. DOI 10.1515/zkri-2015-1913 
                  Discontinuous modulation functions and their application for 
                  analysis of modulated structures with the computing system JANA2006 
;
    _name.category_id            MS_GROUP
    _name.object_id              ATOM_SITE_DISPLACE_XHARM
    loop_
      _category_key.name         '_atom_site_displace_xharm.id'
  
save_
_atom_site_displace_xharm.atom_site_label
CIF
Modulation parameters are usually looped in separate lists.
Modulated parameters are the atom positions (displacive
modulation), the atomic occupation (occupational modulation)
and/or the anisotropic (or isotropic) ADP.
_atom_site_displace_xharm.atom_site_label is the code that identifies
an atom or rigid group in a loop in which the x-harmonics components
of its displacive modulation are listed. In the case of a rigid group,
this list would only include the translational part of its displacive
modulation. The rotational part (if any) would appear in a separate list
(see _atom_site_rot_xharm.atom_site_label). This code must match the
_atom_site.label of the associated coordinate list and conform to the
rules described in _atom_site.label.
save_atom_site_displace_xharm.atom_site_label

    _definition.id               '_atom_site_displace_xharm.atom_site_label'
    _definition.update           2014-06-27
    _description.text                   
;

      Modulation parameters are usually looped in separate lists.
      Modulated parameters are the atom positions (displacive
      modulation), the atomic occupation (occupational modulation)
      and/or the anisotropic (or isotropic) ADP.  
      _atom_site_displace_xharm.atom_site_label is the code that identifies 
      an atom or rigid group in a loop in which the x-harmonics components 
      of its displacive modulation are listed. In the case of a rigid group, 
      this list would only include the translational part of its displacive 
      modulation. The rotational part (if any) would appear in a separate list 
      (see _atom_site_rot_xharm.atom_site_label). This code must match the 
      _atom_site.label of the associated coordinate list and conform to the 
      rules described in _atom_site.label.
;
    _name.category_id            atom_site_displace_xharm
    _name.object_id              atom_site_label
    _name.linked_item_id         '_atom_site.label'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_displace_xharm.axis
CIF
A label identifying the displacement component of a given atom
or rigid group that is being parameterized by x-harmonic functions.
a, b and c are the basic lattice vectors of the reference
structure. For composites they refer to the reference structure of
each subsystem. a~1~, a~2~ and a~3~ are defined by the
items belonging to the ATOM_SITES_AXES category, through
_atom_site_displace_xharm.matrix_seq_id.
save_atom_site_displace_xharm.axis

    _definition.id               '_atom_site_displace_xharm.axis'
    _definition.update           2014-06-27
    _description.text                   
;

      A label identifying the displacement component of a given atom
      or rigid group that is being parameterized by x-harmonic functions. 
      a, b and c are the basic lattice vectors of the reference  
      structure. For composites they refer to the reference structure of 
      each subsystem. a~1~, a~2~ and a~3~ are defined by the
      items belonging to the ATOM_SITES_AXES category, through 
      _atom_site_displace_xharm.matrix_seq_id.
;
    _name.category_id            atom_site_displace_xharm
    _name.object_id              axis
    _type.purpose                State
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Code
    loop_
      _enumeration_set.state
      _enumeration_set.detail
              x             'displacement along the a axis'          
              y             'displacement along the b axis'          
              z             'displacement along the c axis'          
              a1            'displacement along an arbitrary a1 axis'          
              a2            'displacement along an arbitrary a2 axis'          
              a3            'displacement along an arbitrary a3 axis' 

save_
_atom_site_displace_xharm.coeff
CIF
The coefficient corresponding to the x-harmonic function
defined by _atom_site_displace_xharm.atom_site_label,
_atom_site_displace_xharm.axis and _atom_site_displace_xharm.order.
Atomic or rigid-group displacements must be expressed as fractions
of the unit cell or in angstroms if the modulations are referred to some
special axes defined by defined by the items belonging to the
ATOM_SITES_AXES category, through _atom_site_rot_xharm.matrix_seq_id.
save_atom_site_displace_xharm.coeff

    _definition.id               '_atom_site_displace_xharm.coeff'
    _definition.update           2014-06-27
    _description.text                   
;

      The coefficient corresponding to the x-harmonic function 
      defined by _atom_site_displace_xharm.atom_site_label,
      _atom_site_displace_xharm.axis and _atom_site_displace_xharm.order.  
      Atomic or rigid-group displacements must be expressed as fractions 
      of the unit cell or in angstroms if the modulations are referred to some
      special axes defined by defined by the items belonging to the 
      ATOM_SITES_AXES category, through _atom_site_rot_xharm.matrix_seq_id.
;
    _name.category_id            atom_site_displace_xharm
    _name.object_id              coeff
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0

save_
_atom_site_displace_xharm.id
CIF
A code identifying each component of the displacive modulation of
a given atom or rigid group when the modulation is expressed in
terms of x-harmonics. In the case of a rigid group, it applies
only to the translational part of the distortion.
save_atom_site_displace_xharm.id

    _definition.id               '_atom_site_displace_xharm.id'
    _definition.update           2014-06-27
    _description.text                   
;

      A code identifying each component of the displacive modulation of
      a given atom or rigid group when the modulation is expressed in
      terms of x-harmonics. In the case of a rigid group, it applies 
      only to the translational part of the distortion.
;
    _name.category_id            atom_site_displace_xharm
    _name.object_id              id
    _type.purpose                Key
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_displace_xharm.matrix_seq_id
CIF
A numeric code identifying the transformation matrix that defines
the arbitrary axes a1, a2 and a3 in terms of the crystallographic axes.
This code must match _atom_sites_axes.matrix_seq_id.
save_atom_site_displace_xharm.matrix_seq_id

    _definition.id               '_atom_site_displace_xharm.matrix_seq_id'
    _definition.update           2014-06-27
    _description.text                   
;

      A numeric code identifying the transformation matrix that defines
      the arbitrary axes a1, a2 and a3 in terms of the crystallographic axes. 
      This code must match _atom_sites_axes.matrix_seq_id.
;
    _name.category_id            atom_site_displace_xharm
    _name.object_id              matrix_seq_id
    _name.linked_item_id         '_atom_sites_axes.matrix_seq_id'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_displace_xharm.order
CIF
The order of each x-harmonic function.
save_atom_site_displace_xharm.order

    _definition.id               '_atom_site_displace_xharm.order'
    _definition.update           2019-09-25
    _description.text                   
;

      The order of each x-harmonic function.
;
    _name.category_id            atom_site_displace_xharm
    _name.object_id              order
    _type.purpose                Key
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Integer
    _enumeration.range           0:

save_
ATOM_SITE_FOURIER_WAVE_VECTOR
CIF
Data items in the ATOM_SITE_FOURIER_WAVE_VECTOR category record
details about the wave vectors of the Fourier terms used in the
structural model.
save_ATOM_SITE_FOURIER_WAVE_VECTOR

    _definition.id               ATOM_SITE_FOURIER_WAVE_VECTOR
    _definition.scope            Category
    _definition.class            Loop
    _definition.update           2014-06-27
    _description.text                   
;

      Data items in the ATOM_SITE_FOURIER_WAVE_VECTOR category record
      details about the wave vectors of the Fourier terms used in the
      structural model.
;
    _name.category_id            MS_GROUP
    _name.object_id              ATOM_SITE_FOURIER_WAVE_VECTOR
    loop_
    _category_key.name          '_atom_site_Fourier_wave_vector.seq_id'

save_
_atom_site_Fourier_wave_vector.description
CIF
A description of the linear combination involved in a given
Fourier wave vector used to describe the atomic modulation
functions.
Example:
q(4)=q(1)+q(2)
save_atom_site_Fourier_wave_vector.description

    _definition.id               '_atom_site_Fourier_wave_vector.description'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_Fourier_wave_vector_description' 
    _description.text                   
;

      A description of the linear combination involved in a given
      Fourier wave vector used to describe the atomic modulation
      functions.
;
    _name.category_id            atom_site_Fourier_wave_vector
    _name.object_id              description
    _type.purpose                Describe
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Text
    loop_
    _description_example.case
            "q(4)=q(1)+q(2)" 

save_
_atom_site_Fourier_wave_vector.seq_id
CIF
A numeric code identifying the wave vectors defined in
_atom_site_Fourier_wave_vector.*
save_atom_site_Fourier_wave_vector.seq_id

    _definition.id               '_atom_site_Fourier_wave_vector.seq_id'
    _definition.update           2019-09-25
    loop_
      _alias.definition_id
          '_atom_site_Fourier_wave_vector_seq_id'
    _description.text                   
;

      A numeric code identifying the wave vectors defined in
      _atom_site_Fourier_wave_vector.*
;
    _name.category_id            atom_site_Fourier_wave_vector
    _name.object_id              seq_id
    _type.purpose                Key
    _type.source                 Related
    _type.container              Single
    _type.contents               Integer
    _enumeration.range           0:
    _enumeration.default         1

save_
_atom_site_Fourier_wave_vector.q_coeff
CIF
Wave vectors of the Fourier terms used in the structural model
to describe the atomic modulation functions, expressed with
respect to the three-dimensional reciprocal basis that spans
the lattice of main reflections. They are linear combinations
with integer coefficients of the independent wave vectors given
in the _cell_wave_vector. list. Therefore, a generic Fourier wave
vector is expressed as k=n(1)q(1)+...+n(p)q(p), where p is given
by _cell_modulation_dimension. In the case of composites
described in a single data block, these wave vectors are
expressed with respect to the three-dimensional reciprocal
basis of each subsystem (see _cell_subsystem.matrix_W_*).
_atom_site_Fourier_wave_vector.coeff contains the coefficients that
express a given k as a linear combination of the independent wave vectors
given in _cell_modulation_dimension. The enumeration of the independent
wave vectors (1,2, ...) is given by the value of
_atom_site_Fourier_wave_vector_.q_coeff_seq_id matching the
corresponding value of _cell_wave_vector.seq_id
save_atom_site_Fourier_wave_vector.q_coeff

    _definition.id               '_atom_site_Fourier_wave_vector.q_coeff'
    _definition.update           2019-04-01
    _description.text                   
;

      Wave vectors of the Fourier terms used in the structural model
      to describe the atomic modulation functions, expressed with
      respect to the three-dimensional reciprocal basis that spans
      the lattice of main reflections. They are linear combinations
      with integer coefficients of the independent wave vectors given
      in the _cell_wave_vector. list. Therefore, a generic Fourier wave
      vector is expressed as k=n(1)q(1)+...+n(p)q(p), where p is given
      by _cell_modulation_dimension. In the case of composites
      described in a single data block, these wave vectors are
      expressed with respect to the three-dimensional reciprocal
      basis of each subsystem (see _cell_subsystem.matrix_W_*).
      _atom_site_Fourier_wave_vector.coeff contains the coefficients that 
      express a given k as a linear combination of the independent wave vectors 
      given in _cell_modulation_dimension. The enumeration of the independent 
      wave vectors (1,2, ...) is given by the value of 
      _atom_site_Fourier_wave_vector_.q_coeff_seq_id matching the 
      corresponding value of _cell_wave_vector.seq_id 
;
    _name.category_id            atom_site_Fourier_wave_vector
    _name.object_id              q_coeff
    _type.purpose                Number
    _type.source                 Assigned
    _type.container              List
    _type.contents               Integer
    _type.dimension              '[]'
    _enumeration.default         [0]

save_
_atom_site_Fourier_wave_vector.q_coeff_seq_id
CIF
The list of codes that identifies each independent wave vector
appearing in the linear combination that expresses a generic
Fourier wave vector as k=n(1)q(1)+...+n(p)q(p), where p is given
by _cell_modulation_dimension. In the case of composites
described in a single data block, these wave vectors are
expressed with respect to the three-dimensional reciprocal
basis of each subsystem (see _cell_subsystem.matrix_W_*).
save_atom_site_Fourier_wave_vector.q_coeff_seq_id

    _definition.id               '_atom_site_Fourier_wave_vector.q_coeff_seq_id'
    _definition.update           2019-04-01
    _description.text                   
;

      The list of codes that identifies each independent wave vector
      appearing in the linear combination that expresses a generic 
      Fourier wave vector as k=n(1)q(1)+...+n(p)q(p), where p is given
      by _cell_modulation_dimension. In the case of composites
      described in a single data block, these wave vectors are
      expressed with respect to the three-dimensional reciprocal
      basis of each subsystem (see _cell_subsystem.matrix_W_*). 
;
    _name.category_id            atom_site_Fourier_wave_vector
    _name.object_id              q_coeff_seq_id
    _type.purpose                Number
    _type.source                 Assigned
    _type.container              List
    _type.contents               Code
    _type.dimension              '[]'
    _enumeration.default         [1] 

save_
_atom_site_Fourier_wave_vector.x
CIF
Wave vectors of the Fourier terms used in the structural model
to describe the atomic modulation functions, expressed with
respect to the three-dimensional reciprocal basis that spans
the lattice of main reflections. They are linear combinations
with integer coefficients of the independent wave vectors given
in the _cell_wave_vector_ list. Therefore, a generic Fourier wave
vector is expressed as k=n(1)q(1)+...+n(p)q(p), where p is given
by _cell_modulation_dimension. In the case of composites
described in a single data block, these wave vectors are
expressed with respect to the three-dimensional reciprocal
basis of each subsystem (see _cell_subsystem.matrix_W_*).
save_atom_site_Fourier_wave_vector.x

    _definition.id               '_atom_site_Fourier_wave_vector.x'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_Fourier_wave_vector_x' 
    _description.text                   
;

      Wave vectors of the Fourier terms used in the structural model
      to describe the atomic modulation functions, expressed with
      respect to the three-dimensional reciprocal basis that spans
      the lattice of main reflections. They are linear combinations
      with integer coefficients of the independent wave vectors given
      in the _cell_wave_vector_ list. Therefore, a generic Fourier wave
      vector is expressed as k=n(1)q(1)+...+n(p)q(p), where p is given
      by _cell_modulation_dimension. In the case of composites
      described in a single data block, these wave vectors are
      expressed with respect to the three-dimensional reciprocal
      basis of each subsystem (see _cell_subsystem.matrix_W_*).
;
    _name.category_id            atom_site_Fourier_wave_vector
    _name.object_id              x
    _type.purpose                Number
    _type.source                 Derived
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  m  as  atom_site_Fourier_wave_vector

            atom_site_Fourier_wave_vector.x   =   m.xyz[ 0 ]
; 


save_
_atom_site_Fourier_wave_vector.xyz
CIF
Wave vectors of the Fourier terms used in the structural model
to describe the atomic modulation functions, expressed with
respect to the three-dimensional reciprocal basis that spans
the lattice of main reflections. They are linear combinations
with integer coefficients of the independent wave vectors given
in the _cell_wave_vector. list. Therefore, a generic Fourier wave
vector is expressed as k=n(1)q(1)+...+n(p)q(p), where p is given
by _cell_modulation_dimension. In the case of composites
described in a single data block, these wave vectors are
expressed with respect to the three-dimensional reciprocal
basis of each subsystem (see _cell_subsystem.matrix_W_*).
save_atom_site_Fourier_wave_vector.xyz

    _definition.id               '_atom_site_Fourier_wave_vector.xyz'
    _definition.update           2019-04-01
    _description.text                   
;

      Wave vectors of the Fourier terms used in the structural model
      to describe the atomic modulation functions, expressed with
      respect to the three-dimensional reciprocal basis that spans
      the lattice of main reflections. They are linear combinations
      with integer coefficients of the independent wave vectors given
      in the _cell_wave_vector. list. Therefore, a generic Fourier wave
      vector is expressed as k=n(1)q(1)+...+n(p)q(p), where p is given
      by _cell_modulation_dimension. In the case of composites
      described in a single data block, these wave vectors are
      expressed with respect to the three-dimensional reciprocal
      basis of each subsystem (see _cell_subsystem.matrix_W_*).
;
    _name.category_id            atom_site_Fourier_wave_vector
    _name.object_id              xyz
    _type.purpose                Number
    _type.source                 Derived
    _type.container              Matrix
    _type.contents               Real
    _type.dimension              '[3]'
loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  m  as  atom_site_Fourier_wave_vector

            atom_site_Fourier_wave_vector.xyz   =   [ m.x, m.y, m.z ]

# The null vector is allowed for a possible homogeneus term of Fourier Series. But
# it is also used as a test for the case where m.x, m.y and m.z are not given and 
# therefore an alternative way to have the wave vectors is necessary

       If (atom_site_Fourier_wave_vector.xyz == [0.0,0.0,0.0] {
       
         Loop w as cell_wave_vector {

           i=0
           For s in m.q_coeff_seq_id {
              If (w.seq_id == s) {

                atom_site_Fourier_wave_vector.xyz_from_coeff =
                atom_site_Fourier_wave_vector.xyz_from_coeff + m.q_coeff[i]*w.xyz }

              Else {

                i += 1 }

           } # End For
         }   # End Loop
       }     # End If
; 

save_
_atom_site_Fourier_wave_vector.y
CIF
Wave vectors of the Fourier terms used in the structural model
to describe the atomic modulation functions, expressed with
respect to the three-dimensional reciprocal basis that spans
the lattice of main reflections. They are linear combinations
with integer coefficients of the independent wave vectors given
in the _cell_wave_vector_ list. Therefore, a generic Fourier wave
vector is expressed as k=n(1)q(1)+...+n(p)q(p), where p is given
by _cell_modulation_dimension. In the case of composites
described in a single data block, these wave vectors are
expressed with respect to the three-dimensional reciprocal
basis of each subsystem (see _cell_subsystem.matrix_W_*).
save_atom_site_Fourier_wave_vector.y

    _definition.id               '_atom_site_Fourier_wave_vector.y'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_Fourier_wave_vector_y' 
    _description.text                   
;

      Wave vectors of the Fourier terms used in the structural model
      to describe the atomic modulation functions, expressed with
      respect to the three-dimensional reciprocal basis that spans
      the lattice of main reflections. They are linear combinations
      with integer coefficients of the independent wave vectors given
      in the _cell_wave_vector_ list. Therefore, a generic Fourier wave
      vector is expressed as k=n(1)q(1)+...+n(p)q(p), where p is given
      by _cell_modulation_dimension. In the case of composites
      described in a single data block, these wave vectors are
      expressed with respect to the three-dimensional reciprocal
      basis of each subsystem (see _cell_subsystem.matrix_W_*).
;
    _name.category_id            atom_site_Fourier_wave_vector
    _name.object_id              y
    _type.purpose                Number
    _type.source                 Derived
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  m  as  atom_site_Fourier_wave_vector

            atom_site_Fourier_wave_vector.y   =   m.xyz[ 1 ]
; 


save_
_atom_site_Fourier_wave_vector.z
CIF
Wave vectors of the Fourier terms used in the structural model
to describe the atomic modulation functions, expressed with
respect to the three-dimensional reciprocal basis that spans
the lattice of main reflections. They are linear combinations
with integer coefficients of the independent wave vectors given
in the _cell_wave_vector_ list. Therefore, a generic Fourier wave
vector is expressed as k=n(1)q(1)+...+n(p)q(p), where p is given
by _cell_modulation_dimension. In the case of composites
described in a single data block, these wave vectors are
expressed with respect to the three-dimensional reciprocal
basis of each subsystem (see _cell_subsystem.matrix_W_*).
save_atom_site_Fourier_wave_vector.z

    _definition.id               '_atom_site_Fourier_wave_vector.z'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_Fourier_wave_vector_z' 
    _description.text                   
;

      Wave vectors of the Fourier terms used in the structural model
      to describe the atomic modulation functions, expressed with
      respect to the three-dimensional reciprocal basis that spans
      the lattice of main reflections. They are linear combinations
      with integer coefficients of the independent wave vectors given
      in the _cell_wave_vector_ list. Therefore, a generic Fourier wave
      vector is expressed as k=n(1)q(1)+...+n(p)q(p), where p is given
      by _cell_modulation_dimension. In the case of composites
      described in a single data block, these wave vectors are
      expressed with respect to the three-dimensional reciprocal
      basis of each subsystem (see _cell_subsystem.matrix_W_*).
;
    _name.category_id            atom_site_Fourier_wave_vector
    _name.object_id              z
    _type.purpose                Number
    _type.source                 Derived
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  m  as  atom_site_Fourier_wave_vector

            atom_site_Fourier_wave_vector.z   =   m.xyz[ 2 ]
; 


save_
ATOM_SITE_OCC_FOURIER
CIF
Data items in the ATOM_SITE_OCC_FOURIER category record details
about the Fourier components of the occupational modulation of
the atom sites in a modulated structure. The (in general complex)
coefficients of each Fourier component belong to the child category
ATOM_SITE_OCC_FOURIER_PARAM and may be listed separately.
save_ATOM_SITE_OCC_FOURIER

    _definition.id               ATOM_SITE_OCC_FOURIER
    _definition.scope            Category
    _definition.class            Loop
    _definition.update           2014-06-27
    _description.text                   
;

      Data items in the ATOM_SITE_OCC_FOURIER category record details
      about the Fourier components of the occupational modulation of
      the atom sites in a modulated structure. The (in general complex)
      coefficients of each Fourier component belong to the child category
      ATOM_SITE_OCC_FOURIER_PARAM and may be listed separately.
;
    _name.category_id            MS_GROUP
    _name.object_id              ATOM_SITE_OCC_FOURIER
    loop_
        _category_key.name      '_atom_site_occ_Fourier.id'

save_
_atom_site_occ_Fourier.atom_site_label
CIF
Modulation parameters are usually looped in separate lists.
Modulated parameters are the atom positions (displacive
modulation), the atomic occupation (occupational modulation)
and/or the anisotropic (or isotropic) ADP.
_atom_site_occ_Fourier.atom_site_label is the code that
identifies an atom in a loop in which the Fourier components of
its occupational modulation are listed. This code must
match the _atom_site.label of the associated coordinate list and
conform to the rules described in _atom_site.label.
save_atom_site_occ_Fourier.atom_site_label

    _definition.id               '_atom_site_occ_Fourier.atom_site_label'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_occ_Fourier_atom_site_label' 
    _description.text                   
;

      Modulation parameters are usually looped in separate lists.
      Modulated parameters are the atom positions (displacive
      modulation), the atomic occupation (occupational modulation)
      and/or the anisotropic (or isotropic) ADP.
       _atom_site_occ_Fourier.atom_site_label is the code that
      identifies an atom in a loop in which the Fourier components of
      its occupational modulation are listed. This code must
      match the _atom_site.label of the associated coordinate list and
      conform to the rules described in _atom_site.label.
;
    _name.category_id            atom_site_occ_Fourier
    _name.object_id              atom_site_label
    _name.linked_item_id         '_atom_site.label'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_occ_Fourier.id
CIF
A code identifying each component of the occupational modulation
of a given atom or rigid group when the modulation is
expressed in terms of Fourier series.
save_atom_site_occ_Fourier.id

    _definition.id               '_atom_site_occ_Fourier.id'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_occ_Fourier_id' 
    _description.text                   
;

      A code identifying each component of the occupational modulation
      of a given atom or rigid group when the modulation is
      expressed in terms of Fourier series.
;
    _name.category_id            atom_site_occ_Fourier
    _name.object_id              id
    _type.purpose                Key
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_occ_Fourier.wave_vector_seq_id
CIF
A numeric code identifying the wave vectors of the Fourier terms
used in the structural model to describe the modulation functions
corresponding to the occupational part of the distortion. This
code must match _atom_site_Fourier_wave_vector.seq_id.
save_atom_site_occ_Fourier.wave_vector_seq_id

    _definition.id               '_atom_site_occ_Fourier.wave_vector_seq_id'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_occ_Fourier_wave_vector_seq_id' 
    _description.text                   
;

      A numeric code identifying the wave vectors of the Fourier terms
      used in the structural model to describe the modulation functions
      corresponding to the occupational part of the distortion. This
      code must match _atom_site_Fourier_wave_vector.seq_id.
;
    _name.category_id            atom_site_occ_Fourier
    _name.object_id              wave_vector_seq_id
    _name.linked_item_id         '_atom_site_Fourier_wave_vector.seq_id'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
ATOM_SITE_OCC_FOURIER_PARAM
CIF
Data items in the ATOM_SITE_OCC_FOURIER_PARAM category record
details about the coefficients of the Fourier series used to
describe the occupational modulation of the atom sites in a
modulated structure. The Fourier components are defined in the
parent category ATOM_SITE_OCC_FOURIER. Notice that items in this
category may be listed together with those of the
ATOM_SITE_DISPLACE_FOURIER category.
save_ATOM_SITE_OCC_FOURIER_PARAM

    _definition.id               ATOM_SITE_OCC_FOURIER_PARAM
    _definition.scope            Category
    _definition.class            Loop
    _definition.update           2014-06-27
    _description.text                   
;

      Data items in the ATOM_SITE_OCC_FOURIER_PARAM category record
      details about the coefficients of the Fourier series used to
      describe the occupational modulation of the atom sites in a
      modulated structure. The Fourier components are defined in the
      parent category ATOM_SITE_OCC_FOURIER. Notice that items in this 
      category may be listed together with those of the 
      ATOM_SITE_DISPLACE_FOURIER category.
;
    _name.category_id            ATOM_SITE_OCC_FOURIER
    _name.object_id              ATOM_SITE_OCC_FOURIER_PARAM
    loop_
       _category_key.name        '_atom_site_occ_Fourier_param.id'

save_
_atom_site_occ_Fourier_param.cos
CIF
The occupational distortion of a given atom or rigid group is
usually parameterized by Fourier series. Each term of the series
commonly adopts two different representations: the sine-cosine
form,
Pc cos(2\p k r)+Ps sin(2\p k r),
and the modulus-argument form,
|P| cos(2\p k r+\d),
where k is the wave vector of the term and r is the atomic
average position. _atom_site_occ_Fourier_param.cos is the cosine
coefficient (Pc) corresponding to the Fourier term defined by
_atom_site_occ_Fourier.atom_site_label and
_atom_site_occ_Fourier.wave_vector_seq_id.
save_atom_site_occ_Fourier_param.cos

    _definition.id               '_atom_site_occ_Fourier_param.cos'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_occ_Fourier_param_cos' 
    _description.text                   
;

      The occupational distortion of a given atom or rigid group is
      usually parameterized by Fourier series. Each term of the series
      commonly adopts two different representations: the sine-cosine
      form,
               Pc cos(2\\p k r)+Ps sin(2\\p k r),
      and the modulus-argument form,
               |P| cos(2\\p k r+\\d),
      where k is the wave vector of the term and r is the atomic
      average position. _atom_site_occ_Fourier_param.cos is the cosine
      coefficient (Pc) corresponding to the Fourier term defined by
      _atom_site_occ_Fourier.atom_site_label and
      _atom_site_occ_Fourier.wave_vector_seq_id.
;
    _name.category_id            atom_site_occ_Fourier_param
    _name.object_id              cos
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    loop_
      _method.purpose
      _method.expression
      Evaluation    
;
      With  p  as  atom_site_occ_Fourier_param

       atom_site_occ_Fourier_param.cos =  p.modulus*Cos(TwoPi*p.phase)
; 

save_
_atom_site_occ_Fourier_param.id
CIF
A code identifying the (in general complex) coefficient of each
term present in the Fourier series describing the occupational
modulation of a given atom or rigid group. This code must match
_atom_site_occ_Fourier.id.
save_atom_site_occ_Fourier_param.id

    _definition.id               '_atom_site_occ_Fourier_param.id'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_occ_Fourier_param_id' 
    _description.text                   
;

      A code identifying the (in general complex) coefficient of each
      term present in the Fourier series describing the occupational
      modulation of a given atom or rigid group. This code must match
      _atom_site_occ_Fourier.id.
;
    _name.category_id            atom_site_occ_Fourier_param
    _name.object_id              id
    _name.linked_item_id         '_atom_site_occ_Fourier.id'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_occ_Fourier_param.modulus
CIF
The occupational distortion of a given atom or rigid group is
usually parameterized by Fourier series. Each term of the series
commonly adopts two different representations: the sine-cosine
form,
Pc cos(2\p k r)+Ps sin(2\p k r),
and the modulus-argument form,
|P| cos(\2 k r+\d),
where k is the wave vector of the term and r is the atomic
average position. _atom_site_occ_Fourier.param_modulus is the
modulus (|P|) of the complex amplitude corresponding to the
Fourier term defined by _atom_site_occ_Fourier.atom_site_label
and _atom_site_occ_Fourier.wave_vector_seq_id.
save_atom_site_occ_Fourier_param.modulus

    _definition.id               '_atom_site_occ_Fourier_param.modulus'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_occ_Fourier_param_modulus' 
    _description.text                   
;

      The occupational distortion of a given atom or rigid group is
      usually parameterized by Fourier series. Each term of the series
      commonly adopts two different representations: the sine-cosine
      form,
               Pc cos(2\\p k r)+Ps sin(2\\p k r),
      and the modulus-argument form,
               |P| cos(\2\p k r+\\d),
      where k is the wave vector of the term and r is the atomic
      average position. _atom_site_occ_Fourier.param_modulus is the
      modulus (|P|) of the complex amplitude corresponding to the
      Fourier term defined by _atom_site_occ_Fourier.atom_site_label
      and _atom_site_occ_Fourier.wave_vector_seq_id.
;
    _name.category_id            atom_site_occ_Fourier_param
    _name.object_id              modulus
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    _enumeration.range           0.0:
    loop_
      _method.purpose
      _method.expression
      Evaluation    
;
      With  p  as  atom_site_occ_Fourier_param

       atom_site_occ_Fourier_param.modulus =  Sqrt(p.cos**2+p.sin**2)
; 

save_
_atom_site_occ_Fourier_param.phase
CIF
The occupational distortion of a given atom or rigid group is
usually parameterized by Fourier series. Each term of the series
commonly adopts two different representations: the sine-cosine
form,
Pc cos(2\p k r)+Ps sin(2\p k r),
and the modulus-argument form,
|P| cos(2\p k r+\d),
where k is the wave vector of the term and r is the atomic
average position. _atom_site_occ_Fourier_param.phase is the phase
(/2\p) in cycles corresponding to the Fourier term defined by\
_atom_site_occ_Fourier.atom_site_label and
_atom_site_occ_Fourier.wave_vector_seq_id.
save_atom_site_occ_Fourier_param.phase

    _definition.id               '_atom_site_occ_Fourier_param.phase'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_occ_Fourier_param_phase' 
    _description.text                   
;

      The occupational distortion of a given atom or rigid group is
      usually parameterized by Fourier series. Each term of the series
      commonly adopts two different representations: the sine-cosine
      form,
               Pc cos(2\\p k r)+Ps sin(2\\p k r),
      and the modulus-argument form,
               |P| cos(2\\p k r+\\d),
      where k is the wave vector of the term and r is the atomic
      average position. _atom_site_occ_Fourier_param.phase is the phase
      (\d/2\\p) in cycles corresponding to the Fourier term defined by\
      _atom_site_occ_Fourier.atom_site_label and
      _atom_site_occ_Fourier.wave_vector_seq_id.
;
    _name.category_id            atom_site_occ_Fourier_param
    _name.object_id              phase
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    _enumeration.range           -1.0:1.0
    _units.code                             cycles
    loop_
      _method.purpose
      _method.expression
      Evaluation    
;
      With  p  as  atom_site_occ_Fourier_param

       atom_site_occ_Fourier_param.phase =  Phase(Complex(p.cos,-p.sin))/TwoPi
; 


save_
_atom_site_occ_Fourier_param.sin
CIF
The occupational distortion of a given atom or rigid group is
usually parameterized by Fourier series. Each term of the series
commonly adopts two different representations: the sine-cosine
form,
Pc cos(2\p k r)+Ps sin(2\p k r),
and the modulus-argument form,
|P| cos(2\p k r+\d),
where k is the wave vector of the term and r is the atomic
average position. _atom_site_occ_Fourier_param.sin is the sine
coefficient (Ps) corresponding to the Fourier term defined by
_atom_site_occ_Fourier.atom_site_label and
_atom_site_occ_Fourier.wave_vector_seq_id.
save_atom_site_occ_Fourier_param.sin

    _definition.id               '_atom_site_occ_Fourier_param.sin'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_occ_Fourier_param_sin' 
    _description.text                   
;

      The occupational distortion of a given atom or rigid group is
      usually parameterized by Fourier series. Each term of the series
      commonly adopts two different representations: the sine-cosine
      form,
               Pc cos(2\\p k r)+Ps sin(2\\p k r),
      and the modulus-argument form,
               |P| cos(2\\p k r+\\d),
      where k is the wave vector of the term and r is the atomic
      average position. _atom_site_occ_Fourier_param.sin is the sine
      coefficient (Ps) corresponding to the Fourier term defined by
      _atom_site_occ_Fourier.atom_site_label and
      _atom_site_occ_Fourier.wave_vector_seq_id.
;
    _name.category_id            atom_site_occ_Fourier_param
    _name.object_id              sin
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    loop_
      _method.purpose
      _method.expression
      Evaluation    
;
      With  p  as  atom_site_occ_Fourier_param

       atom_site_occ_Fourier_param.sin =  -p.modulus*Sin(TwoPi*p.phase)
; 

save_
ATOM_SITE_OCC_LEGENDRE
CIF
Data items in the ATOM_SITE_OCC_LEGENDRE category record
details about the Legendre polynomials used to describe the occupational
modulations when the atomic domain of a given atom or rigid group is
restricted  by a crenel function.
save_ATOM_SITE_OCC_LEGENDRE

    _definition.id               ATOM_SITE_OCC_LEGENDRE
    _definition.scope            Category
    _definition.class            Loop
    _definition.update           2014-06-27
    _description.text                   
;
 
      Data items in the ATOM_SITE_OCC_LEGENDRE category record
      details about the Legendre polynomials used to describe the occupational 
      modulations when the atomic domain of a given atom or rigid group is 
      restricted  by a crenel function. 
;
    _name.category_id            MS_GROUP
    _name.object_id              ATOM_SITE_OCC_LEGENDRE
    loop_
      _category_key.name         '_atom_site_occ_Legendre.id'
  
save_
_atom_site_occ_Legendre.atom_site_label
CIF
Modulation parameters are usually looped in separate lists.
Modulated parameters are the atom positions (displacive
modulation), the atomic occupation (occupational modulation)
and/or the anisotropic (or isotropic) ADP.
_atom_site_occ_Legendre.atom_site_label is the
code that identifies an atom or rigid group in a loop in which
the Legendre components of its occupational modulation are listed.
This code must match the _atom_site.label of the associated coordinate
list and conform to the rules described in _atom_site.label.
save_atom_site_occ_Legendre.atom_site_label

    _definition.id               '_atom_site_occ_Legendre.atom_site_label'
    _definition.update           2014-06-27
    _description.text                   
;

      Modulation parameters are usually looped in separate lists.
      Modulated parameters are the atom positions (displacive
      modulation), the atomic occupation (occupational modulation)
      and/or the anisotropic (or isotropic) ADP.  
      _atom_site_occ_Legendre.atom_site_label is the
      code that identifies an atom or rigid group in a loop in which
      the Legendre components of its occupational modulation are listed.
      This code must match the _atom_site.label of the associated coordinate
      list and conform to the rules described in _atom_site.label.
;
    _name.category_id            atom_site_occ_Legendre
    _name.object_id              atom_site_label
    _name.linked_item_id         '_atom_site.label'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_occ_Legendre.coeff
CIF
The coefficient corresponding to the Legendre polynomial describing
the occupational modulation of a given atom or rigid group.
save_atom_site_occ_Legendre.coeff

    _definition.id               '_atom_site_occ_Legendre.coeff'
    _definition.update           2014-06-27
    _description.text                   
;

      The coefficient corresponding to the Legendre polynomial describing 
      the occupational modulation of a given atom or rigid group.  
;
    _name.category_id            atom_site_occ_Legendre
    _name.object_id              coeff
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0

save_
_atom_site_occ_Legendre.id
CIF
A code identifying each component of the occupational modulation of
a given atom or rigid group when the modulation is expressed in
terms of Legendre polynomials.
save_atom_site_occ_Legendre.id

    _definition.id               '_atom_site_occ_Legendre.id'
    _definition.update           2014-06-27
    _description.text                   
;

      A code identifying each component of the occupational modulation of
      a given atom or rigid group when the modulation is expressed in
      terms of Legendre polynomials.
;
    _name.category_id            atom_site_occ_Legendre
    _name.object_id              id
    _type.purpose                Key
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_occ_Legendre.order
CIF
The order of the Legendre polynomial.
save_atom_site_occ_Legendre.order

    _definition.id               '_atom_site_occ_Legendre.order'
    _definition.update           2019-09-25
    _description.text                   
;

      The order of the Legendre polynomial.
;
    _name.category_id            atom_site_occ_Legendre
    _name.object_id              order
    _type.purpose                Key
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Integer
    _enumeration.range           0:

save_
ATOM_SITE_OCC_ORTHO
CIF
Data items in the ATOM_SITE_OCC_ORTHO category record
details about the orthogonalized functions defined to solve
correlation problems during the refinement of the occupational
modulation when the atomic domain of a given atom is restricted
by a crenel function. The functions are constructed selecting
Fourier harmonics until the desired degree of orthogonality and
completeness is reached (see
_atom_site_occ_special_func.crenel_ortho_eps).
Notice that the global results could also be expressed (losing
information) using the data items defined in the categories
ATOM_SITE_OCC_FOURIER and ATOM_SITE_OCC_FOURIER_PARAM.
save_ATOM_SITE_OCC_ORTHO

    _definition.id               ATOM_SITE_OCC_ORTHO
    _definition.scope            Category
    _definition.class            Loop
    _definition.update           2014-06-27
    _description.text                   
;
 
      Data items in the ATOM_SITE_OCC_ORTHO category record
      details about the orthogonalized functions defined to solve 
      correlation problems during the refinement of the occupational 
      modulation when the atomic domain of a given atom is restricted 
      by a crenel function. The functions are constructed selecting 
      Fourier harmonics until the desired degree of orthogonality and
      completeness is reached (see
      _atom_site_occ_special_func.crenel_ortho_eps).

      Notice that the global results could also be expressed (losing 
      information) using the data items defined in the categories  
      ATOM_SITE_OCC_FOURIER and ATOM_SITE_OCC_FOURIER_PARAM.
;
    _name.category_id            MS_GROUP
    _name.object_id              ATOM_SITE_OCC_ORTHO
    loop_
      _category_key.name         '_atom_site_occ_ortho.id'
  
save_
_atom_site_occ_ortho.atom_site_label
CIF
Modulation parameters are usually looped in separate lists.
Modulated parameters are the atom positions (displacive
modulation), the atomic occupation (occupational modulation)
and/or the anisotropic (or isotropic) ADP.
_atom_site_occ_ortho.atom_site_label is the
code that identifies an atom or rigid group in a loop in which
the ortho components of its occupational modulation are listed.
This code must match the _atom_site.label of the associated coordinate
list and conform to the rules described in _atom_site.label.
save_atom_site_occ_ortho.atom_site_label

    _definition.id               '_atom_site_occ_ortho.atom_site_label'
    _definition.update           2014-06-27
    _description.text                   
;
      Modulation parameters are usually looped in separate lists.
      Modulated parameters are the atom positions (displacive
      modulation), the atomic occupation (occupational modulation)
      and/or the anisotropic (or isotropic) ADP.  
      _atom_site_occ_ortho.atom_site_label is the
      code that identifies an atom or rigid group in a loop in which
      the ortho components of its occupational modulation are listed.
      This code must match the _atom_site.label of the associated coordinate
      list and conform to the rules described in _atom_site.label.
;
    _name.category_id            atom_site_occ_ortho
    _name.object_id              atom_site_label
    _name.linked_item_id         '_atom_site.label'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_occ_ortho.coeff
CIF
The coefficient corresponding to the orthogonalized function
defined by _atom_site_occ_ortho.atom_site_label and
_atom_site_occ_ortho.func_id.
save_atom_site_occ_ortho.coeff

    _definition.id               '_atom_site_occ_ortho.coeff'
    _definition.update           2014-06-27
    _description.text                   
;

      The coefficient corresponding to the orthogonalized function 
      defined by _atom_site_occ_ortho.atom_site_label and 
      _atom_site_occ_ortho.func_id.  
;
    _name.category_id            atom_site_occ_ortho
    _name.object_id              coeff
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0

save_
_atom_site_occ_ortho.func_id
CIF
A code identifying the orthogonalized function used in the
structural model to describe the occupational modulation of an atom
or rigid group. This code must match _atom_sites_ortho_func_id.
save_atom_site_occ_ortho.func_id

    _definition.id               '_atom_site_occ_ortho.func_id'
    _definition.update           2014-06-27
    _description.text                   
;

      A code identifying the orthogonalized function used in the 
      structural model to describe the occupational modulation of an atom 
      or rigid group. This code must match _atom_sites_ortho_func_id.
;
    _name.category_id            atom_site_occ_ortho
    _name.object_id              func_id
    _name.linked_item_id         '_atom_sites_ortho.func_id '
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_occ_ortho.id
CIF
A code identifying each component of the occupational modulation of
a given atom or rigid group when the modulation is expressed in
terms of ortho series.
save_atom_site_occ_ortho.id

    _definition.id               '_atom_site_occ_ortho.id'
    _definition.update           2014-06-27
    _description.text                   
;

      A code identifying each component of the occupational modulation of
      a given atom or rigid group when the modulation is expressed in
      terms of ortho series.
;
    _name.category_id            atom_site_occ_ortho
    _name.object_id              id
    _type.purpose                Key
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
ATOM_SITE_OCC_SPECIAL_FUNC
CIF
Data items in the ATOM_SITE_OCC_SPECIAL_FUNC category
record details about the occupational modulation of a given atom
or rigid group in a modulated structure when it is not described
by Fourier series. Special functions are effective in some cases
where the modulations are highly anharmonic, since the number of
parameters is drastically reduced. However, they are in general
discontinuous or with discontinuous derivatives and therefore
these functions describe an ideal situation that never occurs in
a real modulated crystal. Up to now, only a few types of special
functions have been used and all of them come from the JANA2006
suite of programs (Petricek, Dusek & Palatinus, 2014).  Although
this approach is far from being general,
it has the advantage that the functions are tightly defined and
therefore the atomic displacements and occupations can be
calculated easily. In this dictionary, only the special functions
available in JANA2006 have been included.
These are:
(1) Sawtooth functions for atomic displacive modulation along
   x, y and z.
(2) Zig-Zag functions for atomic displacive modulation along
    x, y and z.
(3) Crenel functions for the occupational modulation of atoms
   and rigid groups. Both of these only apply to
   one-dimensional modulated structures.
References: Petricek, V., Dusek, M. & Palatinus, L. (2014).
          Z. Kristallogr. 229(5), 345-352.  DOI 10.1515/zkri-2014-1737
          Crystallographic Computing System JANA2006: General features
          Petricek, V., Eigner, V., Dusek, M. & Cejchan, A. (2016). Z.
          Kristallogr. 231(5), 301-312. DOI 10.1515/zkri-2015-1913
          Discontinuous modulation functions and their application for
          analysis of modulated structures with the computing system JANA2006
save_ATOM_SITE_OCC_SPECIAL_FUNC

    _definition.id               ATOM_SITE_OCC_SPECIAL_FUNC
    _definition.scope            Category
    _definition.class            Loop
    _definition.update           2014-06-27
    _description.text                   
;

      Data items in the ATOM_SITE_OCC_SPECIAL_FUNC category
      record details about the occupational modulation of a given atom
      or rigid group in a modulated structure when it is not described
      by Fourier series. Special functions are effective in some cases
      where the modulations are highly anharmonic, since the number of
      parameters is drastically reduced. However, they are in general
      discontinuous or with discontinuous derivatives and therefore
      these functions describe an ideal situation that never occurs in
      a real modulated crystal. Up to now, only a few types of special
      functions have been used and all of them come from the JANA2006
      suite of programs (Petricek, Dusek & Palatinus, 2014).  Although
      this approach is far from being general,
      it has the advantage that the functions are tightly defined and
      therefore the atomic displacements and occupations can be
      calculated easily. In this dictionary, only the special functions
      available in JANA2006 have been included.
      These are:
        (1) Sawtooth functions for atomic displacive modulation along
           x, y and z.
        (2) Zig-Zag functions for atomic displacive modulation along
            x, y and z.
        (3) Crenel functions for the occupational modulation of atoms
           and rigid groups. Both of these only apply to
           one-dimensional modulated structures.

      References: Petricek, V., Dusek, M. & Palatinus, L. (2014).
                  Z. Kristallogr. 229(5), 345-352.  DOI 10.1515/zkri-2014-1737     
                  Crystallographic Computing System JANA2006: General features

                  Petricek, V., Eigner, V., Dusek, M. & Cejchan, A. (2016). Z. 
                  Kristallogr. 231(5), 301-312. DOI 10.1515/zkri-2015-1913 
                  Discontinuous modulation functions and their application for 
                  analysis of modulated structures with the computing system JANA2006

;
    _name.category_id            MS_GROUP
    _name.object_id              ATOM_SITE_OCC_SPECIAL_FUNC
    loop_
        _category_key.name       '_atom_site_occ_special_func.atom_site_label'

save_
_atom_site_occ_special_func.atom_site_label
CIF
The code that identifies an atom or rigid group in a loop in
which the parameters of the special function that describes its
occupational modulation are listed. This code must match
the _atom_site.label of the associated coordinate list and
conform to the rules described in _atom_site.label.
save_atom_site_occ_special_func.atom_site_label

    _definition.id               '_atom_site_occ_special_func.atom_site_label'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_occ_special_func_atom_site_label' 
    _description.text                   
;

      The code that identifies an atom or rigid group in a loop in
      which the parameters of the special function that describes its
      occupational modulation are listed. This code must match
      the _atom_site.label of the associated coordinate list and
      conform to the rules described in _atom_site.label.
;
    _name.category_id            atom_site_occ_special_func
    _name.object_id              atom_site_label
    _name.linked_item_id         '_atom_site.label'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_occ_special_func.crenel_c
CIF
_atom_site_occ_special_func_crenel_ items are the adjustable
parameters of a crenel function.
An occupational crenel function along the internal space is
defined as follows:
         p(x4)=1   if x4 belongs to the interval [c-w/2,c+w/2]
         p(x4)=0   if x4 is outside the interval [c-w/2,c+w/2],
where x4 is the internal coordinate, c is the centre of the
function in internal space and w is its width. The use of this
function is restricted to one-dimensional modulated structures.
For more details, see the manual for JANA2006 (Petricek, Dusek
& Palatinus, 2014)
References: Petricek, V., Dusek, M. & Palatinus, L. (2014).
           Z. Kristallogr. 229(5), 345-352.  DOI 10.1515/zkri-2014-1737
           Crystallographic Computing System JANA2006: General features
           Petricek, V., Eigner, V., Dusek, M. & Cejchan, A. (2016). Z.
           Kristallogr. 231(5), 301-312. DOI 10.1515/zkri-2015-1913
           Discontinuous modulation functions and their application for
           analysis of modulated structures with the computing system JANA2006
save_atom_site_occ_special_func.crenel_c

    _definition.id               '_atom_site_occ_special_func.crenel_c'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_occ_special_func_crenel_c' 
    _description.text                   
;

       _atom_site_occ_special_func_crenel_ items are the adjustable
       parameters of a crenel function.

       An occupational crenel function along the internal space is
       defined as follows:
                p(x4)=1   if x4 belongs to the interval [c-w/2,c+w/2]
                p(x4)=0   if x4 is outside the interval [c-w/2,c+w/2],
       where x4 is the internal coordinate, c is the centre of the
       function in internal space and w is its width. The use of this
       function is restricted to one-dimensional modulated structures.
       For more details, see the manual for JANA2006 (Petricek, Dusek 
      & Palatinus, 2014)

      References: Petricek, V., Dusek, M. & Palatinus, L. (2014).
                  Z. Kristallogr. 229(5), 345-352.  DOI 10.1515/zkri-2014-1737     
                  Crystallographic Computing System JANA2006: General features

                  Petricek, V., Eigner, V., Dusek, M. & Cejchan, A. (2016). Z. 
                  Kristallogr. 231(5), 301-312. DOI 10.1515/zkri-2015-1913 
                  Discontinuous modulation functions and their application for 
                  analysis of modulated structures with the computing system JANA2006
;
    
    _name.category_id            atom_site_occ_special_func
    _name.object_id              crenel_c
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0

save_
_atom_site_occ_special_func.crenel_ortho_eps
CIF
The set of harmonic functions used in the Fourier series describing the
Modulation functions is orthogonal and complete in the interval [0,1).
However within of the x4 interval defined by a Crenel function orthogonality
is no longer preserved and therefore the Fourier coefficients are correlated
and the refinement becomes fragile. There are several ways to avoid this
technical problem (see Petricek et al., 2016). One of them is to define
functions based on Fourier harmonics that are orthogonal within the Crenel
interval. The procedure implemented in JANA2006 requires, for each Crenel
function, a parameter for the selection of the harmonic functions that define
the not necessarily complete set of (almost) orthogonalized functions.
_atom_site_occ_special_func.crenel_ortho_eps contains such values. Empirical
tests indicate that a default value of 0.95 warrants reasonable results.
The orthogonalized functions and the corresponding refined amplitudes are
defined in the categories: ATOM_SITES_ORTHO., ATOM_SITE_DISPLACE_ORTHO.,
ATOM_SITE_OCC_ORTHO., ATOM_SITE_ROT_ORTHO. and ATOM_SITE_U_ORTHO.
References: Petricek, V., Van Der Lee & Evain, M. (1995).
Acta Cryst. A51, 529-535. DOI 10.1107/S0108767395000365
On the Use of Crenel Functions for Occupationally Modulated
Structures
Petricek, V., Eigner, V., Dusek, M. & Cejchan, A. (2016). Z.
Kristallogr. 231(5), 301-312. DOI 10.1515/zkri-2015-1913
Discontinuous modulation functions and their application for
analysis of modulated structures with the computing system JANA2006
save_atom_site_occ_special_func.crenel_ortho_eps

    _definition.id               '_atom_site_occ_special_func.crenel_ortho_eps'
    _definition.update           2019-04-01
    _description.text                   
;
      The set of harmonic functions used in the Fourier series describing the 
      Modulation functions is orthogonal and complete in the interval [0,1). 
      However within of the x4 interval defined by a Crenel function orthogonality
      is no longer preserved and therefore the Fourier coefficients are correlated
      and the refinement becomes fragile. There are several ways to avoid this
      technical problem (see Petricek et al., 2016). One of them is to define
      functions based on Fourier harmonics that are orthogonal within the Crenel
      interval. The procedure implemented in JANA2006 requires, for each Crenel 
      function, a parameter for the selection of the harmonic functions that define 
      the not necessarily complete set of (almost) orthogonalized functions.
      _atom_site_occ_special_func.crenel_ortho_eps contains such values. Empirical
      tests indicate that a default value of 0.95 warrants reasonable results.
      The orthogonalized functions and the corresponding refined amplitudes are 
      defined in the categories: ATOM_SITES_ORTHO., ATOM_SITE_DISPLACE_ORTHO., 
      ATOM_SITE_OCC_ORTHO., ATOM_SITE_ROT_ORTHO. and ATOM_SITE_U_ORTHO.
 
      References: Petricek, V., Van Der Lee & Evain, M. (1995).
                  Acta Cryst. A51, 529-535. DOI 10.1107/S0108767395000365
                  On the Use of Crenel Functions for Occupationally Modulated  
                  Structures 

                  Petricek, V., Eigner, V., Dusek, M. & Cejchan, A. (2016). Z. 
                  Kristallogr. 231(5), 301-312. DOI 10.1515/zkri-2015-1913 
                  Discontinuous modulation functions and their application for 
                  analysis of modulated structures with the computing system JANA2006
;
    _name.category_id            atom_site_occ_special_func
    _name.object_id              crenel_ortho_eps
    _type.purpose                Number
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.95

save_
_atom_site_occ_special_func.crenel_w
CIF
_atom_site_occ_special_func_crenel_ items are the adjustable
parameters of a crenel function.
An occupational crenel function along the internal space is
defined as follows:
         p(x4)=1   if x4 belongs to the interval [c-w/2,c+w/2]
         p(x4)=0   if x4 is outside the interval [c-w/2,c+w/2],
where x4 is the internal coordinate, c is the centre of the
function in internal space and w is its width. The use of this
function is restricted to one-dimensional modulated structures.
For more details, see the manual for JANA2006 (Petricek, Dusek
& Palatinus, 2014)
References: Petricek, V., Dusek, M. & Palatinus, L. (2014).
           Z. Kristallogr. 229(5), 345-352.  DOI 10.1515/zkri-2014-1737
           Crystallographic Computing System JANA2006: General features
           Petricek, V., Eigner, V., Dusek, M. & Cejchan, A. (2016). Z.
           Kristallogr. 231(5), 301-312. DOI 10.1515/zkri-2015-1913
           Discontinuous modulation functions and their application for
           analysis of modulated structures with the computing system JANA2006
save_atom_site_occ_special_func.crenel_w

    _definition.id               '_atom_site_occ_special_func.crenel_w'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_occ_special_func_crenel_w' 
    _description.text                   
;

       _atom_site_occ_special_func_crenel_ items are the adjustable
       parameters of a crenel function.

       An occupational crenel function along the internal space is
       defined as follows:
                p(x4)=1   if x4 belongs to the interval [c-w/2,c+w/2]
                p(x4)=0   if x4 is outside the interval [c-w/2,c+w/2],
       where x4 is the internal coordinate, c is the centre of the
       function in internal space and w is its width. The use of this
       function is restricted to one-dimensional modulated structures.
       For more details, see the manual for JANA2006 (Petricek, Dusek 
      & Palatinus, 2014)

      References: Petricek, V., Dusek, M. & Palatinus, L. (2014).
                  Z. Kristallogr. 229(5), 345-352.  DOI 10.1515/zkri-2014-1737     
                  Crystallographic Computing System JANA2006: General features

                  Petricek, V., Eigner, V., Dusek, M. & Cejchan, A. (2016). Z. 
                  Kristallogr. 231(5), 301-312. DOI 10.1515/zkri-2015-1913 
                  Discontinuous modulation functions and their application for 
                  analysis of modulated structures with the computing system JANA2006
;
    
    _name.category_id            atom_site_occ_special_func
    _name.object_id              crenel_w
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0

save_
ATOM_SITE_OCC_XHARM
CIF
Data items in the ATOM_SITE_OCC_XHARM category record details about
the x-harmonics used to describe the occupational modulations when
the atomic domain of a given atom or rigid group is restricted by
a crenel function. T
save_ATOM_SITE_OCC_XHARM

    _definition.id               ATOM_SITE_OCC_XHARM
    _definition.scope            Category
    _definition.class            Loop
    _definition.update           2014-06-27
    _description.text                   
;
 
      Data items in the ATOM_SITE_OCC_XHARM category record details about 
      the x-harmonics used to describe the occupational modulations when 
      the atomic domain of a given atom or rigid group is restricted by 
      a crenel function. T
;
    _name.category_id            MS_GROUP
    _name.object_id              ATOM_SITE_OCC_XHARM
    loop_
      _category_key.name         '_atom_site_occ_xharm.id'
  
save_
_atom_site_occ_xharm.atom_site_label
CIF
Modulation parameters are usually looped in separate lists.
Modulated parameters are the atom positions (displacive
modulation), the atomic occupation (occupational modulation)
and/or the anisotropic (or isotropic) ADP.
_atom_site_occ_xharm.atom_site_label is the
code that identifies an atom or rigid group in a loop in which
the x-harmonic components of its occupational modulation are listed.
This code must match the _atom_site.label of the associated coordinate
list and conform to the rules described in _atom_site.label.
save_atom_site_occ_xharm.atom_site_label

    _definition.id               '_atom_site_occ_xharm.atom_site_label'
    _definition.update           2014-06-27
    _description.text                   
;

      Modulation parameters are usually looped in separate lists.
      Modulated parameters are the atom positions (displacive
      modulation), the atomic occupation (occupational modulation)
      and/or the anisotropic (or isotropic) ADP.  
      _atom_site_occ_xharm.atom_site_label is the
      code that identifies an atom or rigid group in a loop in which
      the x-harmonic components of its occupational modulation are listed.
      This code must match the _atom_site.label of the associated coordinate
      list and conform to the rules described in _atom_site.label.
;
    _name.category_id            atom_site_occ_xharm
    _name.object_id              atom_site_label
    _name.linked_item_id         '_atom_site.label'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_occ_xharm.id
CIF
A code identifying each component of the occupational modulation of
a given atom or rigid group when the modulation is expressed in
terms of x-harmonics.
save_atom_site_occ_xharm.id

    _definition.id               '_atom_site_occ_xharm.id'
    _definition.update           2014-06-27
    _description.text                   
;
      A code identifying each component of the occupational modulation of
      a given atom or rigid group when the modulation is expressed in
      terms of x-harmonics.
;
    _name.category_id            atom_site_occ_xharm
    _name.object_id              id
    _type.purpose                Key
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_occ_xharm.order
CIF
The order of each x-harmonics function.
save_atom_site_occ_xharm.order

    _definition.id               '_atom_site_occ_xharm.order'
    _definition.update           2019-09-25
    _description.text                   
;

      The order of each x-harmonics function.
;
    _name.category_id            atom_site_occ_xharm
    _name.object_id              order
    _type.purpose                Key
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Integer
    _enumeration.range           0:

save_
_atom_site_occ_xharm.coeff
CIF
The coefficient corresponding to the x-harmonic function describing the
Occupational modulation of a given atom or rigid group.
save_atom_site_occ_xharm.coeff

    _definition.id               '_atom_site_occ_xharm.coeff'
    _definition.update           2014-06-27
    _description.text                   
;

      The coefficient corresponding to the x-harmonic function describing the 
      Occupational modulation of a given atom or rigid group.
;
    _name.category_id            atom_site_occ_xharm
    _name.object_id              coeff
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0

save_
ATOM_SITE_PHASON
CIF
Data items in the ATOM_SITE_PHASON category record details
about the atomic phason correction. Although this kind of
correction is intended to be overall, some refinement programs
(for example, JANA2006) allow for this (theoretically dubious)
atom-dependent phason treatment.
save_ATOM_SITE_PHASON

    _definition.id               ATOM_SITE_PHASON
    _definition.scope            Category
    _definition.class            Loop
    _definition.update           2014-06-27
    _description.text                   
;

      Data items in the ATOM_SITE_PHASON category record details
      about the atomic phason correction. Although this kind of
      correction is intended to be overall, some refinement programs
      (for example, JANA2006) allow for this (theoretically dubious)
      atom-dependent phason treatment.
;
    _name.category_id            MS_GROUP
    _name.object_id              ATOM_SITE_PHASON
    loop_
        _category_key.name       '_atom_site_phason.atom_site_label'

save_
_atom_site_phason.atom_site_label
CIF
The code that identifies an atom or rigid group in a loop in
which the phason coefficients are listed. Although this kind of
correction is intended to be overall, some refinement programs
(for example, JANA2006) allow an independent phason correction
for each atom or rigid group. In this case,
_atom_site_phason.formula and _atom_site_phason.coeff should be
used (see also _refine.ls_mod_overall_phason_*). This code must
match the _atom_site.label of the associated coordinate list and
conform to the rules described in _atom_site.label.
save_atom_site_phason.atom_site_label

    _definition.id               '_atom_site_phason.atom_site_label'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_phason_atom_site_label' 
    _description.text                   
;

      The code that identifies an atom or rigid group in a loop in
      which the phason coefficients are listed. Although this kind of
      correction is intended to be overall, some refinement programs
      (for example, JANA2006) allow an independent phason correction
      for each atom or rigid group. In this case,
      _atom_site_phason.formula and _atom_site_phason.coeff should be
      used (see also _refine.ls_mod_overall_phason_*). This code must
      match the _atom_site.label of the associated coordinate list and
      conform to the rules described in _atom_site.label.
;
    _name.category_id            atom_site_phason
    _name.object_id              atom_site_label
    _name.linked_item_id         '_atom_site.label'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_phason.coeff
CIF
The phason coefficient used to calculate (with the appropriate
expression given in _atom_site_phason.formula) the atomic phason
correction. Although this kind of correction is intended to be
overall, some refinement programs (for example, JANA2006) allow
an independent phason correction for each atom or rigid group. In
this case, _atom_site_phason.formula and _atom_site_phason.coeff
should be used (see also _refine.ls_mod_overall_phason_*).
save_atom_site_phason.coeff

    _definition.id               '_atom_site_phason.coeff'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_phason_coeff' 
    _description.text                   
;

      The phason coefficient used to calculate (with the appropriate
      expression given in _atom_site_phason.formula) the atomic phason
      correction. Although this kind of correction is intended to be
      overall, some refinement programs (for example, JANA2006) allow
      an independent phason correction for each atom or rigid group. In
      this case, _atom_site_phason.formula and _atom_site_phason.coeff
      should be used (see also _refine.ls_mod_overall_phason_*).
;
    _name.category_id            atom_site_phason
    _name.object_id              coeff
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    _enumeration.range           0.0:

save_
_atom_site_phason.formula
CIF
The formula used for the phason correction. Although both kinds
of corrections are intended to be overall, some refinement
programs (for example, JANA2006) allow an independent phason
correction for each atom or rigid group. In this case,
_atom_site_phason.formula and _atom_site_phason.coeff should
be used (see also _refine.ls_mod_overall_phason_*).
save_atom_site_phason.formula

    _definition.id               '_atom_site_phason.formula'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_phason_formula' 
    _description.text                   
;

      The formula used for the phason correction. Although both kinds
      of corrections are intended to be overall, some refinement
      programs (for example, JANA2006) allow an independent phason
      correction for each atom or rigid group. In this case,
      _atom_site_phason.formula and _atom_site_phason.coeff should
      be used (see also _refine.ls_mod_overall_phason_*).
;
    _name.category_id            atom_site_phason
    _name.object_id              formula
    _type.purpose                State
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Code
    loop_
    _enumeration_set.state
    _enumeration_set.detail
              Axe           'Axe, J. D. (1980). Phys. Rev. B, 21, 4181-4190.'  
              Ovr           'Overhauser, A. W. (1971). Phys. Rev. B, 3, 3173-3182.'

save_
ATOM_SITE_ROT_FOURIER
CIF
Data items in the ATOM_SITE_ROT_FOURIER category record details
about the Fourier components present in the rotational part of
the displacive modulation of a given rigid group. The
translational part would appear in a separate list of items
belonging to the ATOM_SITE_DISPLACE_FOURIER category. The (in
general complex) coefficients of each Fourier component belong
to the child category ATOM_SITE_ROT_FOURIER_PARAM and may be listed
separately.
save_ATOM_SITE_ROT_FOURIER

    _definition.id               ATOM_SITE_ROT_FOURIER
    _definition.scope            Category
    _definition.class            Loop
    _definition.update           2014-06-27
    _description.text                   
;

      Data items in the ATOM_SITE_ROT_FOURIER category record details
      about the Fourier components present in the rotational part of
      the displacive modulation of a given rigid group. The
      translational part would appear in a separate list of items
      belonging to the ATOM_SITE_DISPLACE_FOURIER category. The (in
      general complex) coefficients of each Fourier component belong
      to the child category ATOM_SITE_ROT_FOURIER_PARAM and may be listed
      separately.
;
    _name.category_id            MS_GROUP
    _name.object_id              ATOM_SITE_ROT_FOURIER
    loop_
        _category_key.name      '_atom_site_rot_Fourier.atom_site_label'

save_
_atom_site_rot_Fourier.atom_site_label
CIF
Modulation parameters are usually looped in separate lists.
Modulated parameters are the atom positions (displacive
modulation), the atomic occupation (occupational modulation)
and/or the anisotropic (or isotropic) ADP.
_atom_site_rot_Fourier.atom_site_label is the code that
identifies a rigid group in a loop in which the Fourier
components of the rotational part of its displacive modulation
are listed. The translational part (if any) would appear in a
separate list (see _atom_site_displace_Fourier.atom_site_label).
This code must match the _atom_site.label of the associated
coordinate list and conform to the rules described in
_atom_site.label.
save_atom_site_rot_Fourier.atom_site_label

    _definition.id               '_atom_site_rot_Fourier.atom_site_label'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_rot_Fourier_atom_site_label' 
    _description.text                   
;

      Modulation parameters are usually looped in separate lists.
      Modulated parameters are the atom positions (displacive
      modulation), the atomic occupation (occupational modulation)
      and/or the anisotropic (or isotropic) ADP.
       _atom_site_rot_Fourier.atom_site_label is the code that
      identifies a rigid group in a loop in which the Fourier
      components of the rotational part of its displacive modulation
      are listed. The translational part (if any) would appear in a
      separate list (see _atom_site_displace_Fourier.atom_site_label).
      This code must match the _atom_site.label of the associated
      coordinate list and conform to the rules described in
      _atom_site.label.
;
    _name.category_id            atom_site_rot_Fourier
    _name.object_id              atom_site_label
    _name.linked_item_id         '_atom_site.label'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_rot_Fourier.axis
CIF
A label identifying the rotation component around a fixed point
of a given rigid group whose modulation is being parameterized by
Fourier series. a, b and c are the basic lattice vectors of the
reference structure. For composites they refer to the reference
structure of each subsystem. a~1~, a~2~ and a~3~ are defined by
the items belonging to the ATOM_SITES_AXES category, through
_atom_site_rot_Fourier.matrix_seq_id. Use of
_atom_sites_rot_Fourier.axes_description is deprecated and
retained only for backward compatibility.
save_atom_site_rot_Fourier.axis

    _definition.id               '_atom_site_rot_Fourier.axis'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_rot_Fourier_axis' 
    _description.text                   
;

      A label identifying the rotation component around a fixed point
      of a given rigid group whose modulation is being parameterized by
      Fourier series. a, b and c are the basic lattice vectors of the
      reference structure. For composites they refer to the reference
      structure of each subsystem. a~1~, a~2~ and a~3~ are defined by
      the items belonging to the ATOM_SITES_AXES category, through 
      _atom_site_rot_Fourier.matrix_seq_id. Use of   
      _atom_sites_rot_Fourier.axes_description is deprecated and 
      retained only for backward compatibility.
;
    _name.category_id            atom_site_rot_Fourier
    _name.object_id              axis
    _type.purpose                State
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Code
    loop_
    _enumeration_set.state
    _enumeration_set.detail
              x             'rotation around the a axis'   
              y             'rotation around the b axis'   
              z             'rotation around the c axis'   
              a1            'rotation around an arbitrary a1 axis'   
              a2            'rotation around an arbitrary a2 axis'   
              a3            'rotation around an arbitrary a3 axis' 

save_
_atom_site_rot_Fourier.matrix_seq_id
CIF
A numeric code identifying the transformation matrix that defines
the arbitrary axes a1, a2 and a3 in terms of the crystallographic axes.
This code must match _atom_sites_axes.matrix_seq_id.
save_atom_site_rot_Fourier.matrix_seq_id

    _definition.id               '_atom_site_rot_Fourier.matrix_seq_id'
    _definition.update           2014-06-27
    _description.text                   
;

      A numeric code identifying the transformation matrix that defines
      the arbitrary axes a1, a2 and a3 in terms of the crystallographic axes. 
      This code must match _atom_sites_axes.matrix_seq_id.
;
    _name.category_id            atom_site_rot_Fourier
    _name.object_id              matrix_seq_id
    _name.linked_item_id         '_atom_sites_axes.matrix_seq_id'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code
save_
_atom_site_rot_Fourier.wave_vector_seq_id
CIF
A numeric code identifying the wave vectors of the Fourier terms
used in the structural model to describe the modulation functions
corresponding to the rotational distortion of a rigid group. This
code must match _atom_site_Fourier_wave_vector.seq_id.
save_atom_site_rot_Fourier.wave_vector_seq_id

    _definition.id               '_atom_site_rot_Fourier.wave_vector_seq_id'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_rot_Fourier_wave_vector_seq_id' 
    _description.text                   
;

      A numeric code identifying the wave vectors of the Fourier terms
      used in the structural model to describe the modulation functions
      corresponding to the rotational distortion of a rigid group. This
      code must match _atom_site_Fourier_wave_vector.seq_id.
;
    _name.category_id            atom_site_rot_Fourier
    _name.object_id              wave_vector_seq_id
    _name.linked_item_id         '_atom_site_Fourier_wave_vector.seq_id'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
ATOM_SITE_ROT_FOURIER_PARAM
CIF
Data items in the ATOM_SITE_ROT_FOURIER_PARAM category record
details about the coefficients of the Fourier series used to
describe the rotational component of the displacive modulation of
a given rigid group. The translational part would appear in a
separate list of items belonging to the
ATOM_SITE_DISPLACE_FOURIER_PARAM category. The Fourier components
are defined in the parent category ATOM_SITE_ROT_FOURIER Notice
that items in this category may be listed together with those of the
ATOM_SITE_DISPLACE_FOURIER category.
save_ATOM_SITE_ROT_FOURIER_PARAM

    _definition.id               ATOM_SITE_ROT_FOURIER_PARAM
    _definition.scope            Category
    _definition.class            Loop
    _definition.update           2014-06-27
    _description.text                   
;

      Data items in the ATOM_SITE_ROT_FOURIER_PARAM category record
      details about the coefficients of the Fourier series used to
      describe the rotational component of the displacive modulation of
      a given rigid group. The translational part would appear in a
      separate list of items belonging to the
      ATOM_SITE_DISPLACE_FOURIER_PARAM category. The Fourier components
      are defined in the parent category ATOM_SITE_ROT_FOURIER Notice 
      that items in this category may be listed together with those of the 
      ATOM_SITE_DISPLACE_FOURIER category.
;
    _name.category_id            ATOM_SITE_ROT_FOURIER
    _name.object_id              ATOM_SITE_ROT_FOURIER_PARAM
    loop_
        _category_key.name       '_atom_site_rot_Fourier_param.id'

save_
_atom_site_rot_Fourier_param.cos
CIF
The displacive distortion of a given rigid group is not
completely described by _atom_site_displace_Fourier.*. The rigid
rotation of the group around a given axis passing through a fixed
point (for example, the centre of mass of the group) is usually
parameterized by Fourier series. Each term of the series
commonly adopts two different representations: the sine-cosine
form,
Rc cos(2\p k r)+Rs sin(2\p k r),
and the modulus-argument form,
|R| cos(2\p k r+\y),
where k is the wave vector of the term and r is the atomic
average position. _atom_site_rot_Fourier_param_cos is the cosine
coefficient (Rc) in degrees corresponding to the Fourier term
defined by
_atom_site_rot_Fourier.atom_site_label,
_atom_site_rot_Fourier.axis and
_atom_site_rot_Fourier.wave_vector_seq_id.
save_atom_site_rot_Fourier_param.cos

    _definition.id               '_atom_site_rot_Fourier_param.cos'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_rot_Fourier_param_cos' 
    _description.text                   
;

      The displacive distortion of a given rigid group is not
      completely described by _atom_site_displace_Fourier.*. The rigid
      rotation of the group around a given axis passing through a fixed
      point (for example, the centre of mass of the group) is usually
      parameterized by Fourier series. Each term of the series
      commonly adopts two different representations: the sine-cosine
      form,
               Rc cos(2\\p k r)+Rs sin(2\\p k r),
      and the modulus-argument form,
               |R| cos(2\\p k r+\\y),
      where k is the wave vector of the term and r is the atomic
      average position. _atom_site_rot_Fourier_param_cos is the cosine
      coefficient (Rc) in degrees corresponding to the Fourier term
      defined by 
      _atom_site_rot_Fourier.atom_site_label,
      _atom_site_rot_Fourier.axis and
      _atom_site_rot_Fourier.wave_vector_seq_id.
;
    _name.category_id            atom_site_rot_Fourier_param
    _name.object_id              cos
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    _units.code                             degrees
    loop_
      _method.purpose
      _method.expression
      Evaluation    
;
      With  p  as  atom_site_rot_Fourier_param

       atom_site_rot_Fourier_param.cos =  p.modulus*Cos(TwoPi*p.phase)
; 

save_
_atom_site_rot_Fourier_param.id
CIF
A code identifying the (in general complex) coefficient of each
term present in the Fourier series describing the rotational part
of the displacive modulation of a given rigid group. This code
must match _atom_site_rot_Fourier.id.
save_atom_site_rot_Fourier_param.id

    _definition.id               '_atom_site_rot_Fourier_param.id'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_rot_Fourier_param_id' 
    _description.text                   
;

      A code identifying the (in general complex) coefficient of each
      term present in the Fourier series describing the rotational part
      of the displacive modulation of a given rigid group. This code
      must match _atom_site_rot_Fourier.id.
;
    _name.category_id            atom_site_rot_Fourier_param
    _name.object_id              id
    _name.linked_item_id         '_atom_site_rot_Fourier.id'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_rot_Fourier_param.modulus
CIF
The displacive distortion of a given rigid group is not
completely described by _atom_site_displace_Fourier_. The rigid
rotation of the group around a given axis passing through a fixed
point (for example, the centre of mass of the group) is usually
parameterized by Fourier series. Each term of the series
commonly adopts two different representations: the sine-cosine
form,
Rc cos(2\p k r)+Rs sin(2\p k r),
and the modulus-argument form,
|R| cos(2\p k r+\y),
where k is the wave vector of the term and r is the atomic
average position. _atom_site_rot_Fourier_param.modulus is the
modulus (|R|) in degrees of the complex amplitude corresponding
to the Fourier term defined by
_atom_site_rot_Fourier.atom_site_label,
_atom_site_rot_Fourier.axis and
_atom_site_rot_Fourier.wave_vector_seq_id.
save_atom_site_rot_Fourier_param.modulus

    _definition.id               '_atom_site_rot_Fourier_param.modulus'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_rot_Fourier_param_modulus' 
    _description.text                   
;

      The displacive distortion of a given rigid group is not
      completely described by _atom_site_displace_Fourier_. The rigid
      rotation of the group around a given axis passing through a fixed
      point (for example, the centre of mass of the group) is usually
      parameterized by Fourier series. Each term of the series
      commonly adopts two different representations: the sine-cosine
      form,
               Rc cos(2\\p k r)+Rs sin(2\\p k r),
      and the modulus-argument form,
               |R| cos(2\\p k r+\\y),
      where k is the wave vector of the term and r is the atomic
      average position. _atom_site_rot_Fourier_param.modulus is the
      modulus (|R|) in degrees of the complex amplitude corresponding
      to the Fourier term defined by
      _atom_site_rot_Fourier.atom_site_label,
      _atom_site_rot_Fourier.axis and
      _atom_site_rot_Fourier.wave_vector_seq_id.
;
    _name.category_id            atom_site_rot_Fourier_param
    _name.object_id              modulus
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    _enumeration.range           0.0:
    _units.code                             degrees
    loop_
      _method.purpose
      _method.expression
      Evaluation    
;
      With  p  as  atom_site_rot_Fourier_param

       atom_site_rot_Fourier_param.modulus =  Sqrt(p.cos**2+p.sin**2)
; 


save_
_atom_site_rot_Fourier_param.phase
CIF
The displacive distortion of a given rigid group is not
completely described by _atom_site_displace_Fourier_. The rigid
rotation of the group around a given axis passing through a fixed
point (for example, the centre of mass of the group) is usually
parameterized by Fourier series. Each term of the series
commonly adopts two different representations: the sine-cosine
form,
Rc cos(2\p k r)+Rs sin(2\p k r),
and the modulus-argument form,
|R| cos(2\p k r+\y),
where k is the wave vector of the term and r is the atomic
average position. _atom_site_rot_Fourier_param.phase is the phase
(/2\p) in cycles of the complex amplitude corresponding to the
Fourier term defined by
_atom_site_rot_Fourier.atom_site_label,
_atom_site_rot_Fourier.axis and
_atom_site_rot_Fourier.wave_vector_seq_id.
save_atom_site_rot_Fourier_param.phase

    _definition.id               '_atom_site_rot_Fourier_param.phase'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_rot_Fourier_param_phase' 
    _description.text                   
;

      The displacive distortion of a given rigid group is not
      completely described by _atom_site_displace_Fourier_. The rigid
      rotation of the group around a given axis passing through a fixed
      point (for example, the centre of mass of the group) is usually
      parameterized by Fourier series. Each term of the series
      commonly adopts two different representations: the sine-cosine
      form,
               Rc cos(2\\p k r)+Rs sin(2\\p k r),
      and the modulus-argument form,
               |R| cos(2\\p k r+\\y),
      where k is the wave vector of the term and r is the atomic
      average position. _atom_site_rot_Fourier_param.phase is the phase
      (\y/2\\p) in cycles of the complex amplitude corresponding to the
      Fourier term defined by 
      _atom_site_rot_Fourier.atom_site_label,
      _atom_site_rot_Fourier.axis and
      _atom_site_rot_Fourier.wave_vector_seq_id.
;
    _name.category_id            atom_site_rot_Fourier_param
    _name.object_id              phase
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    _enumeration.range           -1.0:1.0
    _units.code                             cycles
    loop_
      _method.purpose
      _method.expression
      Evaluation    
;
      With  p  as  atom_site_rot_Fourier_param

       atom_site_rot_Fourier_param.phase =  Phase(Complex(p.cos,-p.sin))/TwoPi
; 

save_
_atom_site_rot_Fourier_param.sin
CIF
The displacive distortion of a given rigid group is not
completely described by _atom_site_displace_Fourier_. The rigid
rotation of the group around a given axis passing through a fixed
point (for example, the centre of mass of the group) is usually
parameterized by Fourier series. Each term of the series
commonly adopts two different representations: the sine-cosine
form,
Rc cos(2\p k r)+Rs sin(2\p k r),
and the modulus-argument form,
|R| cos(2\p k r+\y),
where k is the wave vector of the term and r is the atomic
average position. _atom_site_rot_Fourier_param.sin is the sine
coefficient (Rs) in degrees corresponding to the Fourier term
defined by
_atom_site_rot_Fourier.atom_site_label,
_atom_site_rot_Fourier.axis and
_atom_site_rot_Fourier.wave_vector_seq_id.
save_atom_site_rot_Fourier_param.sin

    _definition.id               '_atom_site_rot_Fourier_param.sin'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_rot_Fourier_param_sin' 
    _description.text                   
;

      The displacive distortion of a given rigid group is not
      completely described by _atom_site_displace_Fourier_. The rigid
      rotation of the group around a given axis passing through a fixed
      point (for example, the centre of mass of the group) is usually
      parameterized by Fourier series. Each term of the series
      commonly adopts two different representations: the sine-cosine
      form,
               Rc cos(2\\p k r)+Rs sin(2\\p k r),
      and the modulus-argument form,
               |R| cos(2\\p k r+\\y),
      where k is the wave vector of the term and r is the atomic
      average position. _atom_site_rot_Fourier_param.sin is the sine
      coefficient (Rs) in degrees corresponding to the Fourier term
      defined by 
      _atom_site_rot_Fourier.atom_site_label,
      _atom_site_rot_Fourier.axis and
      _atom_site_rot_Fourier.wave_vector_seq_id.
;
    _name.category_id            atom_site_rot_Fourier_param
    _name.object_id              sin
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    _units.code                             degrees
    loop_
      _method.purpose
      _method.expression
      Evaluation    
;
      With  p  as  atom_site_rot_Fourier_param

       atom_site_rot_Fourier_param.sin =  -p.modulus*Sin(TwoPi*p.phase)
; 

save_
ATOM_SITE_ROT_LEGENDRE
CIF
Data items in the ATOM_SITE_ROT_LEGENDRE category record
details about the Legendre polynomials used to describe the displacive
modulations when the atomic domain of a given atom is restricted
by a crenel function. In the case of rigid groups, items in this
category would only include the rotational part of the modulation.
The translational part would appear in a separate list of items
belonging to the ATOM_SITE_DISPLACE_LEGENDRE category.
save_ATOM_SITE_ROT_LEGENDRE

    _definition.id               ATOM_SITE_ROT_LEGENDRE
    _definition.scope            Category
    _definition.class            Loop
    _definition.update           2014-06-27
    _description.text                   
;

      Data items in the ATOM_SITE_ROT_LEGENDRE category record
      details about the Legendre polynomials used to describe the displacive 
      modulations when the atomic domain of a given atom is restricted 
      by a crenel function. In the case of rigid groups, items in this 
      category would only include the rotational part of the modulation. 
      The translational part would appear in a separate list of items 
      belonging to the ATOM_SITE_DISPLACE_LEGENDRE category. 
;
    _name.category_id            MS_GROUP
    _name.object_id              ATOM_SITE_ROT_LEGENDRE
    loop_
      _category_key.name         '_atom_site_rot_Legendre.id'
  
save_
_atom_site_rot_Legendre.atom_site_label
CIF
Modulation parameters are usually looped in separate lists.
Modulated parameters are the atom positions (displacive
modulation), the atomic occupation (occupational modulation)
and/or the anisotropic (or isotropic) ADP.
_atom_site_rot_Legendre.atom_site_label is the
code that identifies an atom or rigid group in a loop in which
the Legendre components of its displacive modulation are listed.
In the case of a rigid group, this list would only include the
rotational part of its displacive modulation. The translational
part (if any) would appear in a separate list (see
_atom_site_displace_Legendre.atom_site_label). This code must match
the _atom_site.label of the associated coordinate list and
conform to the rules described in _atom_site.label.
save_atom_site_rot_Legendre.atom_site_label

    _definition.id               '_atom_site_rot_Legendre.atom_site_label'
    _definition.update           2014-06-27
    _description.text                   
;

      Modulation parameters are usually looped in separate lists.
      Modulated parameters are the atom positions (displacive
      modulation), the atomic occupation (occupational modulation)
      and/or the anisotropic (or isotropic) ADP.  
      _atom_site_rot_Legendre.atom_site_label is the
      code that identifies an atom or rigid group in a loop in which
      the Legendre components of its displacive modulation are listed.
      In the case of a rigid group, this list would only include the
      rotational part of its displacive modulation. The translational
      part (if any) would appear in a separate list (see
      _atom_site_displace_Legendre.atom_site_label). This code must match
      the _atom_site.label of the associated coordinate list and
      conform to the rules described in _atom_site.label.
;
    _name.category_id            atom_site_rot_Legendre
    _name.object_id              atom_site_label
    _name.linked_item_id         '_atom_site.label'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_rot_Legendre.axis
CIF
A label identifying the rotational part of the displacive modulation of
a given rigid group that is being parameterized by Legendre
polynomials. a, b and c are the basic lattice vectors of the reference
structure. For composites they refer to the reference structure of
each subsystem. a~1~, a~2~ and a~3~ are defined by the
items belonging to the ATOM_SITES_AXES category, through
_atom_site_rot_Legendre.matrix_seq_id.
save_atom_site_rot_Legendre.axis

    _definition.id               '_atom_site_rot_Legendre.axis'
    _definition.update           2014-06-27
    _description.text                   
;

      A label identifying the rotational part of the displacive modulation of 
      a given rigid group that is being parameterized by Legendre 
      polynomials. a, b and c are the basic lattice vectors of the reference  
      structure. For composites they refer to the reference structure of 
      each subsystem. a~1~, a~2~ and a~3~ are defined by the
      items belonging to the ATOM_SITES_AXES category, through 
      _atom_site_rot_Legendre.matrix_seq_id.
;
    _name.category_id            atom_site_rot_Legendre
    _name.object_id              axis
    _type.purpose                State
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Code
    loop_
      _enumeration_set.state
      _enumeration_set.detail
              x             'displacement along the a axis'          
              y             'displacement along the b axis'          
              z             'displacement along the c axis'          
              a1            'displacement along an arbitrary a1 axis'          
              a2            'displacement along an arbitrary a2 axis'          
              a3            'displacement along an arbitrary a3 axis' 

save_
_atom_site_rot_Legendre.id
CIF
A code identifying each component of the displacive modulation of
a given atom or rigid group when the modulation is expressed in
terms of Legendre polynomials. In the case of a rigid group, it
applies only to the rotational part of the distortion.
save_atom_site_rot_Legendre.id

    _definition.id               '_atom_site_rot_Legendre.id'
    _definition.update           2014-06-27
    _description.text                   
;

      A code identifying each component of the displacive modulation of
      a given atom or rigid group when the modulation is expressed in
      terms of Legendre polynomials. In the case of a rigid group, it
      applies only to the rotational part of the distortion.
;
    _name.category_id            atom_site_rot_Legendre
    _name.object_id              id
    _type.purpose                Key
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_rot_Legendre.matrix_seq_id
CIF
A numeric code identifying the transformation matrix that defines
the arbitrary axes a1, a2 and a3 in terms of the crystallographic axes.
This code must match _atom_sites_axes.matrix_seq_id.
save_atom_site_rot_Legendre.matrix_seq_id

    _definition.id               '_atom_site_rot_Legendre.matrix_seq_id'
    _definition.update           2014-06-27
    _description.text                   
;

      A numeric code identifying the transformation matrix that defines
      the arbitrary axes a1, a2 and a3 in terms of the crystallographic axes. 
      This code must match _atom_sites_axes.matrix_seq_id.
;
    _name.category_id            atom_site_rot_Legendre
    _name.object_id              matrix_seq_id
    _name.linked_item_id         '_atom_sites_axes.matrix_seq_id'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_rot_Legendre.order
CIF
The order of the Legendre polynomial.
save_atom_site_rot_Legendre.order

    _definition.id               '_atom_site_rot_Legendre.order'
    _definition.update           2019-09-25
    _description.text                   
;

      The order of the Legendre polynomial.
;
    _name.category_id            atom_site_rot_Legendre
    _name.object_id              order
    _type.purpose                Key
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Integer
    _enumeration.range           0:

save_
_atom_site_rot_Legendre.coeff
CIF
The coefficient corresponding to the Legendre function
defined by _atom_site_rot_Legendre.atom_site_label,
_atom_site_rot_Legendre.axis and _atom_site_rot_Legendre.order.
Atomic or rigid-group rotations must be expressed in degrees. Special
axes are defined by the items belonging to the ATOM_SITES_AXES category,
through _atom_site_rot_Legendre.matrix_seq_id.
save_atom_site_rot_Legendre.coeff

    _definition.id               '_atom_site_rot_Legendre.coeff'
    _definition.update           2014-06-27
    _description.text                   
;

      The coefficient corresponding to the Legendre function 
      defined by _atom_site_rot_Legendre.atom_site_label,
      _atom_site_rot_Legendre.axis and _atom_site_rot_Legendre.order.  
      Atomic or rigid-group rotations must be expressed in degrees. Special 
      axes are defined by the items belonging to the ATOM_SITES_AXES category, 
      through _atom_site_rot_Legendre.matrix_seq_id.
;
    _name.category_id            atom_site_rot_Legendre
    _name.object_id              coeff
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    _units.code                  degrees

save_
ATOM_SITE_ROT_ORTHO
CIF
Data items in the ATOM_SITE_ROT_ORTHO category record
details about the orthogonalized functions defined to solve
correlation problems during the refinement of displacive
modulations when the the atomic domain of a given atom is
restricted by a crenel function. The functions are constructed
selecting Fourier harmonics until the desired degree of
orthogonality and completeness is reached (see
_atom_site_occ_special_func.crenel_ortho_eps).
In the case of rigid groups, items in this category would only
include the rotational part of the modulation.
Notice that the global results could also be expressed (losing
information) using the data items defined in the categories
ATOM_SITE_ROT_FOURIER and ATOM_SITE_ROT_FOURIER_PARAM.
save_ATOM_SITE_ROT_ORTHO

    _definition.id               ATOM_SITE_ROT_ORTHO
    _definition.scope            Category
    _definition.class            Loop
    _definition.update           2014-06-27
    _description.text                   
;

      Data items in the ATOM_SITE_ROT_ORTHO category record
      details about the orthogonalized functions defined to solve 
      correlation problems during the refinement of displacive 
      modulations when the the atomic domain of a given atom is 
      restricted by a crenel function. The functions are constructed 
      selecting Fourier harmonics until the desired degree of 
      orthogonality and completeness is reached (see
      _atom_site_occ_special_func.crenel_ortho_eps).
      In the case of rigid groups, items in this category would only 
      include the rotational part of the modulation. 

      Notice that the global results could also be expressed (losing 
      information) using the data items defined in the categories 
      ATOM_SITE_ROT_FOURIER and ATOM_SITE_ROT_FOURIER_PARAM.
;
    _name.category_id            MS_GROUP
    _name.object_id              ATOM_SITE_ROT_ORTHO
    loop_
      _category_key.name         '_atom_site_rot_ortho.id'
  
save_
_atom_site_rot_ortho.atom_site_label
CIF
Modulation parameters are usually looped in separate lists.
Modulated parameters are the atom positions (displacive
modulation), the atomic occupation (occupational modulation)
and/or the anisotropic (or isotropic) ADP.
_atom_site_rot_ortho.atom_site_label is the
code that identifies an atom or rigid group in a loop in which
the ortho components of its displacive modulation are listed.
In the case of a rigid group, this list would only include the
rotational part of its displacive modulation. The translational
part (if any) would appear in a separate list (see
_atom_site_displace_ortho.atom_site_label). This code must match
the _atom_site.label of the associated coordinate list and
conform to the rules described in _atom_site.label.
save_atom_site_rot_ortho.atom_site_label

    _definition.id               '_atom_site_rot_ortho.atom_site_label'
    _definition.update           2014-06-27
    _description.text                   
;

      Modulation parameters are usually looped in separate lists.
      Modulated parameters are the atom positions (displacive
      modulation), the atomic occupation (occupational modulation)
      and/or the anisotropic (or isotropic) ADP.  
      _atom_site_rot_ortho.atom_site_label is the
      code that identifies an atom or rigid group in a loop in which
      the ortho components of its displacive modulation are listed.
      In the case of a rigid group, this list would only include the
      rotational part of its displacive modulation. The translational
      part (if any) would appear in a separate list (see
      _atom_site_displace_ortho.atom_site_label). This code must match
      the _atom_site.label of the associated coordinate list and
      conform to the rules described in _atom_site.label.
;
    _name.category_id            atom_site_rot_ortho
    _name.object_id              atom_site_label
    _name.linked_item_id         '_atom_site.label'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_rot_ortho.axis
CIF
A label identifying the rotational part of the displacive modulation of
a given rigid group that is being parameterized by orthogonalized
functions. a, b and c are the basic lattice vectors of the reference
structure. For composites they refer to the reference structure of
each subsystem. a~1~, a~2~ and a~3~ are defined by the
items belonging to the ATOM_SITES_AXES category, through
_atom_site_rot_ortho.matrix_seq_id.
save_atom_site_rot_ortho.axis

    _definition.id               '_atom_site_rot_ortho.axis'
    _definition.update           2014-06-27
    _description.text                   
;

      A label identifying the rotational part of the displacive modulation of 
      a given rigid group that is being parameterized by orthogonalized 
      functions. a, b and c are the basic lattice vectors of the reference  
      structure. For composites they refer to the reference structure of 
      each subsystem. a~1~, a~2~ and a~3~ are defined by the
      items belonging to the ATOM_SITES_AXES category, through 
      _atom_site_rot_ortho.matrix_seq_id.
;
    _name.category_id            atom_site_rot_ortho
    _name.object_id              axis
    _type.purpose                State
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Code
    loop_
      _enumeration_set.state
      _enumeration_set.detail
              x             'displacement along the a axis'          
              y             'displacement along the b axis'          
              z             'displacement along the c axis'          
              a1            'displacement along an arbitrary a1 axis'          
              a2            'displacement along an arbitrary a2 axis'          
              a3            'displacement along an arbitrary a3 axis' 

save_
_atom_site_rot_ortho.func_id
CIF
A code identifying the orthogonalized function used in the
structural model to describe the displacive modulation of an atom
or rigid group. In the case of a rigid group, it applies only
to the rotational part of the distortion. This code must match
_atom_sites_ortho_func_id.
save_atom_site_rot_ortho.func_id

    _definition.id               '_atom_site_rot_ortho.func_id'
    _definition.update           2014-06-27
    _description.text                   
;

      A code identifying the orthogonalized function used in the 
      structural model to describe the displacive modulation of an atom 
      or rigid group. In the case of a rigid group, it applies only 
      to the rotational part of the distortion. This code must match  
      _atom_sites_ortho_func_id.
;
    _name.category_id            atom_site_rot_ortho
    _name.object_id              func_id
    _name.linked_item_id         '_atom_sites_ortho.func_id '
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_rot_ortho.id
CIF
A code identifying each component of the displacive modulation of
a given atom or rigid group when the modulation is expressed in
terms of ortho series. In the case of a rigid group, it
applies only to the rotational part of the distortion.
save_atom_site_rot_ortho.id

    _definition.id               '_atom_site_rot_ortho.id'
    _definition.update           2014-06-27
    _description.text                   
;

      A code identifying each component of the displacive modulation of
      a given atom or rigid group when the modulation is expressed in
      terms of ortho series. In the case of a rigid group, it
      applies only to the rotational part of the distortion.
;
    _name.category_id            atom_site_rot_ortho
    _name.object_id              id
    _type.purpose                Key
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_rot_ortho.matrix_seq_id
CIF
A numeric code identifying the transformation matrix that defines
the arbitrary axes a1, a2 and a3 in terms of the crystallographic axes.
This code must match _atom_sites_axes.matrix_seq_id.
save_atom_site_rot_ortho.matrix_seq_id

    _definition.id               '_atom_site_rot_ortho.matrix_seq_id'
    _definition.update           2014-06-27
    _description.text                   
;

      A numeric code identifying the transformation matrix that defines
      the arbitrary axes a1, a2 and a3 in terms of the crystallographic axes. 
      This code must match _atom_sites_axes.matrix_seq_id.
;
    _name.category_id            atom_site_rot_ortho
    _name.object_id              matrix_seq_id
    _name.linked_item_id         '_atom_sites_axes.matrix_seq_id'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_rot_ortho.coeff
CIF
The coefficient corresponding to the orthogonalized function
defined by _atom_site_rot_ortho.atom_site_label,
_atom_site_rot_ortho.axis and _atom_site_rot_ortho.func_id.
Atomic or rigid-group rotations must be expressed in degrees. Special
axes are defined by the items belonging to the ATOM_SITES_AXES category,
through _atom_site_rot_ortho.matrix_seq_id.
save_atom_site_rot_ortho.coeff

    _definition.id               '_atom_site_rot_ortho.coeff'
    _definition.update           2014-06-27
    _description.text                   
;

      The coefficient corresponding to the orthogonalized function 
      defined by _atom_site_rot_ortho.atom_site_label,
      _atom_site_rot_ortho.axis and _atom_site_rot_ortho.func_id.  
      Atomic or rigid-group rotations must be expressed in degrees. Special 
      axes are defined by the items belonging to the ATOM_SITES_AXES category, 
      through _atom_site_rot_ortho.matrix_seq_id.
;
    _name.category_id            atom_site_rot_ortho
    _name.object_id              coeff
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    _units.code                  degrees

save_
ATOM_SITE_ROT_SPECIAL_FUNC
CIF
Data items in the ATOM_SITE_ROT_SPECIAL_FUNC category record
details about the rotational part of the displacive modulation
of a rigid group in a modulated structure when it is not described
by Fourier series. Special functions are effective in some cases
where the modulations are highly anharmonic, since the number of
parameters is drastically reduced. However, they are in general
discontinuous or with discontinuous derivatives and therefore
these functions describe an ideal situation that never occurs
in a real modulated crystal. Up to now, only a few types of
special functions have been used and all of them come from the
JANA2006 suite of programs (Petricek, Dusek & Palatinus, 2014).
Although this approach is far from being general, it has the
advantage that the functions are tightly defined and therefore the
atomic displacements and occupations can be calculated easily. In this
dictionary, only the special functions available in JANA2006 have been
included.
These are:
wtooth functions for the displacive modulation of atoms and
groups.
(2) Zig-Zag functions for the displacive modulation of atoms and
    rigid groups.
(3) Crenel functions for the occupational modulation of atoms
    and rigid groups. Both of these only apply to
    one-dimensional modulated structures.
References: Petricek, V., Dusek, M. & Palatinus, L. (2014).
          Z. Kristallogr. 229(5), 345-352.  DOI 10.1515/zkri-2014-1737
          Crystallographic Computing System JANA2006: General features
          Petricek, V., Eigner, V., Dusek, M. & Cejchan, A. (2016). Z.
          Kristallogr. 231(5), 301-312. DOI 10.1515/zkri-2015-1913
          Discontinuous modulation functions and their application for
          analysis of modulated structures with the computing system JANA2006
save_ATOM_SITE_ROT_SPECIAL_FUNC

    _definition.id               ATOM_SITE_ROT_SPECIAL_FUNC
    _definition.scope            Category
    _definition.class            Loop
    _definition.update           2014-06-27
    _description.text                   
;

      Data items in the ATOM_SITE_ROT_SPECIAL_FUNC category record
      details about the rotational part of the displacive modulation 
      of a rigid group in a modulated structure when it is not described 
      by Fourier series. Special functions are effective in some cases 
      where the modulations are highly anharmonic, since the number of 
      parameters is drastically reduced. However, they are in general
      discontinuous or with discontinuous derivatives and therefore
      these functions describe an ideal situation that never occurs
      in a real modulated crystal. Up to now, only a few types of
      special functions have been used and all of them come from the
      JANA2006 suite of programs (Petricek, Dusek & Palatinus, 2014). 
      Although this approach is far from being general, it has the 
      advantage that the functions are tightly defined and therefore the 
      atomic displacements and occupations can be calculated easily. In this  
      dictionary, only the special functions available in JANA2006 have been 
      included. 

      These are:

(1) Sawtooth functions for the displacive modulation of atoms and 
rigid groups.
        (2) Zig-Zag functions for the displacive modulation of atoms and
            rigid groups.
        (3) Crenel functions for the occupational modulation of atoms
            and rigid groups. Both of these only apply to
            one-dimensional modulated structures.

      References: Petricek, V., Dusek, M. & Palatinus, L. (2014).
                  Z. Kristallogr. 229(5), 345-352.  DOI 10.1515/zkri-2014-1737     
                  Crystallographic Computing System JANA2006: General features

                  Petricek, V., Eigner, V., Dusek, M. & Cejchan, A. (2016). Z. 
                  Kristallogr. 231(5), 301-312. DOI 10.1515/zkri-2015-1913 
                  Discontinuous modulation functions and their application for 
                  analysis of modulated structures with the computing system JANA2006

;
    _name.category_id            MS_GROUP
    _name.object_id              ATOM_SITE_ROT_SPECIAL_FUNC
    _category_key.name           '_atom_site_rot_special_func.atom_site_label'

save_
_atom_site_rot_special_func.atom_site_label
CIF
The code that identifies a rigid group in a loop in which
the special function that describes the rotational part of
its displacive modulation is being defined. This code must match
the _atom_site.label of theassociated coordinate list and conform
to the rules described in _atom_site.label.
save_atom_site_rot_special_func.atom_site_label

    _definition.id               '_atom_site_rot_special_func.atom_site_label'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
                                 '_atom_site_rot_special_func_atom_site_label' 
    _description.text                   
;

      The code that identifies a rigid group in a loop in which 
      the special function that describes the rotational part of 
      its displacive modulation is being defined. This code must match 
      the _atom_site.label of theassociated coordinate list and conform 
      to the rules described in _atom_site.label.
;
    _name.category_id            atom_site_rot_special_func
    _name.object_id              atom_site_label
    _name.linked_item_id         '_atom_site.label'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_rot_special_func.matrix_seq_id
CIF
A numeric code identifying the transformation matrix that defines
the arbitrary axes a1, a2 and a3 in terms of the crystallographic axes.
This code must match _atom_sites_axes.matrix_seq_id.
save_atom_site_rot_special_func.matrix_seq_id

    _definition.id               '_atom_site_rot_special_func.matrix_seq_id'
    _definition.update           2014-06-27
    _description.text                   
;

      A numeric code identifying the transformation matrix that defines
      the arbitrary axes a1, a2 and a3 in terms of the crystallographic axes. 
      This code must match _atom_sites_axes.matrix_seq_id.
;
    _name.category_id            atom_site_rot_special_func
    _name.object_id              matrix_seq_id
    _name.linked_item_id         '_atom_sites_axes.matrix_seq_id'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code
save_
_atom_site_rot_special_func.sawtooth
CIF
_atom_site_rot_special_func.sawtooth_ items are the
adjustable parameters of a sawtooth function.
A rotational sawtooth function along the internal space is
defined as follows:
[rx, ry, rz] = 2* [ax, ay, az] * ((x4-c)/w)
for x4 belonging to the interval [c-(w/2), c+(w/2)], where ax,
ay and az are the amplitudes (maximum displacements)
along each axis, w is its width, x4 is the
internal coordinate and c is the centre of the function in
internal space. rx, ry and rz must be expressed in degrees.
Special axes are defined by the items belonging to the ATOM_SITES_AXES
category, through _atom_site_rot_special_func.matrix_seq_id.
The use of this function is restricted to one-dimensional
modulated structures. For more details, see the manual for
JANA2006 (Petricek, Dusek & Palatinus, 2014) and (Petricek, Eigner,
Dusek & Cejchan, 2016). In the case of rigid groups, items in this
category would only include the rotational part of the modulation.
The translationalional part would appear in a separate list of items belonging
to the ATOM_SITE_DISPLACE_SPECIAL_FUNC category.
References: Petricek, V., Dusek, M. & Palatinus, L. (2014).
     Z. Kristallogr. 229(5), 345-352.  DOI 10.1515/zkri-2014-1737
     Crystallographic Computing System JANA2006: General features
     Petricek, V., Eigner, V., Dusek, M. & Cejchan, A. (2016). Z.
     Kristallogr. 231(5), 301-312. DOI 10.1515/zkri-2015-1913
     Discontinuous modulation functions and their application for
     analysis of modulated structures with the computing system JANA2006
save_atom_site_rot_special_func.sawtooth

    _definition.id               '_atom_site_rot_special_func.sawtooth'
    _definition.update           2019-04-01
    _description.text                   
;

      _atom_site_rot_special_func.sawtooth_ items are the
      adjustable parameters of a sawtooth function.
      A rotational sawtooth function along the internal space is
      defined as follows:

             [rx, ry, rz] = 2* [ax, ay, az] * ((x4-c)/w)

      for x4 belonging to the interval [c-(w/2), c+(w/2)], where ax,
      ay and az are the amplitudes (maximum displacements)
      along each axis, w is its width, x4 is the
      internal coordinate and c is the centre of the function in
      internal space. rx, ry and rz must be expressed in degrees.
      Special axes are defined by the items belonging to the ATOM_SITES_AXES 
      category, through _atom_site_rot_special_func.matrix_seq_id.

      The use of this function is restricted to one-dimensional 
      modulated structures. For more details, see the manual for
      JANA2006 (Petricek, Dusek & Palatinus, 2014) and (Petricek, Eigner, 
      Dusek & Cejchan, 2016). In the case of rigid groups, items in this 
      category would only include the rotational part of the modulation. 
      The translationalional part would appear in a separate list of items belonging 
      to the ATOM_SITE_DISPLACE_SPECIAL_FUNC category.

      References: Petricek, V., Dusek, M. & Palatinus, L. (2014).
                  Z. Kristallogr. 229(5), 345-352.  DOI 10.1515/zkri-2014-1737     
                  Crystallographic Computing System JANA2006: General features

                  Petricek, V., Eigner, V., Dusek, M. & Cejchan, A. (2016). Z.                      
                  Kristallogr. 231(5), 301-312. DOI 10.1515/zkri-2015-1913 
                  Discontinuous modulation functions and their application for 
                  analysis of modulated structures with the computing system JANA2006
;
    _name.category_id            atom_site_rot_special_func
    _name.object_id              sawtooth
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Matrix
    _type.contents               Real
    _type.dimension              '[3]'
    _enumeration.default         [0.0 0.0 0.0]
    loop_
      _method.purpose
      _method.expression
      Evaluation    
;
      With  f  as  atom_site_rot_special_func

      atom_site_rot_special_func.sawtooth =  [
          
         2 * [sawtooth_ax, sawtooth_ay, sawtooth_az] * 
                     (( sawtooth_x4 - sawtooth_c) / sawtooth_w )]
; 

save_
_atom_site_rot_special_func.sawtooth_axyz
CIF
The vector of amplitudes (maximum displacements) along the a (or a1),
b (or a2) and c (or a3) axis of the sawtooth function described in
_atom_site_rot_special_func.sawtooth
save_atom_site_rot_special_func.sawtooth_axyz

    _definition.id               '_atom_site_rot_special_func.sawtooth_axyz'
    _definition.update           2019-04-01
    _description.text                   
;

    The vector of amplitudes (maximum displacements) along the a (or a1), 
    b (or a2) and c (or a3) axis of the sawtooth function described in 
    _atom_site_rot_special_func.sawtooth
;
    _name.category_id            atom_site_rot_special_func
    _name.object_id              sawtooth_axyz
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Array
    _type.contents               Real
    _type.dimension              '[3]'
    _enumeration.default         [0.0 0.0 0.0]
    _units.code                 degrees
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  atom_site_rot_special_func
            atom_site_rot_special_func.sawtooth_axyz = 
                              [ r.sawtooth_ax, r.sawtooth_ay, r.sawtooth_az ]
; 

save_
_atom_site_rot_special_func.sawtooth_ax
CIF
The amplitude (maximum displacement) along the a (or a1) axis of the sawtooth
function described in _atom_site_rot_special_func.sawtooth
save_atom_site_rot_special_func.sawtooth_ax

    _definition.id               '_atom_site_rot_special_func.sawtooth_ax'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
                                 '_atom_site_rot_special_func_sawtooth_ax' 
    _description.text                   
;

    The amplitude (maximum displacement) along the a (or a1) axis of the sawtooth   
    function described in _atom_site_rot_special_func.sawtooth
;
    _name.category_id            atom_site_rot_special_func
    _name.object_id              sawtooth_ax
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    _units.code                  degrees
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  atom_site_rot_special_func

            atom_site_rot_special_func.sawtooth_ax = r.sawtooth_axyz[0]
; 

save_
_atom_site_rot_special_func.sawtooth_ay
CIF
The amplitude (maximum displacement) along the b (or a2) axis of the sawtooth
function described in _atom_site_rot_special_func.sawtooth
save_atom_site_rot_special_func.sawtooth_ay

    _definition.id               '_atom_site_rot_special_func.sawtooth_ay'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
                                 '_atom_site_rot_special_func_sawtooth_ay' 
    _description.text                   
;

    The amplitude (maximum displacement) along the b (or a2) axis of the sawtooth 
    function described in _atom_site_rot_special_func.sawtooth
;
    _name.category_id            atom_site_rot_special_func
    _name.object_id              sawtooth_ay
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    _units.code                  degrees
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  atom_site_rot_special_func

            atom_site_rot_special_func.sawtooth_ay = r.sawtooth_axyz[1]
; 

save_
_atom_site_rot_special_func.sawtooth_az
CIF
The amplitude (maximum displacement) along the c (or a3) axis of the sawtooth
function described in _atom_site_rot_special_func.sawtooth
save_atom_site_rot_special_func.sawtooth_az

    _definition.id               '_atom_site_rot_special_func.sawtooth_az'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
                                 '_atom_site_rot_special_func_sawtooth_az' 
    _description.text                   
;

    The amplitude (maximum displacement) along the c (or a3) axis of the sawtooth 
    function described in _atom_site_rot_special_func.sawtooth
;
    _name.category_id            atom_site_rot_special_func
    _name.object_id              sawtooth_az
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    _units.code                  degrees
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  atom_site_rot_special_func

            atom_site_rot_special_func.sawtooth_az = r.sawtooth_axyz[2]
; 

save_
_atom_site_rot_special_func.sawtooth_c
CIF
The centre of the sawtooth function described in
_atom_site_rot_special_func.sawtooth
save_atom_site_rot_special_func.sawtooth_c

    _definition.id               '_atom_site_rot_special_func.sawtooth_c'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
                                 '_atom_site_rot_special_func_sawtooth_c' 
    _description.text                   
;

    The centre of the sawtooth function described in 
    _atom_site_rot_special_func.sawtooth
;
    _name.category_id            atom_site_rot_special_func
    _name.object_id              sawtooth_c
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    _enumeration.range           0.0:1.0
    

save_
_atom_site_rot_special_func.sawtooth_w
CIF
The width of the sawtooth function described in
_atom_site_rot_special_func.sawtooth
save_atom_site_rot_special_func.sawtooth_w

    _definition.id               '_atom_site_rot_special_func.sawtooth_w'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
                                 '_atom_site_rot_special_func_sawtooth_w' 
    _description.text                   
;

    The width of the sawtooth function described in 
    _atom_site_rot_special_func.sawtooth
;
    _name.category_id            atom_site_rot_special_func
    _name.object_id              sawtooth_w
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    _enumeration.range           0.0:1.0

save_
_atom_site_rot_special_func.zigzag
CIF
_atom_site_rot_special_func.zigzag_ items are the
adjustable parameters of a zigzag function.
A displacive zigzag function along the internal space is
defined as follows:
 2*[ax,ay,az]*(x4-c)/w for x4 in [c-(w/2),c+(w/2)]
[rx,ry,rz] =
-2*[ax,ay,az]*(x4-c)/w for x4 in [c+1/2-(w/2),c+1/2+(w/2)]
where ax,ay and az are the amplitudes (maximum displacements)
along each crystallographic axis, w is its width, x4 is the
internal coordinate and c is the centre of the function in
internal space. rx, ry and rz must be expressed in degrees.
Special axes are defined by the items belonging to the ATOM_SITES_AXES
category, through _atom_site_rot_special_func.matrix_seq_id.
The use of this function is restricted to one-dimensional
modulated structures. For more details, see (Elcoro et al., 2008;
Petricek, Dusek & Palatinus, 2014 and Petricek, Eigner, Dusek
& Cejchan, 2016). In the case of rigid groups, items in this
category would only include the rotational part of the modulation.
The rotational part would appear in a separate list of items belonging
to the ATOM_SITE_DISPLACE_SPECIAL_FUNC category.
References: Luis Elcoro, J.M. Perez-Mato, Karen Friese, Vaclav Petricek,
Tonci Balic-Zunic & Lars Arnskov Olsen (2008)
Acta Cryst. B64, 684-701. doi:10.1107/S0108768108031492
Modular crystals as modulated structures: the case of the
lillianite homologous series
Petricek, V., Dusek, M. & Palatinus, L. (2014).
Z. Kristallogr. 229(5), 345-352.  DOI 10.1515/zkri-2014-1737
Crystallographic Computing System JANA2006: General features
Petricek, V., Eigner, V., Dusek, M. & Cejchan, A. (2016). Z.
Kristallogr. 231(5), 301-312. DOI 10.1515/zkri-2015-1913
Discontinuous modulation functions and their application for
analysis of modulated structures with the computing system
JANA2006
save_atom_site_rot_special_func.zigzag

    _definition.id               '_atom_site_rot_special_func.zigzag'
    _definition.update           2019-04-01
    _description.text                   
;

      _atom_site_rot_special_func.zigzag_ items are the
      adjustable parameters of a zigzag function.
      A displacive zigzag function along the internal space is
      defined as follows:

                   2*[ax,ay,az]*(x4-c)/w for x4 in [c-(w/2),c+(w/2)]
      [rx,ry,rz] = 
                  -2*[ax,ay,az]*(x4-c)/w for x4 in [c+1/2-(w/2),c+1/2+(w/2)]

      where ax,ay and az are the amplitudes (maximum displacements)
      along each crystallographic axis, w is its width, x4 is the
      internal coordinate and c is the centre of the function in
      internal space. rx, ry and rz must be expressed in degrees.
      Special axes are defined by the items belonging to the ATOM_SITES_AXES 
      category, through _atom_site_rot_special_func.matrix_seq_id.
      The use of this function is restricted to one-dimensional 
      modulated structures. For more details, see (Elcoro et al., 2008; 
      Petricek, Dusek & Palatinus, 2014 and Petricek, Eigner, Dusek 
      & Cejchan, 2016). In the case of rigid groups, items in this 
      category would only include the rotational part of the modulation. 
      The rotational part would appear in a separate list of items belonging 
      to the ATOM_SITE_DISPLACE_SPECIAL_FUNC category.

      References: Luis Elcoro, J.M. Perez-Mato, Karen Friese, Vaclav Petricek,
                  Tonci Balic-Zunic & Lars Arnskov Olsen (2008)
                  Acta Cryst. B64, 684-701. doi:10.1107/S0108768108031492
                  Modular crystals as modulated structures: the case of the 
                  lillianite homologous series

                  Petricek, V., Dusek, M. & Palatinus, L. (2014).
                  Z. Kristallogr. 229(5), 345-352.  DOI 10.1515/zkri-2014-1737     
                  Crystallographic Computing System JANA2006: General features

                  Petricek, V., Eigner, V., Dusek, M. & Cejchan, A. (2016). Z.                      
                  Kristallogr. 231(5), 301-312. DOI 10.1515/zkri-2015-1913 
                  Discontinuous modulation functions and their application for 
                  analysis of modulated structures with the computing system  
                  JANA2006
;
    _name.category_id            atom_site_rot_special_func
    _name.object_id              zigzag
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Matrix
    _type.contents               Real
    _type.dimension              '[3]'
    _enumeration.default         [0.0 0.0 0.0]

save_
_atom_site_rot_special_func.zigzag_axyz
CIF
The vector of amplitudes (maximum displacements) along the a (or a1),
b (or a2) and c (or a3) axis of the zigzag function described in
_atom_site_rot_special_func.zigzag
save_atom_site_rot_special_func.zigzag_axyz

    _definition.id               '_atom_site_rot_special_func.zigzag_axyz'
    _definition.update           2019-04-01
    _description.text
;

    The vector of amplitudes (maximum displacements) along the a (or a1), 
    b (or a2) and c (or a3) axis of the zigzag function described in   
    _atom_site_rot_special_func.zigzag
;
    _name.category_id            atom_site_rot_special_func
    _name.object_id              zigzag_axyz
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Array
    _type.contents               Real
    _type.dimension              '[3]'
    _enumeration.default         [0.0 0.0 0.0]
    _units.code                  degrees
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  atom_site_rot_special_func
            atom_site_rot_special_func.zigzag_axyz = 
                              [ r.zigzag_ax, r.zigzag_ay, r.zigzag_az ]
; 

save_
_atom_site_rot_special_func.zigzag_c
CIF
The centre of the zigzag function described in
_atom_site_rot_special_func.zigzag
save_atom_site_rot_special_func.zigzag_c

    _definition.id               '_atom_site_rot_special_func.zigzag_c'
    _definition.update           2014-06-27
    _description.text                   
;

    The centre of the zigzag function described in 
    _atom_site_rot_special_func.zigzag
;
    _name.category_id            atom_site_rot_special_func
    _name.object_id              zigzag_c
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    _enumeration.range           0.0:1.0
    

save_
_atom_site_rot_special_func.zigzag_w
CIF
The width of the zigzag function described in
_atom_site_rot_special_func.zigzag
save_atom_site_rot_special_func.zigzag_w

    _definition.id               '_atom_site_rot_special_func.zigzag_w'
    _definition.update           2014-06-27
    _description.text                   
;

    The width of the zigzag function described in 
    _atom_site_rot_special_func.zigzag
;
    _name.category_id            atom_site_rot_special_func
    _name.object_id              zigzag_w
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    _enumeration.range           0.0:1.0

save_
ATOM_SITE_ROT_XHARM
CIF
Data items in the ATOM_SITE_ROT_XHARM category record
details about the x-harmonics used to describe the displacive
modulations when the atomic domain of a given atom is restricted
by a crenel function. In the case of rigid groups, items in this
category would only include the rotational part of the modulation.
The translational part would appear in a separate list of items
belonging to the ATOM_SITE_DISPLACE_XHARM category.
save_ATOM_SITE_ROT_XHARM

    _definition.id               ATOM_SITE_ROT_XHARM
    _definition.scope            Category
    _definition.class            Loop
    _definition.update           2014-06-27
    _description.text                   
;

      Data items in the ATOM_SITE_ROT_XHARM category record
      details about the x-harmonics used to describe the displacive 
      modulations when the atomic domain of a given atom is restricted 
      by a crenel function. In the case of rigid groups, items in this 
      category would only include the rotational part of the modulation.
      The translational part would appear in a separate list of items 
      belonging to the ATOM_SITE_DISPLACE_XHARM category. 
;
    _name.category_id            MS_GROUP
    _name.object_id              ATOM_SITE_ROT_XHARM
    loop_
      _category_key.name         '_atom_site_rot_xharm.id'
  
save_
_atom_site_rot_xharm.atom_site_label
CIF
Modulation parameters are usually looped in separate lists.
Modulated parameters are the atom positions (displacive
modulation), the atomic occupation (occupational modulation)
and/or the anisotropic (or isotropic) ADP.
_atom_site_rot_xharm.atom_site_label is the code that identifies
an atom or rigid group in a loop in which the x-harmonics
components of its displacive modulation are listed. In the case
of a rigid group, this list would only include the rotational part
of its displacive modulation. The translational part (if any) would
appear in a separate list (see _atom_site_displace_xharm.atom_site_label).
This code must match the _atom_site.label of the associated
coordinate list and conform to the rules described in _atom_site.label.
save_atom_site_rot_xharm.atom_site_label

    _definition.id               '_atom_site_rot_xharm.atom_site_label'
    _definition.update           2014-06-27
    _description.text                   
;

      Modulation parameters are usually looped in separate lists.
      Modulated parameters are the atom positions (displacive
      modulation), the atomic occupation (occupational modulation)
      and/or the anisotropic (or isotropic) ADP.  
      _atom_site_rot_xharm.atom_site_label is the code that identifies 
      an atom or rigid group in a loop in which the x-harmonics 
      components of its displacive modulation are listed. In the case 
      of a rigid group, this list would only include the rotational part 
      of its displacive modulation. The translational part (if any) would 
      appear in a separate list (see _atom_site_displace_xharm.atom_site_label).
      This code must match the _atom_site.label of the associated 
      coordinate list and conform to the rules described in _atom_site.label.
;
    _name.category_id            atom_site_rot_xharm
    _name.object_id              atom_site_label
    _name.linked_item_id         '_atom_site.label'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_rot_xharm.axis
CIF
A label identifying the rotational part of the displacive modulation of
a given rigid group that is being parameterized by x-harmonics. a, b and c
are the basic lattice vectors of the reference structure. For composites
they refer to the reference structure of each subsystem. a~1~, a~2~ and a~3~
are defined by the items belonging to the ATOM_SITES_AXES category, through
_atom_site_rot_xharm.matrix_seq_id.
save_atom_site_rot_xharm.axis

    _definition.id               '_atom_site_rot_xharm.axis'
    _definition.update           2014-06-27
    _description.text                   
;

      A label identifying the rotational part of the displacive modulation of 
      a given rigid group that is being parameterized by x-harmonics. a, b and c 
      are the basic lattice vectors of the reference structure. For composites 
      they refer to the reference structure of each subsystem. a~1~, a~2~ and a~3~ 
      are defined by the items belonging to the ATOM_SITES_AXES category, through 
      _atom_site_rot_xharm.matrix_seq_id.
;
    _name.category_id            atom_site_rot_xharm
    _name.object_id              axis
    _type.purpose                State
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Code
    loop_
      _enumeration_set.state
      _enumeration_set.detail
              x             'displacement along the a axis'          
              y             'displacement along the b axis'          
              z             'displacement along the c axis'          
              a1            'displacement along an arbitrary a1 axis'          
              a2            'displacement along an arbitrary a2 axis'          
              a3            'displacement along an arbitrary a3 axis' 

save_
_atom_site_rot_xharm.coeff
CIF
The coefficient corresponding to the x-harmonic function
Defined by _atom_site_rot_xharm.atom_site_label,
_atom_site_rot_xharm.axis and _atom_site_rot_xharm.order.
Atomic or rigid-group rotations must be expressed in degrees. Special
axes are defined by the items belonging to the ATOM_SITES_AXES category,
through _atom_site_rot_xharm.matrix_seq_id.
save_atom_site_rot_xharm.coeff

    _definition.id               '_atom_site_rot_xharm.coeff'
    _definition.update           2014-06-27
    _description.text                   
;

      The coefficient corresponding to the x-harmonic function 
      Defined by _atom_site_rot_xharm.atom_site_label,
      _atom_site_rot_xharm.axis and _atom_site_rot_xharm.order.  
      Atomic or rigid-group rotations must be expressed in degrees. Special 
      axes are defined by the items belonging to the ATOM_SITES_AXES category, 
      through _atom_site_rot_xharm.matrix_seq_id.
;
    _name.category_id            atom_site_rot_xharm
    _name.object_id              coeff
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    _units.code                  degrees

save_
_atom_site_rot_xharm.id
CIF
A code identifying each component of the displacive modulation of
a given atom or rigid group when the modulation is expressed in
terms of x-harmonics. In the case of a rigid group, it
applies only to the rotational part of the distortion.
save_atom_site_rot_xharm.id

    _definition.id               '_atom_site_rot_xharm.id'
    _definition.update           2014-06-27
    _description.text                   
;

      A code identifying each component of the displacive modulation of
      a given atom or rigid group when the modulation is expressed in
      terms of x-harmonics. In the case of a rigid group, it
      applies only to the rotational part of the distortion.
;
    _name.category_id            atom_site_rot_xharm
    _name.object_id              id
    _type.purpose                Key
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_rot_xharm.matrix_seq_id
CIF
A numeric code identifying the transformation matrix that defines
the arbitrary axes a1, a2 and a3 in terms of the crystallographic axes.
This code must match _atom_sites_axes.matrix_seq_id.
save_atom_site_rot_xharm.matrix_seq_id

    _definition.id               '_atom_site_rot_xharm.matrix_seq_id'
    _definition.update           2014-06-27
    _description.text                   
;

      A numeric code identifying the transformation matrix that defines
      the arbitrary axes a1, a2 and a3 in terms of the crystallographic axes. 
      This code must match _atom_sites_axes.matrix_seq_id.
;
    _name.category_id            atom_site_rot_xharm
    _name.object_id              matrix_seq_id
    _name.linked_item_id         '_atom_sites_axes.matrix_seq_id'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_rot_xharm.order
CIF
The order of each x-harmonic function.
save_atom_site_rot_xharm.order

    _definition.id               '_atom_site_rot_xharm.order'
    _definition.update           2019-09-25
    _description.text                   
;

      The order of each x-harmonic function.
;
    _name.category_id            atom_site_rot_xharm
    _name.object_id              order
    _type.purpose                Key
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Integer
    _enumeration.range           0:

save_
ATOM_SITE_U_FOURIER
CIF
Data items in the ATOM_SITE_U_FOURIER category record details
about the Fourier components describing the modulation of the
ADPs in a modulated structure.
save_ATOM_SITE_U_FOURIER

    _definition.id               ATOM_SITE_U_FOURIER
    _definition.scope            Category
    _definition.class            Loop
    _definition.update           2014-06-27
    _description.text                   
;

      Data items in the ATOM_SITE_U_FOURIER category record details
      about the Fourier components describing the modulation of the
      ADPs in a modulated structure.
;
    _name.category_id            MS_GROUP
    _name.object_id              ATOM_SITE_U_FOURIER
    loop_
        _category_key.name       '_atom_site_U_Fourier.id'

save_
_atom_site_U_Fourier.atom_site_label
CIF
Modulation parameters are usually looped in separate lists.
Modulated parameters are the atom positions (displacive
modulation), the atomic occupation (occupational modulation)
and/or the anisotropic (or isotropic) ADP.
_atom_site_U_Fourier.atom_site_label is the code that
identifies an atom in a loop in which the Fourier components of
its ADP modulation are listed.  This code must
match the _atom_site.label of the associated coordinate list
and conform to the rules described in _atom_site.label.
save_atom_site_U_Fourier.atom_site_label

    _definition.id               '_atom_site_U_Fourier.atom_site_label'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_U_Fourier_atom_site_label' 
    _description.text                   
;

      Modulation parameters are usually looped in separate lists.
      Modulated parameters are the atom positions (displacive
      modulation), the atomic occupation (occupational modulation)
      and/or the anisotropic (or isotropic) ADP.
       _atom_site_U_Fourier.atom_site_label is the code that
      identifies an atom in a loop in which the Fourier components of
      its ADP modulation are listed.  This code must
      match the _atom_site.label of the associated coordinate list
      and conform to the rules described in _atom_site.label.
;
    _name.category_id            atom_site_U_Fourier
    _name.object_id              site_label
    _name.linked_item_id         '_atom_site.label'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_U_Fourier.id
CIF
A code identifying each Fourier component used to describe
the modulation of ADP.
save_atom_site_U_Fourier.id

    _definition.id               '_atom_site_U_Fourier.id'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
                                 '_atom_site_U_Fourier_id' 
    _description.text                   
;

      A code identifying each Fourier component used to describe 
      the modulation of ADP.
;
    _name.category_id            atom_site_U_Fourier
    _name.object_id              id
    _type.purpose                Key
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_U_Fourier.tens_elem
CIF
A label identifying the ADP tensor element U(ij) of a
given atom  whose modulation is being parameterized
by Fourier series.
save_atom_site_U_Fourier.tens_elem

    _definition.id               '_atom_site_U_Fourier.tens_elem'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_U_Fourier_tens_elem' 
    _description.text                   
;

      A label identifying the ADP tensor element U(ij) of a
      given atom  whose modulation is being parameterized
      by Fourier series.
;
    _name.category_id            atom_site_U_Fourier
    _name.object_id              tens_elem
    _type.purpose                State
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Code
    loop_
    _enumeration_set.state
    _enumeration_set.detail
              U11           'modulation of U11'  
              U12           'modulation of U12'  
              U13           'modulation of U13'  
              U22           'modulation of U22'  
              U23           'modulation of U23'  
              U33           'modulation of U33'  
              Uiso          'modulation of U~isotropic~' 

save_
_atom_site_U_Fourier.wave_vector_seq_id
CIF
A numeric code identifying the wave vectors of the Fourier terms
used to describe the modulation functions corresponding to the
ADP of an atom. This code must
match _atom_site_Fourier_wave_vector.seq_id.
save_atom_site_U_Fourier.wave_vector_seq_id

    _definition.id               '_atom_site_U_Fourier.wave_vector_seq_id'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_U_Fourier_wave_vector_seq_id' 
    _description.text                   
;

      A numeric code identifying the wave vectors of the Fourier terms
      used to describe the modulation functions corresponding to the
      ADP of an atom. This code must
      match _atom_site_Fourier_wave_vector.seq_id.
;
    _name.category_id            atom_site_U_Fourier
    _name.object_id              wave_vector_seq_id
    _name.linked_item_id         '_atom_site_Fourier_wave_vector.seq_id'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
ATOM_SITE_U_FOURIER_PARAM
CIF
Data items in the ATOM_SITE_U_FOURIER category record details
about the coefficients of the Fourier series used to describe the
modulation of the ADP in a modulated
structure. The Fourier components are defined in the category
ATOM_SITE_U_FOURIER and are listed separately.
save_ATOM_SITE_U_FOURIER_PARAM

    _definition.id               ATOM_SITE_U_FOURIER_PARAM
    _definition.scope            Category
    _definition.class            Loop
    _definition.update           2014-06-27
    _description.text                   
;

      Data items in the ATOM_SITE_U_FOURIER category record details
      about the coefficients of the Fourier series used to describe the
      modulation of the ADP in a modulated
      structure. The Fourier components are defined in the category
      ATOM_SITE_U_FOURIER and are listed separately.
;
    _name.category_id            ATOM_SITE_U_FOURIER
    _name.object_id              ATOM_SITE_U_FOURIER_PARAM
    loop_
        _category_key.name       '_atom_site_U_Fourier_param.id'

save_
_atom_site_U_Fourier_param.cos
CIF
The modulation of the ADP is usually
parameterized by Fourier series. Each term of the series
commonly adopts two different representations: the sine-cosine
form,
U(ij)c cos(2\p k r)+U(ij)s sin(2\p k r),
and the modulus-argument form,
|U(ij)| cos(2\p k r+\c),
where k is the wave vector of the term and r is the atomic
average position. _atom_site_U_Fourier_param.cos is the cosine
coefficient [U(ij)c], in angstroms squared, corresponding to
the Fourier term defined by
_atom_site_U_Fourier.atom_site_label,
_atom_site_U_Fourier.tens_elem and
_atom_site_U_Fourier.wave_vector_seq_id.
save_atom_site_U_Fourier_param.cos

    _definition.id               '_atom_site_U_Fourier_param.cos'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_U_Fourier_param_cos' 
    _description.text                   
;

      The modulation of the ADP is usually
      parameterized by Fourier series. Each term of the series
      commonly adopts two different representations: the sine-cosine
      form,
               U(ij)c cos(2\\p k r)+U(ij)s sin(2\\p k r),
      and the modulus-argument form,
               |U(ij)| cos(2\\p k r+\\c),
      where k is the wave vector of the term and r is the atomic
      average position. _atom_site_U_Fourier_param.cos is the cosine
      coefficient [U(ij)c], in angstroms squared, corresponding to
      the Fourier term defined by
      _atom_site_U_Fourier.atom_site_label,
      _atom_site_U_Fourier.tens_elem and
      _atom_site_U_Fourier.wave_vector_seq_id.
;
    _name.category_id            atom_site_U_Fourier_param
    _name.object_id              cos
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    _units.code                             angstrom_squared
    loop_
      _method.purpose
      _method.expression
      Evaluation    
;
      With  p  as  atom_site_U_Fourier_param

       atom_site_U_Fourier_param.cos =  p.modulus*Cos(TwoPi*p.phase)
; 

save_
_atom_site_U_Fourier_param.id
CIF
A code identifying the (in general complex) coefficient of each
term present in the Fourier series describing the modulation of
the ADP. This code must match
_atom_site_U_Fourier.id.
save_atom_site_U_Fourier_param.id

    _definition.id               '_atom_site_U_Fourier_param.id'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_U_Fourier_param_id' 
    _description.text                   
;

      A code identifying the (in general complex) coefficient of each
      term present in the Fourier series describing the modulation of
      the ADP. This code must match
      _atom_site_U_Fourier.id.
;
    _name.category_id            atom_site_U_Fourier_param
    _name.object_id              id
    _name.linked_item_id         '_atom_site_U_Fourier.id'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_U_Fourier_param.modulus
CIF
The modulation of the ADP is usually
parameterized by Fourier series. Each term of the series
commonly adopts two different representations: the sine-cosine
form,
U(ij)c cos(2\p k r)+U(ij)s sin(2\p k r),
and the modulus-argument form,
|U(ij)| cos(2\p k r+\c),
where k is the wave vector of the term and r is the atomic
average position. _atom_site_U_Fourier_param.modulus is the
modulus [|U(ij)|], in angstroms squared, of the complex
amplitudes corresponding to the Fourier term defined by
_atom_site_U_Fourier.atom_site_label,
_atom_site_U_Fourier.tens_elem and
_atom_site_U_Fourier.wave_vector_seq_id.
save_atom_site_U_Fourier_param.modulus

    _definition.id               '_atom_site_U_Fourier_param.modulus'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_U_Fourier_param_modulus' 
    _description.text                   
;

      The modulation of the ADP is usually
      parameterized by Fourier series. Each term of the series
      commonly adopts two different representations: the sine-cosine
      form,
               U(ij)c cos(2\\p k r)+U(ij)s sin(2\\p k r),
      and the modulus-argument form,
               |U(ij)| cos(2\\p k r+\\c),
      where k is the wave vector of the term and r is the atomic
      average position. _atom_site_U_Fourier_param.modulus is the
      modulus [|U(ij)|], in angstroms squared, of the complex
      amplitudes corresponding to the Fourier term defined by
      _atom_site_U_Fourier.atom_site_label,
      _atom_site_U_Fourier.tens_elem and
      _atom_site_U_Fourier.wave_vector_seq_id.
;
    _name.category_id            atom_site_U_Fourier_param
    _name.object_id              modulus
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    _enumeration.range           0.0:
    _units.code                             angstrom_squared
    loop_
      _method.purpose
      _method.expression
      Evaluation    
;
      With  p  as  atom_site_U_Fourier_param

       atom_site_U_Fourier_param.modulus =  Sqrt(p.cos**2+p.sin**2)
; 


save_
_atom_site_U_Fourier_param.phase
CIF
The modulation of the ADP is usually
parameterized by Fourier series. Each term of the series
commonly adopts two different representations: the sine-cosine
form,
U(ij)c cos(2\p k r)+U(ij)s sin(2\p k r),
and the modulus-argument form,
|U(ij)| cos(2\p k r+\c),
where k is the wave vector of the term and r is the atomic
average position. _atom_site_U_Fourier_param.phase is the phase
(/2\p), in cycles, of the complex amplitude corresponding to\
the Fourier term defined by
_atom_site_U_Fourier.atom_site_label,
_atom_site_U_Fourier.tens_elem and
_atom_site_U_Fourier.wave_vector_seq_id.
save_atom_site_U_Fourier_param.phase

    _definition.id               '_atom_site_U_Fourier_param.phase'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_U_Fourier_param_phase' 
    _description.text                   
;

      The modulation of the ADP is usually
      parameterized by Fourier series. Each term of the series
      commonly adopts two different representations: the sine-cosine
      form,
               U(ij)c cos(2\\p k r)+U(ij)s sin(2\\p k r),
      and the modulus-argument form,
               |U(ij)| cos(2\\p k r+\\c),
      where k is the wave vector of the term and r is the atomic
      average position. _atom_site_U_Fourier_param.phase is the phase
      (\c/2\\p), in cycles, of the complex amplitude corresponding to\
      the Fourier term defined by 
      _atom_site_U_Fourier.atom_site_label,
      _atom_site_U_Fourier.tens_elem and
      _atom_site_U_Fourier.wave_vector_seq_id.
;
    _name.category_id            atom_site_U_Fourier_param
    _name.object_id              phase
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    _enumeration.range           -1.0:1.0
    _units.code                             cycles
    loop_
      _method.purpose
      _method.expression
      Evaluation    
;
      With  p  as  atom_site_U_Fourier_param

       atom_site_U_Fourier_param.phase =  Phase(Complex(p.cos,-p.sin))/TwoPi
; 


save_
_atom_site_U_Fourier_param.sin
CIF
The modulation of the ADP is usually
parameterized by Fourier series. Each term of the series
commonly adopts two different representations: the sine-cosine
form,
U(ij)c cos(2\p k r)+U(ij)s sin(2\p k r),
and the modulus-argument form,
|U(ij)| cos(2\p k r+\c),
where k is the wave vector of the term and r is the atomic
average position. _atom_site_U_Fourier_param.sin is the sine
coefficient [U(ij)s], in angstroms squared, corresponding to
the Fourier term defined by
_atom_site_U_Fourier.atom_site_label,
_atom_site_U_Fourier.tens_elem and
_atom_site_U_Fourier.wave_vector_seq_id.
save_atom_site_U_Fourier_param.sin

    _definition.id               '_atom_site_U_Fourier_param.sin'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_U_Fourier_param_sin' 
    _description.text                   
;

      The modulation of the ADP is usually
      parameterized by Fourier series. Each term of the series
      commonly adopts two different representations: the sine-cosine
      form,
               U(ij)c cos(2\\p k r)+U(ij)s sin(2\\p k r),
      and the modulus-argument form,
               |U(ij)| cos(2\\p k r+\\c),
      where k is the wave vector of the term and r is the atomic
      average position. _atom_site_U_Fourier_param.sin is the sine
      coefficient [U(ij)s], in angstroms squared, corresponding to
      the Fourier term defined by
      _atom_site_U_Fourier.atom_site_label,
      _atom_site_U_Fourier.tens_elem and
      _atom_site_U_Fourier.wave_vector_seq_id.
;
    _name.category_id            atom_site_U_Fourier_param
    _name.object_id              sin
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    _units.code                             angstrom_squared
    loop_
      _method.purpose
      _method.expression
      Evaluation    
;
      With  p  as  atom_site_U_Fourier_param

       atom_site_U_Fourier_param.sin =  -p.modulus*Sin(TwoPi*p.phase)
; 

save_
ATOM_SITE_U_LEGENDRE
CIF
Data items in the ATOM_SITE_U_LEGENDRE category record
details about the Legendre polynomials used to describe the ADP
modulations when the atomic domain of a given atom is
restricted by a crenel function.
save_ATOM_SITE_U_LEGENDRE

    _definition.id               ATOM_SITE_U_LEGENDRE
    _definition.scope            Category
    _definition.class            Loop
    _definition.update           2014-06-27
    _description.text                   
;

      Data items in the ATOM_SITE_U_LEGENDRE category record
      details about the Legendre polynomials used to describe the ADP 
      modulations when the atomic domain of a given atom is 
      restricted by a crenel function. 
;
    _name.category_id            MS_GROUP
    _name.object_id              ATOM_SITE_U_LEGENDRE
    loop_
      _category_key.name         '_atom_site_u_Legendre.id'
  
save_
_atom_site_U_Legendre.atom_site_label
CIF
Modulation parameters are usually looped in separate lists.
Modulated parameters are the atom positions (displacive
modulation), the atomic occupation (occupational modulation)
and/or the anisotropic (or isotropic) ADP.
_atom_site_U_Legendre.atom_site_label is the code that identifies
an atom in a loop in which the Legendre components of its ADP
modulation are listed. This code must match the _atom_site.label
of the associated coordinate list and conform to the rules described
in _atom_site.label.
save_atom_site_U_Legendre.atom_site_label

    _definition.id               '_atom_site_U_Legendre.atom_site_label'
    _definition.update           2014-06-27
    _description.text                   
;

      Modulation parameters are usually looped in separate lists.
      Modulated parameters are the atom positions (displacive
      modulation), the atomic occupation (occupational modulation)
      and/or the anisotropic (or isotropic) ADP.  
      _atom_site_U_Legendre.atom_site_label is the code that identifies 
      an atom in a loop in which the Legendre components of its ADP 
      modulation are listed. This code must match the _atom_site.label 
      of the associated coordinate list and conform to the rules described 
      in _atom_site.label.
;
    _name.category_id            atom_site_U_Legendre
    _name.object_id              atom_site_label
    _name.linked_item_id         '_atom_site.label'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_U_Legendre.coeff
CIF
The coefficient, in angstroms squared corresponding to the
Legendre function defined by _atom_site_U_Legendre.atom_site_label,
_atom_site_U_Legendre.tens_elem and _atom_site_U_Legendre.order.
save_atom_site_U_Legendre.coeff

    _definition.id               '_atom_site_U_Legendre.coeff'
    _definition.update           2014-06-27
    _description.text                   
;

      The coefficient, in angstroms squared corresponding to the 
      Legendre function defined by _atom_site_U_Legendre.atom_site_label,
      _atom_site_U_Legendre.tens_elem and _atom_site_U_Legendre.order.  
;
    _name.category_id            atom_site_U_Legendre
    _name.object_id              coeff
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    _units.code                  angstrom_squared

save_
_atom_site_U_Legendre.id
CIF
A code identifying each component of the ADP modulation of
a given atom when the modulation is expressed in terms of Legendre
functions.
save_atom_site_U_Legendre.id

    _definition.id               '_atom_site_U_Legendre.id'
    _definition.update           2014-06-27
    _description.text                   
;

      A code identifying each component of the ADP modulation of
      a given atom when the modulation is expressed in terms of Legendre 
      functions. 
;
    _name.category_id            atom_site_U_Legendre
    _name.object_id              id
    _type.purpose                Key
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_U_Legendre.order
CIF
The order of the Legendre polynomial.
save_atom_site_U_Legendre.order

    _definition.id               '_atom_site_U_Legendre.order'
    _definition.update           2019-09-25
    _description.text                   
;

      The order of the Legendre polynomial.
;
    _name.category_id            atom_site_U_Legendre
    _name.object_id              order
    _type.purpose                Key
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Integer
    _enumeration.range           0:

save_
_atom_site_U_Legendre.tens_elem
CIF
A label identifying the ADP tensor element U(ij) a given atom
whose modulation is being parameterized by Legendre polynomials.
save_atom_site_U_Legendre.tens_elem

    _definition.id               '_atom_site_U_Legendre.tens_elem'
    _definition.update           2014-06-27
    _description.text
;

      A label identifying the ADP tensor element U(ij) a given atom 
      whose modulation is being parameterized by Legendre polynomials.

;
    _name.category_id            atom_site_U_Legendre
    _name.object_id              tens_elem
    _type.purpose                State
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Code
    loop_
      _enumeration_set.state
      _enumeration_set.detail
              U11           'modulation of U11'  
              U12           'modulation of U12'  
              U13           'modulation of U13'  
              U22           'modulation of U22'  
              U23           'modulation of U23'  
              U33           'modulation of U33'  
              Uiso          'modulation of U~isotropic~' 

save_
ATOM_SITE_U_ORTHO
CIF
Data items in the ATOM_SITE_U_ORTHO category record
details about the orthogonalized functions defined to solve
correlation problems during the refinement of ADP
modulations when the atomic domain of a given atom is
restricted by a crenel function. The functions are constructed
selecting Fourier harmonics until the desired degree of
orthogonality and completeness is reached (see
_atom_site_occ_special_func.crenel_ortho_eps).
save_ATOM_SITE_U_ORTHO

    _definition.id               ATOM_SITE_U_ORTHO
    _definition.scope            Category
    _definition.class            Loop
    _definition.update           2014-06-27
    _description.text                   
;
 
      Data items in the ATOM_SITE_U_ORTHO category record
      details about the orthogonalized functions defined to solve 
      correlation problems during the refinement of ADP 
      modulations when the atomic domain of a given atom is 
      restricted by a crenel function. The functions are constructed 
      selecting Fourier harmonics until the desired degree of 
      orthogonality and completeness is reached (see
      _atom_site_occ_special_func.crenel_ortho_eps). 
;
    _name.category_id            MS_GROUP
    _name.object_id              ATOM_SITE_U_ORTHO
    loop_
      _category_key.name         '_atom_site_U_ortho.id'
  
save_
_atom_site_U_ortho.atom_site_label
CIF
Modulation parameters are usually looped in separate lists.
Modulated parameters are the atom positions (displacive
modulation), the atomic occupation (occupational modulation)
and/or the anisotropic (or isotropic) ADP.
_atom_site_U_ortho.atom_site_label is the code that identifies
an atom in a loop in which the ortho components of its ADP
modulation are listed. This code must match the _atom_site.label
of the associated coordinate list and conform to the rules described
in _atom_site.label.
Notice that the global results could also be expressed (losing
information)using the data items defined in the categories
ATOM_SITE_U_FOURIER and ATOM_SITE_U_FOURIER_PARAM.
save_atom_site_u_ortho.atom_site_label

    _definition.id               '_atom_site_U_ortho.atom_site_label'
    _definition.update           2014-06-27
    _description.text                   
;

      Modulation parameters are usually looped in separate lists.
      Modulated parameters are the atom positions (displacive
      modulation), the atomic occupation (occupational modulation)
      and/or the anisotropic (or isotropic) ADP.  
      _atom_site_U_ortho.atom_site_label is the code that identifies 
      an atom in a loop in which the ortho components of its ADP 
      modulation are listed. This code must match the _atom_site.label 
      of the associated coordinate list and conform to the rules described 
      in _atom_site.label.

      Notice that the global results could also be expressed (losing 
      information)using the data items defined in the categories 
      ATOM_SITE_U_FOURIER and ATOM_SITE_U_FOURIER_PARAM.
;
    _name.category_id            atom_site_U_ortho
    _name.object_id              atom_site_label
    _name.linked_item_id         '_atom_site.label'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_U_ortho.coeff
CIF
The coefficient, in angstroms squared corresponding to the
orthogonalized function defined by _atom_site_U_ortho.atom_site_label,
_atom_site_U_ortho.tens_elem and _atom_site_U_ortho.func_id.
save_atom_site_U_ortho.coeff

    _definition.id               '_atom_site_U_ortho.coeff'
    _definition.update           2014-06-27
    _description.text                   
;

      The coefficient, in angstroms squared corresponding to the 
      orthogonalized function defined by _atom_site_U_ortho.atom_site_label,
      _atom_site_U_ortho.tens_elem and _atom_site_U_ortho.func_id.  
;
    _name.category_id            atom_site_U_ortho
    _name.object_id              coeff
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    _units.code                  angstrom_squared

save_
_atom_site_U_ortho.func_id
CIF
A code identifying the orthogonalized function used in the
structural model to describe the ADP modulation of an atom.
This code must match _atom_sites_ortho.func_id.
save_atom_site_U_ortho.func_id

    _definition.id               '_atom_site_U_ortho.func_id'
    _definition.update           2014-06-27
    _description.text                   
;

      A code identifying the orthogonalized function used in the 
      structural model to describe the ADP modulation of an atom. 
      This code must match _atom_sites_ortho.func_id.
;
    _name.category_id            atom_site_U_ortho
    _name.object_id              func_id
    _name.linked_item_id         '_atom_sites_ortho.func_id '
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_U_ortho.id
CIF
A code identifying each component of the ADP modulation of
a given atom when the modulation is expressed in terms of ortho
series.
save_atom_site_U_ortho.id

    _definition.id               '_atom_site_U_ortho.id'
    _definition.update           2014-06-27
    _description.text                   
;

      A code identifying each component of the ADP modulation of
      a given atom when the modulation is expressed in terms of ortho 
      series. 
;
    _name.category_id            atom_site_U_ortho
    _name.object_id              id
    _type.purpose                Key
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_U_ortho.tens_elem
CIF
A label identifying the ADP tensor element U(ij) a given atom
whose modulation is being parameterized by orthogonalized
functions.
save_atom_site_U_ortho.tens_elem

    _definition.id               '_atom_site_U_ortho.tens_elem'
    _definition.update           2014-06-27
    _description.text
;

      A label identifying the ADP tensor element U(ij) a given atom 
      whose modulation is being parameterized by orthogonalized 
      functions.

;
    _name.category_id            atom_site_U_ortho
    _name.object_id              tens_elem
    _type.purpose                State
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Code
    loop_
      _enumeration_set.state
      _enumeration_set.detail
              U11           'modulation of U11'  
              U12           'modulation of U12'  
              U13           'modulation of U13'  
              U22           'modulation of U22'  
              U23           'modulation of U23'  
              U33           'modulation of U33'  
              Uiso          'modulation of U~isotropic~' 

save_
ATOM_SITE_U_XHARM
CIF
Data items in the ATOM_SITE_U_XHARM category record
details about the x-harmonics used to describe the ADP
modulations when the atomic domain of a given atom is
restricted by a crenel function.
save_ATOM_SITE_U_XHARM

    _definition.id               ATOM_SITE_U_XHARM
    _definition.scope            Category
    _definition.class            Loop
    _definition.update           2014-06-27
    _description.text                   
;
 
      Data items in the ATOM_SITE_U_XHARM category record
      details about the x-harmonics used to describe the ADP 
      modulations when the atomic domain of a given atom is 
      restricted by a crenel function. 
;
    _name.category_id            MS_GROUP
    _name.object_id              ATOM_SITE_U_XHARM
    loop_
      _category_key.name         '_atom_site_U_xharm.id'
  
save_
_atom_site_U_xharm.atom_site_label
CIF
Modulation parameters are usually looped in separate lists.
Modulated parameters are the atom positions (displacive
modulation), the atomic occupation (occupational modulation)
and/or the anisotropic (or isotropic) ADP.
_atom_site_U_xharm.atom_site_label is the code that identifies
an atom in a loop in which the x-harmonic components of its ADP
modulation are listed. This code must match the _atom_site.label
of the associated coordinate list and conform to the rules described
in _atom_site.label.
save_atom_site_U_xharm.atom_site_label

    _definition.id               '_atom_site_U_xharm.atom_site_label'
    _definition.update           2014-06-27
    _description.text                   
;

      Modulation parameters are usually looped in separate lists.
      Modulated parameters are the atom positions (displacive
      modulation), the atomic occupation (occupational modulation)
      and/or the anisotropic (or isotropic) ADP.  
      _atom_site_U_xharm.atom_site_label is the code that identifies 
      an atom in a loop in which the x-harmonic components of its ADP 
      modulation are listed. This code must match the _atom_site.label 
      of the associated coordinate list and conform to the rules described 
      in _atom_site.label.
;
    _name.category_id            atom_site_U_xharm
    _name.object_id              atom_site_label
    _name.linked_item_id         '_atom_site.label'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_rot_U_xharm.coeff
CIF
The coefficient, in angstroms squared corresponding to the
x-harmonics defined by _atom_site_U_xharm.atom_site_label,
_atom_site_U_xharm.tens_elem and _atom_site_U_xharm.order.
save_atom_site_U_xharm.coeff

    _definition.id               '_atom_site_rot_U_xharm.coeff'
    _definition.update           2014-06-27
    _description.text                   
;

      The coefficient, in angstroms squared corresponding to the 
      x-harmonics defined by _atom_site_U_xharm.atom_site_label,
      _atom_site_U_xharm.tens_elem and _atom_site_U_xharm.order.  
;
    _name.category_id            atom_site_U_xharm
    _name.object_id              coeff
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    _units.code                  angstrom_squared

save_
_atom_site_U_xharm.id
CIF
A code identifying each component of the ADP modulation of
a given atom when the modulation is expressed in terms of x-harmonics.
save_atom_site_U_xharm.id

    _definition.id               '_atom_site_U_xharm.id'
    _definition.update           2014-06-27
    _description.text                   
;

      A code identifying each component of the ADP modulation of
      a given atom when the modulation is expressed in terms of x-harmonics.
;
    _name.category_id            atom_site_U_xharm
    _name.object_id              id
    _type.purpose                Key
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site_U_xharm.order
CIF
The order of each x-harmonic function.
save_atom_site_U_xharm.order

    _definition.id               '_atom_site_U_xharm.order'
    _definition.update           2019-09-25
    _description.text                   
;

      The order of each x-harmonic function.
;
    _name.category_id            atom_site_U_xharm
    _name.object_id              order
    _type.purpose                Key
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Integer
    _enumeration.range           0:

save_
_atom_site_U_xharm.tens_elem
CIF
A label identifying the ADP tensor element U(ij) a given atom
whose modulation is being parameterized by x-harmonics.
save_atom_site_U_xharm.tens_elem

    _definition.id               '_atom_site_U_xharm.tens_elem'
    _definition.update           2014-06-27
    _description.text
;

      A label identifying the ADP tensor element U(ij) a given atom 
      whose modulation is being parameterized by x-harmonics.

;
    _name.category_id            atom_site_U_xharm
    _name.object_id              tens_elem
    _type.purpose                State
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Code
    loop_
      _enumeration_set.state
      _enumeration_set.detail
              U11           'modulation of U11'  
              U12           'modulation of U12'  
              U13           'modulation of U13'  
              U22           'modulation of U22'  
              U23           'modulation of U23'  
              U33           'modulation of U33'  
              Uiso          'modulation of U~isotropic~' 

save_
CELL_SUBSYSTEM
CIF
Data items in the CELL_SUBSYSTEM category record details about
the crystallographic cell parameters of each subsystem present in
a composite.
save_CELL_SUBSYSTEM

    _definition.id               CELL_SUBSYSTEM
    _definition.scope            Category
    _definition.class            Loop
    _definition.update           2014-06-27
    _description.text                   
;

      Data items in the CELL_SUBSYSTEM category record details about
      the crystallographic cell parameters of each subsystem present in
      a composite.
;
    _name.category_id            MS_GROUP
    _name.object_id              CELL_SUBSYSTEM
    loop_
        _category_key.name       '_cell_subsystem.code'

save_
_cell_subsystem.code
CIF
The code identifying uniquely a certain composite subsystem.
This code is used to identify the data blocks that contain
the structural information associated with the subsystem.
Example:
NbS2
save_cell_subsystem.code

    _definition.id               '_cell_subsystem.code'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_cell_subsystem_code' 
    _description.text                   
;

      The code identifying uniquely a certain composite subsystem.
      This code is used to identify the data blocks that contain
      the structural information associated with the subsystem.
;
    _name.category_id            cell_subsystem
    _name.object_id              code
    _type.purpose                Key
    _type.source                 Related
    _type.container              Single
    _type.contents               Code
    loop_
    _description_example.case
            "NbS2" 

save_
_cell_subsystem.description
CIF
Description of each subsystem defining a composite structurally.
The number of definitions must match the number given in
_cell_subsystems_number.
Example:
NbS2 part of the layer compound (LaS)~1.14~NbS~2~
save_cell_subsystem.description

    _definition.id               '_cell_subsystem.description'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_cell_subsystem_description' 
    _description.text                   
;

      Description of each subsystem defining a composite structurally.
      The number of definitions must match the number given in
      _cell_subsystems_number.
;
    _name.category_id            cell_subsystem
    _name.object_id              description
    _type.purpose                Describe
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Text
    loop_
    _description_example.case
            "NbS2 part of the layer compound (LaS)~1.14~NbS~2~" 

save_
_cell_subsystem.matrix_W
CIF
In the case of composites, for each subsystem the matrix W as
defined in van Smaalen (1991);  [see also van Smaalen (1995) or
van Smaalen (2012)].
Its dimension must match
(_cell_modulation_dimension+3)*(_cell_modulation_dimension+3).
Intergrowth compounds are composed of several periodic
substructures in which the reciprocal lattices of two different
subsystems are incommensurate in at least one direction. The
indexing of the whole diffraction diagram with integer indices
requires more than three reciprocal basic vectors. However, the
distinction between main reflections and satellites is not as
obvious as in normal incommensurate structures. Indeed, true
satellites are normally difficult to locate for composites and
the modulation wave vectors are reciprocal vectors of the
other subsystem(s) referred to the reciprocal basis of one
of them. The choice of the enlarged reciprocal basis
{a*, b*, c*, q~1~,..., q~d~} is completely arbitrary, but
the reciprocal basis of each subsystem is always known through
the W matrices. These matrices [(3+d)x(3+d)-dimensional], one for
each subsystem, can be blocked as follows:
       (Z^^~3~    Z^^~d~)
W^^= (                    )
       (V^^~3~    V^^~d~)
the dimension of each block being (3x3), (3xd), (dx3) and (dxd)
for Z^^~3~, Z^^~d~, V^^~3~ and V^^~d~, respectively. For
example, Z^^ expresses the reciprocal basis of each subsystem
in terms of the basis {a*, b*, c*, q~1~ ,..., q~d~}.
W^^ also gives the irrational components of the modulation wave
vectors of each subsystem in its own three-dimensional reciprocal
basis {a~~*, b~~*, c~~*} and the superspace group of
a given subsystem from the unique superspace group of the
composite.
The structure of these materials is always described by a set of
incommensurate structures, one for each subsystem. The atomic
coordinates, modulation parameters and wave vectors used for
describing the modulation(s) are always referred to the (direct
or reciprocal) basis of each particular subsystem. Although
expressing the structural results in the chosen common basis is
possible (using the matrices W), it is less confusing to use
this alternative description. Atomic coordinates are only
referred to a common basis when interatomic distances are
calculated. Usually, the reciprocal vectors {a*, b* and c*\}\
span the lattice of main reflections of one of the subsystems and
therefore its W matrix is the unit matrix.
For composites described in a single data block using
*_subsystem_code pointers, the cell parameters, the superspace
group and the measured modulation wave vectors (see
CELL_WAVE_VECTOR below) correspond to the reciprocal basis
described in _cell_reciprocal_basis_description and coincide
with the reciprocal basis of the specific subsystem (if any)
whose W matrix is the unit matrix. The cell parameters and the
symmetry of the remaining subsystems can be derived using the
appropriate W matrices. In any case (single or multiblock CIF),
the values assigned to the items describing the atomic parameters
(including the wave vectors used to describe the modulations)
are always the same and are referred to the basis of each
particular subsystem. Such a basis will be explicitly given in a
multiblock CIF or should be calculated (with the appropriate W
matrix) in the case of a single block description of the
composite.
References: Smaalen, S. van (1991).
 Phys. Rev. B, 43, 11330-11341.
 Symmetry of composite crystals
 Smaalen, S. van (1995).
 Crystallogr. Rev. 4, 79-202.
 Incommensurate crystal structures
 Smaalen, S. van(2012).
 Incommensurate Crystallography. Oxford University Press.
save_cell_subsystem.matrix_W

    _definition.id               '_cell_subsystem.matrix_W'
    _definition.update           2016-11-17
    _description.text                   
;

      In the case of composites, for each subsystem the matrix W as
      defined in van Smaalen (1991);  [see also van Smaalen (1995) or 
      van Smaalen (2012)].
      Its dimension must match
      (_cell_modulation_dimension+3)*(_cell_modulation_dimension+3).

      Intergrowth compounds are composed of several periodic
      substructures in which the reciprocal lattices of two different
      subsystems are incommensurate in at least one direction. The
      indexing of the whole diffraction diagram with integer indices
      requires more than three reciprocal basic vectors. However, the
      distinction between main reflections and satellites is not as
      obvious as in normal incommensurate structures. Indeed, true
      satellites are normally difficult to locate for composites and
      the modulation wave vectors are reciprocal vectors of the
      other subsystem(s) referred to the reciprocal basis of one
      of them. The choice of the enlarged reciprocal basis
      {a*, b*, c*, q~1~,..., q~d~} is completely arbitrary, but
      the reciprocal basis of each subsystem is always known through
      the W matrices. These matrices [(3+d)x(3+d)-dimensional], one for
      each subsystem, can be blocked as follows:

                        (Z^\n^~3~    Z^\n^~d~)
                 W^\n^= (                    )
                        (V^\n^~3~    V^\n^~d~)

      the dimension of each block being (3x3), (3xd), (dx3) and (dxd)
      for Z^\n^~3~, Z^\n^~d~, V^\n^~3~ and V^\n^~d~, respectively. For
      example, Z^\n^ expresses the reciprocal basis of each subsystem
      in terms of the basis {a*, b*, c*, q~1~ ,..., q~d~}.
      W^\n^ also gives the irrational components of the modulation wave
      vectors of each subsystem in its own three-dimensional reciprocal
      basis {a~\n~*, b~\n~*, c~\n~*} and the superspace group of
      a given subsystem from the unique superspace group of the
      composite.

      The structure of these materials is always described by a set of
      incommensurate structures, one for each subsystem. The atomic
      coordinates, modulation parameters and wave vectors used for
      describing the modulation(s) are always referred to the (direct
      or reciprocal) basis of each particular subsystem. Although
      expressing the structural results in the chosen common basis is
      possible (using the matrices W), it is less confusing to use
      this alternative description. Atomic coordinates are only
      referred to a common basis when interatomic distances are
      calculated. Usually, the reciprocal vectors {a*, b* and c*\}\
      span the lattice of main reflections of one of the subsystems and
      therefore its W matrix is the unit matrix.

      For composites described in a single data block using
      *_subsystem_code pointers, the cell parameters, the superspace
      group and the measured modulation wave vectors (see
      CELL_WAVE_VECTOR below) correspond to the reciprocal basis
      described in _cell_reciprocal_basis_description and coincide
      with the reciprocal basis of the specific subsystem (if any)
      whose W matrix is the unit matrix. The cell parameters and the
      symmetry of the remaining subsystems can be derived using the
      appropriate W matrices. In any case (single or multiblock CIF),
      the values assigned to the items describing the atomic parameters
      (including the wave vectors used to describe the modulations)
      are always the same and are referred to the basis of each
      particular subsystem. Such a basis will be explicitly given in a
      multiblock CIF or should be calculated (with the appropriate W
      matrix) in the case of a single block description of the
      composite.

      References: Smaalen, S. van (1991). 
                  Phys. Rev. B, 43, 11330-11341.
                  Symmetry of composite crystals
                  Smaalen, S. van (1995). 
                  Crystallogr. Rev. 4, 79-202.
                  Incommensurate crystal structures
                  Smaalen, S. van(2012). 
                  Incommensurate Crystallography. Oxford University Press.

;
    _name.category_id            cell_subsystem
    _name.object_id              matrix_W
    _type.purpose                Number
    _type.source                 Assigned
    _type.container              Matrix
    _type.contents               Real
    _type.dimension              '[11,11]'
    loop_
    _method.purpose
    _method.expression
     Evaluation    
;
     With  m  as  cell_subsystem

      cell_subsystem.matrix_W = [

    [ m.matrix_W_1_1, m.matrix_W_1_2, m.matrix_W_1_3, m.matrix_W_1_4, m.matrix_W_1_5, m.matrix_W_1_6, 
      m.matrix_W_1_7, m.matrix_W_1_8, m.matrix_W_1_9, m.matrix_W_1_10, m.matrix_W_1_11],
    [ m.matrix_W_2_1, m.matrix_W_2_2, m.matrix_W_2_3, m.matrix_W_2_4, m.matrix_W_2_5, m.matrix_W_2_6, 
      m.matrix_W_2_7, m.matrix_W_2_8, m.matrix_W_2_9, m.matrix_W_2_10, m.matrix_W_2_11],
    [ m.matrix_W_3_1, m.matrix_W_3_2, m.matrix_W_3_3, m.matrix_W_3_4, m.matrix_W_3_5, m.matrix_W_3_6, 
      m.matrix_W_3_7, m.matrix_W_3_8, m.matrix_W_3_9, m.matrix_W_3_10, m.matrix_W_3_11],
    [ m.matrix_W_4_1, m.matrix_W_4_2, m.matrix_W_4_3, m.matrix_W_4_4, m.matrix_W_4_5, m.matrix_W_4_6, 
                           m.matrix_W_4_7, m.matrix_W_4_8, m.matrix_W_4_9, m.matrix_W_4_10, m.matrix_W_4_11],
    [ m.matrix_W_5_1, m.matrix_W_5_2, m.matrix_W_5_3, m.matrix_W_5_4, m.matrix_W_5_5, m.matrix_W_5_6, 
                           m.matrix_W_5_7, m.matrix_W_5_8, m.matrix_W_5_9, m.matrix_W_5_10, m.matrix_W_5_11],
    [ m.matrix_W_6_1, m.matrix_W_6_2, m.matrix_W_6_3, m.matrix_W_6_4, m.matrix_W_6_5, m.matrix_W_6_6, 
                           m.matrix_W_6_7, m.matrix_W_6_8, m.matrix_W_6_9, m.matrix_W_6_10, m.matrix_W_6_11],
    [ m.matrix_W_7_1, m.matrix_W_7_2, m.matrix_W_7_3, m.matrix_W_7_4, m.matrix_W_7_5, m.matrix_W_7_6, 
                           m.matrix_W_7_7, m.matrix_W_7_8, m.matrix_W_7_9, m.matrix_W_7_10, m.matrix_W_7_11],
    [ m.matrix_W_8_1, m.matrix_W_8_2, m.matrix_W_8_3, m.matrix_W_8_4, m.matrix_W_8_5, m.matrix_W_8_6, 
                           m.matrix_W_8_7, m.matrix_W_8_8, m.matrix_W_8_9, m.matrix_W_8_10, m.matrix_W_8_11],
    [ m.matrix_W_9_1, m.matrix_W_9_2, m.matrix_W_9_3, m.matrix_W_9_4, m.matrix_W_9_5, m.matrix_W_9_6, 
                           m.matrix_W_9_7, m.matrix_W_9_8, m.matrix_W_9_9, m.matrix_W_9_10, m.matrix_W_9_11],
    [ m.matrix_W_10_1, m.matrix_W_10_2, m.matrix_W_10_3, m.matrix_W_10_4, m.matrix_W_10_5, m.matrix_W_10_6, 
                              m.matrix_W_10_7, m.matrix_W_10_8, m.matrix_W_10_9, m.matrix_W_10_10, m.matrix_W_10_11],
    [ m.matrix_W_11_1, m.matrix_W_11_2, m.matrix_W_11_3, m.matrix_W_11_4, m.matrix_W_11_5, m.matrix_W_11_6, 
                              m.matrix_W_11_7, m.matrix_W_11_8, m.matrix_W_11_9, m.matrix_W_11_10, m.matrix_W_11_11]  ]
; 

save_
CELL_SUBSYSTEMS
CIF
Data items in the CELL_SUBSYSTEMS category describe overall aspects
of the subsystems present in a composite.
save_CELL_SUBSYSTEMS

    _definition.id               CELL_SUBSYSTEMS
    _definition.scope            Category
    _definition.class            Set
    _definition.update           2016-11-17
    _description.text                   
;

      Data items in the CELL_SUBSYSTEMS category describe overall aspects
      of the subsystems present in a composite.
;
    _name.category_id            MS_GROUP
    _name.object_id              CELL_SUBSYSTEMS

save_
_cell_subsystems.number
CIF
The number of subsystems used to define the structural model of
a composite structure.
save_cell_subsystems.number

    _definition.id               '_cell_subsystems.number'
    _definition.update           2019-09-25
    loop_
      _alias.definition_id
          '_cell_subsystems_number' 
    _description.text                   
;

      The number of subsystems used to define the structural model of
      a composite structure.
;
    _name.category_id            cell_subsystems
    _name.object_id              number
    _type.purpose                Number
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Integer
    _enumeration.range           2:

save_
CELL_WAVE_VECTOR
CIF
Data items in the CELL_WAVE_VECTOR category list the
independent modulation wave vectors q~i~. The diffraction
vectors are indexed in the form
ha*+kb*+lc*+sum~i~ (m~i~q~i~). sum~i~ is taken
over all wave vectors. In this version of the dictionary, the
index i has been restricted to be less than 9.
save_CELL_WAVE_VECTOR

    _definition.id               cell_wave_vector
    _definition.scope            Category
    _definition.class            Loop
    _definition.update           2014-06-27
    _description.text                   
;

      Data items in the CELL_WAVE_VECTOR category list the
      independent modulation wave vectors q~i~. The diffraction
      vectors are indexed in the form
      ha*+kb*+lc*+sum~i~ (m~i~q~i~). sum~i~ is taken
      over all wave vectors. In this version of the dictionary, the
      index i has been restricted to be less than 9.
;
    _name.category_id            MS_GROUP
    _name.object_id              CELL_WAVE_VECTOR
	loop_
    _category_key.name           '_cell_wave_vector.seq_id'

save_
_cell_wave_vector.seq_id
CIF
A numeric code to identify each independent wave vector. These
codes define uniquely the reciprocal basis and, therefore,
force the order of the Miller indices assigned to
intensities, crystal faces etc.
save_cell_wave_vector.seq_id

    _definition.id               '_cell_wave_vector.seq_id'
    _definition.update           2019-09-25
    loop_
      _alias.definition_id
          '_cell_wave_vector_seq_id' 
    _description.text                   
;

      A numeric code to identify each independent wave vector. These
      codes define uniquely the reciprocal basis and, therefore,
      force the order of the Miller indices assigned to
      intensities, crystal faces etc.
;
    _name.category_id            cell_wave_vector
    _name.object_id              seq_id
    _type.purpose                Key
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Integer
    _enumeration.range           0:

save_
_cell_wave_vector.x
CIF
Component of a wave vector along the reciprocal axis a^*^ of the
reference structure.
save_cell_wave_vector.x

    _definition.id               '_cell_wave_vector.x'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_cell_wave_vector_x' 
    _description.text                   
;

      Component of a wave vector along the reciprocal axis a^*^ of the 
      reference structure.
;
    _name.category_id            cell_wave_vector
    _name.object_id              x
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    loop_
    _method.purpose
    _method.expression
     Evaluation    
;
       With  m  as  cell_wave_vector

                        cell_wave_vector.x  =  m.xyz[ 0 ]
;

save_
_cell_wave_vector.xyz
CIF
Independent modulation wave vector(s) with which the whole
diffraction pattern is indexed, expressed as fractions of the
three reciprocal basis vectors of the reference structure. In
the case of composites, the modulation wave vectors of each
subsystem are expressed in terms of the reciprocal basis of its
corresponding reference structure. Their number must match
_cell_modulation_dimension. In the case of composites described
in a single data block, the wave
vectors are expressed in the three-dimensional basis chosen as
reference in _cell.reciprocal_basis_description, which would
correspond to the subsystem (if any) whose W matrix is the
{(_cell.modulation_dimension + 3)*\
(_cell.modulation_dimension + 3)} unit matrix. In this case,\
the wave vectors used to describe the modulation of each
subsystem are referred to their own reciprocal basis via the W
matrices (for details see _cell_subsystem_matrix_W_* and
_atom_site_Fourier_wave_vector_*).
save_cell_wave_vector.xyz

    _definition.id               '_cell_wave_vector.xyz'
    _definition.update           2014-06-27
    _description.text                   
;

      Independent modulation wave vector(s) with which the whole
      diffraction pattern is indexed, expressed as fractions of the
      three reciprocal basis vectors of the reference structure. In
      the case of composites, the modulation wave vectors of each
      subsystem are expressed in terms of the reciprocal basis of its
      corresponding reference structure. Their number must match
      _cell_modulation_dimension. In the case of composites described
      in a single data block, the wave
      vectors are expressed in the three-dimensional basis chosen as
      reference in _cell.reciprocal_basis_description, which would
      correspond to the subsystem (if any) whose W matrix is the
      {(_cell.modulation_dimension + 3)*\
      (_cell.modulation_dimension + 3)} unit matrix. In this case,\
      the wave vectors used to describe the modulation of each
      subsystem are referred to their own reciprocal basis via the W
      matrices (for details see _cell_subsystem_matrix_W_* and
      _atom_site_Fourier_wave_vector_*).
;
    _name.category_id            cell_wave_vector
    _name.object_id              xyz
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Matrix
    _type.contents               Real
    _type.dimension              '[3]'
    loop_
    _method.purpose
    _method.expression
     Evaluation    
;
    With  m  as  cell_wave_vector

            _cell_wave_vector.xyz   =   [ m.x, m.y, m.z ]
; 

save_
_cell_wave_vector.y
CIF
Component of a wave vector along the reciprocal axis b^*^ of the
reference structure.
save_cell_wave_vector.y

    _definition.id               '_cell_wave_vector.y'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_cell_wave_vector_y' 
    _description.text                   
;

      Component of a wave vector along the reciprocal axis b^*^ of the 
      reference structure.
;
    _name.category_id            cell_wave_vector
    _name.object_id              y
    _type.purpose                Number
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    loop_
    _method.purpose
    _method.expression
     Evaluation    

;
       With  m  as  cell_wave_vector

                        cell_wave_vector.y  =  m.xyz[ 1 ]
;

save_
_cell_wave_vector.z
CIF
Component of a wave vector along the reciprocal axis c^*^ of the
reference structure.
save_cell_wave_vector.z
    _definition.id               '_cell_wave_vector.z'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_cell_wave_vector_z' 
    _description.text                   
;

      Component of a wave vector along the reciprocal axis c^*^ of the 
      reference structure.
;
    _name.category_id            cell_wave_vector
    _name.object_id              z
    _type.purpose                Number
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    loop_
    _method.purpose
    _method.expression
     Evaluation    

;
       With  m  as  cell_wave_vector

                        cell_wave_vector.z  =  m.xyz[ 2 ]
;

save_
CELL_WAVE_VECTORS
CIF
Data items in the CELL_WAVE_VECTORS category record overall details
about the set of independent modulation wave vectors q~i~ and
their measurement. The diffraction vectors are indexed in
the form ha*+kb*+lc*+sum~i~ (m~i~q~i~). sum~i~ is taken
over all wave vectors. In this version of the dictionary, the
index i has been restricted to be less than 9.
save_CELL_WAVE_VECTORS

    _definition.id               CELL_WAVE_VECTORS
    _definition.scope            Category
    _definition.class            Set
    _definition.update           2016-11-17
    _description.text                   
;

      Data items in the CELL_WAVE_VECTORS category record overall details
      about the set of independent modulation wave vectors q~i~ and
      their measurement. The diffraction vectors are indexed in
      the form ha*+kb*+lc*+sum~i~ (m~i~q~i~). sum~i~ is taken
      over all wave vectors. In this version of the dictionary, the
      index i has been restricted to be less than 9.
;
    _name.category_id            MS_GROUP
    _name.object_id              CELL_WAVE_VECTORS

save_
_cell_wave_vectors.meas_details
CIF
Details about the method used to determine the independent
modulation wave vector(s).
save_cell_wave_vectors.meas_details

    _definition.id               '_cell_wave_vectors.meas_details'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_cell_wave_vectors_meas_details' 
    _description.text                   
;

      Details about the method used to determine the independent
      modulation wave vector(s).
;
    _name.category_id            cell_wave_vectors
    _name.object_id              meas_details
    _type.purpose                Describe
    _type.source                 Asd
    _type.container              Single
    _type.contents               Text

save_
_cell_wave_vectors.pressure_max
CIF
The maximum and minimum values of the pressure in kilopascals
defining the interval within which the modulation wave vector(s)
were measured.
save_cell_wave_vectors.pressure_max

    _definition.id               '_cell_wave_vectors.pressure_max'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_cell_wave_vectors_pressure_max' 
    _description.text                   
;

      The maximum and minimum values of the pressure in kilopascals
      defining the interval within which the modulation wave vector(s)
      were measured.
;
    _name.category_id            cell_wave_vectors
    _name.object_id              pressure_max
    _type.purpose                Measurand
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Real
    _enumeration.range           0.0:
_units.code                             kilopascals

save_
_cell_wave_vectors.pressure_min
CIF
The maximum and minimum values of the pressure in kilopascals
defining the interval within which the modulation wave vector(s)
were measured.
save_cell_wave_vectors.pressure_min

    _definition.id               '_cell_wave_vectors.pressure_min'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_cell_wave_vectors_pressure_min' 
    _description.text                   
;

      The maximum and minimum values of the pressure in kilopascals
      defining the interval within which the modulation wave vector(s)
      were measured.
;
    _name.category_id            cell_wave_vectors
    _name.object_id              pressure_min
    _type.purpose                Measurand
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Real
    _enumeration.range           0.0:
_units.code                             kilopascals

save_
_cell_wave_vectors.temp_max
CIF
The maximum and minimum values of the temperature in kelvins
defining the interval within which the modulation wave vector(s)
were measured.
save_cell_wave_vectors.temp_max

    _definition.id               '_cell_wave_vectors.temp_max'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_cell_wave_vectors_temp_max' 
    _description.text                   
;

      The maximum and minimum values of the temperature in kelvins
      defining the interval within which the modulation wave vector(s)
      were measured.
;
    _name.category_id            cell_wave_vectors
    _name.object_id              temp_max
    _type.purpose                Measurand
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Real
    _enumeration.range           0.0:
_units.code                             kelvins

save_
_cell_wave_vectors.temp_min
CIF
The maximum and minimum values of the temperature in kelvins
defining the interval within which the modulation wave vector(s)
were measured.
save_cell_wave_vectors.temp_min

    _definition.id               '_cell_wave_vectors.temp_min'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_cell_wave_vectors_temp_min' 
    _description.text                   
;

      The maximum and minimum values of the temperature in kelvins
      defining the interval within which the modulation wave vector(s)
      were measured.
;
    _name.category_id            cell_wave_vectors
    _name.object_id              temp_min
    _type.purpose                Measurand
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Real
    _enumeration.range           0.0:
_units.code                             kelvins

save_
_cell_wave_vectors.variation
CIF
Details concerning the behaviour (and its experimental
detection) of the wave vector(s) with temperature and/or
pressure within the ranges specified by
_cell_wave_vectors.pressure_max, _cell_wave_vectors.pressure_min,
_cell_wave_vectors.temp_max and  _cell_wave_vectors.temp_min.
save_cell_wave_vectors.variation

    _definition.id               '_cell_wave_vectors.variation'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_cell_wave_vectors_variation' 
    _description.text                   
;

      Details concerning the behaviour (and its experimental
      detection) of the wave vector(s) with temperature and/or
      pressure within the ranges specified by
      _cell_wave_vectors.pressure_max, _cell_wave_vectors.pressure_min,
      _cell_wave_vectors.temp_max and  _cell_wave_vectors.temp_min.
;
    _name.category_id            cell_wave_vectors
    _name.object_id              variation
    _type.purpose                Describe
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Text

save_
DIFFRN_REFLN
CIF
Data items in the DIFFRN_REFLN category record details about
the intensities measured in the diffraction experiment. The
DIFFRN_REFLN data items refer to individual intensity
measurements and must be included in looped lists. (The
DIFFRN_REFLNS data items specify the parameters that apply
to all intensity measurements. The DIFFRN_REFLNS data items
are not looped.) Data items in this category are extensions
of the core CIF dictionary definitions to the indexing of
diffraction intensities by higher-dimensional components.
save_DIFFRN_REFLN

    _definition.id               DIFFRN_REFLN
    _definition.scope            Category
    _definition.class            Loop
    _definition.update           2016-11-17
    _description.text                   
;

      Data items in the DIFFRN_REFLN category record details about
      the intensities measured in the diffraction experiment. The
      DIFFRN_REFLN data items refer to individual intensity
      measurements and must be included in looped lists. (The
      DIFFRN_REFLNS data items specify the parameters that apply
      to all intensity measurements. The DIFFRN_REFLNS data items
      are not looped.) Data items in this category are extensions
      of the core CIF dictionary definitions to the indexing of
      diffraction intensities by higher-dimensional components.
;
    _name.category_id            MS_GROUP
    _name.object_id              DIFFRN_REFLN
    loop_
      _category_key.name
                                 '_diffrn_refln.index_h'       
                                 '_diffrn_refln.index_k'       
                                 '_diffrn_refln.index_l' 
                                 '_diffrn_refln.index_m_list'

save_
_diffrn_refln.index_m_list
CIF
Additional Miller indices needed to write the reciprocal vector
of a certain reflection in the basis described in
_cell_reciprocal_basis_description. Following the usual
convention, such a vector would be expressed as
H=h*a*+k*b*+l*c*+m1*q(1)+...+m8*q(8),
where h,k,l are the usual _diffrn_refln.index_, and q(1)...q(8)
represent the independent wave vectors given by
_cell_wave_vector.xyz and identified by _cell_wave_vector.seq_id.
Therefore, the total number of indices of a given reflection must
match (_cell.modulation_dimension + 3) and the order of the
additional indices must be consistent with the codes given in
_cell_wave_vector.seq_id. These indices need not match
_refln.index_m_list values if a transformation of the original
measured cell has occurred.
save_diffrn_refln.index_m_list

    _definition.id               '_diffrn_refln.index_m_list'
    _definition.update           2019-04-01
    _description.text                   
;

      Additional Miller indices needed to write the reciprocal vector
      of a certain reflection in the basis described in
      _cell_reciprocal_basis_description. Following the usual
      convention, such a vector would be expressed as

               H=h*a*+k*b*+l*c*+m1*q(1)+...+m8*q(8),
     
      where h,k,l are the usual _diffrn_refln.index_, and q(1)...q(8)
      represent the independent wave vectors given by
      _cell_wave_vector.xyz and identified by _cell_wave_vector.seq_id.
      Therefore, the total number of indices of a given reflection must
      match (_cell.modulation_dimension + 3) and the order of the
      additional indices must be consistent with the codes given in
      _cell_wave_vector.seq_id. These indices need not match
      _refln.index_m_list values if a transformation of the original
      measured cell has occurred.
;
    _name.category_id            diffrn_refln
    _name.object_id              index_m_list
    _type.purpose                Number
    _type.source                 Assigned
    _type.container              List
    _type.contents               Integer
    _type.dimension              '[]'
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  diffrn_refln

           temp.index_m_list = 

                  [ r.index_m_1, r.index_m_2, r.index_m_3, r.index_m_4,
                    r.index_m_5, r.index_m_6, r.index_m_7, r.index_m_8 ]

       #Not meaningful indices are removed here
 
           diffrn_refln.index_m_list =                     
                   temp.index_m_list[0:_cell.modulation_dimension  1]
; 

save_
_diffrn_refln.index_m_1
CIF
Additional Miller indices needed to write the reciprocal vector
in the definition of _diffrn_refln_index.m_list,
_diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
save_diffrn_refln.index_m_1
    _definition.id               '_diffrn_refln.index_m_1'
     loop_
       _alias.definition_id      '_diffrn_refln_index_m_1'
    

    _definition.update           2014-06-27
    _description.text
;
     Additional Miller indices needed to write the reciprocal vector
     in the definition of _diffrn_refln_index.m_list,
     _diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'ms_index'}]
    _name.category_id            diffrn_refln
    _name.object_id              index_m_1
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  diffrn_refln

                   diffrn_refln.index_m_1  =  r.index_m_list [ 0 ]
;

save_
_diffrn_refln.index_m_2
CIF
Additional Miller indices needed to write the reciprocal vector
in the definition of _diffrn_refln_index.m_list,
_diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
save_diffrn_refln.index_m_2
    _definition.id               '_diffrn_refln.index_m_2'
     loop_
       _alias.definition_id      '_diffrn_refln_index_m_2'
    

    _definition.update           2014-06-27
    _description.text
;
     Additional Miller indices needed to write the reciprocal vector
     in the definition of _diffrn_refln_index.m_list,
     _diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'ms_index'}]
    _name.category_id            diffrn_refln
    _name.object_id              index_m_2
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  diffrn_refln

                   diffrn_refln.index_m_2  =  r.index_m_list [ 1 ]
;
     
save_
_diffrn_refln.index_m_3
CIF
Additional Miller indices needed to write the reciprocal vector
in the definition of _diffrn_refln_index.m_list,
_diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
save_diffrn_refln.index_m_3
    _definition.id               '_diffrn_refln.index_m_3'
     loop_
       _alias.definition_id      '_diffrn_refln_index_m_3'
    

    _definition.update           2014-06-27
    _description.text
;
     Additional Miller indices needed to write the reciprocal vector
     in the definition of _diffrn_refln_index.m_list,
     _diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'ms_index'}]
    _name.category_id            diffrn_refln
    _name.object_id              index_m_3
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  diffrn_refln

                   diffrn_refln.index_m_3  =  r.index_m_list [ 2 ]
;
     
save_
_diffrn_refln.index_m_4
CIF
Additional Miller indices needed to write the reciprocal vector
in the definition of _diffrn_refln_index.m_list,
_diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
save_diffrn_refln.index_m_4
    _definition.id               '_diffrn_refln.index_m_4'
     loop_
       _alias.definition_id      '_diffrn_refln_index_m_4'
    

    _definition.update           2014-06-27
    _description.text
;
     Additional Miller indices needed to write the reciprocal vector
     in the definition of _diffrn_refln_index.m_list,
     _diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'ms_index'}]
    _name.category_id            diffrn_refln
    _name.object_id              index_m_4
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  diffrn_refln

                   diffrn_refln.index_m_4  =  r.index_m_list [ 3 ]
;
     
save_
_diffrn_refln.index_m_5
CIF
Additional Miller indices needed to write the reciprocal vector
in the definition of _diffrn_refln_index.m_list,
_diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
save_diffrn_refln.index_m_5
    _definition.id               '_diffrn_refln.index_m_5'
     loop_
       _alias.definition_id      '_diffrn_refln_index_m_5'
    

    _definition.update           2014-06-27
    _description.text
;
     Additional Miller indices needed to write the reciprocal vector
     in the definition of _diffrn_refln_index.m_list,
     _diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'ms_index'}]
    _name.category_id            diffrn_refln
    _name.object_id              index_m_5
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  diffrn_refln

                   diffrn_refln.index_m_5  =  r.index_m_list [ 4 ]
;
     
save_
_diffrn_refln.index_m_6
CIF
Additional Miller indices needed to write the reciprocal vector
in the definition of _diffrn_refln_index.m_list,
_diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
save_diffrn_refln.index_m_6
    _definition.id               '_diffrn_refln.index_m_6'
     loop_
       _alias.definition_id      '_diffrn_refln_index_m_6'
    

    _definition.update           2014-06-27
    _description.text
;
     Additional Miller indices needed to write the reciprocal vector
     in the definition of _diffrn_refln_index.m_list,
     _diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'ms_index'}]
    _name.category_id            diffrn_refln
    _name.object_id              index_m_6
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  diffrn_refln

                   diffrn_refln.index_m_6  =  r.index_m_list [ 5 ]
;
     
save_
_diffrn_refln.index_m_7
CIF
Additional Miller indices needed to write the reciprocal vector
in the definition of _diffrn_refln_index.m_list,
_diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
save_diffrn_refln.index_m_7
    _definition.id               '_diffrn_refln.index_m_7'
     loop_
       _alias.definition_id      '_diffrn_refln_index_m_7'
    

    _definition.update           2014-06-27
    _description.text
;
     Additional Miller indices needed to write the reciprocal vector
     in the definition of _diffrn_refln_index.m_list,
     _diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'ms_index'}]
    _name.category_id            diffrn_refln
    _name.object_id              index_m_7
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  diffrn_refln

                   diffrn_refln.index_m_7  =  r.index_m_list [ 6 ]
;
     
save_
_diffrn_refln.index_m_8
CIF
Additional Miller indices needed to write the reciprocal vector
in the definition of _diffrn_refln_index.m_list,
_diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
save_diffrn_refln.index_m_8
    _definition.id               '_diffrn_refln.index_m_8'
     loop_
       _alias.definition_id      '_diffrn_refln_index_m_8'
    

    _definition.update           2014-06-27
    _description.text
;
     Additional Miller indices needed to write the reciprocal vector
     in the definition of _diffrn_refln_index.m_list,
     _diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'ms_index'}]
    _name.category_id            diffrn_refln
    _name.object_id              index_m_8
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  diffrn_refln

                   diffrn_refln.index_m_8  =  r.index_m_list [ 7 ]
;
     
save_
DIFFRN_STANDARD_REFLN
CIF
Data items in the DIFFRN_STANDARD_REFLN category record
details about the reflections treated as standards during the
measurement of diffraction intensities. Note that these are the
individual standard reflections, not the results of the analysis
of the standard reflections. Data items in this category are
extensions of  the core CIF dictionary definitions
to the indexing of standard reflections by
higher-dimensional components.
save_DIFFRN_STANDARD_REFLN

    _definition.id               DIFFRN_STANDARD_REFLN
    _definition.scope            Category
    _definition.class            Loop
    _definition.update           2014-06-27
    _description.text                   
;

      Data items in the DIFFRN_STANDARD_REFLN category record
      details about the reflections treated as standards during the
      measurement of diffraction intensities. Note that these are the
      individual standard reflections, not the results of the analysis
      of the standard reflections. Data items in this category are
      extensions of  the core CIF dictionary definitions
      to the indexing of standard reflections by
      higher-dimensional components.
;
    _name.category_id            MS_GROUP
    _name.object_id              DIFFRN_STANDARD_REFLN
    loop_
      _category_key.name
                                 '_diffrn_standard_refln.index_h'        
                                 '_diffrn_standard_refln.index_k'        
                                 '_diffrn_standard_refln.index_l' 
                                 '_diffrn_standard_refln.index_m_list'

save_
_diffrn_standard_refln.index_m_list
CIF
Additional Miller indices needed to write the reciprocal vectors
of the standard intensities used in the diffraction measurement
process, in the basis described in
_cell.reciprocal_basis_description. The total number of indices
of a given standard reflection must match
(_cell.modulation_dimension + 3) and the order of the
additional indices must be consistent with the codes given in
_cell_wave_vector.seq_id.
save_diffrn_standard_refln.index_m_list

    _definition.id               '_diffrn_standard_refln.index_m_list'
    _definition.update           2019-04-01
    _description.text                   
;

      Additional Miller indices needed to write the reciprocal vectors
      of the standard intensities used in the diffraction measurement
      process, in the basis described in
      _cell.reciprocal_basis_description. The total number of indices
      of a given standard reflection must match
      (_cell.modulation_dimension + 3) and the order of the
      additional indices must be consistent with the codes given in
      _cell_wave_vector.seq_id.
;
    _name.category_id            diffrn_standard_refln
    _name.object_id              index_m_list
    _type.purpose                Number
    _type.source                 Assigned
    _type.container              List
    _type.contents               Integer
    _type.dimension              '[8]'
    loop_
      _method.purpose
      _method.expression
      Evaluation    
;
      With  r  as  diffrn_standard_refln

           temp.index_m_list =

                  [ r.index_m_1, r.index_m_2, r.index_m_3, r.index_m_4,
                    r.index_m_5, r.index_m_6, r.index_m_7, r.index_m_8 ]

      #Not meaningful indices are removed here
 
           diffrn_standard_refln.index_m_list =                     
                  temp.index_m_list[0:_cell.modulation_dimension  1]
; 

save_
_diffrn_standard_refln.index_m_1
CIF
Additional Miller indices needed to write the reciprocal vector
in the definition of _diffrn_refln_index.m_list,
_diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
save_diffrn_standard_refln.index_m_1
    _definition.id               '_diffrn_standard_refln.index_m_1'
     loop_
       _alias.definition_id      '_diffrn_standard_refln_index_m_1'
    

    _definition.update           2014-06-27
    _description.text
;
     Additional Miller indices needed to write the reciprocal vector
     in the definition of _diffrn_refln_index.m_list,
     _diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'ms_index'}]
    _name.category_id            diffrn_standard_refln
    _name.object_id              index_m_1
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  diffrn_standard_refln

              diffrn_standard_refln.index_m_1  =  r.index_m_list [ 0 ]
;
     
save_
_diffrn_standard_refln.index_m_2
CIF
Additional Miller indices needed to write the reciprocal vector
in the definition of _diffrn_refln_index.m_list,
_diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
save_diffrn_standard_refln.index_m_2
    _definition.id               '_diffrn_standard_refln.index_m_2'
     loop_
       _alias.definition_id      '_diffrn_standard_refln_index_m_2'
    

    _definition.update           2014-06-27
    _description.text
;
     Additional Miller indices needed to write the reciprocal vector
     in the definition of _diffrn_refln_index.m_list,
     _diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'ms_index'}]
    _name.category_id            diffrn_standard_refln
    _name.object_id              index_m_2
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  diffrn_standard_refln

              diffrn_standard_refln.index_m_2  =  r.index_m_list [ 1 ]
;
     
save_
_diffrn_standard_refln.index_m_3
CIF
Additional Miller indices needed to write the reciprocal vector
in the definition of _diffrn_refln_index.m_list,
_diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
save_diffrn_standard_refln.index_m_3
    _definition.id               '_diffrn_standard_refln.index_m_3'
     loop_
       _alias.definition_id      '_diffrn_standard_refln_index_m_3'
    

    _definition.update           2014-06-27
    _description.text
;
     Additional Miller indices needed to write the reciprocal vector
     in the definition of _diffrn_refln_index.m_list,
     _diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'ms_index'}]
    _name.category_id            diffrn_standard_refln
    _name.object_id              index_m_3
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  diffrn_standard_refln

              diffrn_standard_refln.index_m_3  =  r.index_m_list [ 2 ]
;
     
save_
_diffrn_standard_refln.index_m_4
CIF
Additional Miller indices needed to write the reciprocal vector
in the definition of _diffrn_refln_index.m_list,
_diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
save_diffrn_standard_refln.index_m_4
    _definition.id               '_diffrn_standard_refln.index_m_4'
     loop_
       _alias.definition_id      '_diffrn_standard_refln_index_m_4'
    

    _definition.update           2014-06-27
    _description.text
;
     Additional Miller indices needed to write the reciprocal vector
     in the definition of _diffrn_refln_index.m_list,
     _diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'ms_index'}]
    _name.category_id            diffrn_standard_refln
    _name.object_id              index_m_4
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  diffrn_standard_refln

              diffrn_standard_refln.index_m_4  =  r.index_m_list [ 3 ]
;
     
save_
_diffrn_standard_refln.index_m_5
CIF
Additional Miller indices needed to write the reciprocal vector
in the definition of _diffrn_refln_index.m_list,
_diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
save_diffrn_standard_refln.index_m_5
    _definition.id               '_diffrn_standard_refln.index_m_5'
     loop_
       _alias.definition_id      '_diffrn_standard_refln_index_m_5'
    

    _definition.update           2014-06-27
    _description.text
;
     Additional Miller indices needed to write the reciprocal vector
     in the definition of _diffrn_refln_index.m_list,
     _diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'ms_index'}]
    _name.category_id            diffrn_standard_refln
    _name.object_id              index_m_5
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  diffrn_standard_refln

              diffrn_standard_refln.index_m_5  =  r.index_m_list [ 4 ]
;
     
save_
_diffrn_standard_refln.index_m_6
CIF
Additional Miller indices needed to write the reciprocal vector
in the definition of _diffrn_refln_index.m_list,
_diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
save_diffrn_standard_refln.index_m_6
    _definition.id               '_diffrn_standard_refln.index_m_6'
     loop_
       _alias.definition_id      '_diffrn_standard_refln_index_m_6'
    

    _definition.update           2014-06-27
    _description.text
;
     Additional Miller indices needed to write the reciprocal vector
     in the definition of _diffrn_refln_index.m_list,
     _diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'ms_index'}]
    _name.category_id            diffrn_standard_refln
    _name.object_id              index_m_6
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  diffrn_standard_refln

              diffrn_standard_refln.index_m_6  =  r.index_m_list [ 5 ]
;
     
save_
_diffrn_standard_refln.index_m_7
CIF
Additional Miller indices needed to write the reciprocal vector
in the definition of _diffrn_refln_index.m_list,
_diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
save_diffrn_standard_refln.index_m_7
    _definition.id               '_diffrn_standard_refln.index_m_7'
     loop_
       _alias.definition_id      '_diffrn_standard_refln_index_m_7'
    

    _definition.update           2014-06-27
    _description.text
;
     Additional Miller indices needed to write the reciprocal vector
     in the definition of _diffrn_refln_index.m_list,
     _diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'ms_index'}]
    _name.category_id            diffrn_standard_refln
    _name.object_id              index_m_7
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  diffrn_standard_refln

              diffrn_standard_refln.index_m_7  =  r.index_m_list [ 6 ]
;
     
save_
_diffrn_standard_refln.index_m_8
CIF
Additional Miller indices needed to write the reciprocal vector
in the definition of _diffrn_refln_index.m_list,
_diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
save_diffrn_standard_refln.index_m_8
    _definition.id               '_diffrn_standard_refln.index_m_8'
     loop_
       _alias.definition_id      '_diffrn_standard_refln_index_m_8'
    

    _definition.update           2014-06-27
    _description.text
;
     Additional Miller indices needed to write the reciprocal vector
     in the definition of _diffrn_refln_index.m_list,
     _diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'ms_index'}]
    _name.category_id            diffrn_standard_refln
    _name.object_id              index_m_8
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  diffrn_standard_refln

              diffrn_standard_refln.index_m_8  =  r.index_m_list [ 7 ]
;
     
save_
GEOM_ANGLE
CIF
Data items in the GEOM_ANGLE category record
details about the bond angles, as calculated from the
ATOM, CELL and SYMMETRY data. These extensions
to the core CIF dictionary definitions record the maximum,
minimum and average values of angles and extend the
symmetry-operation code used in angle listings to the
higher-dimensional superspace form. Many GEOM_ANGLE
datanames are redefined due to the consequent change
in the way that they are calculated, even if the
calculation method is not explicit in either this
dictionary or the core.
save_GEOM_ANGLE

    _definition.id               GEOM_ANGLE
    _definition.scope            Category
    _definition.class            Loop
    _definition.update           2014-06-27
    _description.text                   
;

      Data items in the GEOM_ANGLE category record
      details about the bond angles, as calculated from the
      ATOM, CELL and SYMMETRY data. These extensions
      to the core CIF dictionary definitions record the maximum,
      minimum and average values of angles and extend the
      symmetry-operation code used in angle listings to the
      higher-dimensional superspace form. Many GEOM_ANGLE
      datanames are redefined due to the consequent change
      in the way that they are calculated, even if the
      calculation method is not explicit in either this
      dictionary or the core.
;
    _name.category_id            MS_GROUP
    _name.object_id              GEOM_ANGLE
    loop_
       _category_key.name
                                 '_geom_angle.atom_site_label_1'         
                                 '_geom_angle.atom_site_label_2'         
                                 '_geom_angle.atom_site_label_3'         
                                 '_geom_angle.site_ssg_symmetry_1'           
                                 '_geom_angle.site_ssg_symmetry_2'           
                                 '_geom_angle.site_ssg_symmetry_3' 

save_
_geom_angle.av
CIF
Average angle bounded by _geom_angle.atom_site_label_1,
*_2, and *_3. The site at *_2 is at the apex of the angle.
save_geom_angle.av

    _definition.id               '_geom_angle.av'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_geom_angle_av' 
    _description.text                   
;

      Average angle bounded by _geom_angle.atom_site_label_1, 
      *_2, and *_3. The site at *_2 is at the apex of the angle.
;
    _name.category_id            geom_angle
    _name.object_id              av
    _type.purpose                Measurand
    _type.source                 Derived
    _type.container              Single
    _type.contents               Real
_units.code                             degrees

save_
_geom_angle.max
CIF
Maximum angle bounded by _geom_angle.atom_site_label_1,
*_2, and *_3. The site at *_2 is at the apex of the angle.
save_geom_angle.max

    _definition.id               '_geom_angle.max'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_geom_angle_max' 
    _description.text                   
;

      Maximum angle bounded by _geom_angle.atom_site_label_1, 
      *_2, and *_3. The site at *_2 is at the apex of the angle.
;
    _name.category_id            geom_angle
    _name.object_id              max
    _type.purpose                Measurand
    _type.source                 Derived
    _type.container              Single
    _type.contents               Real
_units.code                             degrees

save_
_geom_angle.min
CIF
Minimum angle bounded by _geom_angle.atom_site_label_1,
*_2, and *_3. The site at *_2 is at the apex of the angle.
save_geom_angle.min

    _definition.id               '_geom_angle.min'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_geom_angle_min' 
    _description.text                   
;

      Minimum angle bounded by _geom_angle.atom_site_label_1, 
      *_2, and *_3. The site at *_2 is at the apex of the angle.
;
    _name.category_id            geom_angle
    _name.object_id              min
    _type.purpose                Number
    _type.source                 Derived
    _type.container              Single
    _type.contents               Real
_units.code                             degrees

save_
_geom_angle.site_ssg_symmetry_1
CIF
The symmetry code of each atom site as the symmetry operation
number 'n' and the higher-dimensional translation 'm1...mp'.
These numbers are combined to form the code 'n m1...mp' or
n_m1...mp. The character string n_m1...mp is composed as follows:
'n' refers to the symmetry operation that is applied to the
superspace coordinates. It must match a number given in
_space_group_symop_ssg_id. 'm1...mp' refer to the translations
that are subsequently applied to the symmetry-transformed
coordinates to generate the atom used in calculating the angle.
These translations (t1,...tp) are related to (m1...mp) by the
relations m1=5+t1, ..., mp=5+tp. By adding 5 to the translations,
the use of negative numbers is avoided. The number 'p' must agree
with (_cell_modulation_dimension + 3). If there are no cell
translations, the translation number may be omitted. If no
symmetry operations or translations are applicable, then a single
full stop '.' is used.
Examples:
4
7_645
save_save_geom_angle.site_ssg_symmetry_1

    _definition.id               '_geom_angle.site_ssg_symmetry_1'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
                                 '_geom_angle_site_ssg_symmetry_1' 
    _description.text                   
;

      The symmetry code of each atom site as the symmetry operation
      number 'n' and the higher-dimensional translation 'm1...mp'.
      These numbers are combined to form the code 'n m1...mp' or
      n_m1...mp. The character string n_m1...mp is composed as follows:
      'n' refers to the symmetry operation that is applied to the
      superspace coordinates. It must match a number given in
      _space_group_symop_ssg_id. 'm1...mp' refer to the translations
      that are subsequently applied to the symmetry-transformed
      coordinates to generate the atom used in calculating the angle.
      These translations (t1,...tp) are related to (m1...mp) by the
      relations m1=5+t1, ..., mp=5+tp. By adding 5 to the translations,
      the use of negative numbers is avoided. The number 'p' must agree
      with (_cell_modulation_dimension + 3). If there are no cell
      translations, the translation number may be omitted. If no
      symmetry operations or translations are applicable, then a single
      full stop '.' is used.
;
    _name.category_id            geom_angle
    _name.object_id              site_ssg_symmetry_1
    _type.purpose                Composite
    _type.source                 Derived
    _type.container              Single
    _type.contents               Symop
    loop_
      _description_example.case
      _description_example.detail
      "."                  'no symmetry or translation to site'          
      "4"                  '4th symmetry operation applied'    
      "7_645"              '7th symmetry position; +a on x, -b on y' 

save_
_geom_angle.site_ssg_symmetry_2
CIF
See _geom_angle.site_ssg_symmetry_1 for description.
save_geom_angle.site_ssg_symmetry_2

    _definition.id               '_geom_angle.site_ssg_symmetry_2'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
                                 '_geom_angle_site_ssg_symmetry_2' 
    _description.text                   
;

     See _geom_angle.site_ssg_symmetry_1 for description.
;
    _name.category_id            geom_angle
    _name.object_id              site_ssg_symmetry_2
    _type.purpose                Composite
    _type.source                 Derived
    _type.container              Single
    _type.contents               Symop

save_
_geom_angle.site_ssg_symmetry_3
CIF
See _geom_angle.site_ssg_symmetry_1 for description.
save_geom_angle.site_ssg_symmetry_3

    _definition.id               '_geom_angle.site_ssg_symmetry_3'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
                                 '_geom_angle_site_ssg_symmetry_3' 
    _description.text                   
;

     See _geom_angle.site_ssg_symmetry_1 for description.
;
    _name.category_id            geom_angle
    _name.object_id              site_ssg_symmetry_3
    _type.purpose                Composite
    _type.source                 Derived
    _type.container              Single
    _type.contents               Symop
save_
_geom_angle.distances
CIF
The pair of distances between sites 1 - 2 and 2 - 3.
save_geom_angle.distances

_definition.id                          '_geom_angle.distances'
_definition.update                      2019-04-01
_description.text                       
;
     The pair of distances between sites 1 - 2 and 2 - 3.
;
_name.category_id                       geom_angle
_name.object_id                         distances
_type.purpose                           Measurand
_type.source                            Derived
_type.container                         List
_type.contents                          Real
_type.dimension                        '[2]'
_units.code                             angstroms

save_
_geom_angle.value
CIF
Angle defined by the atoms located at atom_site_x/site_symmetry_x for
x = 1,2,3. The vertex atom is at site x = 2.
save_geom_angle.value

_definition.id                          '_geom_angle.value'
_definition.update                      2016-11-17
_description.text                       
;
     Angle defined by the atoms located at atom_site_x/site_symmetry_x for
     x = 1,2,3. The vertex atom is at site x = 2.
;
_name.category_id                       geom_angle
_name.object_id                         value
_type.purpose                           Measurand
_type.source                            Derived
_type.container                         Single
_type.contents                          Real
_enumeration.range                      -180.:180.
_units.code                             degrees

save_
_geom_angle.value_su
CIF
Standard Uncertainty of the
angle defined by the sites identified by _geom_angle.id
save_geom_angle.value_su

_definition.id                          '_geom_angle.value_su'
loop_
  _alias.definition_id
         '_geom_angle_su'    
         '_geom_angle.value_esd' 
_definition.update                      2016-11-17
_description.text                       
;
     Standard Uncertainty of the
     angle defined by the sites identified by _geom_angle.id
;
_name.category_id                       geom_angle
_name.object_id                         value_su
_name.linked_item_id                    '_geom_angle.value'
_type.purpose                           SU
_type.source                            Related
_type.container                         Single
_type.contents                          Real
_units.code                             degrees

save_
REFINE
CIF
Data items in the REFINE category record
details about the structure refinement parameters. The
new items in this category extend those of the core CIF
dictionary and are specific to the refinement of
modulated structures.
save_REFINE

    _definition.id               REFINE
    _definition.scope            Category
    _definition.class            Set
    _definition.update           2016-11-17
    _description.text                   
;

      Data items in the REFINE category record
      details about the structure refinement parameters. The
      new items in this category extend those of the core CIF
      dictionary and are specific to the refinement of
      modulated structures.
;
    _name.category_id            MS_GROUP
    _name.object_id              REFINE

save_
_refine.ls_mod_func_description
CIF
Types of modulation present in the structural model and their
parameterization.
Example:
Only displacive modulation. Fourier series.
save_refine.ls_mod_func_description

    _definition.id               '_refine.ls_mod_func_description'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_refine_ls_mod_func_description' 
    _description.text                   
;

      Types of modulation present in the structural model and their
      parameterization.
;
    _name.category_id            refine
    _name.object_id              ls_mod_func_description
    _type.purpose                Describe
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Text
    loop_
    _description_example.case
    _description_example.detail
            "Only displacive modulation. Fourier series."  
; Modulation of atom S(1) described by a non-standard
               linear sawtooth function 
; 

save_
_refine.ls_mod_hydrogen_treatment
CIF
Treatment of hydrogen-atom modulation parameters in refinement.
save_refine.ls_mod_hydrogen_treatment

    _definition.id               '_refine.ls_mod_hydrogen_treatment'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_refine_ls_mod_hydrogen_treatment' 
    _description.text                   
;

      Treatment of hydrogen-atom modulation parameters in refinement.
;
    _name.category_id            refine
    _name.object_id              ls_mod_hydrogen_treatment
    _type.purpose                State
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Code
    loop_
    _enumeration_set.state
    _enumeration_set.detail
              refA          'refined H-atom displacive modulation parameters only'      
              refxyzA       'refined H-atom coords and displacive modulation params only'         
              refP          'refined H-atom occupational modulation parameters only'    
              refUP         'refined H-atom U and occupational modulation parameters only'        
              nomod         'no modulation of H-atom parameters' 
    _enumeration.default         nomod

save_
_refine.ls_mod_overall_phason_coeff
CIF
Phason coefficient used to calculate the overall phason correction.
save_refine.ls_mod_overall_phason_coeff

    _definition.id               '_refine.ls_mod_overall_phason_coeff'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_refine_ls_mod_overall_phason_coeff' 
    _description.text                   
;

     Phason coefficient used to calculate the overall phason correction.
;
    _name.category_id            refine
    _name.object_id              ls_mod_overall_phason_coeff
    _type.purpose                Measurand
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.default         0.0
    _enumeration.range           0.0:

save_
_refine.ls_mod_overall_phason_formula
CIF
The expression for the overall phason correction, if used.
save_refine.ls_mod_overall_phason_formula

    _definition.id               '_refine.ls_mod_overall_phason_formula'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_refine_ls_mod_overall_phason_formula' 
    _description.text                   
;

      The expression for the overall phason correction, if used.
;
    _name.category_id            refine
    _name.object_id              ls_mod_overall_phason_formula
    _type.purpose                State
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Code
    loop_
    _enumeration_set.state
    _enumeration_set.detail
              Axe           'Axe, J. D. (1980). Phys. Rev. B, 21, 4181-4190.'  
              Ovr           'Overhauser, A. W. (1971). Phys. Rev. B, 3, 3173-3182.'

save_
REFLN
CIF
Data items in the REFLN category record details about the
reflections used to determine the ATOM_SITE data items.
The REFLN data items refer to individual reflections and
must be included in looped lists. The REFLNS data items
specify the parameters that apply to all reflections. The
REFLNS data items are not looped. Data items in this category
are extensions of the core CIF dictionary definitions to the
indexing of reflections used in the refinement by
higher-dimensional components.
save_REFLN

    _definition.id               REFLN
    _definition.scope            Category
    _definition.class            Loop
    _definition.update           2014-06-27
    _description.text                   
;

      Data items in the REFLN category record details about the
      reflections used to determine the ATOM_SITE data items.
      The REFLN data items refer to individual reflections and
      must be included in looped lists. The REFLNS data items
      specify the parameters that apply to all reflections. The
      REFLNS data items are not looped. Data items in this category
      are extensions of the core CIF dictionary definitions to the
      indexing of reflections used in the refinement by
      higher-dimensional components.
;
    _name.category_id            MS_GROUP
    _name.object_id              REFLN
    loop_
      _category_key.name
                                 '_refln.index_h'    
                                 '_refln.index_k'    
                                 '_refln.index_l' 
                                 '_refln.index_m_list'

save_
_refln.index_m_list
CIF
Additional Miller indices of a particular reflection in the basis
described in _cell_reciprocal_basis_description. The total number
of indices must match (_cell.modulation_dimension + 3). The
order of the additional indices must be consistent with the codes
given in _cell_wave_vector.seq_id.
save_refln.index_m_list

    _definition.id               '_refln.index_m_list'
    _definition.update           2019-04-01
    _description.text                   
;

      Additional Miller indices of a particular reflection in the basis
      described in _cell_reciprocal_basis_description. The total number
      of indices must match (_cell.modulation_dimension + 3). The
      order of the additional indices must be consistent with the codes
      given in _cell_wave_vector.seq_id.
;
    _name.category_id            refln
    _name.object_id              index_m_list
    _type.purpose                Number
    _type.source                 Assigned
    _type.container              List
    _type.contents               Integer
    _type.dimension              '[8]'
    loop_
      _method.purpose
      _method.expression
      Evaluation    
;
      With  r  as  refln

           temp.index_m_list  =

                  [ r.index_m_1, r.index_m_2, r.index_m_3, r.index_m_4,
                    r.index_m_5, r.index_m_6, r.index_m_7, r.index_m_8 ]

      #Not meaningful indices are removed here
 
           refln.index_m_list = temp.index_m_list[0:_cell.modulation_dimension  1]
; 

save_
_refln.index_m_1
CIF
Additional Miller indices needed to write the reciprocal vector
in the definition of _diffrn_refln_index.m_list,
_diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
save_refln.index_m_1
    _definition.id               '_refln.index_m_1'
     loop_
       _alias.definition_id      '_refln_index_m_1'
    

    _definition.update           2014-06-27
    _description.text
;
     Additional Miller indices needed to write the reciprocal vector
     in the definition of _diffrn_refln_index.m_list,
     _diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'ms_index'}]
    _name.category_id            refln
    _name.object_id              index_m_1
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  refln

                   refln.index_m_1  =  f.index_m_list [ 0 ]
;
     
save_
_refln.index_m_2
CIF
Additional Miller indices needed to write the reciprocal vector
in the definition of _diffrn_refln_index.m_list,
_diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
save_refln.index_m_2
    _definition.id               '_refln.index_m_2'
     loop_
       _alias.definition_id      '_refln_index_m_2'
    

    _definition.update           2014-06-27
    _description.text
;
     Additional Miller indices needed to write the reciprocal vector
     in the definition of _diffrn_refln_index.m_list,
     _diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'ms_index'}]
    _name.category_id            refln
    _name.object_id              index_m_2
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  refln

                   refln.index_m_2  =  f.index_m_list [ 1 ]
;
     
save_
_refln.index_m_3
CIF
Additional Miller indices needed to write the reciprocal vector
in the definition of _diffrn_refln_index.m_list,
_diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
save_refln.index_m_3
    _definition.id               '_refln.index_m_3'
     loop_
       _alias.definition_id      '_refln_index_m_3'
    

    _definition.update           2014-06-27
    _description.text
;
     Additional Miller indices needed to write the reciprocal vector
     in the definition of _diffrn_refln_index.m_list,
     _diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'ms_index'}]
    _name.category_id            refln
    _name.object_id              index_m_3
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  refln

                   refln.index_m_3  =  f.index_m_list [ 2 ]
;
     
save_
_refln.index_m_4
CIF
Additional Miller indices needed to write the reciprocal vector
in the definition of _diffrn_refln_index.m_list,
_diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
save_refln.index_m_4
    _definition.id               '_refln.index_m_4'
     loop_
       _alias.definition_id      '_refln_index_m_4'
    

    _definition.update           2014-06-27
    _description.text
;
     Additional Miller indices needed to write the reciprocal vector
     in the definition of _diffrn_refln_index.m_list,
     _diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'ms_index'}]
    _name.category_id            refln
    _name.object_id              index_m_4
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  refln

                   refln.index_m_4  =  f.index_m_list [ 3 ]
;
     
save_
_refln.index_m_5
CIF
Additional Miller indices needed to write the reciprocal vector
in the definition of _diffrn_refln_index.m_list,
_diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
save_refln.index_m_5
    _definition.id               '_refln.index_m_5'
     loop_
       _alias.definition_id      '_refln_index_m_5'
    

    _definition.update           2014-06-27
    _description.text
;
     Additional Miller indices needed to write the reciprocal vector
     in the definition of _diffrn_refln_index.m_list,
     _diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'ms_index'}]
    _name.category_id            refln
    _name.object_id              index_m_5
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  refln

                   refln.index_m_5  =  f.index_m_list [ 4 ]
;
     
save_
_refln.index_m_6
CIF
Additional Miller indices needed to write the reciprocal vector
in the definition of _diffrn_refln_index.m_list,
_diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
save_refln.index_m_6
    _definition.id               '_refln.index_m_6'
     loop_
       _alias.definition_id      '_refln_index_m_6'
    

    _definition.update           2014-06-27
    _description.text
;
     Additional Miller indices needed to write the reciprocal vector
     in the definition of _diffrn_refln_index.m_list,
     _diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'ms_index'}]
    _name.category_id            refln
    _name.object_id              index_m_6
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  refln

                   refln.index_m_6  =  f.index_m_list [ 5 ]
;
     
save_
_refln.index_m_7
CIF
Additional Miller indices needed to write the reciprocal vector
in the definition of _diffrn_refln_index.m_list,
_diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
save_refln.index_m_7
    _definition.id               '_refln.index_m_7'
     loop_
       _alias.definition_id      '_refln_index_m_7'
    

    _definition.update           2014-06-27
    _description.text
;
     Additional Miller indices needed to write the reciprocal vector
     in the definition of _diffrn_refln_index.m_list,
     _diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'ms_index'}]
    _name.category_id            refln
    _name.object_id              index_m_7
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  refln

                   refln.index_m_7  =  f.index_m_list [ 6 ]
;
     
save_
_refln.index_m_8
CIF
Additional Miller indices needed to write the reciprocal vector
in the definition of _diffrn_refln_index.m_list,
_diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
save_refln.index_m_8
    _definition.id               '_refln.index_m_8'
     loop_
       _alias.definition_id      '_refln_index_m_8'
    

    _definition.update           2014-06-27
    _description.text
;
     Additional Miller indices needed to write the reciprocal vector
     in the definition of _diffrn_refln_index.m_list,
     _diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'ms_index'}]
    _name.category_id            refln
    _name.object_id              index_m_8
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  refln

                   refln.index_m_8  =  f.index_m_list [ 7 ]
;
     
save_
REFLNS
CIF
Data items in the REFLNS category record details about the
reflections used to determine the ATOM_SITE data items.
The REFLN data items refer to individual reflections and
must be included in looped lists. The REFLNS data items
specify the parameters that apply to all reflections. The
REFLNS data items are not looped. Data items in this category
extend the core CIF dictionary definitions providing independent
checks on the range of values recorded for each of the
additional Miller indices given in the REFLN category.
save_REFLNS

    _definition.id               REFLNS
    _definition.scope            Category
    _definition.class            Set
    _definition.update           2014-06-27
    _description.text                   
;

      Data items in the REFLNS category record details about the
      reflections used to determine the ATOM_SITE data items.
      The REFLN data items refer to individual reflections and
      must be included in looped lists. The REFLNS data items
      specify the parameters that apply to all reflections. The
      REFLNS data items are not looped. Data items in this category
      extend the core CIF dictionary definitions providing independent
      checks on the range of values recorded for each of the
      additional Miller indices given in the REFLN category.
;
    _name.category_id            MS_GROUP
    _name.object_id              REFLNS
save_
_reflns.limit_index_m_max_list
CIF
Maximum of the additional Miller indices
appearing in _refln.index_m_*. The number of ranges must match
_cell_modulation_dimension. The order of the additional indices
must be consistent with the codes given in
_cell.wave_vector_seq_id. These need not be the same as
the _reflns.limit_index_m_*.
save_reflns.limit_index_m_max_list

    _definition.id               '_reflns.limit_index_m_max_list'
    _definition.update           2019-04-01
    _description.text                   
;

      Maximum of the additional Miller indices
      appearing in _refln.index_m_*. The number of ranges must match
      _cell_modulation_dimension. The order of the additional indices
      must be consistent with the codes given in
      _cell.wave_vector_seq_id. These need not be the same as
      the _reflns.limit_index_m_*.
;
    _name.category_id            reflns
    _name.object_id              limit_index_m_max_list
    _type.purpose                Number
    _type.source                 Assigned
    _type.container              List
    _type.contents               Integer
    _type.dimension              '[8]'
    loop_
      _method.purpose
      _method.expression
      Evaluation    
;
      With  m  as  reflns

        temp.limit_index_m_max_list =

                  [ m.limit_index_m_1_max, m.limit_index_m_2_max, 
                    m.limit_index_m_3_max, m.limit_index_m_4_max, 
                    m.limit_index_m_5_max, m.limit_index_m_6_max, 
                    m.limit_index_m_7_max, m.limit_index_m_8_max ] 

      #Not meaningful indices are removed here
 
           reflns.limit_index_m_max_list = 
                      temp.limit_index_m_max_list [0:_cell.modulation_dimension  1]
; 

save_
_reflns.limit_index_m_min_list
CIF
Minimum values of the additional Miller indices
appearing in _refln.index_m_*. The number of ranges must match
_cell_modulation_dimension. The order of the additional indices
must be consistent with the codes given in
_cell.wave_vector_seq_id. These need not be the same as
the _reflns.limit_index_m_*.
save_reflns.limit_index_m_min_list

    _definition.id               '_reflns.limit_index_m_min_list'
    _definition.update           2019-04-01
    _description.text                   
;

      Minimum values of the additional Miller indices
      appearing in _refln.index_m_*. The number of ranges must match
      _cell_modulation_dimension. The order of the additional indices
      must be consistent with the codes given in
      _cell.wave_vector_seq_id. These need not be the same as
      the _reflns.limit_index_m_*.
;
    _name.category_id            reflns
    _name.object_id              limit_index_m_min_list
    _type.purpose                Number
    _type.source                 Assigned
    _type.container              List
    _type.contents               Integer
    _type.dimension              '[8]'
    loop_
      _method.purpose
      _method.expression
      Evaluation    
;
      With  m  as  reflns

        temp.limit_index_m_min_list =

                  [ m.limit_index_m_1_min, m.limit_index_m_2_min,
                    m.limit_index_m_3_min, m.limit_index_m_4_min,
                    m.limit_index_m_5_min, m.limit_index_m_6_min,
                    m.limit_index_m_7_min, m.limit_index_m_8_min ]

      #Not meaningful indices are removed here
 
           reflns.limit_index_m_min_list = 
                      temp.limit_index_m_min_list [0:_cell.modulation_dimension  1]
;

save_
_reflns.limit_index_m_1_max
CIF
Maximum value of the additional Miller indices appearing in
_diffrn_reflns.index_m_* and _reflns.index_m_*.
save_reflns.limit_index_m_1_max
    _definition.id               '_reflns.limit_index_m_1_max'
     loop_
       _alias.definition_id      '_reflns_limit_index_m_1_max'
    

    _definition.update           2021-03-01
    _description.text
;
     Maximum value of the additional Miller indices appearing in
     _diffrn_reflns.index_m_* and _reflns.index_m_*.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
    _units.code                  none
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'index_limit_max'}]
    _name.category_id            reflns
    _name.object_id              limit_index_m_1_max
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  reflns

                   reflns.limit_index_m_1_max  =  f.m_max_list [ 0 ]
;

save_
_reflns.limit_index_m_2_max
CIF
Maximum value of the additional Miller indices appearing in
_diffrn_reflns.index_m_* and _reflns.index_m_*.
save_reflns.limit_index_m_2_max
    _definition.id               '_reflns.limit_index_m_2_max'
     loop_
       _alias.definition_id      '_reflns_limit_index_m_2_max'
    

    _definition.update           2021-03-01
    _description.text
;
     Maximum value of the additional Miller indices appearing in
     _diffrn_reflns.index_m_* and _reflns.index_m_*.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
    _units.code                  none
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'index_limit_max'}]
    _name.category_id            reflns
    _name.object_id              limit_index_m_2_max
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  reflns

                   reflns.limit_index_m_2_max  =  f.m_max_list [ 1 ]
;

save_
_reflns.limit_index_m_3_max
CIF
Maximum value of the additional Miller indices appearing in
_diffrn_reflns.index_m_* and _reflns.index_m_*.
save_reflns.limit_index_m_3_max
    _definition.id               '_reflns.limit_index_m_3_max'
     loop_
       _alias.definition_id      '_reflns_limit_index_m_3_max'
    

    _definition.update           2021-03-01
    _description.text
;
     Maximum value of the additional Miller indices appearing in
     _diffrn_reflns.index_m_* and _reflns.index_m_*.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
    _units.code                  none
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'index_limit_max'}]
    _name.category_id            reflns
    _name.object_id              limit_index_m_3_max
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  reflns

                   reflns.limit_index_m_3_max  =  f.m_max_list [ 2 ]
;

save_
_reflns.limit_index_m_4_max
CIF
Maximum value of the additional Miller indices appearing in
_diffrn_reflns.index_m_* and _reflns.index_m_*.
save_reflns.limit_index_m_4_max
    _definition.id               '_reflns.limit_index_m_4_max'
     loop_
       _alias.definition_id      '_reflns_limit_index_m_4_max'
    

    _definition.update           2021-03-01
    _description.text
;
     Maximum value of the additional Miller indices appearing in
     _diffrn_reflns.index_m_* and _reflns.index_m_*.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
    _units.code                  none
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'index_limit_max'}]
    _name.category_id            reflns
    _name.object_id              limit_index_m_4_max
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  reflns

                   reflns.limit_index_m_4_max  =  f.m_max_list [ 3 ]
;

save_
_reflns.limit_index_m_5_max
CIF
Maximum value of the additional Miller indices appearing in
_diffrn_reflns.index_m_* and _reflns.index_m_*.
save_reflns.limit_index_m_5_max
    _definition.id               '_reflns.limit_index_m_5_max'
     loop_
       _alias.definition_id      '_reflns_limit_index_m_5_max'
    

    _definition.update           2021-03-01
    _description.text
;
     Maximum value of the additional Miller indices appearing in
     _diffrn_reflns.index_m_* and _reflns.index_m_*.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
    _units.code                  none
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'index_limit_max'}]
    _name.category_id            reflns
    _name.object_id              limit_index_m_5_max
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  reflns

                   reflns.limit_index_m_5_max  =  f.m_max_list [ 4 ]
;

save_
_reflns.limit_index_m_6_max
CIF
Maximum value of the additional Miller indices appearing in
_diffrn_reflns.index_m_* and _reflns.index_m_*.
save_reflns.limit_index_m_6_max
    _definition.id               '_reflns.limit_index_m_6_max'
     loop_
       _alias.definition_id      '_reflns_limit_index_m_6_max'
    

    _definition.update           2021-03-01
    _description.text
;
     Maximum value of the additional Miller indices appearing in
     _diffrn_reflns.index_m_* and _reflns.index_m_*.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
    _units.code                  none
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'index_limit_max'}]
    _name.category_id            reflns
    _name.object_id              limit_index_m_6_max
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  reflns

                   reflns.limit_index_m_6_max  =  f.m_max_list [ 5 ]
;

save_
_reflns.limit_index_m_7_max
CIF
Maximum value of the additional Miller indices appearing in
_diffrn_reflns.index_m_* and _reflns.index_m_*.
save_reflns.limit_index_m_7_max
    _definition.id               '_reflns.limit_index_m_7_max'
     loop_
       _alias.definition_id      '_reflns_limit_index_m_7_max'
    

    _definition.update           2021-03-01
    _description.text
;
     Maximum value of the additional Miller indices appearing in
     _diffrn_reflns.index_m_* and _reflns.index_m_*.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
    _units.code                  none
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'index_limit_max'}]
    _name.category_id            reflns
    _name.object_id              limit_index_m_7_max
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  reflns

                   reflns.limit_index_m_7_max  =  f.m_max_list [ 6 ]
;

save_
_reflns.limit_index_m_8_max
CIF
Maximum value of the additional Miller indices appearing in
_diffrn_reflns.index_m_* and _reflns.index_m_*.
save_reflns.limit_index_m_8_max
    _definition.id               '_reflns.limit_index_m_8_max'
     loop_
       _alias.definition_id      '_reflns_limit_index_m_8_max'
    

    _definition.update           2021-03-01
    _description.text
;
     Maximum value of the additional Miller indices appearing in
     _diffrn_reflns.index_m_* and _reflns.index_m_*.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
    _units.code                  none
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'index_limit_max'}]
    _name.category_id            reflns
    _name.object_id              limit_index_m_8_max
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  reflns

                   reflns.limit_index_m_8_max  =  f.m_max_list [ 7 ]
;

save_
_reflns.limit_index_m_1_min
CIF
Minimum value of the additional Miller indices appearing in
_diffrn_reflns.index_m_* and _reflns.index_m_*.
save_reflns.limit_index_m_1_min
    _definition.id               '_reflns.limit_index_m_1_min'
     loop_
       _alias.definition_id      '_reflns_limit_index_m_1_min'
    

    _definition.update           2021-03-01
    _description.text
;
     Minimum value of the additional Miller indices appearing in
     _diffrn_reflns.index_m_* and _reflns.index_m_*.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
    _units.code                  none
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'index_limit_min'}]
    _name.category_id            reflns
    _name.object_id              limit_index_m_1_min
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  reflns

                   reflns.limit_index_m_1_min  =  f.m_min_list [ 0 ]
;

save_
_reflns.limit_index_m_2_min
CIF
Minimum value of the additional Miller indices appearing in
_diffrn_reflns.index_m_* and _reflns.index_m_*.
save_reflns.limit_index_m_2_min
    _definition.id               '_reflns.limit_index_m_2_min'
     loop_
       _alias.definition_id      '_reflns_limit_index_m_2_min'
    

    _definition.update           2021-03-01
    _description.text
;
     Minimum value of the additional Miller indices appearing in
     _diffrn_reflns.index_m_* and _reflns.index_m_*.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
    _units.code                  none
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'index_limit_min'}]
    _name.category_id            reflns
    _name.object_id              limit_index_m_2_min
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  reflns

                   reflns.limit_index_m_2_min  =  f.m_min_list [ 1 ]
;

save_
_reflns.limit_index_m_3_min
CIF
Minimum value of the additional Miller indices appearing in
_diffrn_reflns.index_m_* and _reflns.index_m_*.
save_reflns.limit_index_m_3_min
    _definition.id               '_reflns.limit_index_m_3_min'
     loop_
       _alias.definition_id      '_reflns_limit_index_m_3_min'
    

    _definition.update           2021-03-01
    _description.text
;
     Minimum value of the additional Miller indices appearing in
     _diffrn_reflns.index_m_* and _reflns.index_m_*.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
    _units.code                  none
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'index_limit_min'}]
    _name.category_id            reflns
    _name.object_id              limit_index_m_3_min
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  reflns

                   reflns.limit_index_m_3_min  =  f.m_min_list [ 2 ]
;

save_
_reflns.limit_index_m_4_min
CIF
Minimum value of the additional Miller indices appearing in
_diffrn_reflns.index_m_* and _reflns.index_m_*.
save_reflns.limit_index_m_4_min
    _definition.id               '_reflns.limit_index_m_4_min'
     loop_
       _alias.definition_id      '_reflns_limit_index_m_4_min'
    

    _definition.update           2021-03-01
    _description.text
;
     Minimum value of the additional Miller indices appearing in
     _diffrn_reflns.index_m_* and _reflns.index_m_*.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
    _units.code                  none
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'index_limit_min'}]
    _name.category_id            reflns
    _name.object_id              limit_index_m_4_min
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  reflns

                   reflns.limit_index_m_4_min  =  f.m_min_list [ 3 ]
;

save_
_reflns.limit_index_m_5_min
CIF
Minimum value of the additional Miller indices appearing in
_diffrn_reflns.index_m_* and _reflns.index_m_*.
save_reflns.limit_index_m_5_min
    _definition.id             '_reflns.limit_index_m_5_min'
     loop_
     _alias.definition_id      '_reflns_limit_index_m_5_min'
    

    _definition.update           2021-03-01
    _description.text
;
     Minimum value of the additional Miller indices appearing in
     _diffrn_reflns.index_m_* and _reflns.index_m_*.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
    _units.code                  none
     
# Following have been imported above:
#_import.get        [{"file":'templ_attr.cif' "save":'index_limit_min'}]
    _name.category_id            reflns
    _name.object_id              limit_index_m_5_min
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  reflns

                   reflns.limit_index_m_5_min  =  f.m_min_list [ 4 ]
;

save_
_reflns.limit_index_m_6_min
CIF
Minimum value of the additional Miller indices appearing in
_diffrn_reflns.index_m_* and _reflns.index_m_*.
save_reflns.limit_index_m_6_min
    _definition.id               '_reflns.limit_index_m_6_min'
     loop_
       _alias.definition_id      '_reflns_limit_index_m_6_min'
    

    _definition.update           2021-03-01
    _description.text
;
     Minimum value of the additional Miller indices appearing in
     _diffrn_reflns.index_m_* and _reflns.index_m_*.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
    _units.code                  none
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'index_limit_min'}]
    _name.category_id            reflns
    _name.object_id              limit_index_m_6_min
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  reflns

                   reflns.limit_index_m_6_min  =  f.m_min_list [ 5 ]
;

save_
_reflns.limit_index_m_7_min
CIF
Minimum value of the additional Miller indices appearing in
_diffrn_reflns.index_m_* and _reflns.index_m_*.
save_reflns.limit_index_m_7_min
    _definition.id               '_reflns.limit_index_m_7_min'
     loop_
       _alias.definition_id      '_reflns_limit_index_m_7_min'
    

    _definition.update           2021-03-01
    _description.text
;
     Minimum value of the additional Miller indices appearing in
     _diffrn_reflns.index_m_* and _reflns.index_m_*.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
    _units.code                  none
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'index_limit_min'}]
    _name.category_id            reflns
    _name.object_id              limit_index_m_7_min
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  reflns

                   reflns.limit_index_m_7_min  =  f.m_min_list [ 6 ]
;


save_
_reflns.limit_index_m_8_min
CIF
Minimum value of the additional Miller indices appearing in
_diffrn_reflns.index_m_* and _reflns.index_m_*.
save_reflns.limit_index_m_8_min
    _definition.id               '_reflns.limit_index_m_8_min'
     loop_
       _alias.definition_id      '_reflns_limit_index_m_8_min'
    

    _definition.update           2021-03-01
    _description.text
;
     Minimum value of the additional Miller indices appearing in
     _diffrn_reflns.index_m_* and _reflns.index_m_*.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
    _units.code                  none
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'index_limit_min'}]
    _name.category_id            reflns
    _name.object_id              limit_index_m_8_min
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  reflns

                   reflns.limit_index_m_8_min  =  f.m_min_list [ 7 ]
;

save_
SPACE_GROUP_SYMOP
CIF
The SPACE_GROUP_SYMOP category introduced in the symmetry CIF
dictionary (cif_sym.dic) is intended to replace the original
core SYMMETRY_EQUIV category. It contains information about the
symmetry operations of the space group. For modulated structures,
superspace-group descriptions may be included in the same
category, but include the _ssg_ flag to indicate their
dimensionality of > 3.
save_SPACE_GROUP_SYMOP

    _definition.id               SPACE_GROUP_SYMOP
    _definition.scope            Category
    _definition.class            Loop
    _definition.update           2014-06-27
    _description.text                   
;

      The SPACE_GROUP_SYMOP category introduced in the symmetry CIF
      dictionary (cif_sym.dic) is intended to replace the original
      core SYMMETRY_EQUIV category. It contains information about the
      symmetry operations of the space group. For modulated structures,
      superspace-group descriptions may be included in the same
      category, but include the _ssg_ flag to indicate their
      dimensionality of > 3.
;
    _name.category_id            MS_GROUP
    _name.object_id              SPACE_GROUP_SYMOP
    _category_key.name           '_space_group_symop.ssg_id'

save_
_space_group_symop.ssg_id
CIF
A numeric code identifying each entry in the
_space_group_symop_ssg_operation_algebraic list.
save_space_group_symop.ssg_id

    _definition.id               '_space_group_symop.ssg_id'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_space_group_symop_ssg_id' 
    _description.text                   
;

      A numeric code identifying each entry in the
      _space_group_symop_ssg_operation_algebraic list.
;
    _name.category_id            space_group_symop
    _name.object_id              ssg_id
    _type.purpose                Key
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Code

save_
_space_group_symop.ssg_operation_algebraic
CIF
A parsable string giving one of the symmetry operations of the
superspace group in algebraic form. These data will generally be
repeated in a loop. Use symbols as necessary according to
_cell_modulation_dimension.
All symmetry operations should be entered, including the
identity operation, those for lattice centring and that for
a centre of symmetry, if present. The symbolic notation for
coordinates is such that the identity operation is expressed
as x1,x2,x3,...,xn.
_space_group_symop_ssg_operation_algebraic must always be present
in a CIF corresponding to a modulated structure.
Example:
x1,-x2,x3,1/2+x4
save_space_group_symop.ssg_operation_algebraic

    _definition.id               '_space_group_symop.ssg_operation_algebraic'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_space_group_symop_ssg_operation_algebraic' 
    _description.text                   
;

      A parsable string giving one of the symmetry operations of the
      superspace group in algebraic form. These data will generally be
      repeated in a loop. Use symbols as necessary according to
      _cell_modulation_dimension.
      All symmetry operations should be entered, including the
      identity operation, those for lattice centring and that for
      a centre of symmetry, if present. The symbolic notation for
      coordinates is such that the identity operation is expressed
      as x1,x2,x3,...,xn.

      _space_group_symop_ssg_operation_algebraic must always be present
      in a CIF corresponding to a modulated structure.
;
    _name.category_id            space_group_symop
    _name.object_id              ssg_operation_algebraic
    _type.purpose                Composite
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Code
    loop_
    _description_example.case
            "x1,-x2,x3,1/2+x4" 

save_
ATOM_SITE
CIF
_atom_site.displace_modulation_flag
CIF
A code that signals whether the structural model includes the
modulation of the positional coordinates of a given atom site.
save_atom_site.displace_modulation_flag

    _definition.id               '_atom_site.displace_modulation_flag'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_displace_modulation_flag' 
    _description.text                   
;

      A code that signals whether the structural model includes the
      modulation of the positional coordinates of a given atom site.
;
    _name.category_id            atom_site
    _name.object_id              displace_modulation_flag
    _type.purpose                State
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Code
    loop_
    _enumeration_set.state
    _enumeration_set.detail
              yes           'displacive modulation'        
              y             'abbreviation for "yes"'       
              no            'no displacive modulation'     
              n             'abbreviation for "no"' 
    _enumeration.default         no

save_
_atom_site.occ_modulation_flag
CIF
A code that signals whether the structural model includes the
modulation of the occupation of a given atom site.
save_atom_site.occ_modulation_flag

    _definition.id               '_atom_site.occ_modulation_flag'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_occ_modulation_flag' 
    _description.text                   
;

      A code that signals whether the structural model includes the
      modulation of the occupation of a given atom site.
;
    _name.category_id            atom_site
    _name.object_id              occ_modulation_flag
    _type.purpose                State
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Code
    loop_
    _enumeration_set.state
    _enumeration_set.detail
              yes           'occupational modulation'      
              y             'abbreviation for "yes"'       
              no            'no occupational modulation'   
              n             'abbreviation for "no"' 
    _enumeration.default         no

save_
_atom_site.subsystem_code
CIF
A code that links a given atom or rigid-group site to one of the
subsystems present in a composite. This code provides an
alternative description for composites which is less explicit
than that based on linked data blocks (see the description in
this dictionary of audit_link.*). It must match one of
the labels specified for _cell_subsystem.code.
save_atom_site.subsystem_code

    _definition.id               '_atom_site.subsystem_code'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_subsystem_code' 
    _description.text                   
;

      A code that links a given atom or rigid-group site to one of the
      subsystems present in a composite. This code provides an
      alternative description for composites which is less explicit
      than that based on linked data blocks (see the description in
      this dictionary of audit_link.*). It must match one of
      the labels specified for _cell_subsystem.code.
;
    _name.category_id            atom_site
    _name.object_id              subsystem_code
    _name.linked_item_id         '_cell_subsystem.code'
    _type.purpose                Link
    _type.source                 Related
    _type.container              Single
    _type.contents               Code

save_
_atom_site.U_modulation_flag
CIF
A code that signals whether the structural model includes the
modulation of the ADP of a given atom site.
save_atom_site.U_modulation_flag

    _definition.id               '_atom_site.U_modulation_flag'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_atom_site_U_modulation_flag' 
    _description.text                   
;

      A code that signals whether the structural model includes the
      modulation of the ADP of a given atom site.
;
    _name.category_id            atom_site
    _name.object_id              U_modulation_flag
    _type.purpose                State
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Code
    loop_
    _enumeration_set.state
    _enumeration_set.detail
              yes           'modulation of ADP'       
              y             'abbreviation for "yes"'       
              no            'no modulation of ADP'    
              n             'abbreviation for "no"' 
    _enumeration.default         no

save_
CELL
CIF
_cell.commen_supercell_matrix
CIF
For commensurately modulated structures the transformation, T,
from the crystallographic axes of the reference structure
to the supercell generated by the wave vectors expressed as
(a~s~,b~s~,c~s~) = (a~r~,b~r~,c~r~)T,
where (a~s~,b~s~,c~s~) and (a~r~,b~r~,c~r~) are the crystallographic
axes of the supercell and the reference cell, respectively.
save_cell.commen_supercell_matrix
    _definition.id               '_cell.commen_supercell_matrix'
    _definition.update           2019-04-01
    _description.text                   
;

      For commensurately modulated structures the transformation, T,  
      from the crystallographic axes of the reference structure
      to the supercell generated by the wave vectors expressed as

                (a~s~,b~s~,c~s~) = (a~r~,b~r~,c~r~)T,

      where (a~s~,b~s~,c~s~) and (a~r~,b~r~,c~r~) are the crystallographic
      axes of the supercell and the reference cell, respectively.
;
    _name.category_id            cell
    _name.object_id              commen_supercell_matrix
    _type.purpose                Number
    _type.source                 Assigned
    _type.container              Matrix
    _type.contents               Integer
    _type.dimension              '[3,3]'
    _enumeration.default         [[1 0 0]
                                  [0 1 0]
                                  [0 0 1]]

save_
_cell.modulation_dimension
CIF
Number of additional reciprocal vectors needed to index the
whole diffraction pattern using integer Miller indices.
save_cell.modulation_dimension

    _definition.id               '_cell.modulation_dimension'
    _definition.update           2019-09-25
    loop_
      _alias.definition_id
          '_cell_modulation_dimension' 
    _description.text                   
;

      Number of additional reciprocal vectors needed to index the
      whole diffraction pattern using integer Miller indices.
;
    _name.category_id            cell
    _name.object_id              modulation_dimension
    _type.purpose                Number
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Integer
    _enumeration.range           1:8

save_
_cell.reciprocal_basis_description
CIF
Definition of the higher-dimensional basis with respect to which
the Miller indices are defined. The three-dimensional basis used
to index the additional wave vectors should be clearly indicated.
Examples:
a*,b*,c* (reciprocal basis spanning the lattice of main
          reflections) and q (incommensurate with respect to a*,b*,c*)
The diffraction pattern can be indexed with four integers based
          on the reciprocal vectors a*~1~=a*~11~, a*~2~=a*~12~,
          a*~3~=a*~13~, a*~4~=a*~21~. a*~1j~ (j=1,2,3) index the
          main reflections of the 1st subsystem. a*~21~ is incommensurate
          with a*~11~.
save_cell.reciprocal_basis_description

    _definition.id               '_cell.reciprocal_basis_description'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_cell_reciprocal_basis_description' 
    _description.text                   
;

      Definition of the higher-dimensional basis with respect to which
      the Miller indices are defined. The three-dimensional basis used
      to index the additional wave vectors should be clearly indicated.
;
    _name.category_id            cell
    _name.object_id              reciprocal_basis_description
    _type.purpose                Describe
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Text
    loop_
    _description_example.case
    _description_example.detail
            
;         a*,b*,c* (reciprocal basis spanning the lattice of main
          reflections) and q (incommensurate with respect to a*,b*,c*)
;                                'Typical choice for a one-dimensional incommensurate structure.' 
            
;         The diffraction pattern can be indexed with four integers based
          on the reciprocal vectors a*~1~=a*~11~, a*~2~=a*~12~,
          a*~3~=a*~13~, a*~4~=a*~21~. a*~1j~ (j=1,2,3) index the
          main reflections of the 1st subsystem. a*~21~ is incommensurate
          with a*~11~.
;                                
; Common choice for a misfit layer compound composed of two
          subsystems that have in common two reciprocal vectors. Extracted
          from van Smaalen [Crystallogr. Rev. (1995), 4, 79-202].
; 

save_
DIFFRN_REFLNS
CIF
_diffrn_reflns.limit_index_m_max_list
CIF
Maximum values of the additional Miller indices
appearing in _diffrn_refln.index_m_list. The number of ranges must
match _cell.modulation_dimension. The order of the additional
indices must be consistent with the codes given in
_cell.wave_vector_seq_id.
save_diffrn_reflns.limit_index_m_max_list

    _definition.id               '_diffrn_reflns.limit_index_m_max_list'
    _definition.update           2019-04-01
    _description.text                   
;

      Maximum values of the additional Miller indices
      appearing in _diffrn_refln.index_m_list. The number of ranges must
      match _cell.modulation_dimension. The order of the additional
      indices must be consistent with the codes given in
      _cell.wave_vector_seq_id.
;
    _name.category_id            diffrn_reflns
    _name.object_id              limit_index_m_max_list
    _type.purpose                Number
    _type.source                 Assigned
    _type.container              List
    _type.contents               Integer
    _type.dimension              '[8]'
    loop_
      _method.purpose
      _method.expression
      Evaluation    
;
      With  m  as  diffrn_reflns

        temp.limit_index_m_max_list =

                  [ m.limit_index_m_1_max, m.limit_index_m_2_max, 
                    m.limit_index_m_3_max, m.limit_index_m_4_max, 
                    m.limit_index_m_5_max, m.limit_index_m_6_max, 
                    m.limit_index_m_7_max, m.limit_index_m_8_max ] 

      #Not meaningful indices are removed here
 
           diffrn_reflns.limit_index_m_max_list =                     
                   temp.limit_index_m_max_list[0:_cell.modulation_dimension  1]
; 

save_
_diffrn_reflns.limit_index_m_1_max
CIF
Maximum value of the additional Miller indices appearing in
_diffrn_reflns.index_m_* and _reflns.index_m_*.
save_diffrn_reflns.limit_index_m_1_max
    _definition.id               '_diffrn_reflns.limit_index_m_1_max'
     loop_
       _alias.definition_id      '_diffrn_reflns_limit_index_m_1_max'
    

    _definition.update           2021-03-01
    _description.text
;
     Maximum value of the additional Miller indices appearing in
     _diffrn_reflns.index_m_* and _reflns.index_m_*.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
    _units.code                  none
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'index_limit_max'}]
    _name.category_id            diffrn_reflns
    _name.object_id              limit_index_m_1_max
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  diffrn_reflns

              diffrn_reflns.limit_index_m_1_max  =  r.limit_index_m_max_list [ 0 ]
;
     
save_
_diffrn_reflns.limit_index_m_2_max
CIF
Maximum value of the additional Miller indices appearing in
_diffrn_reflns.index_m_* and _reflns.index_m_*.
save_diffrn_reflns.limit_index_m_2_max
    _definition.id               '_diffrn_reflns.limit_index_m_2_max'
     loop_
       _alias.definition_id      '_diffrn_reflns_limit_index_m_2_max'
    

    _definition.update           2021-03-01
    _description.text
;
     Maximum value of the additional Miller indices appearing in
     _diffrn_reflns.index_m_* and _reflns.index_m_*.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
    _units.code                  none
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'index_limit_max'}]
    _name.category_id            diffrn_reflns
    _name.object_id              limit_index_m_2_max
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  diffrn_reflns

              diffrn_reflns.limit_index_m_2_max  =  r.limit_index_m_max_list [ 1 ]
;
     
save_
_diffrn_reflns.limit_index_m_3_max
CIF
Maximum value of the additional Miller indices appearing in
_diffrn_reflns.index_m_* and _reflns.index_m_*.
save_diffrn_reflns.limit_index_m_3_max
    _definition.id               '_diffrn_reflns.limit_index_m_3_max'
     loop_
       _alias.definition_id      '_diffrn_reflns_limit_index_m_3_max'
    

    _definition.update           2021-03-01
    _description.text
;
     Maximum value of the additional Miller indices appearing in
     _diffrn_reflns.index_m_* and _reflns.index_m_*.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
    _units.code                  none
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'index_limit_max'}]
    _name.category_id            diffrn_reflns
    _name.object_id              limit_index_m_3_max
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  diffrn_reflns

              diffrn_reflns.limit_index_m_3_max  =  r.limit_index_m_max_list [ 2 ]
;
     
save_
_diffrn_reflns.limit_index_m_4_max
CIF
Maximum value of the additional Miller indices appearing in
_diffrn_reflns.index_m_* and _reflns.index_m_*.
save_diffrn_reflns.limit_index_m_4_max
    _definition.id               '_diffrn_reflns.limit_index_m_4_max'
     loop_
       _alias.definition_id      '_diffrn_reflns_limit_index_m_4_max'
    

    _definition.update           2021-03-01
    _description.text
;
     Maximum value of the additional Miller indices appearing in
     _diffrn_reflns.index_m_* and _reflns.index_m_*.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
    _units.code                  none
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'index_limit_max'}]
    _name.category_id            diffrn_reflns
    _name.object_id              limit_index_m_4_max
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  diffrn_reflns

              diffrn_reflns.limit_index_m_4_max  =  r.limit_index_m_max_list [ 3 ]
;
     
save_
_diffrn_reflns.limit_index_m_5_max
CIF
Maximum value of the additional Miller indices appearing in
_diffrn_reflns.index_m_* and _reflns.index_m_*.
save_diffrn_reflns.limit_index_m_5_max
    _definition.id               '_diffrn_reflns.limit_index_m_5_max'
     loop_
       _alias.definition_id      '_diffrn_reflns_limit_index_m_5_max'
    

    _definition.update           2021-03-01
    _description.text
;
     Maximum value of the additional Miller indices appearing in
     _diffrn_reflns.index_m_* and _reflns.index_m_*.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
    _units.code                  none
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'index_limit_max'}]
    _name.category_id            diffrn_reflns
    _name.object_id              limit_index_m_5_max
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  diffrn_reflns

              diffrn_reflns.limit_index_m_5_max  =  r.limit_index_m_max_list [ 4 ]
;
     
save_
_diffrn_reflns.limit_index_m_6_max
CIF
Maximum value of the additional Miller indices appearing in
_diffrn_reflns.index_m_* and _reflns.index_m_*.
save_diffrn_reflns.limit_index_m_6_max
    _definition.id               '_diffrn_reflns.limit_index_m_6_max'
     loop_
       _alias.definition_id      '_diffrn_reflns_limit_index_m_6_max'
    

    _definition.update           2021-03-01
    _description.text
;
     Maximum value of the additional Miller indices appearing in
     _diffrn_reflns.index_m_* and _reflns.index_m_*.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
    _units.code                  none
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'index_limit_max'}]
    _name.category_id            diffrn_reflns
    _name.object_id              limit_index_m_6_max
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  diffrn_reflns

              diffrn_reflns.limit_index_m_6_max  =  r.limit_index_m_max_list [ 5 ]
;
     
save_
_diffrn_reflns.limit_index_m_7_max
CIF
Maximum value of the additional Miller indices appearing in
_diffrn_reflns.index_m_* and _reflns.index_m_*.
save_diffrn_reflns.limit_index_m_7_max
    _definition.id               '_diffrn_reflns.limit_index_m_7_max'
     loop_
       _alias.definition_id      '_diffrn_reflns_limit_index_m_7_max'
    

    _definition.update           2021-03-01
    _description.text
;
     Maximum value of the additional Miller indices appearing in
     _diffrn_reflns.index_m_* and _reflns.index_m_*.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
    _units.code                  none
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'index_limit_max'}]
    _name.category_id            diffrn_reflns
    _name.object_id              limit_index_m_7_max
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  diffrn_reflns

              diffrn_reflns.limit_index_m_7_max  =  r.limit_index_m_max_list [ 6 ]
;
     
save_
_diffrn_reflns.limit_index_m_8_max
CIF
Maximum value of the additional Miller indices appearing in
_diffrn_reflns.index_m_* and _reflns.index_m_*.
save_diffrn_reflns.limit_index_m_8_max
    _definition.id               '_diffrn_reflns.limit_index_m_8_max'
     loop_
       _alias.definition_id      '_diffrn_reflns_limit_index_m_8_max'
    

    _definition.update           2021-03-01
    _description.text
;
     Maximum value of the additional Miller indices appearing in
     _diffrn_reflns.index_m_* and _reflns.index_m_*.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
    _units.code                  none
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'index_limit_max'}]
    _name.category_id            diffrn_reflns
    _name.object_id              limit_index_m_8_max
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  diffrn_reflns

              diffrn_reflns.limit_index_m_8_max  =  r.limit_index_m_max_list [ 7 ]
;
     
save_
_diffrn_reflns.limit_index_m_min_list
CIF
Minimum values of the additional Miller indices
appearing in _diffrn_refln.index_m_list. The number of ranges must
match _cell.modulation_dimension. The order of the additional
indices must be consistent with the codes given in
_cell.wave_vector_seq_id.
save_diffrn_reflns.limit_index_m_min_list

    _definition.id               '_diffrn_reflns.limit_index_m_min_list'
    _definition.update           2019-04-01
    _description.text                   
;

      Minimum values of the additional Miller indices
      appearing in _diffrn_refln.index_m_list. The number of ranges must
      match _cell.modulation_dimension. The order of the additional
      indices must be consistent with the codes given in
      _cell.wave_vector_seq_id.
;
    _name.category_id            diffrn_reflns
    _name.object_id              limit_index_m_min_list
    _type.purpose                Number
    _type.source                 Assigned
    _type.container              List
    _type.contents               Integer
    _type.dimension              '[8]'
    loop_
      _method.purpose
      _method.expression
      Evaluation    
;
      With  m  as  diffrn_reflns

        temp.limit_index_m_min_list =

                  [ m.limit_index_m_1_min, m.limit_index_m_2_min,
                    m.limit_index_m_3_min, m.limit_index_m_4_min,
                    m.limit_index_m_5_min, m.limit_index_m_6_min,
                    m.limit_index_m_7_min, m.limit_index_m_8_min ]

      #Not meaningful indices are removed here
 
           diffrn_reflns.limit_index_m_min_list =                     
                   temp.limit_index_m_min_list[0:_cell.modulation_dimension  1]
; 

save_
_diffrn_reflns.limit_index_m_1_min
CIF
Minimum value of the additional Miller indices appearing in
_diffrn_reflns.index_m_* and _reflns.index_m_*.
save_diffrn_reflns.limit_index_m_1_min
    _definition.id               '_diffrn_reflns.limit_index_m_1_min'
     loop_
       _alias.definition_id      '_diffrn_reflns_limit_index_m_1_min'
    

    _definition.update           2021-03-01
    _description.text
;
     Minimum value of the additional Miller indices appearing in
     _diffrn_reflns.index_m_* and _reflns.index_m_*.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
    _units.code                  none
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'index_limit_min'}]
    _name.category_id            diffrn_reflns
    _name.object_id              limit_index_m_1_min
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  diffrn_reflns

              diffrn_reflns.limit_index_m_1_min  =  r.limit_index_m_min_list [ 0 ]
;
     
save_
_diffrn_reflns.limit_index_m_2_min
CIF
Minimum value of the additional Miller indices appearing in
_diffrn_reflns.index_m_* and _reflns.index_m_*.
save_diffrn_reflns.limit_index_m_2_min
    _definition.id               '_diffrn_reflns.limit_index_m_2_min'
     loop_
       _alias.definition_id      '_diffrn_reflns_limit_index_m_2_min'
    

    _definition.update           2021-03-01
    _description.text
;
     Minimum value of the additional Miller indices appearing in
     _diffrn_reflns.index_m_* and _reflns.index_m_*.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
    _units.code                  none
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'index_limit_min'}]
    _name.category_id            diffrn_reflns
    _name.object_id              limit_index_m_2_min
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  diffrn_reflns

              diffrn_reflns.limit_index_m_2_min  =  r.limit_index_m_min_list [ 1 ]
;
     
save_
_diffrn_reflns.limit_index_m_3_min
CIF
Minimum value of the additional Miller indices appearing in
_diffrn_reflns.index_m_* and _reflns.index_m_*.
save_diffrn_reflns.limit_index_m_3_min
    _definition.id               '_diffrn_reflns.limit_index_m_3_min'
     loop_
       _alias.definition_id      '_diffrn_reflns_limit_index_m_3_min'
    

    _definition.update           2021-03-01
    _description.text
;
     Minimum value of the additional Miller indices appearing in
     _diffrn_reflns.index_m_* and _reflns.index_m_*.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
    _units.code                  none
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'index_limit_min'}]
    _name.category_id            diffrn_reflns
    _name.object_id              limit_index_m_3_min
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  diffrn_reflns

              diffrn_reflns.limit_index_m_3_min  =  r.limit_index_m_min_list [ 2 ]
;
     
save_
_diffrn_reflns.limit_index_m_4_min
CIF
Minimum value of the additional Miller indices appearing in
_diffrn_reflns.index_m_* and _reflns.index_m_*.
save_diffrn_reflns.limit_index_m_4_min
    _definition.id               '_diffrn_reflns.limit_index_m_4_min'
     loop_
       _alias.definition_id      '_diffrn_reflns_limit_index_m_4_min'
    

    _definition.update           2021-03-01
    _description.text
;
     Minimum value of the additional Miller indices appearing in
     _diffrn_reflns.index_m_* and _reflns.index_m_*.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
    _units.code                  none
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'index_limit_min'}]
    _name.category_id            diffrn_reflns
    _name.object_id              limit_index_m_4_min
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  diffrn_reflns

              diffrn_reflns.limit_index_m_4_min  =  r.limit_index_m_min_list [ 3 ]
;
     
save_
_diffrn_reflns.limit_index_m_5_min
CIF
Minimum value of the additional Miller indices appearing in
_diffrn_reflns.index_m_* and _reflns.index_m_*.
save_diffrn_reflns.limit_index_m_5_min
    _definition.id               '_diffrn_reflns.limit_index_m_5_min'
     loop_
       _alias.definition_id      '_diffrn_reflns_limit_index_m_5_min'
    

    _definition.update           2021-03-01
    _description.text
;
     Minimum value of the additional Miller indices appearing in
     _diffrn_reflns.index_m_* and _reflns.index_m_*.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
    _units.code                  none
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'index_limit_min'}]
    _name.category_id            diffrn_reflns
    _name.object_id              limit_index_m_5_min
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  diffrn_reflns

              diffrn_reflns.limit_index_m_5_min  =  r.limit_index_m_min_list [ 4 ]
;
     
save_
_diffrn_reflns.limit_index_m_6_min
CIF
Minimum value of the additional Miller indices appearing in
_diffrn_reflns.index_m_* and _reflns.index_m_*.
save_diffrn_reflns.limit_index_m_6_min
    _definition.id               '_diffrn_reflns.limit_index_m_6_min'
     loop_
       _alias.definition_id      '_diffrn_reflns_limit_index_m_6_min'
    

    _definition.update           2021-03-01
    _description.text
;
     Minimum value of the additional Miller indices appearing in
     _diffrn_reflns.index_m_* and _reflns.index_m_*.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
    _units.code                  none
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'index_limit_min'}]
    _name.category_id            diffrn_reflns
    _name.object_id              limit_index_m_6_min
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  diffrn_reflns

              diffrn_reflns.limit_index_m_6_min  =  r.limit_index_m_min_list [ 5 ]
;
     
save_
_diffrn_reflns.limit_index_m_7_min
CIF
Minimum value of the additional Miller indices appearing in
_diffrn_reflns.index_m_* and _reflns.index_m_*.
save_diffrn_reflns.limit_index_m_7_min
    _definition.id               '_diffrn_reflns.limit_index_m_7_min'
     loop_
       _alias.definition_id      '_diffrn_reflns_limit_index_m_7_min'
    

    _definition.update           2021-03-01
    _description.text
;
     Minimum value of the additional Miller indices appearing in
     _diffrn_reflns.index_m_* and _reflns.index_m_*.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
    _units.code                  none
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'index_limit_min'}]
    _name.category_id            diffrn_reflns
    _name.object_id              limit_index_m_7_min
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  diffrn_reflns

              diffrn_reflns.limit_index_m_7_min  =  r.limit_index_m_min_list [ 6 ]
;
     
save_
_diffrn_reflns.limit_index_m_8_min
CIF
Minimum value of the additional Miller indices appearing in
_diffrn_reflns.index_m_* and _reflns.index_m_*.
save_diffrn_reflns.limit_index_m_8_min
    _definition.id               '_diffrn_reflns.limit_index_m_8_min'
     loop_
       _alias.definition_id      '_diffrn_reflns_limit_index_m_8_min'
    

    _definition.update           2021-03-01
    _description.text
;
     Minimum value of the additional Miller indices appearing in
     _diffrn_reflns.index_m_* and _reflns.index_m_*.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
    _units.code                  none
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'index_limit_min'}]
    _name.category_id            diffrn_reflns
    _name.object_id              limit_index_m_8_min
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  r  as  diffrn_reflns

              diffrn_reflns.limit_index_m_8_min  =  r.limit_index_m_min_list [ 7 ]
;
     
save_
_diffrn_reflns.satellite_order_max
CIF
Maximum order of observed satellites.
save_diffrn_reflns.satellite_order_max

    _definition.id               '_diffrn_reflns.satellite_order_max'
    _definition.update           2019-09-25
    loop_
      _alias.definition_id
          '_diffrn_reflns_satellite_order_max' 
    _description.text                   
;

      Maximum order of observed satellites.
;
    _name.category_id            diffrn_reflns
    _name.object_id              satellite_order_max
    _type.purpose                Number
    _type.source                 Derived
    _type.container              Single
    _type.contents               Integer
    _enumeration.range           0:

save_
EXPTL_CRYSTAL
CIF
_exptl_crystal.type_of_structure
CIF
The type of structure. This is used to check the consistency of a
CIF: the data blocks that are expected and/or certain characteristic
parameters depend on whether the material is classified as crystalline
(periodic in three dimensions), modulated or composite.
save_exptl_crystal.type_of_structure

    _definition.id               '_exptl_crystal.type_of_structure'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_exptl_crystal_type_of_structure' 
    _description.text                   
;

     The type of structure. This is used to check the consistency of a
     CIF: the data blocks that are expected and/or certain characteristic
     parameters depend on whether the material is classified as crystalline
     (periodic in three dimensions), modulated or composite.
;
    _name.category_id            exptl_crystal
    _name.object_id              type_of_structure
    _type.purpose                State
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Code
    loop_
    _enumeration_set.state
    _enumeration_set.detail
              cryst         'crystalline structure'        
              mod           'modulated structure'          
              comp          'composite (misfit) structure' 
    _enumeration.default         cryst

save_
EXPTL_CRYSTAL_FACE
CIF
_exptl_crystal_face.index_m_list
CIF
Additional Miller indices of the crystal face associated with the
value _exptl_crystal_face_perp_dist when the face is indexed
using a multidimensional scheme. The total number of indices must
match (_cell.modulation_dimension + 3). The order of the indices
must be consistent with the codes given in
_cell_wave_vector.seq_id.
save_exptl_crystal_face.index_m_list

    _definition.id               '_exptl_crystal_face.index_m_list'
    _definition.update           2019-04-01
    _description.text                   
;

      Additional Miller indices of the crystal face associated with the
      value _exptl_crystal_face_perp_dist when the face is indexed
      using a multidimensional scheme. The total number of indices must
      match (_cell.modulation_dimension + 3). The order of the indices
      must be consistent with the codes given in
      _cell_wave_vector.seq_id.
;
    _name.category_id            exptl_crystal_face
    _name.object_id              index_m_list
    _type.purpose                Number
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Integer
    _type.dimension              '[8]'
    loop_
      _method.purpose
      _method.expression
      Evaluation    
;
      With  r  as  exptl_crystal_face

           temp.index_m_list  =  

                  [ r.index_m_1, r.index_m_2, r.index_m_3, r.index_m_4,
                    r.index_m_5, r.index_m_6, r.index_m_7, r.index_m_8 ]
      #Not meaningful indices are removed here
 
           exptl_crystal_face.index_m_list =                     
                   temp.index_m_list[0:_cell.modulation_dimension  1]
; 

save_
_exptl_crystal_face.index_m_1
CIF
Additional Miller indices needed to write the reciprocal vector
in the definition of _diffrn_refln_index.m_list,
_diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
save_exptl_crystal_face.index_m_1
    _definition.id               '_exptl_crystal_face.index_m_1'
     loop_
       _alias.definition_id      '_exptl_crystal_face_index_m_1'
    

    _definition.update           2014-06-27
    _description.text
;
     Additional Miller indices needed to write the reciprocal vector
     in the definition of _diffrn_refln_index.m_list,
     _diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'ms_index'}]
    _name.category_id            exptl_crystal_face
    _name.object_id              index_m_1
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  f  as  exptl_crystal_face

              exptl_crystal_face.index_m_1  =  f.index_m_list [ 0 ]
;
     
save_
_exptl_crystal_face.index_m_2
CIF
Additional Miller indices needed to write the reciprocal vector
in the definition of _diffrn_refln_index.m_list,
_diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
save_exptl_crystal_face.index_m_2
    _definition.id               '_exptl_crystal_face.index_m_2'
     loop_
       _alias.definition_id      '_exptl_crystal_face_index_m_2'
    

    _definition.update           2014-06-27
    _description.text
;
     Additional Miller indices needed to write the reciprocal vector
     in the definition of _diffrn_refln_index.m_list,
     _diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'ms_index'}]
    _name.category_id            exptl_crystal_face
    _name.object_id              index_m_2
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  f  as  exptl_crystal_face

              exptl_crystal_face.index_m_2  =  f.index_m_list [ 1 ]
;
     
save_
_exptl_crystal_face.index_m_3
CIF
Additional Miller indices needed to write the reciprocal vector
in the definition of _diffrn_refln_index.m_list,
_diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
save_exptl_crystal_face.index_m_3
    _definition.id               '_exptl_crystal_face.index_m_3'
     loop_
       _alias.definition_id      '_exptl_crystal_face_index_m_3'
    

    _definition.update           2014-06-27
    _description.text
;
     Additional Miller indices needed to write the reciprocal vector
     in the definition of _diffrn_refln_index.m_list,
     _diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'ms_index'}]
    _name.category_id            exptl_crystal_face
    _name.object_id              index_m_3
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  f  as  exptl_crystal_face

              exptl_crystal_face.index_m_3  =  f.index_m_list [ 2 ]
;
     
save_
_exptl_crystal_face.index_m_4
CIF
Additional Miller indices needed to write the reciprocal vector
in the definition of _diffrn_refln_index.m_list,
_diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
save_exptl_crystal_face.index_m_4
    _definition.id               '_exptl_crystal_face.index_m_4'
     loop_
       _alias.definition_id      '_exptl_crystal_face_index_m_4'
    

    _definition.update           2014-06-27
    _description.text
;
     Additional Miller indices needed to write the reciprocal vector
     in the definition of _diffrn_refln_index.m_list,
     _diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'ms_index'}]
    _name.category_id            exptl_crystal_face
    _name.object_id              index_m_4
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  f  as  exptl_crystal_face

              exptl_crystal_face.index_m_4  =  f.index_m_list [ 3 ]
;
     
save_
_exptl_crystal_face.index_m_5
CIF
Additional Miller indices needed to write the reciprocal vector
in the definition of _diffrn_refln_index.m_list,
_diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
save_exptl_crystal_face.index_m_5
    _definition.id               '_exptl_crystal_face.index_m_5'
     loop_
       _alias.definition_id      '_exptl_crystal_face_index_m_5'
    

    _definition.update           2014-06-27
    _description.text
;
     Additional Miller indices needed to write the reciprocal vector
     in the definition of _diffrn_refln_index.m_list,
     _diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'ms_index'}]
    _name.category_id            exptl_crystal_face
    _name.object_id              index_m_5
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  f  as  exptl_crystal_face

              exptl_crystal_face.index_m_5  =  f.index_m_list [ 4 ]
;
     
save_
_exptl_crystal_face.index_m_6
CIF
Additional Miller indices needed to write the reciprocal vector
in the definition of _diffrn_refln_index.m_list,
_diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
save_exptl_crystal_face.index_m_6
    _definition.id               '_exptl_crystal_face.index_m_6'
     loop_
       _alias.definition_id      '_exptl_crystal_face_index_m_6'
    

    _definition.update           2014-06-27
    _description.text
;
     Additional Miller indices needed to write the reciprocal vector
     in the definition of _diffrn_refln_index.m_list,
     _diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'ms_index'}]
    _name.category_id            exptl_crystal_face
    _name.object_id              index_m_6
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  f  as  exptl_crystal_face

              exptl_crystal_face.index_m_6  =  f.index_m_list [ 5 ]
;
     
save_
_exptl_crystal_face.index_m_7
CIF
Additional Miller indices needed to write the reciprocal vector
in the definition of _diffrn_refln_index.m_list,
_diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
save_exptl_crystal_face.index_m_7
    _definition.id               '_exptl_crystal_face.index_m_7'
     loop_
       _alias.definition_id      '_exptl_crystal_face_index_m_7'
    

    _definition.update           2014-06-27
    _description.text
;
     Additional Miller indices needed to write the reciprocal vector
     in the definition of _diffrn_refln_index.m_list,
     _diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'ms_index'}]
    _name.category_id            exptl_crystal_face
    _name.object_id              index_m_7
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  f  as  exptl_crystal_face

              exptl_crystal_face.index_m_7  =  f.index_m_list [ 6 ]
;
     
save_
_exptl_crystal_face.index_m_8
CIF
Additional Miller indices needed to write the reciprocal vector
in the definition of _diffrn_refln_index.m_list,
_diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
save_exptl_crystal_face.index_m_8
    _definition.id               '_exptl_crystal_face.index_m_8'
     loop_
       _alias.definition_id      '_exptl_crystal_face_index_m_8'
    

    _definition.update           2014-06-27
    _description.text
;
     Additional Miller indices needed to write the reciprocal vector
     in the definition of _diffrn_refln_index.m_list,
     _diffrn_standard_refln.index_m_list, _exptl_crystal_face.index_m_list.
;
    _type.purpose                Number
    _type.source                 Recorded
    _type.container              Single
    _type.contents               Integer
     
# Following have been imported above:
#_import.get                  [{"file":'templ_attr.cif' "save":'ms_index'}]
    _name.category_id            exptl_crystal_face
    _name.object_id              index_m_8
    loop_
      _method.purpose
      _method.expression
       Evaluation    
;
       With  f  as  exptl_crystal_face

              exptl_crystal_face.index_m_8  =  f.index_m_list [ 7 ]
;

save_
FUNCTION
CIF
_function.Crenel
CIF
The function:
o = Crenel(c, w, x4)
returns, 1 if x4 belongs to the interval [c-w/2,c+w/2], 0 otherwise.
x4 is a particular value of the internal coordinate, c is the centre of a
crenel function in internal space and w is its width. The use of this
function is restricted to one-dimensional modulated structures.
save_function.Crenel

    _definition.id               '_function.Crenel'
    _definition.update           2014-06-27
    _description.text
;

      The function:

                o = Crenel(c, w, x4)

      returns, 1 if x4 belongs to the interval [c-w/2,c+w/2], 0 otherwise. 
      x4 is a particular value of the internal coordinate, c is the centre of a
      crenel function in internal space and w is its width. The use of this
      function is restricted to one-dimensional modulated structures.     
;
    _name.category_id            function
    _name.object_id              Crenel
    _type.purpose                Number
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    loop_
      _method.purpose
      _method.expression 
      Evaluation
;
      Function Crenel( c  :[Single, Real],
                       w  :[Single, Real],
                       x4 :[Single,Real] )
      {
      
        Crenel = 0.0 

        If ( c-w/2.0 <= x4 and x4 <= c+w/2.0 ) Crenel = 1.0

      }

# Heavier alternative: only atom label and x4

      Function Crenel( atlab :[Single, Code],
                       x4    :[Single,Real] )
      {
      
        Crenel = -1.0  # Atom not in list of crenel modulation or null crenel width

        Loop o as atom_site_occ_special_func {

          If (atlab == o.atom_site_label and o.crenel_w != 0.0){

            Crenel = 0.0

            If ( o.crenel_c-o.crenel_w/2.0 <= x4 and 
                                      x4 <= o.crenel_c+o.crenel_w/2.0 ) Crenel = 1.0

            Break

          } # End of If

        }   # End of Loop

      }
;

save_
_function.Sawtooth
CIF
The function:
s = Sawtooth(a, c, w, x4)
returns
2* a * ((x4-c)/w)
for x4 belonging to the interval [c-(w/2), c+(w/2)], where a is the array
containing the the amplitudes (maximum displacements) along each
crystallographic axis, w is the width of the sawtooth, x4 is a particular value
of the internal coordinate and c is the centre of the function in
internal space. The use of this function is restricted to one-dimensional
modulated structures.
save_function.Sawtooth

    _definition.id               '_function.Sawtooth'
    _definition.update           2019-04-01
    _description.text
;

      The function:

                s = Sawtooth(a, c, w, x4)

      returns

                2* a * ((x4-c)/w)

      for x4 belonging to the interval [c-(w/2), c+(w/2)], where a is the array
      containing the the amplitudes (maximum displacements) along each 
      crystallographic axis, w is the width of the sawtooth, x4 is a particular value 
      of the internal coordinate and c is the centre of the function in
      internal space. The use of this function is restricted to one-dimensional 
      modulated structures.     
;
    _name.category_id            function
    _name.object_id              Sawtooth
    _type.purpose                Number
    _type.source                 Assigned
    _type.container              Array
    _type.dimension              '[3]'
    _type.contents               Real
    loop_
      _method.purpose
      _method.expression 
      Evaluation
;
      Function Sawtooth( a  :[Array, Real] ,
                         c  :[Single, Real],
                         w  :[Single, Real],
                         x4 :[Single,Real] )
      {
      
        Sawtooth = [0.0,0.0,0.0]

        If ( c-w/2.0 <= x4 and x4 <= c+w/2.0 ) Sawtooth = 2*a*(x4-c)/w

      }

# Heavier alternative: only atom label and x4

      Function Sawtooth( atlab :[Single, Code],
                         x4    :[Single,Real] )
      {
# Atom not in list of sawtooth modulation or null sawtooth width      
        Sawtooth = [-1.0,-1.0,-1.0]  

        Loop d as atom_site_displace_special_func {

          If (atlab == d.atom_site_label and d.sawtooth_w != 0.0){

            Sawtooth = [0.0,0.0,0.0]

            If ( d.sawtooth_c-d.sawtooth_w/2.0 <= x4 and 
                                            x4 <= d.sawtooth_c+d.sawtooth_w/2.0 ) 
             
                     Sawtooth = 2*d.sawtooth_axyz*(x4- d.sawtooth_c)/d.sawtooth_w

            Break

          } # End of If

        }   # End of Loop

      }
;

save_
_function.Zigzag
CIF
The function:
 z = Zigzag(a, c, w, x4)
returns
 2* a * ((x4-c)/w)
for x4 belonging to the interval [c-(w/2), c+(w/2)] or
-2* a * ((x4-c)/w)
for x4 in the interval [c+1/2-(w/2), c+1/2+(w/2)]
where a is the array containing the the amplitudes (maximum displacements)
along each crystallographic axis, w is the width of the zigzag, x4 is a
particular value of the internal coordinate and c is the centre of the function
in internal space. The use of this function is restricted to one-dimensional
modulated structures.
save_function.Zigzag

    _definition.id               '_function.Zigzag'
    _definition.update           2019-04-01
    _description.text
;

      The function:

                z = Zigzag(a, c, w, x4)

      returns

                2* a * ((x4-c)/w)

      for x4 belonging to the interval [c-(w/2), c+(w/2)] or

               -2* a * ((x4-c)/w)

      for x4 in the interval [c+1/2-(w/2), c+1/2+(w/2)] 

      where a is the array containing the the amplitudes (maximum displacements)   
      along each crystallographic axis, w is the width of the zigzag, x4 is a 
      particular value of the internal coordinate and c is the centre of the function 
      in internal space. The use of this function is restricted to one-dimensional 
      modulated structures.     
;
    _name.category_id            function
    _name.object_id              Zigzag
    _type.purpose                Number
    _type.source                 Assigned
    _type.container              Array
    _type.dimension              '[3]'
    _type.contents               Real
    loop_
      _method.purpose
      _method.expression 
      Evaluation
;
      Function Zigzag( a  :[Array, Real] ,
                       c  :[Single, Real],
                       w  :[Single, Real],
                       x4 :[Single,Real] )
      {
      
        Zigzag = [0.0,0.0,0.0]

        If ( c-w/2.0 <= x4 and x4 <= c+w/2.0 ) Zigzag = 2*a*(x4-c)/w

        Else if ( c+0.5-w/2.0 <= x4 and x4 <= c+0.5+w/2.0 ) Zigzag = -2*a*(x4-c)/w


      }

# Heavier alternative: only atom label and x4

      Function Zigzag( atlab :[Single, Code],
                         x4    :[Single,Real] )
      {
# Atom not in list of sawtooth modulation or null zigzag width            
        Zigzag = [-1.0,-1.0,-1.0]  

        Loop d as atom_site_displace_special_func {

          If (atlab == d.atom_site_label and d.zigzag_w != 0.0){

            Zigzag = [0.0,0.0,0.0]

            If ( d.zigzag_c-d.zigzag_w/2.0 <= x4 and 
                                            x4 <= d.zigzag_c+d.zigzag_w/2.0 ) 
             
                     Zigzag = 2*d.zigzag_axyz*(x4- d.zigzag_c)/d.zigzag_w

            Else if ( d.zigzag_c+0.5-d.zigzag_w/2.0 <= x4 and 
                                            x4 <= d.zigzag_c+0.5+d.zigzag_w/2.0 ) 
             
                     Zigzag = -2*d.zigzag_axyz*(x4- d.zigzag_c)/d.zigzag_w

            Break

          } # End of If

        }   # End of Loop

      }
;

save_
GEOM_BOND
CIF
Data items in the GEOM_BOND category record
details about bonds, as calculated from the
ATOM, CELL and SYMMETRY data. This category extends the
symmetry-operation code used in bond listings to the
higher-dimensional superspace form and therefore
redefines many datanames to reflect the changed
method of distance calculation.
save_GEOM_BOND

_definition.id                   GEOM_BOND
_definition.scope                Category
_definition.class                Loop
_definition.update               2016-11-17
_description.text                       
;
     Data items in the GEOM_BOND category record
      details about bonds, as calculated from the
      ATOM, CELL and SYMMETRY data. This category extends the
      symmetry-operation code used in bond listings to the
      higher-dimensional superspace form and therefore
      redefines many datanames to reflect the changed
      method of distance calculation.
;
_name.category_id                GEOM
_name.object_id                  GEOM_BOND

loop_
  _category_key.name
                                 '_geom_bond.atom_site_label_1'          
                                 '_geom_bond.atom_site_label_2'          
                                 '_geom_bond.site_ssg_symmetry_1'  
                                 '_geom_bond.site_ssg_symmetry_2' 

save_
_geom_bond.distance_av
CIF
Average value of the intramolecular bond distance.
save_geom_bond.distance_av

    _definition.id               '_geom_bond.distance_av'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_geom_bond_distance_av' 
    _description.text                   
;

      Average value of the intramolecular bond distance.
;
    _name.category_id            geom_bond
    _name.object_id              distance_av
    _type.purpose                Measurand
    _type.source                 Derived
    _type.container              Single
    _type.contents               Real
    _enumeration.range           0.0:
_units.code                             angstroms

save_
_geom_bond.distance_max
CIF
Maximum value of the intramolecular bond distance.
save_geom_bond.distance_max

    _definition.id               '_geom_bond.distance_max'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_geom_bond_distance_max' 
    _description.text                   
;

      Maximum value of the intramolecular bond distance.
;
    _name.category_id            geom_bond
    _name.object_id              distance_max
    _type.purpose                Measurand
    _type.source                 Derived
    _type.container              Single
    _type.contents               Real
    _enumeration.range           0.0:
_units.code                             angstroms

save_
_geom_bond.distance_min
CIF
Minimum value of the intramolecular bond distance.
save_geom_bond.distance_min

    _definition.id               '_geom_bond.distance_min'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_geom_bond_distance_min' 
    _description.text                   
;

      Minimum value of the intramolecular bond distance.
;
    _name.category_id            geom_bond
    _name.object_id              distance_min
    _type.purpose                Measurand
    _type.source                 Derived
    _type.container              Single
    _type.contents               Real
    _enumeration.range           0.0:
_units.code                             angstroms

save_
_geom_bond.site_ssg_symmetry_1
CIF
The symmetry code of each atom site as the symmetry operation
number 'n' and the higher-dimensional translation 'm1...mp'.
These numbers are combined to form the code 'n m1...mp' or
n_m1...mp. The character string n_m1...mp is composed as follows:
'n' refers to the symmetry operation that is applied to the
superspace coordinates. It must match a number given in
_space_group_symop_ssg_id. 'm1...mp' refer to the translations
that are subsequently applied to the symmetry-transformed
coordinates to generate the atom used in calculating the bond.
These translations (t1,...tp) are related to (m1...mp) by the
relations m1=5+t1, ..., mp=5+tp. By adding 5 to the translations,
the use of negative numbers is avoided. The number 'p' must agree
with (_cell_modulation_dimension + 3). If there are no cell
translations, the translation number may be omitted. If no
symmetry operations or translations are applicable then a single
full stop '.' is used.
Examples:
4
7_645
save_geom_bond.site_ssg_symmetry_1

    _definition.id               '_geom_bond.site_ssg_symmetry_1'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
                                 '_geom_bond_site_ssg_symmetry_1' 
    _description.text                   
;

      The symmetry code of each atom site as the symmetry operation
      number 'n' and the higher-dimensional translation 'm1...mp'.
      These numbers are combined to form the code 'n m1...mp' or
      n_m1...mp. The character string n_m1...mp is composed as follows:
      'n' refers to the symmetry operation that is applied to the
      superspace coordinates. It must match a number given in
      _space_group_symop_ssg_id. 'm1...mp' refer to the translations
      that are subsequently applied to the symmetry-transformed
      coordinates to generate the atom used in calculating the bond.
      These translations (t1,...tp) are related to (m1...mp) by the
      relations m1=5+t1, ..., mp=5+tp. By adding 5 to the translations,
      the use of negative numbers is avoided. The number 'p' must agree
      with (_cell_modulation_dimension + 3). If there are no cell
      translations, the translation number may be omitted. If no
      symmetry operations or translations are applicable then a single
      full stop '.' is used.
;
    _name.category_id            geom_bond
    _name.object_id              site_ssg_symmetry_1
    _type.purpose                Composite
    _type.source                 Derived
    _type.container              Single
    _type.contents               Symop
    loop_
      _description_example.case
      _description_example.detail
      "."                  'no symmetry or translation to site'          
      "4"                  '4th symmetry operation applied'    
      "7_645"              '7th symmetry position; +a on x, -b on y' 

save_
_geom_bond.site_ssg_symmetry_2
CIF
The symmetry code described in _geom_bond_site_ssg_symmetry_1.
save_geom_bond.site_ssg_symmetry_2

    _definition.id               '_geom_bond.site_ssg_symmetry_2'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
                                 '_geom_bond_site_ssg_symmetry_2' 
    _description.text                   
;

      The symmetry code described in _geom_bond_site_ssg_symmetry_1.
;
    _name.category_id            geom_bond
    _name.object_id              site_ssg_symmetry_2
    _type.purpose                Composite
    _type.source                 Derived
    _type.container              Single
    _type.contents               Symop

save_
_geom_bond.distance
CIF
Intramolecular bond distance between the sites identified
save_geom_bond.distance

_definition.id                          '_geom_bond.distance'
loop_
  _alias.definition_id
         '_geom_bond_distance'         
         '_geom_bond.dist' 
_definition.update                      2012-12-14
_description.text                       
;
     Intramolecular bond distance between the sites identified
;
_name.category_id                       geom_bond
_name.object_id                         distance
_type.purpose                           Measurand
_type.source                            Derived
_type.container                         Single
_type.contents                          Real
_enumeration.range                      0.:
_units.code                             angstroms

save_
_geom_bond.distance_su
CIF
Standard Uncertainty of the intramolecular bond distance
between the sites identified by _geom_bond.id
save_geom_bond.distance_su

_definition.id                          '_geom_bond.distance_su'
loop_
  _alias.definition_id
         '_geom_bond.distance_su'      
         '_geom_bond_distance_su'      
         '_geom_bond.dist_esd' 
_definition.update                      2012-12-14
_description.text                       
;
     Standard Uncertainty of the intramolecular bond distance
     between the sites identified by _geom_bond.id
;
_name.category_id                       geom_bond
_name.object_id                         distance_su
_name.linked_item_id                    '_geom_bond.distance'
_type.purpose                           SU
_type.source                            Related
_type.container                         Single
_type.contents                          Real
_enumeration.range                      0.:
_units.code                             angstroms

save_
GEOM_CONTACT
CIF
The CATEGORY of data items used to specify the interatomic
contact distances in the structural model.
save_GEOM_CONTACT

_definition.id                   GEOM_CONTACT
_definition.scope                Category
_definition.class                Loop
_definition.update               2016-11-17
_description.text                       
;
     The CATEGORY of data items used to specify the interatomic
     contact distances in the structural model.
;
_name.category_id                GEOM
_name.object_id                  GEOM_CONTACT
loop_
  _category_key.name
                                 '_geom_contact.atom_site_label_1'       
                                 '_geom_contact.atom_site_label_2'       
                                 '_geom_contact.site_ssg_symmetry_1'         
                                 '_geom_contact.site_ssg_symmetry_2' 
save_
_geom_contact.distance_av
CIF
Average value of the interatomic contact distance.
save_geom_contact.distance_av

    _definition.id               '_geom_contact.distance_av'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_geom_contact_distance_av' 
    _description.text                   
;

      Average value of the interatomic contact distance.
;
    _name.category_id            geom_contact
    _name.object_id              distance_av
    _type.purpose                Measurand
    _type.source                 Derived
    _type.container              Single
    _type.contents               Real
    _enumeration.range           0.0:
_units.code                             angstroms

save_
_geom_contact.distance_max
CIF
Maximum value of the interatomic contact distance.
save_geom_contact.distance_max

    _definition.id               '_geom_contact.distance_max'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_geom_contact_distance_max' 
    _description.text                   
;

      Maximum value of the interatomic contact distance.
;
    _name.category_id            geom_contact
    _name.object_id              distance_max
    _type.purpose                Measurand
    _type.source                 Derived
    _type.container              Single
    _type.contents               Real
    _enumeration.range           0.0:
_units.code                             angstroms

save_
_geom_contact.distance_min
CIF
Minimum value of the interatomic contact distance.
save_geom_contact.distance_min

    _definition.id               '_geom_contact.distance_min'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_geom_contact_distance_min' 
    _description.text                   
;

      Minimum value of the interatomic contact distance.
;
    _name.category_id            geom_contact
    _name.object_id              distance_min
    _type.purpose                Measurand
    _type.source                 Derived
    _type.container              Single
    _type.contents               Real
    _enumeration.range           0.0:
_units.code                             angstroms

save_
_geom_contact.site_ssg_symmetry_1
CIF
The symmetry code of each atom site as the symmetry operation
number 'n' and the higher-dimensional translation 'm1...mp'.
These numbers are combined to form the code 'n m1...mp' or
n_m1...mp. The character string n_m1...mp is composed as follows:
'n' refers to the symmetry operation that is applied to the
superspace coordinates. It must match a number given in
_space_group_symop_ssg_id. 'm1...mp' refer to the translations
that are subsequently applied to the symmetry-transformed
coordinates to generate the atom used in calculating the contact.
These translations (t1,...tp) are related to (m1...mp) by the
relations m1=5+t1, ..., mp=5+tp. By adding 5 to the translations,
the use of negative numbers is avoided. The number 'p' must agree
with (_cell_modulation_dimension + 3). If there are no cell
translations, the translation number may be omitted. If no
symmetry operations or translations are applicable, then a single
full stop '.' is used.
Examples:
4
7_645
save_geom_contact.site_ssg_symmetry_1

    _definition.id               '_geom_contact.site_ssg_symmetry_1'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
                                 '_geom_contact_site_ssg_symmetry_1' 
    _description.text                   
;

      The symmetry code of each atom site as the symmetry operation
      number 'n' and the higher-dimensional translation 'm1...mp'.
      These numbers are combined to form the code 'n m1...mp' or
      n_m1...mp. The character string n_m1...mp is composed as follows:
      'n' refers to the symmetry operation that is applied to the
      superspace coordinates. It must match a number given in
      _space_group_symop_ssg_id. 'm1...mp' refer to the translations
      that are subsequently applied to the symmetry-transformed
      coordinates to generate the atom used in calculating the contact.
      These translations (t1,...tp) are related to (m1...mp) by the
      relations m1=5+t1, ..., mp=5+tp. By adding 5 to the translations,
      the use of negative numbers is avoided. The number 'p' must agree
      with (_cell_modulation_dimension + 3). If there are no cell
      translations, the translation number may be omitted. If no
      symmetry operations or translations are applicable, then a single
      full stop '.' is used.
;
    _name.category_id            geom_contact
    _name.object_id              site_ssg_symmetry_1
    _type.purpose                Composite
    _type.source                 Derived
    _type.container              Single
    _type.contents               Symop
    loop_
      _description_example.case
      _description_example.detail
      "."                  'no symmetry or translation to site'          
      "4"                  '4th symmetry operation applied'    
      "7_645"              '7th symmetry position; +a on x, -b on y' 

save_
_geom_contact.site_ssg_symmetry_2
CIF
The symmetry code described in _geom_contact.site_ssg_symmetry_1
save_geom_contact.site_ssg_symmetry_2

    _definition.id               '_geom_contact.site_ssg_symmetry_2'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
                                 '_geom_contact_site_ssg_symmetry_2' 
    _description.text                   
;

      The symmetry code described in _geom_contact.site_ssg_symmetry_1
;
    _name.category_id            geom_contact
    _name.object_id              site_ssg_symmetry_2
    _type.purpose                Composite
    _type.source                 Derived
    _type.container              Single
    _type.contents               Symop
save_
_geom_contact.distance
CIF
Intermolecular distance between the atomic sites
save_geom_contact.distance

_definition.id                          '_geom_contact.distance'
loop_
   _alias.definition_id    
         '_geom_contact_distance'      
         '_geom_contact.dist' 
_definition.update                      2016-11-17
_description.text                       
;
     Intermolecular distance between the atomic sites
;
_name.category_id                       geom_contact
_name.object_id                         distance
_type.purpose                           Measurand
_type.source                            Derived
_type.container                         Single
_type.contents                          Real
_enumeration.range                      0.:
_units.code                             angstroms
save_
_geom_contact.distance_su
CIF
Standard Uncertainty of the intermolecular distance between
the atomic sites identified by _geom_contact.id
save_geom_contact.distance_su

_definition.id                          '_geom_contact.distance_su'
loop_
  _alias.definition_id
         '_geom_contact.distance_su'   
         '_geom_contact_distance_su'   
         '_geom_contact.dist_esd' 
_definition.update                      2012-12-14
_description.text                       
;
     Standard Uncertainty of the intermolecular distance between
     the atomic sites identified by _geom_contact.id
;
_name.category_id                       geom_contact
_name.object_id                         distance_su
_name.linked_item_id                    '_geom_contact.distance'
_type.purpose                           SU
_type.source                            Related
_type.container                         Single
_type.contents                          Real
_enumeration.range                      0.:
_units.code                             angstroms

save_
GEOM_TORSION
CIF
The CATEGORY of data items used to specify the torsion angles in the
structural model as derived from the atomic sites.
save_GEOM_TORSION

_definition.id                   GEOM_TORSION
_definition.scope                Category
_definition.class                Loop
_definition.update               2017-11-17
_description.text                       
;
     The CATEGORY of data items used to specify the torsion angles in the
     structural model as derived from the atomic sites.
;
_name.category_id                GEOM
_name.object_id                  GEOM_TORSION
loop_
  _category_key.name
                                 '_geom_torsion.atom_site_label_1'       
                                 '_geom_torsion.atom_site_label_2'       
                                 '_geom_torsion.atom_site_label_3'       
                                 '_geom_torsion.atom_site_label_4'       
                                 '_geom_torsion.site_ssg_symmetry_1'         
                                 '_geom_torsion.site_ssg_symmetry_2'         
                                 '_geom_torsion.site_ssg_symmetry_3'         
                                 '_geom_torsion.site_ssg_symmetry_4' 

save_
_geom_torsion.av
CIF
Average torsion angle; see _geom_torsion.max.
save_geom_torsion.av

    _definition.id               '_geom_torsion.av'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_geom_torsion_av' 
    _description.text                   
;

      Average torsion angle; see _geom_torsion.max.
;
    _name.category_id            geom_torsion
    _name.object_id              av
    _type.purpose                Measurand
    _type.source                 Derived
    _type.container              Single
    _type.contents               Real
_units.code                             degrees

save_
_geom_torsion.max
CIF
Maximum torsion angle bounded by the four atom sites
identified by the _geom_torsion_atom_site_label_ codes.
These must match labels specified as _atom_site.label
in the atom list. The torsion-angle definition should
be that of Klyne and Prelog (1960).
Reference: Klyne, W. & Prelog, V. (1960).
Experientia, 16, 521-523.
Description of steric relationships across
single bonds.
save_geom_torsion.max

    _definition.id               '_geom_torsion.max'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_geom_torsion_max' 
    _description.text                   
;

      Maximum torsion angle bounded by the four atom sites 
      identified by the _geom_torsion_atom_site_label_ codes. 
      These must match labels specified as _atom_site.label 
      in the atom list. The torsion-angle definition should 
      be that of Klyne and Prelog (1960).
      Reference: Klyne, W. & Prelog, V. (1960). 
                 Experientia, 16, 521-523.
                 Description of steric relationships across 
                 single bonds.
;
    _name.category_id            geom_torsion
    _name.object_id              max
    _type.purpose                Measurand
    _type.source                 Derived
    _type.container              Single
    _type.contents               Real
_units.code                             degrees

save_
_geom_torsion.min
CIF
Minimum torsion angle; see _geom_torsion.max.
save_geom_torsion.min

    _definition.id               '_geom_torsion.min'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_geom_torsion_min' 
    _description.text                   
;

      Minimum torsion angle; see _geom_torsion.max.
;
    _name.category_id            geom_torsion
    _name.object_id              min
    _type.purpose                Measurand
    _type.source                 Derived
    _type.container              Single
    _type.contents               Real
_units.code                             degrees

save_
_geom_torsion.site_ssg_symmetry_1
CIF
The symmetry code of each atom site as the symmetry operation
number 'n' and the higher-dimensional translation 'm1...mp'.
These numbers are combined to form the code 'n m1...mp' or
n_m1...mp. The character string n_m1...mp is composed as follows:
'n' refers to the symmetry operation that is applied to the
superspace coordinates. It must match a number given in
_space_group_symop_ssg_id. 'm1...mp' refer to the translations
that are subsequently applied to the symmetry-transformed
coordinates to generate the atom used in calculating the angle.
These translations (t1,...tp) are related to (m1...mp) by the
relations m1=5+t1, ..., mp=5+tp. By adding 5 to the
translations, the use of negative numbers is avoided. The number
'p' must agree with (_cell_modulation_dimension + 3). If there
are no cell translations, the translation number may be omitted.
If no symmetry operations or translations are applicable,
then a single full stop '.' is used.
Examples:
4
7_645
save_geom_torsion.site_ssg_symmetry_1

    _definition.id               '_geom_torsion.site_ssg_symmetry_1'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
                                 '_geom_torsion_site_ssg_symmetry_1' 
    _description.text                   
;

      The symmetry code of each atom site as the symmetry operation
      number 'n' and the higher-dimensional translation 'm1...mp'.
      These numbers are combined to form the code 'n m1...mp' or
      n_m1...mp. The character string n_m1...mp is composed as follows:
      'n' refers to the symmetry operation that is applied to the
      superspace coordinates. It must match a number given in
      _space_group_symop_ssg_id. 'm1...mp' refer to the translations
      that are subsequently applied to the symmetry-transformed
      coordinates to generate the atom used in calculating the angle.
      These translations (t1,...tp) are related to (m1...mp) by the
      relations m1=5+t1, ..., mp=5+tp. By adding 5 to the
      translations, the use of negative numbers is avoided. The number
      'p' must agree with (_cell_modulation_dimension + 3). If there
      are no cell translations, the translation number may be omitted.
      If no symmetry operations or translations are applicable,
      then a single full stop '.' is used.
;
    _name.category_id            geom_torsion
    _name.object_id              site_ssg_symmetry_1
    _type.purpose                Composite
    _type.source                 Derived
    _type.container              Single
    _type.contents               Symop
    loop_
      _description_example.case
      _description_example.detail
      "."                  'no symmetry or translation to site'          
      "4"                  '4th symmetry operation applied'    
      "7_645"              '7th symmetry position; +a on x, -b on y' 

save_
_geom_torsion.site_ssg_symmetry_2
CIF
Symmetry code of described in _geom_torsion.site_ssg_symmetry_1.
save_geom_torsion.site_ssg_symmetry_2

    _definition.id               '_geom_torsion.site_ssg_symmetry_2'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
                                 '_geom_torsion_site_ssg_symmetry_2' 
    _description.text                   
;

      Symmetry code of described in _geom_torsion.site_ssg_symmetry_1.
;
    _name.category_id            geom_torsion
    _name.object_id              site_ssg_symmetry_2
    _type.purpose                Composite
    _type.source                 Derived
    _type.container              Single
    _type.contents               Symop

save_
_geom_torsion.site_ssg_symmetry_3
CIF
Symmetry code of described in _geom_torsion.site_ssg_symmetry_1.
save_geom_torsion.site_ssg_symmetry_3

    _definition.id               '_geom_torsion.site_ssg_symmetry_3'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
                                 '_geom_torsion_site_ssg_symmetry_3' 
    _description.text                   
;

      Symmetry code of described in _geom_torsion.site_ssg_symmetry_1.
;
    _name.category_id            geom_torsion
    _name.object_id              site_ssg_symmetry_3
    _type.purpose                Composite
    _type.source                 Derived
    _type.container              Single
    _type.contents               Symop

save_
_geom_torsion.site_ssg_symmetry_4
CIF
Symmetry code of described in _geom_torsion.site_ssg_symmetry_1.
save_geom_torsion.site_ssg_symmetry_4

    _definition.id               '_geom_torsion.site_ssg_symmetry_4'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
                                 '_geom_torsion_site_ssg_symmetry_4' 
    _description.text                   
;

      Symmetry code of described in _geom_torsion.site_ssg_symmetry_1.
;
    _name.category_id            geom_torsion
    _name.object_id              site_ssg_symmetry_4
    _type.purpose                Composite
    _type.source                 Derived
    _type.container              Single
    _type.contents               Symop

save_
_geom_torsion.angle
CIF
Angle defined by the sites identified by _geom_torsion.id.
The torsion-angle definition should be that of Klyne and Prelog.
The vector direction *_label_2 to *_label_3 is the viewing
direction, and the torsion angle is the angle of twist required
to superimpose the projection of the vector between site 2 and
site 1 onto the projection of the vector between site 3 and
site 4. Clockwise torsions are positive, anticlockwise torsions
are negative.
Ref: Klyne, W. & Prelog, V. (1960). Experientia, 16, 521-523.
save_geom_torsion.angle

_definition.id                          '_geom_torsion.angle'
loop_
   _alias.definition_id     
         '_geom_torsion'     
         '_geom_torsion.value' 
_definition.update                      2019-07-25
_description.text                       
;
     Angle defined by the sites identified by _geom_torsion.id.
     The torsion-angle definition should be that of Klyne and Prelog.
     The vector direction *_label_2 to *_label_3 is the viewing
     direction, and the torsion angle is the angle of twist required
     to superimpose the projection of the vector between site 2 and
     site 1 onto the projection of the vector between site 3 and
     site 4. Clockwise torsions are positive, anticlockwise torsions
     are negative.
     Ref: Klyne, W. & Prelog, V. (1960). Experientia, 16, 521-523.
;
_name.category_id                       geom_torsion
_name.object_id                         angle
_type.purpose                           Measurand
_type.source                            Derived
_type.container                         Single
_type.contents                          Real
_enumeration.range                      -180.:180.
_units.code                             degrees

save_
_geom_torsion.angle_su
CIF
Standard Uncertainty of the torsion angle.
save_geom_torsion.angle_su

_definition.id                          '_geom_torsion.angle_su'
loop_
  _alias.definition_id
         '_geom_torsion.angle_su'      
         '_geom_torsion_su'  
         '_geom_torsion.value_esd' 
_definition.update                      2012-11-22
_description.text                       
;
     Standard Uncertainty of the torsion angle.
;
_name.category_id                       geom_torsion
_name.object_id                         angle_su
_name.linked_item_id                    '_geom_torsion.angle'
_type.purpose                           SU
_type.source                            Related
_type.container                         Single
_type.contents                          Real
_units.code                             degrees

save_
SPACE_GROUP
CIF
_space_group.ssg_IT_number
CIF
Superspace-group number from International Tables for
Crystallography, Vol. C (2006). Valid only for one-dimensional
modulated structures.
Reference: International Tables for Crystallography (2006). Vol. C,
Chapter 9.8. John Wiley & Sons, Ltd.
Incommensurate and commensurate modulated structures
save_space_group.ssg_IT_number

    _definition.id               '_space_group.ssg_IT_number'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_space_group_ssg_IT_number' 
    _description.text                   
;

      Superspace-group number from International Tables for
      Crystallography, Vol. C (2006). Valid only for one-dimensional
      modulated structures.
      Reference: International Tables for Crystallography (2006). Vol. C,
                 Chapter 9.8. John Wiley & Sons, Ltd.
                 Incommensurate and commensurate modulated structures
;
    _name.category_id            space_group
    _name.object_id              ssg_IT_number
    _type.purpose                Number
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Real
    _enumeration.range           1.1:

save_
_space_group.ssg_name
CIF
Superspace-group symbol conforming to an alternative definition
from that given in _space_group_ssg_name_IT and
_space_group_ssg_name_WJJ for one-dimensional modulated
structures or to the superspace-group name for higher dimensions.
When necessary, indicate the origin and the setting. Use a colon
':' as a separator between the different parts of the
superspace-group symbol. Within each part, leave a space
between each component. Rules for the notation for
Hermann-Mauguin and Hall symbols (if present) are given in the
symmetry CIF dictionary (cif_sym.dic) and, partially, in
_space_group_ssg_name_IT and _space_group_ssg_name_WJJ.
For composites described in a single data block, the superspace
group describes the symmetry of the whole structure. The
symmetry of each subsystem can be derived using the
appropriate W matrices.
Example:
W:-P -2xb -2ya:q q
save_space_group.ssg_name

    _definition.id               '_space_group.ssg_name'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_space_group_ssg_name' 
    _description.text                   
;

      Superspace-group symbol conforming to an alternative definition
      from that given in _space_group_ssg_name_IT and
      _space_group_ssg_name_WJJ for one-dimensional modulated
      structures or to the superspace-group name for higher dimensions.
      When necessary, indicate the origin and the setting. Use a colon
      ':' as a separator between the different parts of the
      superspace-group symbol. Within each part, leave a space
      between each component. Rules for the notation for
      Hermann-Mauguin and Hall symbols (if present) are given in the
      symmetry CIF dictionary (cif_sym.dic) and, partially, in
      _space_group_ssg_name_IT and _space_group_ssg_name_WJJ.
      For composites described in a single data block, the superspace
      group describes the symmetry of the whole structure. The
      symmetry of each subsystem can be derived using the
      appropriate W matrices.
;
    _name.category_id            space_group
    _name.object_id              ssg_name
    _type.purpose                Describe
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Text
    loop_
    _description_example.detail
    _description_example.case
            "Hall's notation"     "W:-P -2xb -2ya:q q" 

save_
_space_group.ssg_name_IT
CIF
Superspace-group symbol as given in International Tables for
Crystallography, Vol. C (2006). Valid only for one-dimensional
modulated structures. The symbol is divided into three parts:
the Hermann-Mauguin space-group symbol of the reference
structure, the modulation wave vector  and the phase shift
(or internal translation) associated with each component of
the space group. Each component of the space-group name is
separated by a space. Subscripts should appear without special
symbols and bars should be given as negative signs. The
components of the modulation wave vector (in parentheses) and
the phase shifts are also separated by a space. For composites
described in a single data block, the superspace group
describes the symmetry of the whole structure. The symmetry
of each subsystem can be derived using the appropriate W
matrices.
Reference: International Tables for Crystallography (2006). Vol. C,
Chapter 9.8. John Wiley & Sons, Ltd.
Incommensurate and commensurate modulated structures
Example:
P n m a (0 0 ) 0 s 0
save_space_group.ssg_name_IT

    _definition.id               '_space_group.ssg_name_IT'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_space_group_ssg_name_IT' 
    _description.text                   
;

      Superspace-group symbol as given in International Tables for
      Crystallography, Vol. C (2006). Valid only for one-dimensional
      modulated structures. The symbol is divided into three parts:
      the Hermann-Mauguin space-group symbol of the reference
      structure, the modulation wave vector  and the phase shift
      (or internal translation) associated with each component of
      the space group. Each component of the space-group name is
      separated by a space. Subscripts should appear without special
      symbols and bars should be given as negative signs. The
      components of the modulation wave vector (in parentheses) and
      the phase shifts are also separated by a space. For composites
      described in a single data block, the superspace group
      describes the symmetry of the whole structure. The symmetry
      of each subsystem can be derived using the appropriate W
      matrices.
      Reference: International Tables for Crystallography (2006). Vol. C,
                 Chapter 9.8. John Wiley & Sons, Ltd.
                 Incommensurate and commensurate modulated structures
;
    _name.category_id            space_group
    _name.object_id              ssg_name_IT
    _type.purpose                Describe
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Text
    loop_
    _description_example.case
            "P n m a (0 0 \g) 0 s 0" 

save_
_space_group.ssg_name_WJJ
CIF
Superspace-group symbol as given by de Wolff, Janssen & Janner
(1981). Valid only for one-dimensional modulated structures.
The symbol is divided into three parts separated by colons ':':
the superspace lattice symbol, the Hermann-Mauguin space-group
symbol of the reference structure and the phase shift (or
internal translation) associated with each component of the
space group. Each component of the space-group name is separated
by a space. Subscripts should appear without special symbols and
bars should be given as negative signs. The phase shifts are
also separated by a space. For composites described in a single
data block, the superspace group describes the symmetry of the
whole structure. The symmetry of each subsystem can be derived
using the appropriate W matrices.
Reference: Wolff, P. M. de, Janssen, T. & Janner, A. (1981).
Acta Cryst. A37, 625-636.
The superspace groups for incommensurate crystal
structures with a one-dimensional modulation
Example:
P:P c m n:s s -1
save_space_group.ssg_name_WJJ

    _definition.id               '_space_group.ssg_name_WJJ'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_space_group_ssg_name_WJJ' 
    _description.text                   
;

      Superspace-group symbol as given by de Wolff, Janssen & Janner
      (1981). Valid only for one-dimensional modulated structures.
      The symbol is divided into three parts separated by colons ':':
      the superspace lattice symbol, the Hermann-Mauguin space-group
      symbol of the reference structure and the phase shift (or
      internal translation) associated with each component of the
      space group. Each component of the space-group name is separated
      by a space. Subscripts should appear without special symbols and
      bars should be given as negative signs. The phase shifts are
      also separated by a space. For composites described in a single
      data block, the superspace group describes the symmetry of the
      whole structure. The symmetry of each subsystem can be derived
      using the appropriate W matrices.
      Reference: Wolff, P. M. de, Janssen, T. & Janner, A. (1981).
                 Acta Cryst. A37, 625-636.
                 The superspace groups for incommensurate crystal 
                 structures with a one-dimensional modulation
;
    _name.category_id            space_group
    _name.object_id              ssg_name_WJJ
    _type.purpose                Describe
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Text
    loop_
    _description_example.case
            "P:P c m n:s s -1" 

save_
_space_group.ssg_WJJ_code
CIF
Superspace-group code as given by de Wolff, Janssen & Janner
(1981). Valid only for one-dimensional modulated structures.
Reference: Wolff, P. M. de, Janssen, T. & Janner, A. (1981).
Acta Cryst. A37, 625-636.
The superspace groups for incommensurate crystal
structures with a one-dimensional modulation
Example:
28a.10.1/2
save_space_group.ssg_WJJ_code

    _definition.id               '_space_group.ssg_WJJ_code'
    _definition.update           2014-06-27
    loop_
      _alias.definition_id
          '_space_group_ssg_WJJ_code' 
    _description.text                   
;

      Superspace-group code as given by de Wolff, Janssen & Janner
      (1981). Valid only for one-dimensional modulated structures.
      Reference: Wolff, P. M. de, Janssen, T. & Janner, A. (1981).
                 Acta Cryst. A37, 625-636.
                 The superspace groups for incommensurate crystal 
                 structures with a one-dimensional modulation
;
    _name.category_id            space_group
    _name.object_id              ssg_WJJ_code
    _type.purpose                Describe
    _type.source                 Assigned
    _type.container              Single
    _type.contents               Text
    loop_
    _description_example.case
            "28a.10.1/2" 

save_

Revision history

Version 3.0 (2014-06-27) Initial conversion to DDLm (Syd Hall)
Version 3.1 (2016-11-17) Substantial edits to conform to current DDLm, CIF2 syntax (James Hester).
Version 3.2 (2017-03-11) Returned all additional indices to main dictionary, removed category_id
     from templates(James Hester)
Version 3.2.1 (2019-09-25) Corrected a typo in the definition of the _geom_torsion.angle data item.

     Changed the content type of multiple data items from 'Count' to 'Integer'
     and assigned the appropriate enumeration range if needed.