File: ob_spacegroups.py

package info (click to toggle)
gemmi 0.7.4%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 6,644 kB
  • sloc: cpp: 64,445; python: 5,425; ansic: 4,545; sh: 374; makefile: 112; javascript: 86; f90: 42
file content (31 lines) | stat: -rw-r--r-- 1,177 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/usr/bin/env python
# Check the space-groups.txt from Open Babel
# Usage: ob_spacegroups.py /path/to/space-groups.txt

from __future__ import print_function
import sys
import gemmi

space_groups_txt = sys.argv[1]
chunks = open(space_groups_txt).read().split('\n\n')
def parse_chunk(lines):
    return {'number': int(lines[0]),
            'hall': lines[1].strip(),
            'xhm': lines[2].strip(),
            'symops': [gemmi.Op(line) for line in lines[3:]]}
data = [parse_chunk(c.splitlines()) for c in chunks if c]
print(len(data), 'items')
for d in data:
    ops = gemmi.symops_from_hall(d['hall'])
    assert len(ops.sym_ops) * len(ops.cen_ops) == len(d['symops'])
    given = set(d['symops'])
    generated = set(ops)
    if given != generated:
        print(d['hall'])
        print('common:',  '  '.join(x.triplet() for x in given & generated))
        print('given:    ', '  '.join(x.triplet() for x in given - generated))
        print('generated:', '  '.join(x.triplet() for x in generated - given))
for d in data:
    names = d['xhm'].split(',')
    if all(gemmi.find_spacegroup_by_name(name) is None for name in names):
        print('not in gemmi:', names)