メインコンテンツまでスキップ

cif 形式と xyz 形式の変換

結晶構造フォーマットである cif 形式から座標情報を抽出し、カルテシアン座標へ変換するスクリプトを実装します。

参考

https://qiita.com/h-nabata/items/c3da4b35553618037dca

座標変換

格子定数 (a,b,c,α,β,γ)(a, b, c, \alpha, \beta, \gamma) で定義される単位格子中の原子の分率座標 (X,Y,Z)(X, Y, Z) を、カルテシアン座標 (x,y,z)(x, y, z) へ戻すためには、次の変換を用います:

(xyz)=(abcosγccosβ0bsinγc(cosαcosβcosγ)/sinγ00cVsinγ)(XYZ)\begin{pmatrix} x \\ y \\ z \end{pmatrix} = \begin{pmatrix} a & b\cos \gamma & c\cos \beta \\ 0 & b\sin \gamma & c(\cos \alpha - \cos \beta \cos \gamma)/\sin \gamma \\ 0 & 0 & cV\sin \gamma \end{pmatrix}\begin{pmatrix} X \\ Y \\ Z \end{pmatrix}

ただし VV は次のように定義され、単位格子の体積を表します:

V=1cos2αcos2βcos2γ+2cosαcosβcosγV = \sqrt{1 - \cos^2 \alpha - \cos^2 \beta - \cos^2 \gamma + 2\cos \alpha \cos \beta \cos \gamma}

実装