cctbx で空間群を扱う: space_group_symbols と space_group

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 オブジェクトは、具体的な計算をサポートする。本日書いた multiplicityepsilon 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 回転によって自分自身と重なる