Demeter

Description Perl tools for X-ray Absorption Spectroscopy
Demeter > Perl Modules > Xray::Crystal::Cell
Source

NAME

Xray::Crystal::Cell - A crystallographic unit cell object

VERSION

This documentation refers to Demeter version 0.9.26.

SYNOPSIS

  $cell = Xray::Crystal::Cell->new;
  $cell -> space_group($space);
  $cell -> a($val);
   ##  and so on...
  $cell -> populate(\@sites);
   ## where @sites is a list of Site objects.

DESCRIPTION

This is a crystallographic cell object. From lattice constants, a space group symbol, and a list of Wycoff positions, it will fully populate a unit cell. This cell can then be used to make crystal or cluster calculations.

ATTRIBUTES

This uses Moose, so each of these attributes has an associated accessor by the same name.

These are the attributes that are typically set by the user:

a

The a lattice constant.

b

The b lattice constant.

c

The c lattice constant.

alpha

The angle between the b and c lattice constants.

beta

The angle between the a and c lattice constants.

gamma

The angle between the a and b lattice constants.

angle

This takes the value of the most recently set angle. This is only needed for the peculiar situation of a monoclinic space group with all three angles equal to 90. The function determine monoclinic will not be able to resolve the setting in that situation without a little help. The idea is that the user has to specify at least one angle in order to unambiguously determine the setting.

space_group

A string specifying the space group of the cell. The supplied value is stored in the given_group attribute and this is filled with the canonical symbol.

The bare minimum required to define is a cell is the a lattice constant and the space group symbol. All other attributes have sensible defaults or are calculated quantities. Of course, any space group of lower than cubic symmetry will require that other axes and/or angles be specified.

There are several other Cell attributes. Except for the Contents attribute, these are updated as triggers when other attributes are updated. These include:

group

This is a reference to an Xray::Crystal::SpaceGroup object which has been initialized with the value of the space_group attribute.

given_group

The space group symbol used as the argument for the space_group attribute when the make method is called.

contents

This is an anonymous list of anonymous lists specifying the contents of the fully decoded unit cell. This attribute is set by caling the populate method. Each list element is itself a list containing the x, y, and z fractional coordinates of the site and a reference to the Site obect which generated that site. To examine the contents of the cell, do something like this:

  my ($contents) = $cell -> contents;
  foreach my $pos (@{$contents}) {
    printf "x=%8.5f, y=%8.5f, z=%8.5f$/",
      $$pos[0], $$pos[1], $$pos[2]
  };
volume

The volume of the unit cell computed from the axes and angles.

txx

The x-x element of the metric tensor computed from the axes and angles. This is used to translate from fractional to cartesian coordinates.

tyx

The y-x element of the metric tensor computed from the axes and angles.

tyz

The y-z element of the metric tensor computed from the axes and angles.

tzx

The z-x element of the metric tensor computed from the axes and angles.

tzz

The z-z element of the metric tensor computed from the axes and angles.

other metric tensor elements

The yy element of the metric tensor is unity and the other three are zero. These four are not actually attributes.

METHODS

populate

Populate a unit cell given a list of sites. Each element of the list of sites must be a Site object. The symmetries operations implied by the space group are applied to each unique site to generate a description of the stoichiometric contents of the unit cell.

   $cell -> populate(\@sites)

This fills the contents attribute of the Cell with an anonymous array. Each element of the anonymous array is itself an anonymous array whose first three elements are the x, y, and z fractional coordinates of the site and whose fourth element is a reference to the Site that generated the position. This is, admitedly, a complicated data structure and requires a lot of ``line-noise'' style perl to dereference all its elements. It is, however, fairly efficient.

metric

Takes the three fractional coordinates and returns the cartesian coordinates of the position. The fractional coordinates need not be canonicalized into the first octant, thus this method can be used to generate the cartesian coordinates for any atom in a cluster.

  ($x,$y,$z) = $cell -> metric($xf, $yf, $zf);

This method is called repeatedly by the build_cluster function in the Demeter::Atoms module. The elements of the metric tensor, i.e. the txx, tyx, tyz, tzx, and tzz Cell attributes, are used to make the transformation according to this formula:

              / Txx   0    0  \   / xf \
   (x y z) = |  Tyx   1   Tyz  | |  yf  |
              \ Tzx   0   Tzz /   \ zf /
d_spacing

Takes the Miller indeces of a scattering plane and returns the d spacing of that plane in Angstroms.

  $d = $cell -> d_spacing($h, $k, $l);
multiplicity

Returns the multiplicity of a reflection hkl for the cell.

  $p = $cell -> multiplicity($h, $k, $l);

See the footnote in Cullity page 523 for a caveat.

cell_check

This method returns a warning if the cell axes and angles are not appropriate to the space group, otherwise it returns an empty string.

  print $cell -> cell_check;
clear

Reinitialize all attribute values;

CONFIGURATION AND ENVIRONMENT

There is nothing configurable and no environment variables are used.

DEPENDENCIES

  Carp
  File::Spec
  Storable
  Const::Fast

BUGS AND LIMITATIONS

These methods are not yet implemented:

Please report problems to the Ifeffit Mailing List (http://cars9.uchicago.edu/mailman/listinfo/ifeffit/)

Patches are welcome.

AUTHOR

Bruce Ravel, http://bruceravel.github.io/home

http://bruceravel.github.io/demeter/

LICENCE AND COPYRIGHT

Copyright (c) 2006-2018 Bruce Ravel (http://bruceravel.github.io/home). All rights reserved.

This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See perlgpl.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.