UNPKG

@ccp-nc/crystcif-parse

Version:

A parser for crystallographic CIF files

2,417 lines (2,413 loc) 947 kB
// 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 radToDeg(rad) { return rad / _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": { pointgroup_international: "C2h", s