space_group プログラム仕様
空間群情報表示およびステレオ投影プロットスクリプト
このスクリプトは、pymatgenライブラリを使用して、指定された空間群に関する情報を 表示したり、特定の初期座標に対する等価な位置を展開してステレオ投影図として プロットしたりする機能を提供します。
モードには以下の4種類があります。 - 'list': 全ての空間群番号とそのHermann-Mauguin記号をリスト表示します。 - 'inf': 指定された空間群の詳細情報(結晶系、点群、全ての対称操作とその分類)を表示します。 - 'stereo': 指定された空間群の対称操作で初期座標を展開し、結果をXY単位格子に
z座標情報を付加したステレオ投影図としてプロットします。
- 'expand': 指定された空間群の対称操作で初期座標を展開し、重複を排除した
一意な座標のリストを表示します。
- 使用例:
全空間群のリスト表示: python space_group.py --mode list
空間群194の詳細情報表示: python space_group.py --mode inf --ispg 194
空間群194で座標(0.9,0.1,0.15)を展開し、プロット: python space_group.py --mode stereo --ispg 194 --xyz 0.9,0.1,0.15
空間群194で座標(0.9,0.1,0.15)を展開し、リスト表示: python space_group.py --mode expand --ispg 194 --xyz 0.9,0.1,0.15
- 関連リンク:
- crystal.space_group.classify_symop_spg(op, tol=1e-05)[ソース]
pymatgenのSymmOpオブジェクトを受け取り、その対称操作の種類を分類して文字列で返します。
この関数は、SymmOpオブジェクトの回転行列(R)と並進ベクトル(t)を分析し、 恒等操作、純粋な並進、反転、回転、螺旋回転、鏡映、映進などの種類を特定します。 特に回転操作では回転軸のタイプ(x, y, z, または d(diagonal))を、 鏡映/映進では鏡映面のタイプ(mx, my, mz, または d(diagonal))を判別します。 数値比較には`tol`で指定された許容誤差を使用します。
- パラメータ:
op -- pymatgen.core.operations.SymmOp: 分類する対称操作オブジェクト。
tol -- float: 数値比較に使用する許容誤差。デフォルトは1e-5。
- 戻り値:
str: 分類された対称操作の種類を示す文字列(例: "Rotation C3 (x-axis)")。
- crystal.space_group.display_spg_info(ispg=None)[ソース]
pymatgenを用いて空間群の情報を表示します。
ispgがNoneの場合、全ての空間群番号とそのHermann-Mauguinシンボルをリスト表示します。 ispgが指定された場合、その空間群の詳細情報(Hermann-Mauguinシンボル、結晶系、点群、 および各対称操作の回転行列、並進ベクトル、変換式、分類)を表示します。
- パラメータ:
ispg -- int or None: 表示対象の空間群番号 (1-230)。Noneの場合は全空間群のリストを表示します。
- 戻り値:
list[tuple[pymatgen.core.operations.SymmOp, str]]: 取得した対称操作オブジェクトとその分類文字列のリスト。 ispgがNoneの場合は空のリストを返します。
- crystal.space_group.expand_coordinates(ispg, xyz_str, rmin)[ソース]
指定された空間群(ITA標準設定)の対称操作で分率座標を展開し、重複を排除して表示します。
初期座標`xyz_str`をpymatgenの`SpaceGroup`オブジェクトから取得した全ての対称操作に適用し、 展開された座標を計算します。 各展開座標は[0,1)の範囲に折り返されます。 その後、`rmin`を閾値として、トーラス空間における最短距離を用いて重複する座標を排除し、 一意な座標のリストを生成して表示します。
- パラメータ:
ispg -- int: 空間群番号 (1-230)。
xyz_str -- str: 初期分率座標を表す文字列(例: "0.9,0.1,0.15")。
rmin -- float: 重複するサイトと見なすための最小距離。
- 戻り値:
list[numpy.ndarray]: 検出された重複しない展開された分率座標のリスト。
- crystal.space_group.format_transform_spg(matrix, translation_vector)[ソース]
回転行列と並進ベクトルから座標変換の数式文字列を生成します。
指定された3x3の回転行列と3要素の並進ベクトルを、 (x', y', z') = (ax+by+cz+t_x, dx+ey+fz+t_y, gx+hy+iz+t_z) のような形式の文字列に変換します。 係数が1や-1の場合は簡略化し、0の場合は表示しません。 並進成分が0の場合も表示しません。
- パラメータ:
matrix -- numpy.ndarray: 3x3の回転行列。
translation_vector -- numpy.ndarray: 3要素の並進ベクトル。
- 戻り値:
str: 座標変換の数式文字列(例: "(x+0.5, -y, z+0.25)")。
- crystal.space_group.initialize()[ソース]
コマンドライン引数を解析するためのArgumentParserを初期化します。
この関数は、スクリプトが受け入れるコマンドライン引数(モード、空間群番号、 初期座標、重複判定の最小距離)を定義し、それらの説明とデフォルト値を設定します。 ヘルプメッセージはRawTextHelpFormatterを使用して整形されます。
- 戻り値:
argparse.ArgumentParser: 初期化されたArgumentParserオブジェクト。
- crystal.space_group.main()[ソース]
スクリプトのエントリポイントです。
コマンドライン引数を解析し、指定されたモードに基づいて対応する関数を呼び出します。 モードが指定されていない場合や、inf, stereo, expand モードで`--ispg`が 欠落している場合はエラーメッセージを表示し、スクリプトを終了します。 matplotlibの図が表示されている場合は、ユーザー入力があるまで終了を待ちます。
- 戻り値:
None
- crystal.space_group.plot_unit_cell_projection(ispg, expanded_points)[ソース]
展開された座標をXY単位格子にプロットし、z値に応じて色とラベルを決定します。
この関数は、与えられた空間群番号と展開された分率座標のリストを受け取り、 これらの点をXY平面上の単位格子内にプロットします。 各点のプロットマーカーの色とラベルは、z座標のパターン(例: z=0, zと1-zのペア、 zとz±0.5のペアなど)に基づいて決定され、結晶学的な等価位置を視覚的に表現します。 マーカーは 'o' 型で、z=0 (または1) の場合は赤、ペアが存在する場合は黄色、 1-zのみが存在する場合は灰色となります。
- パラメータ:
ispg -- int: 空間群番号 (1-230)。
expanded_points -- list[numpy.ndarray]: expand_coordinates 関数から得られた展開済み座標のリスト。
- 戻り値:
None