cctbx で空間群を扱うには、sgtbx (Space Group Tool BoX) を使う。
まず、空間群の一般的情報を space_group_symbols オブジェクトから引き出してみる。
from cctbx.sgtbx import * P2 = space_group_symbols("P2") P2.number() # 3 P2.schoenflies() # C2^1 P2.hermann_mauguin() # P 1 2 1 P2.hall() # P 2y P2.point_group_type() # 2 P2.laue_group_type() # 2/m P2.crystal_system() # Monoclinic
space_group オブジェクトは、具体的な計算をサポートする。本日書いた multiplicity と epsilon factor を計算してみよう。この機能の実装は、cctbx/sgtbx/miller.cpp にある。
sg = space_group("P 2y") # Hall symbol で指定する sg.multiplicity((1,2,3), False) # 4 一般の反射 sg.multiplicity((1,2,3), True) # 2 # 異常分散を考慮すると、Friedel's law が成立しないため sg.multiplicity((1,0,3), False) # 2 回転によって Bijvoet pair と重なる場合 sg.multiplicity((1,0,3), True) # 2 sg.epsilon((1,2,3)) # 1 sg.epsilon((1,0,3)) # 1 自分自身と重なるわけではない sg.epsilon((0,1,0)) # 2 回転によって自分自身と重なる