molstar
Version:
A comprehensive macromolecular library.
1,524 lines (1,523 loc) • 47.9 kB
JavaScript
/**
* Copyright (c) 2018-2019 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author David Sehnal <david.sehnal@gmail.com>
* @author Alexander Rose <alexander.rose@weirdbyte.de>
*/
export const TransformData = [
[ ],
[ ],
[ ],
[-1.0, 0.0, 0.0, 0.0],
[ ],
[ ],
[ ],
[ ],
[-1.0, 0.0, 0.0, 0.5],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[-1.0, 0.0, 0.0, 0.25],
[ ],
[ ],
[ ],
[ ],
[ ],
[-1.0, 0.0, 0.0, 0.75],
[ ],
[ ],
[ ],
[-1.0, 1.0, 0.0, 0.0],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[-1.0, 1.0, 0.0, 2 / 3],
[-1.0, 0.0, 0.0, 1 / 3],
[ ],
[ ],
[ ],
[ ],
[-1.0, 1.0, 0.0, 1 / 3],
[-1.0, 0.0, 0.0, 2 / 3],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
];
export const OperatorData = [
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
];
export const GroupData = [
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ], // 'P 1 21/n 1'
// X,Y,Z
// -X+1/2,Y+1/2,-Z+1/2
// -X,-Y,-Z
// X+1/2,-Y+1/2,Z+1/2
[ ], // 'P 1 21/a 1'
// X,Y,Z
// -X+1/2,Y+1/2,-Z
// -X,-Y,-Z
// X+1/2,-Y+1/2,Z
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
[ ],
];
export const SpacegroupNameToIndexMap = {
'P 1': 0,
'P -1': 1,
'P 1 2 1': 2,
'P 1 21 1': 3,
'C 1 2 1': 4,
'P 1 m 1': 5,
'P 1 c 1': 6,
'C 1 m 1': 7,
'C 1 c 1': 8,
'P 1 2/m 1': 9,
'P 1 21/m 1': 10,
'C 1 2/m 1': 11,
'P 1 2/c 1': 12,
'P 1 21/c 1': 13,
'C 1 2/c 1': 14,
'P 2 2 2': 15,
'P 2 2 21': 16,
'P 21 21 2': 17,
'P 21 21 21': 18,
'C 2 2 21': 19,
'C 2 2 2': 20,
'F 2 2 2': 21,
'I 2 2 2': 22,
'I 21 21 21': 23,
'P m m 2': 24,
'P m c 21': 25,
'P c c 2': 26,
'P m a 2': 27,
'P c a 21': 28,
'P n c 2': 29,
'P m n 21': 30,
'P b a 2': 31,
'P n a 21': 32,
'P n n 2': 33,
'C m m 2': 34,
'C m c 21': 35,
'C c c 2': 36,
'A m m 2': 37,
'A b m 2': 38,
'A m a 2': 39,
'A b a 2': 40,
'F m m 2': 41,
'F d d 2': 42,
'I m m 2': 43,
'I b a 2': 44,
'I m a 2': 45,
'P 2/m 2/m 2/m': 46,
'P m m m': 46,
'P 2/n 2/n 2/n': 47,
'P n n n': 47,
'P 2/c 2/c 2/m': 48,
'P c c m': 48,
'P 2/b 2/a 2/n': 49,
'P b a n': 49,
'P 21/m 2/m 2/a': 50,
'P m m a': 50,
'P 2/n 21/n 2/a': 51,
'P n n a': 51,
'P 2/m 2/n 21/a': 52,
'P m n a': 52,
'P 21/c 2/c 2/a': 53,
'P c c a': 53,
'P 21/b 21/a 2/m': 54,
'P b a m': 54,
'P 21/c 21/c 2/n': 55,
'P c c n': 55,
'P 2/b 21/c 21/m': 56,
'P b c m': 56,
'P 21/n 21/n 2/m': 57,
'P n n m': 57,
'P 21/m 21/m 2/n': 58,
'P m m n': 58,
'P 21/b 2/c 21/n': 59,
'P b c n': 59,
'P 21/b 21/c 21/a': 60,
'P b c a': 60,
'P 21/n 21/m 21/a': 61,
'P n m a': 61,
'C 2/m 2/c 21/m': 62,
'C m c m': 62,
'C 2/m 2/c 21/a': 63,
'C m c a': 63,
'C 2/m 2/m 2/m': 64,
'C m m m': 64,
'C 2/c 2/c 2/m': 65,
'C c c m': 65,
'C 2/m 2/m 2/a': 66,
'C m m a': 66,
'C 2/c 2/c 2/a': 67,
'C c c a': 67,
'F 2/m 2/m 2/m': 68,
'F m m m': 68,
'F 2/d 2/d 2/d': 69,
'F d d d': 69,
'I 2/m 2/m 2/m': 70,
'I m m m': 70,
'I 2/b 2/a 2/m': 71,
'I b a m': 71,
'I 21/b 21/c 21/a': 72,
'I b c a': 72,
'I 21/m 21/m 21/a': 73,
'I m m a': 73,
'P 4': 74,
'P 41': 75,
'P 42': 76,
'P 43': 77,
'I 4': 78,
'I 41': 79,
'P -4': 80,
'I -4': 81,
'P 4/m': 82,
'P 42/m': 83,
'P 4/n': 84,
'P 42/n': 85,
'I 4/m': 86,
'I 41/a': 87,
'P 4 2 2': 88,
'P 4 21 2': 89,
'P 41 2 2': 90,
'P 41 21 2': 91,
'P 42 2 2': 92,
'P 42 21 2': 93,
'P 43 2 2': 94,
'P 43 21 2': 95,
'I 4 2 2': 96,
'I 41 2 2': 97,
'P 4 m m': 98,
'P 4 b m': 99,
'P 42 c m': 100,
'P 42 n m': 101,
'P 4 c c': 102,
'P 4 n c': 103,
'P 42 m c': 104,
'P 42 b c': 105,
'I 4 m m': 106,
'I 4 c m': 107,
'I 41 m d': 108,
'I 41 c d': 109,
'P -4 2 m': 110,
'P -4 2 c': 111,
'P -4 21 m': 112,
'P -4 21 c': 113,
'P -4 m 2': 114,
'P -4 c 2': 115,
'P -4 b 2': 116,
'P -4 n 2': 117,
'I -4 m 2': 118,
'I -4 c 2': 119,
'I -4 2 m': 120,
'I -4 2 d': 121,
'P 4/m 2/m 2/m': 122,
'P4/m m m': 122,
'P 4/m 2/c 2/c': 123,
'P4/m c c': 123,
'P 4/n 2/b 2/m': 124,
'P4/n b m': 124,
'P 4/n 2/n 2/c': 125,
'P4/n n c': 125,
'P 4/m 21/b 2/m': 126,
'P4/m b m': 126,
'P 4/m 21/n 2/c': 127,
'P4/m n c': 127,
'P 4/n 21/m 2/m': 128,
'P4/n m m': 128,
'P 4/n 2/c 2/c': 129,
'P4/n c c': 129,
'P 42/m 2/m 2/c': 130,
'P42/m m c': 130,
'P 42/m 2/c 2/m': 131,
'P42/m c m': 131,
'P 42/n 2/b 2/c': 132,
'P42/n b c': 132,
'P 42/n 2/n 2/m': 133,
'P42/n n m': 133,
'P 42/m 21/b 2/c': 134,
'P42/m b c': 134,
'P 42/m 21/n 2/m': 135,
'P42/m n m': 135,
'P 42/n 21/m 2/c': 136,
'P42/n m c': 136,
'P 42/n 21/c 2/m': 137,
'P42/n c m': 137,
'I 4/m 2/m 2/m': 138,
'I4/m m m': 138,
'I 4/m 2/c 2/m': 139,
'I4/m c m': 139,
'I 41/a 2/m 2/d': 140,
'I41/a m d': 140,
'I 41/a 2/c 2/d': 141,
'I41/a c d': 141,
'P 3': 142,
'P 31': 143,
'P 32': 144,
'H 3': 145,
'R 3': 146,
'P -3': 147,
'H -3': 148,
'R -3': 149,
'P 3 1 2': 150,
'P 3 2 1': 151,
'P 31 1 2': 152,
'P 31 2 1': 153,
'P 32 1 2': 154,
'P 32 2 1': 155,
'H 3 2': 156,
'R 3 2': 157,
'P 3 m 1': 158,
'P 3 1 m': 159,
'P 3 c 1': 160,
'P 3 1 c': 161,
'H 3 m': 162,
'R 3 m': 163,
'H 3 c': 164,
'R 3 c': 165,
'P -3 1 2/m': 166,
'P -3 1 m': 166,
'P -3 1 2/c': 167,
'P -3 1 c': 167,
'P -3 2/m 1': 168,
'P -3 m 1': 168,
'P -3 2/c 1': 169,
'P -3 c 1': 169,
'H -3 2/m': 170,
'H -3 m': 170,
'R -3 2/m': 171,
'R -3 m': 171,
'H -3 2/c': 172,
'H -3 c': 172,
'R -3 2/c': 173,
'R -3 c': 173,
'P 6': 174,
'P 61': 175,
'P 65': 176,
'P 62': 177,
'P 64': 178,
'P 63': 179,
'P -6': 180,
'P 6/m': 181,
'P 63/m': 182,
'P 6 2 2': 183,
'P 61 2 2': 184,
'P 65 2 2': 185,
'P 62 2 2': 186,
'P 64 2 2': 187,
'P 63 2 2': 188,
'P 6 m m': 189,
'P 6 c c': 190,
'P 63 c m': 191,
'P 63 m c': 192,
'P -6 m 2': 193,
'P -6 c 2': 194,
'P -6 2 m': 195,
'P -6 2 c': 196,
'P 6/m 2/m 2/m': 197,
'P 6/m m m': 197,
'P 6/m 2/c 2/c': 198,
'P 6/m c c': 198,
'P 63/m 2/c 2/m': 199,
'P 63/m c m': 199,
'P 63/m 2/m 2/c': 200,
'P 63/m m c': 200,
'P 2 3': 201,
'F 2 3': 202,
'I 2 3': 203,
'P 21 3': 204,
'I 21 3': 205,
'P 2/m -3': 206,
'P m -3': 206,
'P 2/n -3': 207,
'P n -3': 207,
'F 2/m -3': 208,
'F m -3': 208,
'F 2/d -3': 209,
'F d -3': 209,
'I 2/m -3': 210,
'I m -3': 210,
'P 21/a -3': 211,
'P a -3': 211,
'I 21/a -3': 212,
'I a -3': 212,
'P 4 3 2': 213,
'P 42 3 2': 214,
'F 4 3 2': 215,
'F 41 3 2': 216,
'I 4 3 2': 217,
'P 43 3 2': 218,
'P 41 3 2': 219,
'I 41 3 2': 220,
'P -4 3 m': 221,
'F -4 3 m': 222,
'I -4 3 m': 223,
'P -4 3 n': 224,
'F -4 3 c': 225,
'I -4 3 d': 226,
'P 4/m -3 2/m': 227,
'P m -3 m': 227,
'P 4/n -3 2/n': 228,
'P n -3 n': 228,
'P 42/m -3 2/n': 229,
'P m -3 n': 229,
'P 42/n -3 2/m': 230,
'P n -3 m': 230,
'F 4/m -3 2/m': 231,
'F m -3 m': 231,
'F 4/m -3 2/c': 232,
'F m -3 c': 232,
'F 41/d -3 2/m': 233,
'F d -3 m': 233,
'F 41/d -3 2/c': 234,
'F d -3 c': 234,
'I 4/m -3 2/m': 235,
'I m -3 m': 235,
'I 41/a -3 2/d': 236,
'I a -3 d': 236,
'P 1 1 2': 237,
'P 1 1 21': 238,
'B 1 1 2': 239,
'B 2': 239,
'A 1 2 1': 240,
'C 1 21 1': 241,
'I 1 2 1': 242,
'I 2': 242,
'I 1 21 1': 243,
'P 1 1 m': 244,
'P 1 1 b': 245,
'B 1 1 m': 246,
'B 1 1 b': 247,
'P 1 1 2/m': 248,
'P 1 1 21/m': 249,
'B 1 1 2/m': 250,
'P 1 1 2/b': 251,
'P 1 1 21/b': 252,
'P 1 21/n 1': 253,
'P 1 21/a 1': 254,
'B 1 1 2/b': 255,
'P 21 2 2': 256,
'P 2 21 2': 257,
'P 21 21 2 (a)': 258,
'P 21 2 21': 259,
'P 2 21 21': 260,
'C 2 2 21a)': 261,
'C 2 2 2a': 262,
'F 2 2 2a': 263,
'I 2 2 2a': 264,
'P 21/m 21/m 2/n a': 265,
'P 42 21 2a': 266,
'I 2 3a': 267,
};
export function getSpacegroupIndexFromNumber(num) {
// 38 spacegroup variants as given CCP4s symop.lib
switch (num) {
case 1146: return 146;
case 1148: return 149;
case 1155: return 157;
case 1160: return 163;
case 1161: return 165;
case 1166: return 171;
case 1167: return 173;
case 1003: return 237; // 'P 1 1 2' !(dyad along z)
case 1004: return 238; // 'P 1 1 21' !(unique axis c)
case 1005: return 239; // 'B 1 1 2' 'B 2'
case 2005: return 240; // 'A 1 2 1'
case 3005: return 241; // 'C 1 21 1' ! (Origin on screw at 1/4X)
case 4005: return 242; // 'I 1 2 1' 'I 2' !!! GJK @ 2003-06-02
case 5005: return 243; // 'I 1 21 1'
case 1006: return 244; // 'P 1 1 m'
case 1007: return 245; // 'P 1 1 b'
case 1008: return 246; // 'B 1 1 m'
case 1009: return 247; // 'B 1 1 b'
case 1010: return 248; // 'P 1 1 2/m'
case 1011: return 249; // 'P 1 1 21/m'
case 1012: return 250; // 'B 1 1 2/m'
case 1013: return 251; // 'P 1 1 2/b'
case 1014: return 252; // 'P 1 1 21/b'
case 2014: return 253; // 'P 1 21/n 1'
case 3014: return 254; // 'P 1 21/a 1'
case 1015: return 255; // 'B 1 1 2/b'
case 1017: return 256; // 'P 21 2 2' !(unique axis a)
case 2017: return 257; // 'P 2 21 2' !(unique axis b)
case 1018: return 258; // 'P 21 21 2 (a)' ! origin on 21 21, shift (1/4,1/4,0)
case 2018: return 259; // 'P 21 2 21' !(unique axis b)
case 3018: return 260; // 'P 2 21 21' !(unique axis a)
case 1020: return 261; // 'C 2 2 21a)' ! P212121 with C centring, shift(1/4,0,0)
case 1021: return 262; // 'C 2 2 2a' ! C21212a origin on 21 21
case 1022: return 263; // 'F 2 2 2a' ! same as 1018 with face centring shift (1/4,0,0)
case 1023: return 264; // 'I 2 2 2a' ! as 1018 with origin shift (1/4,1/4,1/4)
case 1059: return 265; // 'P 21/m 21/m 2/n a'
case 1094: return 266; // 'P 42 21 2a' ! (as P21212a) origin on 21 21 ie Shift 1/4,1/4,1/4
case 1197: return 267; // 'I 2 3a' ! Expansion of 1023 which is an expansion of 1018
}
let offset = 0;
if (num > 146)
++offset;
if (num > 148)
++offset;
if (num > 155)
++offset;
if (num > 160)
++offset;
if (num > 161)
++offset;
if (num > 166)
++offset;
if (num > 167)
++offset;
return num - 1 + offset;
}
export function getSpacegroupNumberFromIndex(idx) {
if (idx < 146)
return idx + 1;
if (idx === 146)
return 1146;
if (idx < 149)
return idx + 1 - 1;
if (idx === 149)
return 1148;
if (idx < 157)
return idx + 1 - 2;
if (idx === 157)
return 1155;
if (idx < 163)
return idx + 1 - 3;
if (idx === 163)
return 1160;
if (idx < 165)
return idx + 1 - 4;
if (idx === 165)
return 1161;
if (idx < 171)
return idx + 1 - 5;
if (idx === 171)
return 1166;
if (idx < 173)
return idx + 1 - 6;
if (idx === 173)
return 1167;
if (idx < 237)
return idx + 1 - 7;
if (idx === 237)
return 1003;
if (idx === 238)
return 1004;
if (idx === 239)
return 1005;
if (idx === 240)
return 2005;
if (idx === 241)
return 3005;
if (idx === 242)
return 4005;
if (idx === 243)
return 5005;
if (idx === 244)
return 1006;
if (idx === 245)
return 1007;
if (idx === 246)
return 1008;
if (idx === 247)
return 1009;
if (idx === 248)
return 1010;
if (idx === 249)
return 1011;
if (idx === 250)
return 1012;
if (idx === 251)
return 1013;
if (idx === 252)
return 1014;
if (idx === 253)
return 2014;
if (idx === 254)
return 3014;
if (idx === 255)
return 1015;
if (idx === 256)
return 1017;
if (idx === 257)
return 2017;
if (idx === 258)
return 1018;
if (idx === 259)
return 2018;
if (idx === 260)
return 3018;
if (idx === 261)
return 1020;
if (idx === 262)
return 1021;
if (idx === 263)
return 1022;
if (idx === 264)
return 1023;
if (idx === 265)
return 1059;
if (idx === 266)
return 1094;
if (idx === 267)
return 1197;
throw new Error(`unknown spacegroup index '${idx}'`);
}
/** Maps spacegroup index to Hermann-Mauguin spacegroup name */
export const SpacegroupName = (function () {
const names = Object.create(null);
for (const n of Object.keys(SpacegroupNameToIndexMap)) {
names[SpacegroupNameToIndexMap[n]] = n;
}
return names;
}());
/** Maps spacegroup index to spacegroup number from International Tables for Crystallography */
export const SpacegroupNumber = (function () {
const numbers = Object.create(null);
for (const n of Object.keys(SpacegroupNameToIndexMap)) {
const idx = SpacegroupNameToIndexMap[n];
numbers[idx] = getSpacegroupNumberFromIndex(idx);
}
return numbers;
}());
/** return -1 if the spacegroup does not exist */
export function getSpacegroupIndex(nameOrNumber) {
const index = typeof nameOrNumber === 'number'
? getSpacegroupIndexFromNumber(nameOrNumber)
: SpacegroupNameToIndexMap[nameOrNumber];
if (typeof index === 'undefined' || typeof SpacegroupName[index] === 'undefined')
return -1;
return index;
}