@ccp-nc/crystcif-parse
Version:
A parser for crystallographic CIF files
2,418 lines (2,412 loc) • 947 kB
JavaScript
#!/usr/bin/env node
// src/bin/validate.ts
import { readFile } from "fs/promises";
// src/cryst.ts
import * as mjs from "mathjs";
import mendeleev from "mendeleev";
// src/utils.ts
function deepClone(obj) {
return JSON.parse(JSON.stringify(obj));
}
function cross(v1, v2) {
return [
v1[1] * v2[2] - v1[2] * v2[1],
v1[2] * v2[0] - v1[0] * v2[2],
v1[0] * v2[1] - v1[1] * v2[0]
];
}
function norm(v) {
return Math.sqrt(v.reduce((s, x) => s + x * x, 0));
}
function unit(v) {
const n = norm(v);
return v.map((x) => x / n);
}
function mod1(v) {
return v.map((x) => {
x = x % 1;
return x >= 0 ? x : x + 1;
});
}
var _deg2rad = Math.PI / 180;
function degToRad(deg) {
return deg * _deg2rad;
}
function shortestPeriodicLength(fx) {
let r = norm(fx);
for (let dx = -1; dx < 2; dx++) {
for (let dy = -1; dy < 2; dy++) {
for (let dz = -1; dz < 2; dz++) {
if (dx === 0 && dy === 0 && dz === 0) continue;
const df = [fx[0] + dx, fx[1] + dy, fx[2] + dz];
r = Math.min(r, norm(df));
}
}
}
return r;
}
// src/tokens.ts
var sp = " ";
var ht = "\\t";
var eol = "\\r*\\n";
var ordinary_char = `a-zA-Z0-9!%&()*+,\\-./:<=>?@\\\\^\`{\xA6}~`;
var nonblank_char = ordinary_char + `"#$'_;\\[\\]`;
var nonblank_char_nosingle = ordinary_char + '"#$_;\\[\\]';
var nonblank_char_nodouble = ordinary_char + "#$'_;\\[\\]";
var textlead_char = ordinary_char + `"#$'_\\[\\]` + sp + ht;
var anyprint_char = nonblank_char + sp + ht;
var digit = "0-9";
var comments = "(?:#[" + anyprint_char + "]*" + eol + ")+";
var tok_comments = "[" + sp + ht + eol + "]+" + comments;
var whitespace = "(?:" + tok_comments + "|" + sp + "|" + ht + "|" + eol + ")+";
var semicolontext = ";[" + anyprint_char + "]*" + eol + "(?:(?:[" + textlead_char + "][" + anyprint_char + "]*)?" + eol + ")*;";
var squotestring = "'[" + nonblank_char_nosingle + sp + ht + "]*'";
var dquotestring = '"[' + nonblank_char_nodouble + sp + ht + ']*"';
var uquotestring = "[" + eol + sp + ht + "][" + ordinary_char + "][" + nonblank_char + "]*";
var quotestring = "(?:" + squotestring + "|" + dquotestring + ")";
var chrstring = "(?:" + squotestring + "|" + dquotestring + "|" + uquotestring + ")";
var unsigned_int = "[" + digit + "]+";
var integer = "[+\\-]?" + unsigned_int;
var exponent = "[eE]" + integer;
var float_pat = "(?:(?:[+\\-]?(?:[" + digit + "]*\\." + unsigned_int + "|[" + digit + "]+\\.)(?:" + exponent + ")?)|(?:" + integer + exponent + "))";
var number_pat = "(?:" + float_pat + "|" + integer + ")";
var numeric = "(?:(" + number_pat + ")\\((" + unsigned_int + ")\\)|(" + number_pat + "))";
var tag = "_[" + nonblank_char + "]+";
var value = "(\\.|\\?|" + numeric + "|" + chrstring + "|" + semicolontext + ")";
var loop_kw = "[Ll][Oo][Oo][Pp]_";
var loop_header = loop_kw + "(" + whitespace + tag + ")+";
var loop_body = value + "(" + whitespace + value + ")*";
var data_header = "[Dd][Aa][Tt][Aa]_[" + nonblank_char + "]+";
var data_item = "(?:(" + tag + ")" + whitespace + value + "|" + loop_header + loop_body + ")";
var tokenMap = {
end_of_line: eol,
ordinary_char: "[" + ordinary_char + "]",
nonblank_char: "[" + nonblank_char + "]",
textlead_char: "[" + textlead_char + "]",
anyprint_char: "[" + anyprint_char + "]",
digit: "[" + digit + "]",
comments,
tok_comments,
whitespace,
semicolontext,
squotestring,
dquotestring,
uquotestring,
quotestring,
chrstring,
unsigned_int,
integer,
exponent,
float: float_pat,
number: number_pat,
numeric,
tag,
value,
loop_kw,
loop_header,
loop_body,
data_header,
data_item,
reserved: "(data|loop|global|save|stop)"
};
function tokenRegex(tname, start, end, flags) {
let f = flags ?? "g";
if (tname === "reserved") f = "gi";
let restr = tokenMap[tname];
if (start) restr = "^" + restr;
if (end) restr = restr + "$";
return new RegExp(restr, f);
}
// src/parse.ts
var CifValue = class {
constructor(type, value2, prec) {
this.type = type;
this.prec = prec;
switch (type) {
case "int":
case "float":
this.num = value2;
break;
case "string":
case "mstring":
this.text = value2;
break;
default:
break;
}
}
/** Return the underlying numeric or string value. */
get_value() {
return this.num !== void 0 ? this.num : this.text;
}
};
function errormsg(msg, line) {
return new Error(`ERROR @ line ${line}: ${msg}`);
}
function tokenize(cif) {
const eol_re = tokenRegex("end_of_line", false, false);
const all_re = [
tokenRegex("whitespace", false, false),
tokenRegex("quotestring", true),
tokenRegex("semicolontext", true),
tokenRegex("tag", true),
tokenRegex("data_header", true),
tokenRegex("loop_kw", true)
];
const typeNames = ["quotestring", "semicolontext", "tag", "data_headers", "loop_kw"];
const tokenized = [];
let line_index = 1;
let cifsl = cif.slice();
while (cifsl.length > 0) {
let slice_i = 0;
let m_type = 1;
let m = null;
for (; m_type < all_re.length; m_type++) {
m = cifsl.match(all_re[m_type]);
if (m) break;
}
if (m) {
tokenized.push({
val: m[0],
type: typeNames[m_type - 1],
line: line_index
});
slice_i = m[0].length;
} else {
all_re[0].lastIndex = 0;
const w = all_re[0].exec(cifsl);
if (w) {
if (w.index === 0) {
slice_i = w[0].length;
} else {
tokenized.push({
val: cifsl.slice(0, w.index),
type: "unknown",
line: line_index
});
slice_i = w.index + w[0].length;
}
} else {
if (cifsl.length > 0) {
tokenized.push({ val: cifsl, type: "unknown", line: line_index });
slice_i = cifsl.length;
}
}
}
const parsed = cifsl.slice(0, slice_i);
cifsl = cifsl.slice(slice_i);
const newlines = parsed.match(eol_re);
if (newlines) line_index += newlines.length;
}
return tokenized;
}
function parseValue(tok) {
if (tok.type === "quotestring") {
return new CifValue("string", tok.val.slice(1, tok.val.length - 1));
}
if (tok.type === "semicolontext") {
return new CifValue("mstring", tok.val.slice(1, tok.val.length - 1));
}
if (tok.type !== "unknown") return null;
const strval = tok.val;
if (strval.trim() === ".") return new CifValue("N/A");
if (strval.trim() === "?") return new CifValue("?");
const m = tokenRegex("numeric", true, true).exec(strval.trim());
if (m) {
let prec;
let strnum;
if (m[3] === void 0) {
prec = parseInt(m[2], 10);
strnum = m[1];
} else {
strnum = m[3];
}
let type;
let num;
if (tokenRegex("float", true, true).test(strnum)) {
num = parseFloat(strnum);
type = "float";
} else {
num = parseInt(strnum, 10);
type = "int";
}
return new CifValue(type, num, prec);
}
return new CifValue("string", strval);
}
function parseDataBlocks(ciftokens) {
const tagre = tokenRegex("tag");
const data_headers = [];
for (let i = 0; i < ciftokens.length; i++) {
const tok = ciftokens[i];
if (tok.type === "data_headers") {
const name = tok.val.match(tagre);
if (!name || name.length !== 1) throw errormsg("Invalid data header " + tok.val, tok.line);
data_headers.push([i, name[0].slice(1)]);
}
}
return data_headers.map(([idx, name], i) => {
const end = i < data_headers.length - 1 ? data_headers[i + 1][0] : ciftokens.length;
return [name, ciftokens.slice(idx + 1, end)];
});
}
var VTYPES = ["quotestring", "semicolontext", "unknown"];
function parseDataItems(blocktokens) {
const data_items = [];
const btokens = blocktokens.slice();
while (btokens.length > 0) {
const btok = btokens.shift();
if (btok === void 0) break;
switch (btok.type) {
case "tag": {
const valtok = btokens.shift();
if (!valtok || !VTYPES.includes(valtok.type)) {
throw errormsg("Invalid or missing value for tag " + btok.val, btok.line);
}
data_items.push({
tag: btok.val,
type: "single",
value: parseValue(valtok)
});
break;
}
case "loop_kw": {
const header = [];
let ltok = btokens.shift();
let loop_end = btok.line;
while (ltok !== void 0 && ltok.type === "tag") {
header.push(ltok.val);
loop_end = ltok.line;
ltok = btokens.shift();
}
const body = [];
while (ltok !== void 0 && VTYPES.includes(ltok.type)) {
body.push(parseValue(ltok));
loop_end = ltok.line;
ltok = btokens.shift();
}
if (ltok !== void 0) btokens.unshift(ltok);
if (body.length % header.length !== 0) {
throw errormsg("Invalid loop - values must be a multiple of tags", loop_end);
}
const tagn = header.length;
const loopn = body.length / tagn;
for (let i = 0; i < header.length; i++) {
const values = [];
for (let j = 0; j < loopn; j++) values.push(body[j * tagn + i]);
data_items.push({ tag: header[i], type: "loop", value: values });
}
break;
}
default:
break;
}
}
return data_items;
}
function parseCif(ciftext) {
const tk = tokenize(ciftext);
const db = parseDataBlocks(tk);
const cifdict = {};
for (const [name, blockTokens] of db) {
cifdict[name] = {};
const items = parseDataItems(blockTokens);
for (const item of items) {
cifdict[name][item.tag] = item;
}
}
return cifdict;
}
// data/symmetry.json
var symmetry_default = {
"1": {
pointgroup_international: "C1",
schoenflies: "C1^1",
pointgroup_schoenflies: "1",
international_short: "P1",
translations: [[0, 0, 0]],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
]
],
number: 1,
choice: "",
international_full: "P 1",
hall_symbol: "P 1",
international: "P 1",
arithmetic_crystal_class_number: 1,
arithmetic_crystal_class_symbol: "1P"
},
"2": {
pointgroup_international: "Ci",
schoenflies: "Ci^1",
pointgroup_schoenflies: "-1",
international_short: "P-1",
translations: [
[0, 0, 0],
[0, 0, 0]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, -1, 0],
[0, 0, -1]
]
],
number: 2,
choice: "",
international_full: "P -1",
hall_symbol: "-P 1",
international: "P -1",
arithmetic_crystal_class_number: 2,
arithmetic_crystal_class_symbol: "-1P"
},
"3": {
pointgroup_international: "C2",
schoenflies: "C2^1",
pointgroup_schoenflies: "2",
international_short: "P2",
translations: [
[0, 0, 0],
[0, 0, 0]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, 1, 0],
[0, 0, -1]
]
],
number: 3,
choice: "b",
international_full: "P 1 2 1",
hall_symbol: "P 2y",
international: "P 2 = P 1 2 1",
arithmetic_crystal_class_number: 3,
arithmetic_crystal_class_symbol: "2P"
},
"4": {
pointgroup_international: "C2",
schoenflies: "C2^1",
pointgroup_schoenflies: "2",
international_short: "P2",
translations: [
[0, 0, 0],
[0, 0, 0]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, -1, 0],
[0, 0, 1]
]
],
number: 3,
choice: "c",
international_full: "P 1 1 2",
hall_symbol: "P 2",
international: "P 2 = P 1 1 2",
arithmetic_crystal_class_number: 3,
arithmetic_crystal_class_symbol: "2P"
},
"5": {
pointgroup_international: "C2",
schoenflies: "C2^1",
pointgroup_schoenflies: "2",
international_short: "P2",
translations: [
[0, 0, 0],
[0, 0, 0]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, -1, 0],
[0, 0, -1]
]
],
number: 3,
choice: "a",
international_full: "P 2 1 1",
hall_symbol: "P 2x",
international: "P 2 = P 2 1 1",
arithmetic_crystal_class_number: 3,
arithmetic_crystal_class_symbol: "2P"
},
"6": {
pointgroup_international: "C2",
schoenflies: "C2^2",
pointgroup_schoenflies: "2",
international_short: "P2_1",
translations: [
[0, 0, 0],
[0, 0.5, 0]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, 1, 0],
[0, 0, -1]
]
],
number: 4,
choice: "b",
international_full: "P 1 2_1 1",
hall_symbol: "P 2yb",
international: "P 2_1 = P 1 2_1 1",
arithmetic_crystal_class_number: 3,
arithmetic_crystal_class_symbol: "2P"
},
"7": {
pointgroup_international: "C2",
schoenflies: "C2^2",
pointgroup_schoenflies: "2",
international_short: "P2_1",
translations: [
[0, 0, 0],
[0, 0, 0.5]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, -1, 0],
[0, 0, 1]
]
],
number: 4,
choice: "c",
international_full: "P 1 1 2_1",
hall_symbol: "P 2c",
international: "P 2_1 = P 1 1 2_1",
arithmetic_crystal_class_number: 3,
arithmetic_crystal_class_symbol: "2P"
},
"8": {
pointgroup_international: "C2",
schoenflies: "C2^2",
pointgroup_schoenflies: "2",
international_short: "P2_1",
translations: [
[0, 0, 0],
[0.5, 0, 0]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, -1, 0],
[0, 0, -1]
]
],
number: 4,
choice: "a",
international_full: "P 2_1 1 1",
hall_symbol: "P 2xa",
international: "P 2_1 = P 2_1 1 1",
arithmetic_crystal_class_number: 3,
arithmetic_crystal_class_symbol: "2P"
},
"9": {
pointgroup_international: "C2",
schoenflies: "C2^3",
pointgroup_schoenflies: "2",
international_short: "C2",
translations: [
[0, 0, 0],
[0, 0, 0],
[0.5, 0.5, 0],
[0.5, 0.5, 0]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, 1, 0],
[0, 0, -1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, 1, 0],
[0, 0, -1]
]
],
number: 5,
choice: "b1",
international_full: "C 1 2 1",
hall_symbol: "C 2y",
international: "C 2 = C 1 2 1",
arithmetic_crystal_class_number: 4,
arithmetic_crystal_class_symbol: "2C"
},
"10": {
pointgroup_international: "C2",
schoenflies: "C2^3",
pointgroup_schoenflies: "2",
international_short: "C2",
translations: [
[0, 0, 0],
[0, 0, 0],
[0, 0.5, 0.5],
[0, 0.5, 0.5]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, 1, 0],
[0, 0, -1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, 1, 0],
[0, 0, -1]
]
],
number: 5,
choice: "b2",
international_full: "A 1 2 1",
hall_symbol: "A 2y",
international: "C 2 = A 1 2 1",
arithmetic_crystal_class_number: 4,
arithmetic_crystal_class_symbol: "2C"
},
"11": {
pointgroup_international: "C2",
schoenflies: "C2^3",
pointgroup_schoenflies: "2",
international_short: "C2",
translations: [
[0, 0, 0],
[0, 0, 0],
[0.5, 0.5, 0.5],
[0.5, 0.5, 0.5]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, 1, 0],
[0, 0, -1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, 1, 0],
[0, 0, -1]
]
],
number: 5,
choice: "b3",
international_full: "I 1 2 1",
hall_symbol: "I 2y",
international: "C 2 = I 1 2 1",
arithmetic_crystal_class_number: 4,
arithmetic_crystal_class_symbol: "2C"
},
"12": {
pointgroup_international: "C2",
schoenflies: "C2^3",
pointgroup_schoenflies: "2",
international_short: "C2",
translations: [
[0, 0, 0],
[0, 0, 0],
[0, 0.5, 0.5],
[0, 0.5, 0.5]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, -1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, -1, 0],
[0, 0, 1]
]
],
number: 5,
choice: "c1",
international_full: "A 1 1 2",
hall_symbol: "A 2",
international: "C 2 = A 1 1 2",
arithmetic_crystal_class_number: 4,
arithmetic_crystal_class_symbol: "2C"
},
"13": {
pointgroup_international: "C2",
schoenflies: "C2^3",
pointgroup_schoenflies: "2",
international_short: "C2",
translations: [
[0, 0, 0],
[0, 0, 0],
[0.5, 0, 0.5],
[0.5, 0, 0.5]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, -1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, -1, 0],
[0, 0, 1]
]
],
number: 5,
choice: "c2",
international_full: "B 1 1 2",
hall_symbol: "B 2",
international: "C 2 = B 1 1 2 = B 2",
arithmetic_crystal_class_number: 4,
arithmetic_crystal_class_symbol: "2C"
},
"14": {
pointgroup_international: "C2",
schoenflies: "C2^3",
pointgroup_schoenflies: "2",
international_short: "C2",
translations: [
[0, 0, 0],
[0, 0, 0],
[0.5, 0.5, 0.5],
[0.5, 0.5, 0.5]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, -1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, -1, 0],
[0, 0, 1]
]
],
number: 5,
choice: "c3",
international_full: "I 1 1 2",
hall_symbol: "I 2",
international: "C 2 = I 1 1 2",
arithmetic_crystal_class_number: 4,
arithmetic_crystal_class_symbol: "2C"
},
"15": {
pointgroup_international: "C2",
schoenflies: "C2^3",
pointgroup_schoenflies: "2",
international_short: "C2",
translations: [
[0, 0, 0],
[0, 0, 0],
[0.5, 0, 0.5],
[0.5, 0, 0.5]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, -1, 0],
[0, 0, -1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, -1, 0],
[0, 0, -1]
]
],
number: 5,
choice: "a1",
international_full: "B 2 1 1",
hall_symbol: "B 2x",
international: "C 2 = B 2 1 1",
arithmetic_crystal_class_number: 4,
arithmetic_crystal_class_symbol: "2C"
},
"16": {
pointgroup_international: "C2",
schoenflies: "C2^3",
pointgroup_schoenflies: "2",
international_short: "C2",
translations: [
[0, 0, 0],
[0, 0, 0],
[0.5, 0.5, 0],
[0.5, 0.5, 0]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, -1, 0],
[0, 0, -1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, -1, 0],
[0, 0, -1]
]
],
number: 5,
choice: "a2",
international_full: "C 2 1 1",
hall_symbol: "C 2x",
international: "C 2 = C 2 1 1",
arithmetic_crystal_class_number: 4,
arithmetic_crystal_class_symbol: "2C"
},
"17": {
pointgroup_international: "C2",
schoenflies: "C2^3",
pointgroup_schoenflies: "2",
international_short: "C2",
translations: [
[0, 0, 0],
[0, 0, 0],
[0.5, 0.5, 0.5],
[0.5, 0.5, 0.5]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, -1, 0],
[0, 0, -1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, -1, 0],
[0, 0, -1]
]
],
number: 5,
choice: "a3",
international_full: "I 2 1 1",
hall_symbol: "I 2x",
international: "C 2 = I 2 1 1",
arithmetic_crystal_class_number: 4,
arithmetic_crystal_class_symbol: "2C"
},
"18": {
pointgroup_international: "Cs",
schoenflies: "Cs^1",
pointgroup_schoenflies: "m",
international_short: "Pm",
translations: [
[0, 0, 0],
[0, 0, 0]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, -1, 0],
[0, 0, 1]
]
],
number: 6,
choice: "b",
international_full: "P 1 m 1",
hall_symbol: "P -2y",
international: "P m = P 1 m 1",
arithmetic_crystal_class_number: 5,
arithmetic_crystal_class_symbol: "mP"
},
"19": {
pointgroup_international: "Cs",
schoenflies: "Cs^1",
pointgroup_schoenflies: "m",
international_short: "Pm",
translations: [
[0, 0, 0],
[0, 0, 0]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, -1]
]
],
number: 6,
choice: "c",
international_full: "P 1 1 m",
hall_symbol: "P -2",
international: "P m = P 1 1 m",
arithmetic_crystal_class_number: 5,
arithmetic_crystal_class_symbol: "mP"
},
"20": {
pointgroup_international: "Cs",
schoenflies: "Cs^1",
pointgroup_schoenflies: "m",
international_short: "Pm",
translations: [
[0, 0, 0],
[0, 0, 0]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, 1, 0],
[0, 0, 1]
]
],
number: 6,
choice: "a",
international_full: "P m 1 1",
hall_symbol: "P -2x",
international: "P m = P m 1 1",
arithmetic_crystal_class_number: 5,
arithmetic_crystal_class_symbol: "mP"
},
"21": {
pointgroup_international: "Cs",
schoenflies: "Cs^2",
pointgroup_schoenflies: "m",
international_short: "Pc",
translations: [
[0, 0, 0],
[0, 0, 0.5]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, -1, 0],
[0, 0, 1]
]
],
number: 7,
choice: "b1",
international_full: "P 1 c 1",
hall_symbol: "P -2yc",
international: "P c = P 1 c 1",
arithmetic_crystal_class_number: 5,
arithmetic_crystal_class_symbol: "mP"
},
"22": {
pointgroup_international: "Cs",
schoenflies: "Cs^2",
pointgroup_schoenflies: "m",
international_short: "Pc",
translations: [
[0, 0, 0],
[0.5, 0, 0.5]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, -1, 0],
[0, 0, 1]
]
],
number: 7,
choice: "b2",
international_full: "P 1 n 1",
hall_symbol: "P -2yac",
international: "P c = P 1 n 1",
arithmetic_crystal_class_number: 5,
arithmetic_crystal_class_symbol: "mP"
},
"23": {
pointgroup_international: "Cs",
schoenflies: "Cs^2",
pointgroup_schoenflies: "m",
international_short: "Pc",
translations: [
[0, 0, 0],
[0.5, 0, 0]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, -1, 0],
[0, 0, 1]
]
],
number: 7,
choice: "b3",
international_full: "P 1 a 1",
hall_symbol: "P -2ya",
international: "P c = P 1 a 1",
arithmetic_crystal_class_number: 5,
arithmetic_crystal_class_symbol: "mP"
},
"24": {
pointgroup_international: "Cs",
schoenflies: "Cs^2",
pointgroup_schoenflies: "m",
international_short: "Pc",
translations: [
[0, 0, 0],
[0.5, 0, 0]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, -1]
]
],
number: 7,
choice: "c1",
international_full: "P 1 1 a",
hall_symbol: "P -2a",
international: "P c = P 1 1 a",
arithmetic_crystal_class_number: 5,
arithmetic_crystal_class_symbol: "mP"
},
"25": {
pointgroup_international: "Cs",
schoenflies: "Cs^2",
pointgroup_schoenflies: "m",
international_short: "Pc",
translations: [
[0, 0, 0],
[0.5, 0.5, 0]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, -1]
]
],
number: 7,
choice: "c2",
international_full: "P 1 1 n",
hall_symbol: "P -2ab",
international: "P c = P 1 1 n",
arithmetic_crystal_class_number: 5,
arithmetic_crystal_class_symbol: "mP"
},
"26": {
pointgroup_international: "Cs",
schoenflies: "Cs^2",
pointgroup_schoenflies: "m",
international_short: "Pc",
translations: [
[0, 0, 0],
[0, 0.5, 0]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, -1]
]
],
number: 7,
choice: "c3",
international_full: "P 1 1 b",
hall_symbol: "P -2b",
international: "P c = P 1 1 b = P b",
arithmetic_crystal_class_number: 5,
arithmetic_crystal_class_symbol: "mP"
},
"27": {
pointgroup_international: "Cs",
schoenflies: "Cs^2",
pointgroup_schoenflies: "m",
international_short: "Pc",
translations: [
[0, 0, 0],
[0, 0.5, 0]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, 1, 0],
[0, 0, 1]
]
],
number: 7,
choice: "a1",
international_full: "P b 1 1",
hall_symbol: "P -2xb",
international: "P c = P b 1 1",
arithmetic_crystal_class_number: 5,
arithmetic_crystal_class_symbol: "mP"
},
"28": {
pointgroup_international: "Cs",
schoenflies: "Cs^2",
pointgroup_schoenflies: "m",
international_short: "Pc",
translations: [
[0, 0, 0],
[0, 0.5, 0.5]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, 1, 0],
[0, 0, 1]
]
],
number: 7,
choice: "a2",
international_full: "P n 1 1",
hall_symbol: "P -2xbc",
international: "P c = P n 1 1",
arithmetic_crystal_class_number: 5,
arithmetic_crystal_class_symbol: "mP"
},
"29": {
pointgroup_international: "Cs",
schoenflies: "Cs^2",
pointgroup_schoenflies: "m",
international_short: "Pc",
translations: [
[0, 0, 0],
[0, 0, 0.5]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, 1, 0],
[0, 0, 1]
]
],
number: 7,
choice: "a3",
international_full: "P c 1 1",
hall_symbol: "P -2xc",
international: "P c = P c 1 1",
arithmetic_crystal_class_number: 5,
arithmetic_crystal_class_symbol: "mP"
},
"30": {
pointgroup_international: "Cs",
schoenflies: "Cs^3",
pointgroup_schoenflies: "m",
international_short: "Cm",
translations: [
[0, 0, 0],
[0, 0, 0],
[0.5, 0.5, 0],
[0.5, 0.5, 0]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, -1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, -1, 0],
[0, 0, 1]
]
],
number: 8,
choice: "b1",
international_full: "C 1 m 1",
hall_symbol: "C -2y",
international: "C m = C 1 m 1",
arithmetic_crystal_class_number: 6,
arithmetic_crystal_class_symbol: "mC"
},
"31": {
pointgroup_international: "Cs",
schoenflies: "Cs^3",
pointgroup_schoenflies: "m",
international_short: "Cm",
translations: [
[0, 0, 0],
[0, 0, 0],
[0, 0.5, 0.5],
[0, 0.5, 0.5]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, -1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, -1, 0],
[0, 0, 1]
]
],
number: 8,
choice: "b2",
international_full: "A 1 m 1",
hall_symbol: "A -2y",
international: "C m = A 1 m 1",
arithmetic_crystal_class_number: 6,
arithmetic_crystal_class_symbol: "mC"
},
"32": {
pointgroup_international: "Cs",
schoenflies: "Cs^3",
pointgroup_schoenflies: "m",
international_short: "Cm",
translations: [
[0, 0, 0],
[0, 0, 0],
[0.5, 0.5, 0.5],
[0.5, 0.5, 0.5]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, -1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, -1, 0],
[0, 0, 1]
]
],
number: 8,
choice: "b3",
international_full: "I 1 m 1",
hall_symbol: "I -2y",
international: "C m = I 1 m 1",
arithmetic_crystal_class_number: 6,
arithmetic_crystal_class_symbol: "mC"
},
"33": {
pointgroup_international: "Cs",
schoenflies: "Cs^3",
pointgroup_schoenflies: "m",
international_short: "Cm",
translations: [
[0, 0, 0],
[0, 0, 0],
[0, 0.5, 0.5],
[0, 0.5, 0.5]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, -1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, -1]
]
],
number: 8,
choice: "c1",
international_full: "A 1 1 m",
hall_symbol: "A -2",
international: "C m = A 1 1 m",
arithmetic_crystal_class_number: 6,
arithmetic_crystal_class_symbol: "mC"
},
"34": {
pointgroup_international: "Cs",
schoenflies: "Cs^3",
pointgroup_schoenflies: "m",
international_short: "Cm",
translations: [
[0, 0, 0],
[0, 0, 0],
[0.5, 0, 0.5],
[0.5, 0, 0.5]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, -1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, -1]
]
],
number: 8,
choice: "c2",
international_full: "B 1 1 m",
hall_symbol: "B -2",
international: "C m = B 1 1 m = B m",
arithmetic_crystal_class_number: 6,
arithmetic_crystal_class_symbol: "mC"
},
"35": {
pointgroup_international: "Cs",
schoenflies: "Cs^3",
pointgroup_schoenflies: "m",
international_short: "Cm",
translations: [
[0, 0, 0],
[0, 0, 0],
[0.5, 0.5, 0.5],
[0.5, 0.5, 0.5]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, -1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, -1]
]
],
number: 8,
choice: "c3",
international_full: "I 1 1 m",
hall_symbol: "I -2",
international: "C m = I 1 1 m",
arithmetic_crystal_class_number: 6,
arithmetic_crystal_class_symbol: "mC"
},
"36": {
pointgroup_international: "Cs",
schoenflies: "Cs^3",
pointgroup_schoenflies: "m",
international_short: "Cm",
translations: [
[0, 0, 0],
[0, 0, 0],
[0.5, 0, 0.5],
[0.5, 0, 0.5]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, 1, 0],
[0, 0, 1]
]
],
number: 8,
choice: "a1",
international_full: "B m 1 1",
hall_symbol: "B -2x",
international: "C m = B m 1 1",
arithmetic_crystal_class_number: 6,
arithmetic_crystal_class_symbol: "mC"
},
"37": {
pointgroup_international: "Cs",
schoenflies: "Cs^3",
pointgroup_schoenflies: "m",
international_short: "Cm",
translations: [
[0, 0, 0],
[0, 0, 0],
[0.5, 0.5, 0],
[0.5, 0.5, 0]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, 1, 0],
[0, 0, 1]
]
],
number: 8,
choice: "a2",
international_full: "C m 1 1",
hall_symbol: "C -2x",
international: "C m = C m 1 1",
arithmetic_crystal_class_number: 6,
arithmetic_crystal_class_symbol: "mC"
},
"38": {
pointgroup_international: "Cs",
schoenflies: "Cs^3",
pointgroup_schoenflies: "m",
international_short: "Cm",
translations: [
[0, 0, 0],
[0, 0, 0],
[0.5, 0.5, 0.5],
[0.5, 0.5, 0.5]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, 1, 0],
[0, 0, 1]
]
],
number: 8,
choice: "a3",
international_full: "I m 1 1",
hall_symbol: "I -2x",
international: "C m = I m 1 1",
arithmetic_crystal_class_number: 6,
arithmetic_crystal_class_symbol: "mC"
},
"39": {
pointgroup_international: "Cs",
schoenflies: "Cs^4",
pointgroup_schoenflies: "m",
international_short: "Cc",
translations: [
[0, 0, 0],
[0, 0, 0.5],
[0.5, 0.5, 0],
[0.5, 0.5, 0.5]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, -1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, -1, 0],
[0, 0, 1]
]
],
number: 9,
choice: "b1",
international_full: "C 1 c 1",
hall_symbol: "C -2yc",
international: "C c = C 1 c 1",
arithmetic_crystal_class_number: 6,
arithmetic_crystal_class_symbol: "mC"
},
"40": {
pointgroup_international: "Cs",
schoenflies: "Cs^4",
pointgroup_schoenflies: "m",
international_short: "Cc",
translations: [
[0, 0, 0],
[0.5, 0, 0.5],
[0, 0.5, 0.5],
[0.5, 0.5, 0]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, -1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, -1, 0],
[0, 0, 1]
]
],
number: 9,
choice: "b2",
international_full: "A 1 n 1",
hall_symbol: "A -2yac",
international: "C c = A 1 n 1",
arithmetic_crystal_class_number: 6,
arithmetic_crystal_class_symbol: "mC"
},
"41": {
pointgroup_international: "Cs",
schoenflies: "Cs^4",
pointgroup_schoenflies: "m",
international_short: "Cc",
translations: [
[0, 0, 0],
[0.5, 0, 0],
[0.5, 0.5, 0.5],
[0, 0.5, 0.5]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, -1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, -1, 0],
[0, 0, 1]
]
],
number: 9,
choice: "b3",
international_full: "I 1 a 1",
hall_symbol: "I -2ya",
international: "C c = I 1 a 1",
arithmetic_crystal_class_number: 6,
arithmetic_crystal_class_symbol: "mC"
},
"42": {
pointgroup_international: "Cs",
schoenflies: "Cs^4",
pointgroup_schoenflies: "m",
international_short: "Cc",
translations: [
[0, 0, 0],
[0.5, 0, 0],
[0, 0.5, 0.5],
[0.5, 0.5, 0.5]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, -1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, -1, 0],
[0, 0, 1]
]
],
number: 9,
choice: "-b1",
international_full: "A 1 a 1",
hall_symbol: "A -2ya",
international: "C c = A 1 a 1",
arithmetic_crystal_class_number: 6,
arithmetic_crystal_class_symbol: "mC"
},
"43": {
pointgroup_international: "Cs",
schoenflies: "Cs^4",
pointgroup_schoenflies: "m",
international_short: "Cc",
translations: [
[0, 0, 0],
[0, 0.5, 0.5],
[0.5, 0.5, 0],
[0.5, 0, 0.5]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, -1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, -1, 0],
[0, 0, 1]
]
],
number: 9,
choice: "-b2",
international_full: "C 1 n 1",
hall_symbol: "C -2ybc",
international: "C c = C 1 n 1",
arithmetic_crystal_class_number: 6,
arithmetic_crystal_class_symbol: "mC"
},
"44": {
pointgroup_international: "Cs",
schoenflies: "Cs^4",
pointgroup_schoenflies: "m",
international_short: "Cc",
translations: [
[0, 0, 0],
[0, 0, 0.5],
[0.5, 0.5, 0.5],
[0.5, 0.5, 0]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, -1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, -1, 0],
[0, 0, 1]
]
],
number: 9,
choice: "-b3",
international_full: "I 1 c 1",
hall_symbol: "I -2yc",
international: "C c = I 1 c 1",
arithmetic_crystal_class_number: 6,
arithmetic_crystal_class_symbol: "mC"
},
"45": {
pointgroup_international: "Cs",
schoenflies: "Cs^4",
pointgroup_schoenflies: "m",
international_short: "Cc",
translations: [
[0, 0, 0],
[0.5, 0, 0],
[0, 0.5, 0.5],
[0.5, 0.5, 0.5]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, -1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, -1]
]
],
number: 9,
choice: "c1",
international_full: "A 1 1 a",
hall_symbol: "A -2a",
international: "C c = A 1 1 a",
arithmetic_crystal_class_number: 6,
arithmetic_crystal_class_symbol: "mC"
},
"46": {
pointgroup_international: "Cs",
schoenflies: "Cs^4",
pointgroup_schoenflies: "m",
international_short: "Cc",
translations: [
[0, 0, 0],
[0, 0.5, 0.5],
[0.5, 0, 0.5],
[0.5, 0.5, 0]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, -1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, -1]
]
],
number: 9,
choice: "c2",
international_full: "B 1 1 n",
hall_symbol: "B -2bc",
international: "C c = B 1 1 n",
arithmetic_crystal_class_number: 6,
arithmetic_crystal_class_symbol: "mC"
},
"47": {
pointgroup_international: "Cs",
schoenflies: "Cs^4",
pointgroup_schoenflies: "m",
international_short: "Cc",
translations: [
[0, 0, 0],
[0, 0.5, 0],
[0.5, 0.5, 0.5],
[0.5, 0, 0.5]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, -1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, -1]
]
],
number: 9,
choice: "c3",
international_full: "I 1 1 b",
hall_symbol: "I -2b",
international: "C c = I 1 1 b",
arithmetic_crystal_class_number: 6,
arithmetic_crystal_class_symbol: "mC"
},
"48": {
pointgroup_international: "Cs",
schoenflies: "Cs^4",
pointgroup_schoenflies: "m",
international_short: "Cc",
translations: [
[0, 0, 0],
[0, 0.5, 0],
[0.5, 0, 0.5],
[0.5, 0.5, 0.5]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, -1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, -1]
]
],
number: 9,
choice: "-c1",
international_full: "B 1 1 b",
hall_symbol: "B -2b",
international: "C c = B 1 1 b = B b",
arithmetic_crystal_class_number: 6,
arithmetic_crystal_class_symbol: "mC"
},
"49": {
pointgroup_international: "Cs",
schoenflies: "Cs^4",
pointgroup_schoenflies: "m",
international_short: "Cc",
translations: [
[0, 0, 0],
[0.5, 0, 0.5],
[0, 0.5, 0.5],
[0.5, 0.5, 0]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, -1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, -1]
]
],
number: 9,
choice: "-c2",
international_full: "A 1 1 n",
hall_symbol: "A -2ac",
international: "C c = A 1 1 n",
arithmetic_crystal_class_number: 6,
arithmetic_crystal_class_symbol: "mC"
},
"50": {
pointgroup_international: "Cs",
schoenflies: "Cs^4",
pointgroup_schoenflies: "m",
international_short: "Cc",
translations: [
[0, 0, 0],
[0.5, 0, 0],
[0.5, 0.5, 0.5],
[0, 0.5, 0.5]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, -1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, -1]
]
],
number: 9,
choice: "-c3",
international_full: "I 1 1 a",
hall_symbol: "I -2a",
international: "C c = I 1 1 a",
arithmetic_crystal_class_number: 6,
arithmetic_crystal_class_symbol: "mC"
},
"51": {
pointgroup_international: "Cs",
schoenflies: "Cs^4",
pointgroup_schoenflies: "m",
international_short: "Cc",
translations: [
[0, 0, 0],
[0, 0.5, 0],
[0.5, 0, 0.5],
[0.5, 0.5, 0.5]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, 1, 0],
[0, 0, 1]
]
],
number: 9,
choice: "a1",
international_full: "B b 1 1",
hall_symbol: "B -2xb",
international: "C c = B b 1 1",
arithmetic_crystal_class_number: 6,
arithmetic_crystal_class_symbol: "mC"
},
"52": {
pointgroup_international: "Cs",
schoenflies: "Cs^4",
pointgroup_schoenflies: "m",
international_short: "Cc",
translations: [
[0, 0, 0],
[0, 0.5, 0.5],
[0.5, 0.5, 0],
[0.5, 0, 0.5]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, 1, 0],
[0, 0, 1]
]
],
number: 9,
choice: "a2",
international_full: "C n 1 1",
hall_symbol: "C -2xbc",
international: "C c = C n 1 1",
arithmetic_crystal_class_number: 6,
arithmetic_crystal_class_symbol: "mC"
},
"53": {
pointgroup_international: "Cs",
schoenflies: "Cs^4",
pointgroup_schoenflies: "m",
international_short: "Cc",
translations: [
[0, 0, 0],
[0, 0, 0.5],
[0.5, 0.5, 0.5],
[0.5, 0.5, 0]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, 1, 0],
[0, 0, 1]
]
],
number: 9,
choice: "a3",
international_full: "I c 1 1",
hall_symbol: "I -2xc",
international: "C c = I c 1 1",
arithmetic_crystal_class_number: 6,
arithmetic_crystal_class_symbol: "mC"
},
"54": {
pointgroup_international: "Cs",
schoenflies: "Cs^4",
pointgroup_schoenflies: "m",
international_short: "Cc",
translations: [
[0, 0, 0],
[0, 0, 0.5],
[0.5, 0.5, 0],
[0.5, 0.5, 0.5]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, 1, 0],
[0, 0, 1]
]
],
number: 9,
choice: "-a1",
international_full: "C c 1 1",
hall_symbol: "C -2xc",
international: "C c = C c 1 1",
arithmetic_crystal_class_number: 6,
arithmetic_crystal_class_symbol: "mC"
},
"55": {
pointgroup_international: "Cs",
schoenflies: "Cs^4",
pointgroup_schoenflies: "m",
international_short: "Cc",
translations: [
[0, 0, 0],
[0, 0.5, 0.5],
[0.5, 0, 0.5],
[0.5, 0.5, 0]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, 1, 0],
[0, 0, 1]
]
],
number: 9,
choice: "-a2",
international_full: "B n 1 1",
hall_symbol: "B -2xbc",
international: "C c = B n 1 1",
arithmetic_crystal_class_number: 6,
arithmetic_crystal_class_symbol: "mC"
},
"56": {
pointgroup_international: "Cs",
schoenflies: "Cs^4",
pointgroup_schoenflies: "m",
international_short: "Cc",
translations: [
[0, 0, 0],
[0, 0.5, 0],
[0.5, 0.5, 0.5],
[0.5, 0, 0.5]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, 1, 0],
[0, 0, 1]
]
],
number: 9,
choice: "-a3",
international_full: "I b 1 1",
hall_symbol: "I -2xb",
international: "C c = I b 1 1",
arithmetic_crystal_class_number: 6,
arithmetic_crystal_class_symbol: "mC"
},
"57": {
pointgroup_international: "C2h",
schoenflies: "C2h^1",
pointgroup_schoenflies: "2/m",
international_short: "P2/m",
translations: [
[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0]
],
rotations: [
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
],
[
[-1, 0, 0],
[0, -1, 0],
[0, 0, -1]
],
[
[-1, 0, 0],
[0, 1, 0],
[0, 0, -1]
],
[
[1, 0, 0],
[0, -1, 0],
[0, 0, 1]
]
],
number: 10,
choice: "b",
international_full: "P 1 2/m 1",
hall_symbol: "-P 2y",
international: "P 2/m = P 1 2/m 1",
arithmetic_crystal_class_number: 7,
arithmetic_crystal_class_symbol: "2/mP"
},
"58": {
point