CHAPTER 13

Space Group and Crystallographic Symmetry

 

The implementation of space group plays a central role in CCL and CPL to provide knowledge of crystallographic symmetry for other components of the libraries and applications.  Other classes such as Miller indices and structure factor rely on the symmetry knowledge to perform their operations.

 

13.1 Space Group

 

13.1.1 ccl::spaceGroup class

 

This class loads in a database file that contains symmetry information of all 230 space groups.  Various member functions return the symmetry operators and other characteristics of a space group.

 

13.1.1.1 Constructors and Assignment

spaceGroup(const size_t = 1);

spaceGroup(const char*);

spaceGroup(const std::string&);

The general constructors take a space group number, a C string or a std::string of a space group name to construct a space group.  The default constructor constructs the space group P1.  The space group name is a lowercase string similar to the space group symbol found in the International Tables.  Table 13.1.1.0.1 lists these strings.  When this class is constructed, a database file is loaded.  An environment variable CCLHOME must be set to specify the location where CCL is installed.  The space group library will be loaded from $CCLHOME/lib.

 

spaceGroup(const spaceGroup&);

const spaceGroup& operator=(const spaceGroup&);

Copy constructor and assignment operator = are available.

 

void setSpaceGroup(const size_t = 1);

void setSpaceGroup(const char*);

void setSpaceGroup(const std::string&);

After a space group is constructed, it is still possible to change it to another space group by using these set functions.

 


 

No.   Name

No.   Name

No.   Name

No.   Name

No.   Name

  1 p1

  2 p-1

  3 p2

  4 p21

  5 c2

  6 pm

  7 pc

  8 cm

  9 cc

 10 p2/m

 11 p21/m

 12 c2/m

 13 p2/c

 14 p21/c

 15 c2/c

 16 p222

 17 p2221

 18 p21212

 19 p212121

 20 c2221

 21 c222

 22 f222

 23 i222

 24 i212121

 25 pmm2

 26 pmc21

 27 pcc2

 28 pma2

 29 pca21

 30 pnc2

 31 pmn21

 32 pba2

 33 pna21

 34 pnn2

 35 cmm2

 36 cmc21

 37 ccc2

 38 amm2

 39 abm2

 40 ama2

 41 aba2

 42 fmm2

 43 fdd2

 44 imm2

 45 iba2

 46 ima2

 47 pmmm

 48 pnnn

 49 pccm

 50 pban

 51 pmma

 52 pnna

 53 pmna

 54 pcca

 55 pbam

 56 pccn

 57 pbcm

 58 pnnm

 59 pmmn

 60 pbcn

 61 pbca

 62 pnma

 63 cmcm

 64 cmca

 65 cmmm

 66 cccm

 67 cmma

 68 ccca

 69 fmmm

 70 fddd

 71 immm

 72 ibam

 73 ibca

 74 imma

 75 p4

 76 p41

 77 p42

 78 p43

 79 i4

 80 i41

 81 p-4

 82 i-4

 83 p4/m

 84 p42/m

 85 p4/n

 86 p42/n

 87 i4/m

 88 i41/a

 89 p422

 90 p4212

 91 p4122

 92 p41212

 93 p4222

 94 p42212

 95 p4322

 96 p43212

 97 i422

 98 i4122

 99 p4mm

100 p4bm

101 p42cm

102 p42nm

103 p4cc

104 p4nc

105 p42mc

106 p42bc

107 i4mm

108 i4cm

109 i41md

110 i41cd

111 p-42m

112 p-42c

113 p-421m

114 p-421c

115 p-4m2

116 p-4c2

117 p-4b2

118 p-4n2

119 i-4m2

120 i-4c2

121 i-42m

122 i-42d

123 p4/mmm

124 p4/mcc

125 p4/nbm

126 p4/nnc

127 p4/mbm

128 p4/mnc

129 p4/nmm

130 p4/ncc

131 p42/mmc

132 p42/mcm

133 p42/nbc

134 p42/nnm

135 p42/mbc

136 p42/mnm

137 p42/nmc

138 p42/ncm

139 i4/mmm

140 i4/mcm

141 i41/amd

142 i41/acd

143 p3

144 p31

145 p32

146 r3

147 p-3

148 r-3

149 p312

150 p321

151 p3112

152 p3121

153 p3212

154 p3221

155 r32

156 p3m1

157 p31m

158 p3c1

159 p31c

160 r3m

161 r3c

162 p-31m

163 p-31c

164 p3m1

165 p-3c1

166 r-3m

167 r-3c

168 p6

169 p61

170 p65

171 p62

172 p64

173 p63

174 p-6

175 p6/m

176 p63/m

177 p622

178 p6122

179 p6522

180 p6222

181 p6422

182 p6322

183 p6mm

184 p6cc

185 p63cm

186 p63mc

187 p-6m2

188 p-6c2

189 p-62m

190 p-62c

191 p6/mmm

192 p6/mcc

193 p63/mcm

194 p63/mmc

195 p23

196 f23

197 i23

198 p213

199 i213

200 pm-3

201 pn-3

202 fm-3

203 fd-3

204 im-3

205 pa-3

206 ia-3

207 p432

208 p4332

209 f432

210 f4132

211 i432

212 p4332

213 p4132

214 i4132

215 p-43m

216 f4-3m

217 i-43

218 p-43n

219 f-43c

220 i-43d

221 pm-3m

222 pn-3n

223 pm-3n

224 pn-3m

225 fm-3m

226 fm-3c

227 fd-3m

228 fd-3c

229 im-3m

230 ia-3d

 

Table 13.1.1.1.1 Accepted strings for space group names.


13.1.1.2 Space Group Characteristics

These member functions return several characteristics of a space group.  All these functions are declared const, that is, by no means they can change the already constructed space group.

 

std::string spaceGroupName(const bool cap = 1) const;

Returns the space group name as std::string.  The optional Boolean indicates whether the first character is capitalized.  See Table 13.1.1.1.1 for possible returned values.

 

std::string pointGroupName() const;

Returns the space group name without the first character for lattice type.

 

int lattice(const bool cap = 1) const;

Returns the lattice type of the space group as a single letter.  The optional Boolean indicates whether the letter is capitalized.

 

size_t spaceGroupNumber() const;

Returns the space group number.

 

std::string getCrystalSystem() const;

std::string crystalSystem() const;

Return the crystal system as std::string.  The possible returned values are triclinic, monoclinic, orthorhombic, tetragonal, trigonal, hexagonal, and cubic.

 

bool getCentralSymmetric() const;

bool centrosymmetric() const;

Test whether the space group is central symmetric.  If one of the symmetry operators (See 13.1.3 below) has

 

R = ,

 

this space group is central symmetric.

 

bool getEnantiomorphism() const;

bool enantiomorphic() const;

Test whether the space group is enantiomorphic.  If one of the symmetry operators (See 13.1.1.3 below) has |R| = -1, this space group is enantiomorphic.  All central symmetric space groups are enantiomorphic.

 

void rmInversion();

Removes the inversion operator and all derived operators from the inversion if any.  Please note that this function indeed alters the symmetry of the space group.  Use this function with caution.

 

13.1.1.3 Symmetry Operation and Symmetry Operators

The space defined by a unit cell is divided into several asymmetric units.  The content of each asymmetric unit is a copy of another.  The calculation of a position in an asymmetric unit from a position of another is a symmetry operation.  Such operation can be described by this equation:

 

u = Rv + t

 

where u and v are two vectors in two asymmetric units, respectively.  R is a 3-dimensional matrix, and t is a translation vector.  The pair of R and t is called a symmetry operator.  It can be shown that if u and v are both in the fractional coordinate system of the unit cell, R and t can be much simplified.  R will consist of elements 1, 0, or, -1; t will consist of multiples of 1/4 or 1/6.  Therefore, symmetry operation is always done in fractional coordinate system.  Please note that R is not necessarily a rotation matrix, therefore may not be orthogonal.  A space group has a fixed number of symmetry operators.  One of them must be a 3-dimensional identity matrix and a 0 vector.

 

Some of the following functions take 0-offset subscript in parentheses (), which is not consistent with the conventional style.  These functions remain due to backward compatibility.

 

If a subscript is out of range, an error message will be printed, and default matrix or vector will be returned.  This behavior in future release.

 

size_t getOperateSize() const;

size_t operateSize() const;

size_t operatorSize() const;

Return the number of operators the space group has.

 

mac::matrix3D<int> R(const size_t i) const;

Returns the i-th operator matrix R, where i is a 1-offset subscript.

 

mac::matrix3D<int> getOperate(const size_t) const;

Returns a matrix R.  This function takes a 0-offset subscript.

 

mac::vector3D<double> t(const size_t i) const;

Returns the i-th translation vector t, where i is a 1-offset subscript.

 

mac::vector3D<double> getTranslate(

   const size_t) const;

Given a 0-offset subscript, returns a vector t. 

 

vector<mac::matrix3D<int> > operators() const;

vector<mac::matrix3D<int> > getOperate() const;

Returns all R¡¯s of this space group.  The order of the returned std::vector is consistent with that from the next function getTranslate().

 

vector<mac::vector3D<double> >

   translations() const;

vector<mac::vector3D<double> >

   getTranslate() const;

Returns all t¡¯s of this space group.  The order of the returned std::vector is consistent with that from the previous function getOperate().

 

13.1.1.4 Unique Symmetry Operators

Some symmetry operators may share the same R, but not the same t, so that the set of R¡¯s are therefore not unique.  The following member functions deal with only the unique set of R¡¯s.

 

size_t uniqueOperatorSize() const;

size_t uniqueOperateSize() const;

size_t getUniqueOperateSize() const;

Return the number of unique R¡¯s for this space group.

 

mac::matrix3D<int> uniqueR(const size_t i) const;

Returns the i-th unique operator matrix R, where i is a 1-offset subscript.  The order is determined as below.

 

mac::matrix3D<int> getUniqueOperate(const size_t)

   const;

Given a 0-offset subscript, returns a unique R.  The order is determined as below.

 

set<mac::matrix3D<int> > uniqueOperators() const;

set<mac::matrix3D<int> > getUniqueOperate()

                                           const;

Returns all unique R¡¯s in the ascending order determined by lessThan comparison.

 

13.1.1.5 Patterson Space Group

The Patterson space group can be derived from the original space group by removal of all translations of screw axes and sliders, but retaining the translations of lattice centering, and addition of a inversion if needed.

 

spaceGroup Patterson() const;

Returns Patterson space group of this space group.  This function is const, that is, the original space group is not altered.

 

The Patterson space group of any space group listed in Table 13.1.1.0.1 can be found in that table, except four, Amm2, Abm2, Ama2, and Aba2.  Their Patterson space group should be Cmmm but with a different orientation from those four original ones.  A permuted space group Ammm is needed to keep the consistent orientation.  Ammm is included in the space group database coming with the distribution, and named number 1065.  Table 13.1.5.0.1 lists the results of the function Patterson().

 

No.      Name         Patterson

No.     Name        Patterson

No.      Name         Patterson

  1   P1       P-1

  2   P-1      P-1

  3   P2       P2/m

  4   P21      P2/m

  5   C2       C2/m

  6   Pm       P2/m

  7   Pc       P2/m

  8   Cm       C2/m

  9   Cc       C2/m

 10   P2/m     P2/m

 11   P21/m    P2/m

 12   C2/m     C2/m

 13   P2/c     P2/m

 14   P21/c    P2/m

 15   C2/c     C2/m

 16   P222     Pmmm

 17   P2221    Pmmm

 18   P21212   Pmmm

 19   P212121  Pmmm

 20   C2221    Cmmm

 21   C222     Cmmm

 22   F222     Fmmm

 23   I222     Immm

 24   I212121  Immm

 25   Pmm2     Pmmm

 26   Pmc21    Pmmm

 27   Pcc2     Pmmm

 28   Pma2     Pmmm

 29   Pca21    Pmmm

 30   Pnc2     Pmmm

 31   Pmn21    Pmmm

 32   Pba2     Pmmm

 33   Pna21    Pmmm

 34   Pnn2     Pmmm

 35   Cmm2     Cmmm

 36   Cmc21    Cmmm

 37   Ccc2     Cmmm

 38   Amm2     Ammm

 39   Abm2     Ammm

 40   Ama2     Ammm

 41   Aba2     Ammm

 42   Fmm2     Fmmm

 43   Fdd2     Fmmm

 44   Imm2     Immm

 45   Iba2     Immm

 46   Ima2     Immm

 47   Pmmm     Pmmm

 48   Pnnn     Pmmm

 49   Pccm     Pmmm

 50   Pban     Pmmm

 51   Pmma     Pmmm

 52   Pnna     Pmmm

 53   Pmna     Pmmm

 54   Pcca     Pmmm

 55   Pbam     Pmmm

 56   Pccn     Pmmm

 57   Pbcm     Pmmm

 58   Pnnm     Pmmm

 59   Pmmn     Pmmm

 60   Pbcn     Pmmm

 61   Pbca     Pmmm

 62   Pnma     Pmmm

 63   Cmcm     Cmmm

 64   Cmca     Cmmm

 65   Cmmm     Cmmm

 66   Cccm     Cmmm

 67   Cmma     Cmmm

 68   Ccca     Cmmm

 69   Fmmm     Fmmm

 70   Fddd     Fmmm

 71   Immm     Immm

 72   Ibam     Immm

 73   Ibca     Immm

 74   Imma     Immm

 75   P4       P4/m

 76   P41      P4/m

 77   P42      P4/m

 78  P43      P4/m

 79  I4       I4/m

 80  I41      I4/m

 81  P-4      P4/m

 82  I-4      I4/m

 83  P4/m     P4/m

 84  P42/m    P4/m

 85  P4/n     P4/m

 86  P42/n    P4/m

 87  I4/m     I4/m

 88  I41/a    I4/m

 89  P422     P4/mmm<