久しぶりにやや精神の具合がよいので、昔のメモを復習しつつ公開。こんなことをして何になるのかという気持ちは拭えないが、もうどうでもよいのだ。
crystal.symmetry は、結晶の格子定数と空間群を管理するクラス。ソースコードは cctbx/crystal/__init__.py 周辺。
格子定数から考えてありえない空間群を指定すると、ちゃんと指摘してくれる。
p4 = cctbx.crystal.symmetry((10, 10, 1, 90, 90, 90), space_group="P 4") cctbx.crystal.symmetry((10, 3, 1, 90, 90, 90), space_group="P 4") # エラー # "Space group is incompatible with unit cell parameters."
以前記述したように、指数は (h, k, l) というタプルの flex 配列で管理する。これと crystal.symmetry オブジェクトを組み合わせて、miller.set オブジェクトを作る。ソースコードは cctbx/miller/__init__.py あたり。
from cctbx.array_family import flex indices = flex.miller_index(((1,2,3), (2,3,4))) miller_set = cctbx.miller.set(p4, indices, False)
第3引数は anomalous_flag。省略可能だが、そうすると expand_to_p1() などが呼べなくなる。anomalous_flag() で確認可能だが、変更はできないようだ。
miller_set.show_summary() # Number of Miller indices: 2 # Anomalous flag: False # Unit cell: (10, 10, 1, 90, 90, 90) # Space group: P 4 (No. 75) miller_set.show_comprehensive_summary() # Number of Miller indices: 2 # Anomalous flag: False # Unit cell: (10, 10, 1, 90, 90, 90) # Space group: P 4 (No. 75) # Systematic absences: 0 # Centric reflections: 0 # Resolution range: 0.332411 0.248991 # Completeness in resolution range: 0.000896057 # Completeness with d_max=infinity: 0.000502765 # 個別に情報を引き出すためには、以下のようなメソッドがある miller_set.d_max_min() # (0.3324112476572668, 0.24899052235614633) miller_set.d_min_along_a_b_c_star() # (5.0, 3.333333333333333, 0.25) # 他にもいろいろ... miller_indices_as_pdb_file('test.pdb') # 逆空間の座標を PDB ファイルとして出力できる
調子がよいかと思ったが、くたびれてしまったので、ここで公開。