#!/usr/bin/env python
##############################################################################
#
# diffpy.structure by DANSE Diffraction group
# Simon J. L. Billinge
# (c) 2011 Trustees of the Columbia University
# in the City of New York. All rights reserved.
#
# File coded by: Pavol Juhas
#
# See AUTHORS.txt for a list of people who contributed.
# See LICENSE_DANSE.txt for license information.
#
##############################################################################
"""Space group classes and definitions from mmLib and sgtbx.
Attributes
----------
SpaceGroupList : list
List of all spacegroup definitions.
"""
import copy
from itertools import zip_longest
from diffpy.structure.mmlibspacegroups import (
mmLibSpaceGroupList,
sg1,
sg2,
sg3,
sg4,
sg5,
sg6,
sg7,
sg8,
sg9,
sg10,
sg11,
sg12,
sg13,
sg14,
sg15,
sg16,
sg17,
sg18,
sg19,
sg20,
sg21,
sg22,
sg23,
sg24,
sg25,
sg26,
sg27,
sg28,
sg29,
sg30,
sg31,
sg32,
sg33,
sg34,
sg35,
sg36,
sg37,
sg38,
sg39,
sg40,
sg41,
sg42,
sg43,
sg44,
sg45,
sg46,
sg47,
sg48,
sg49,
sg50,
sg51,
sg52,
sg53,
sg54,
sg55,
sg56,
sg57,
sg58,
sg59,
sg60,
sg61,
sg62,
sg63,
sg64,
sg65,
sg66,
sg67,
sg68,
sg69,
sg70,
sg71,
sg72,
sg73,
sg74,
sg75,
sg76,
sg77,
sg78,
sg79,
sg80,
sg81,
sg82,
sg83,
sg84,
sg85,
sg86,
sg87,
sg88,
sg89,
sg90,
sg91,
sg92,
sg93,
sg94,
sg95,
sg96,
sg97,
sg98,
sg99,
sg100,
sg101,
sg102,
sg103,
sg104,
sg105,
sg106,
sg107,
sg108,
sg109,
sg110,
sg111,
sg112,
sg113,
sg114,
sg115,
sg116,
sg117,
sg118,
sg119,
sg120,
sg121,
sg122,
sg123,
sg124,
sg125,
sg126,
sg127,
sg128,
sg129,
sg130,
sg131,
sg132,
sg133,
sg134,
sg135,
sg136,
sg137,
sg138,
sg139,
sg140,
sg141,
sg142,
sg143,
sg144,
sg145,
sg146,
sg147,
sg148,
sg149,
sg150,
sg151,
sg152,
sg153,
sg154,
sg155,
sg156,
sg157,
sg158,
sg159,
sg160,
sg161,
sg162,
sg163,
sg164,
sg165,
sg166,
sg167,
sg168,
sg169,
sg170,
sg171,
sg172,
sg173,
sg174,
sg175,
sg176,
sg177,
sg178,
sg179,
sg180,
sg181,
sg182,
sg183,
sg184,
sg185,
sg186,
sg187,
sg188,
sg189,
sg190,
sg191,
sg192,
sg193,
sg194,
sg195,
sg196,
sg197,
sg198,
sg199,
sg200,
sg201,
sg202,
sg203,
sg204,
sg205,
sg206,
sg207,
sg208,
sg209,
sg210,
sg211,
sg212,
sg213,
sg214,
sg215,
sg216,
sg217,
sg218,
sg219,
sg220,
sg221,
sg222,
sg223,
sg224,
sg225,
sg226,
sg227,
sg228,
sg229,
sg230,
sg1003,
sg1004,
sg1005,
sg1006,
sg1007,
sg1008,
sg1009,
sg1010,
sg1011,
sg1012,
sg1013,
sg1014,
sg1015,
sg1017,
sg1018,
sg1020,
sg1021,
sg1022,
sg1023,
sg1059,
sg1094,
sg1146,
sg1148,
sg1155,
sg1160,
sg1161,
sg1166,
sg1167,
sg1197,
sg2005,
sg2017,
sg2018,
sg3004,
sg3005,
sg3018,
)
from diffpy.structure.sgtbxspacegroups import (
sg1025,
sg1026,
sg1027,
sg1028,
sg1029,
sg1030,
sg1031,
sg1032,
sg1033,
sg1034,
sg1035,
sg1036,
sg1037,
sg1038,
sg1039,
sg1040,
sg1041,
sg1042,
sg1043,
sg1044,
sg1045,
sg1046,
sg1049,
sg1050,
sg1051,
sg1052,
sg1053,
sg1054,
sg1055,
sg1056,
sg1057,
sg1058,
sg1060,
sg1061,
sg1062,
sg1063,
sg1064,
sg1065,
sg1066,
sg1067,
sg1068,
sg1072,
sg1073,
sg1074,
sg2003,
sg2004,
sg2006,
sg2007,
sg2008,
sg2009,
sg2010,
sg2011,
sg2012,
sg2013,
sg2014,
sg2015,
sg2020,
sg2021,
sg2025,
sg2026,
sg2027,
sg2028,
sg2029,
sg2030,
sg2031,
sg2032,
sg2033,
sg2034,
sg2035,
sg2036,
sg2037,
sg2038,
sg2039,
sg2040,
sg2041,
sg2042,
sg2043,
sg2044,
sg2045,
sg2046,
sg2049,
sg2050,
sg2051,
sg2052,
sg2053,
sg2054,
sg2055,
sg2056,
sg2057,
sg2058,
sg2059,
sg2060,
sg2062,
sg2063,
sg2064,
sg2065,
sg2066,
sg2067,
sg2068,
sg2072,
sg2074,
sg3007,
sg3008,
sg3009,
sg3012,
sg3013,
sg3014,
sg3015,
sg3020,
sg3021,
sg3026,
sg3028,
sg3029,
sg3030,
sg3031,
sg3033,
sg3036,
sg3038,
sg3039,
sg3040,
sg3041,
sg3046,
sg3050,
sg3051,
sg3052,
sg3053,
sg3054,
sg3057,
sg3059,
sg3060,
sg3062,
sg3063,
sg3064,
sg3067,
sg3068,
sg3074,
sg4005,
sg4007,
sg4008,
sg4009,
sg4012,
sg4013,
sg4014,
sg4015,
sg4026,
sg4028,
sg4029,
sg4030,
sg4031,
sg4033,
sg4036,
sg4038,
sg4039,
sg4040,
sg4041,
sg4046,
sg4050,
sg4051,
sg4052,
sg4053,
sg4054,
sg4057,
sg4059,
sg4060,
sg4062,
sg4063,
sg4064,
sg4067,
sg4068,
sg4074,
sg5005,
sg5007,
sg5008,
sg5009,
sg5012,
sg5013,
sg5014,
sg5015,
sg5026,
sg5028,
sg5029,
sg5030,
sg5031,
sg5033,
sg5036,
sg5038,
sg5039,
sg5040,
sg5041,
sg5046,
sg5051,
sg5052,
sg5053,
sg5054,
sg5057,
sg5059,
sg5060,
sg5062,
sg5063,
sg5064,
sg5067,
sg5068,
sg5074,
sg6005,
sg6007,
sg6008,
sg6009,
sg6012,
sg6013,
sg6014,
sg6015,
sg6068,
sg7005,
sg7007,
sg7008,
sg7009,
sg7012,
sg7013,
sg7014,
sg7015,
sg7068,
sg8005,
sg8007,
sg8008,
sg8009,
sg8012,
sg8013,
sg8014,
sg8015,
sg9005,
sg9009,
sg9015,
sg10005,
sg10009,
sg10015,
sg11009,
sg11015,
sg12009,
sg12015,
sg13009,
sg13015,
sg14009,
sg14015,
sg15009,
sg15015,
sg16009,
sg16015,
sg17009,
sg17015,
sgtbxSpaceGroupList,
)
from diffpy.structure.spacegroupmod import (
Rot_mX_mXY_mZ,
Rot_mX_mXY_Z,
Rot_mX_mY_mZ,
Rot_mX_mY_Z,
Rot_mX_mZ_mY,
Rot_mX_mZ_Y,
Rot_mX_Y_mZ,
Rot_mX_Y_Z,
Rot_mX_Z_mY,
Rot_mX_Z_Y,
Rot_mXY_mX_mZ,
Rot_mXY_mX_Z,
Rot_mXY_Y_mZ,
Rot_mXY_Y_Z,
Rot_mY_mX_mZ,
Rot_mY_mX_Z,
Rot_mY_mZ_mX,
Rot_mY_mZ_X,
Rot_mY_X_mZ,
Rot_mY_X_Z,
Rot_mY_XmY_mZ,
Rot_mY_XmY_Z,
Rot_mY_Z_mX,
Rot_mY_Z_X,
Rot_mZ_mX_mY,
Rot_mZ_mX_Y,
Rot_mZ_mY_mX,
Rot_mZ_mY_X,
Rot_mZ_X_mY,
Rot_mZ_X_Y,
Rot_mZ_Y_mX,
Rot_mZ_Y_X,
Rot_X_mY_mZ,
Rot_X_mY_Z,
Rot_X_mZ_mY,
Rot_X_mZ_Y,
Rot_X_XmY_mZ,
Rot_X_XmY_Z,
Rot_X_Y_mZ,
Rot_X_Y_Z,
Rot_X_Z_mY,
Rot_X_Z_Y,
Rot_XmY_mY_mZ,
Rot_XmY_mY_Z,
Rot_XmY_X_mZ,
Rot_XmY_X_Z,
Rot_Y_mX_mZ,
Rot_Y_mX_Z,
Rot_Y_mXY_mZ,
Rot_Y_mXY_Z,
Rot_Y_mZ_mX,
Rot_Y_mZ_X,
Rot_Y_X_mZ,
Rot_Y_X_Z,
Rot_Y_Z_mX,
Rot_Y_Z_X,
Rot_Z_mX_mY,
Rot_Z_mX_Y,
Rot_Z_mY_mX,
Rot_Z_mY_X,
Rot_Z_X_mY,
Rot_Z_X_Y,
Rot_Z_Y_mX,
Rot_Z_Y_X,
SpaceGroup,
SymOp,
Tr_0_0_0,
Tr_0_0_12,
Tr_0_0_13,
Tr_0_0_14,
Tr_0_0_16,
Tr_0_0_23,
Tr_0_0_34,
Tr_0_0_56,
Tr_0_12_0,
Tr_0_12_12,
Tr_0_12_14,
Tr_0_12_34,
Tr_12_0_0,
Tr_12_0_12,
Tr_12_0_14,
Tr_12_0_34,
Tr_12_12_0,
Tr_12_12_12,
Tr_12_12_14,
Tr_12_12_34,
Tr_13_23_16,
Tr_13_23_23,
Tr_14_14_14,
Tr_14_14_34,
Tr_14_34_14,
Tr_14_34_34,
Tr_23_13_13,
Tr_23_13_56,
Tr_34_14_14,
Tr_34_14_34,
Tr_34_34_14,
Tr_34_34_34,
)
# Import SpaceGroup objects --------------------------------------------------
SpaceGroupList = mmLibSpaceGroupList + sgtbxSpaceGroupList
[docs]
def GetSpaceGroup(sgid):
"""Returns the SpaceGroup instance for the given identifier.
Parameters
----------
sgid : str, int
space group symbol, either `short_name` or `pdb_name`,
whatever it means in mmlib. Can be also an integer.
Returns
-------
SpaceGroup
The SpaceGroup object for the given identifier.
Raises
------
ValueError
When the identifier is not found.
"""
if not _sg_lookup_table:
_buildSGLookupTable()
if sgid in _sg_lookup_table:
return _sg_lookup_table[sgid]
# Try different versions of sgid, first make sure it is a string
emsg = "Unknown space group identifier %r" % sgid
if not isinstance(sgid, str):
raise ValueError(emsg)
sgbare = sgid.strip()
# short_name case adjusted
sgkey = sgbare.replace(" ", "")
sgkey = sgkey[:1].upper() + sgkey[1:].lower()
if sgkey in _sg_lookup_table:
return _sg_lookup_table[sgkey]
# pdb_name case adjusted
sgkey = sgbare[:1].upper() + sgbare[1:].lower()
if sgkey in _sg_lookup_table:
return _sg_lookup_table[sgkey]
# nothing worked, sgid is unknown identifier
raise ValueError(emsg)
[docs]
def IsSpaceGroupIdentifier(sgid):
"""Check if identifier can be used as an argument to `GetSpaceGroup`.
Returns
-------
bool
"""
try:
GetSpaceGroup(sgid)
rv = True
except ValueError:
rv = False
return rv
[docs]
def FindSpaceGroup(symops, shuffle=False):
"""Lookup SpaceGroup from a given list of symmetry operations.
Parameters
----------
symops : list
The list of `SymOp` objects for which to find SpaceGroup.
shuffle : bool, Optional
Flag for allowing different order of symops in the returned
SpaceGroup. The default is ``False``.
Returns
-------
SpaceGroup
The SpaceGroup object with equivalent list of symmetry
operations. Return predefined SpaceGroup instance when
symmetry operations have the same order or when the
`shuffle` flag is set.
Raises
------
ValueError
When `symops` do not match any known SpaceGroup.
"""
tb = _getSGHashLookupTable()
hh = _hashSymOpList(symops)
if hh not in tb:
raise ValueError("Cannot find SpaceGroup for the specified symops.")
rv = tb[hh]
if not shuffle:
zz = zip_longest(rv.iter_symops(), symops, fillvalue="")
sameorder = all(str(o0) == str(o1) for o0, o1 in zz)
if not sameorder:
rv = copy.copy(rv)
rv.symop_list = symops
return rv
def _hashSymOpList(symops):
"""Return hash value for a sequence of `SymOp` objects.
The symops are sorted so the results is independent of symops order.
Parameters
----------
symops : sequence
The sequence of `SymOp` objects to be hashed
Returns
-------
int
The hash value.
"""
ssop = sorted(str(o) for o in symops)
rv = hash(tuple(ssop))
return rv
def _buildSGLookupTable():
"""Rebuild space group lookup table from the `SpaceGroupList` data.
This routine updates the global `_sg_lookup_table` dictionary.
"""
_sg_lookup_table.clear()
for sg in SpaceGroupList:
_sg_lookup_table.setdefault(sg.number, sg)
_sg_lookup_table.setdefault(str(sg.number), sg)
_sg_lookup_table.setdefault(sg.short_name, sg)
_sg_lookup_table.setdefault(sg.pdb_name, sg)
# extra aliases obtained from matching code in
# cctbx::sgtbx::symbols::find_main_symbol_dict_entry
alias_hmname = [
("Pm3", "P m -3"),
("Pn3", "P n -3"),
("Fm3", "F m -3"),
("Fd3", "F d -3"),
("Im3", "I m -3"),
("Pa3", "P a -3"),
("Ia3", "I a -3"),
("Pm3m", "P m -3 m"),
("Pn3n", "P n -3 n"),
("Pm3n", "P m -3 n"),
("Pn3m", "P n -3 m"),
("Fm3m", "F m -3 m"),
("Fm3c", "F m -3 c"),
("Fd3m", "F d -3 m"),
("Fd3c", "F d -3 c"),
("Im3m", "I m -3 m"),
("Ia3d", "I a -3 d"),
]
for a, hm in alias_hmname:
hmbare = hm.replace(" ", "")
_sg_lookup_table.setdefault(a, _sg_lookup_table[hmbare])
# make sure None does not sneak into the dictionary
assert None not in _sg_lookup_table
return
_sg_lookup_table = {}
def _getSGHashLookupTable():
"""Return lookup table of symop hashes to standard `SpaceGroup` objects."""
if _sg_hash_lookup_table:
return _sg_hash_lookup_table
for sg in SpaceGroupList:
h = _hashSymOpList(sg.symop_list)
_sg_hash_lookup_table[h] = sg
assert len(_sg_hash_lookup_table) == len(SpaceGroupList)
return _getSGHashLookupTable()
_sg_hash_lookup_table = {}
# silence pyflakes checker
assert all(
o is not None
for o in (
SpaceGroup,
SymOp,
Rot_X_Y_Z,
Rot_mX_mY_mZ,
Rot_mX_Y_mZ,
Rot_X_mY_Z,
Rot_mX_mY_Z,
Rot_X_mY_mZ,
Rot_mX_Y_Z,
Rot_X_Y_mZ,
Rot_mY_X_Z,
Rot_Y_mX_Z,
Rot_Y_mX_mZ,
Rot_mY_X_mZ,
Rot_Y_X_mZ,
Rot_mY_mX_mZ,
Rot_mY_mX_Z,
Rot_Y_X_Z,
Rot_mY_XmY_Z,
Rot_mXY_mX_Z,
Rot_Z_X_Y,
Rot_Y_Z_X,
Rot_Y_mXY_mZ,
Rot_XmY_X_mZ,
Rot_mZ_mX_mY,
Rot_mY_mZ_mX,
Rot_mXY_Y_mZ,
Rot_X_XmY_mZ,
Rot_XmY_mY_mZ,
Rot_mX_mXY_mZ,
Rot_mX_mZ_mY,
Rot_mZ_mY_mX,
Rot_mXY_Y_Z,
Rot_X_XmY_Z,
Rot_XmY_mY_Z,
Rot_mX_mXY_Z,
Rot_X_Z_Y,
Rot_Z_Y_X,
Rot_Y_mXY_Z,
Rot_XmY_X_Z,
Rot_mY_XmY_mZ,
Rot_mXY_mX_mZ,
Rot_Z_mX_mY,
Rot_mZ_mX_Y,
Rot_mZ_X_mY,
Rot_mY_Z_mX,
Rot_Y_mZ_mX,
Rot_mY_mZ_X,
Rot_mZ_X_Y,
Rot_Z_X_mY,
Rot_Z_mX_Y,
Rot_Y_mZ_X,
Rot_mY_Z_X,
Rot_Y_Z_mX,
Rot_X_Z_mY,
Rot_mX_Z_Y,
Rot_X_mZ_Y,
Rot_Z_Y_mX,
Rot_Z_mY_X,
Rot_mZ_Y_X,
Rot_mX_Z_mY,
Rot_mX_mZ_Y,
Rot_X_mZ_mY,
Rot_Z_mY_mX,
Rot_mZ_Y_mX,
Rot_mZ_mY_X,
Tr_0_0_0,
Tr_0_12_0,
Tr_12_12_0,
Tr_0_0_12,
Tr_12_12_12,
Tr_0_12_12,
Tr_12_0_12,
Tr_12_0_0,
Tr_14_14_14,
Tr_14_34_34,
Tr_34_14_34,
Tr_34_34_14,
Tr_0_0_14,
Tr_0_0_34,
Tr_0_12_14,
Tr_12_0_34,
Tr_12_12_14,
Tr_12_12_34,
Tr_0_12_34,
Tr_12_0_14,
Tr_0_0_13,
Tr_0_0_23,
Tr_23_13_13,
Tr_13_23_23,
Tr_23_13_56,
Tr_13_23_16,
Tr_0_0_56,
Tr_0_0_16,
Tr_34_14_14,
Tr_34_34_34,
Tr_14_14_34,
Tr_14_34_14,
sg1,
sg2,
sg3,
sg4,
sg5,
sg6,
sg7,
sg8,
sg9,
sg10,
sg11,
sg12,
sg13,
sg14,
sg15,
sg16,
sg17,
sg18,
sg19,
sg20,
sg21,
sg22,
sg23,
sg24,
sg25,
sg26,
sg27,
sg28,
sg29,
sg30,
sg31,
sg32,
sg33,
sg34,
sg35,
sg36,
sg37,
sg38,
sg39,
sg40,
sg41,
sg42,
sg43,
sg44,
sg45,
sg46,
sg47,
sg48,
sg49,
sg50,
sg51,
sg52,
sg53,
sg54,
sg55,
sg56,
sg57,
sg58,
sg59,
sg60,
sg61,
sg62,
sg63,
sg64,
sg65,
sg66,
sg67,
sg68,
sg69,
sg70,
sg71,
sg72,
sg73,
sg74,
sg75,
sg76,
sg77,
sg78,
sg79,
sg80,
sg81,
sg82,
sg83,
sg84,
sg85,
sg86,
sg87,
sg88,
sg89,
sg90,
sg91,
sg92,
sg93,
sg94,
sg95,
sg96,
sg97,
sg98,
sg99,
sg100,
sg101,
sg102,
sg103,
sg104,
sg105,
sg106,
sg107,
sg108,
sg109,
sg110,
sg111,
sg112,
sg113,
sg114,
sg115,
sg116,
sg117,
sg118,
sg119,
sg120,
sg121,
sg122,
sg123,
sg124,
sg125,
sg126,
sg127,
sg128,
sg129,
sg130,
sg131,
sg132,
sg133,
sg134,
sg135,
sg136,
sg137,
sg138,
sg139,
sg140,
sg141,
sg142,
sg143,
sg144,
sg145,
sg146,
sg1146,
sg147,
sg148,
sg1148,
sg149,
sg150,
sg151,
sg152,
sg153,
sg154,
sg155,
sg1155,
sg156,
sg157,
sg158,
sg159,
sg160,
sg1160,
sg161,
sg1161,
sg162,
sg163,
sg164,
sg165,
sg166,
sg1166,
sg167,
sg1167,
sg168,
sg169,
sg170,
sg171,
sg172,
sg173,
sg174,
sg175,
sg176,
sg177,
sg178,
sg179,
sg180,
sg181,
sg182,
sg183,
sg184,
sg185,
sg186,
sg187,
sg188,
sg189,
sg190,
sg191,
sg192,
sg193,
sg194,
sg195,
sg196,
sg197,
sg198,
sg199,
sg200,
sg201,
sg202,
sg203,
sg204,
sg205,
sg206,
sg207,
sg208,
sg209,
sg210,
sg211,
sg212,
sg213,
sg214,
sg215,
sg216,
sg217,
sg218,
sg219,
sg220,
sg221,
sg222,
sg223,
sg224,
sg225,
sg226,
sg227,
sg228,
sg229,
sg230,
sg1003,
sg1004,
sg3004,
sg1005,
sg2005,
sg3005,
sg1006,
sg1007,
sg1008,
sg1009,
sg1010,
sg1011,
sg1012,
sg1013,
sg1014,
sg1015,
sg1017,
sg2017,
sg1018,
sg2018,
sg3018,
sg1020,
sg1021,
sg1022,
sg1023,
sg1059,
sg1094,
sg1197,
sg2003,
sg2004,
sg4005,
sg5005,
sg6005,
sg7005,
sg8005,
sg9005,
sg10005,
sg2006,
sg2007,
sg3007,
sg4007,
sg5007,
sg6007,
sg7007,
sg8007,
sg2008,
sg3008,
sg4008,
sg5008,
sg6008,
sg7008,
sg8008,
sg2009,
sg3009,
sg4009,
sg5009,
sg6009,
sg7009,
sg8009,
sg9009,
sg10009,
sg11009,
sg12009,
sg13009,
sg14009,
sg15009,
sg16009,
sg17009,
sg2010,
sg2011,
sg2012,
sg3012,
sg4012,
sg5012,
sg6012,
sg7012,
sg8012,
sg2013,
sg3013,
sg4013,
sg5013,
sg6013,
sg7013,
sg8013,
sg2014,
sg3014,
sg4014,
sg5014,
sg6014,
sg7014,
sg8014,
sg2015,
sg3015,
sg4015,
sg5015,
sg6015,
sg7015,
sg8015,
sg9015,
sg10015,
sg11015,
sg12015,
sg13015,
sg14015,
sg15015,
sg16015,
sg17015,
sg2020,
sg3020,
sg2021,
sg3021,
sg1025,
sg2025,
sg1026,
sg2026,
sg3026,
sg4026,
sg5026,
sg1027,
sg2027,
sg1028,
sg2028,
sg3028,
sg4028,
sg5028,
sg1029,
sg2029,
sg3029,
sg4029,
sg5029,
sg1030,
sg2030,
sg3030,
sg4030,
sg5030,
sg1031,
sg2031,
sg3031,
sg4031,
sg5031,
sg1032,
sg2032,
sg1033,
sg2033,
sg3033,
sg4033,
sg5033,
sg1034,
sg2034,
sg1035,
sg2035,
sg1036,
sg2036,
sg3036,
sg4036,
sg5036,
sg1037,
sg2037,
sg1038,
sg2038,
sg3038,
sg4038,
sg5038,
sg1039,
sg2039,
sg3039,
sg4039,
sg5039,
sg1040,
sg2040,
sg3040,
sg4040,
sg5040,
sg1041,
sg2041,
sg3041,
sg4041,
sg5041,
sg1042,
sg2042,
sg1043,
sg2043,
sg1044,
sg2044,
sg1045,
sg2045,
sg1046,
sg2046,
sg3046,
sg4046,
sg5046,
sg1049,
sg2049,
sg1050,
sg2050,
sg3050,
sg4050,
sg1051,
sg2051,
sg3051,
sg4051,
sg5051,
sg1052,
sg2052,
sg3052,
sg4052,
sg5052,
sg1053,
sg2053,
sg3053,
sg4053,
sg5053,
sg1054,
sg2054,
sg3054,
sg4054,
sg5054,
sg1055,
sg2055,
sg1056,
sg2056,
sg1057,
sg2057,
sg3057,
sg4057,
sg5057,
sg1058,
sg2058,
sg2059,
sg3059,
sg4059,
sg5059,
sg1060,
sg2060,
sg3060,
sg4060,
sg5060,
sg1061,
sg1062,
sg2062,
sg3062,
sg4062,
sg5062,
sg1063,
sg2063,
sg3063,
sg4063,
sg5063,
sg1064,
sg2064,
sg3064,
sg4064,
sg5064,
sg1065,
sg2065,
sg1066,
sg2066,
sg1067,
sg2067,
sg3067,
sg4067,
sg5067,
sg1068,
sg2068,
sg3068,
sg4068,
sg5068,
sg6068,
sg7068,
sg1072,
sg2072,
sg1073,
sg1074,
sg2074,
sg3074,
sg4074,
sg5074,
)
)