convert_cell プログラム仕様
pymatgenを用いた格子変換プログラム(部分占有を考慮)。
このプログラムは、pymatgenライブラリを使用して結晶構造の格子変換を実行します。 部分占有サイトも適切に処理し、変換前後の構造の体積、有効原子数、総質量、原子密度、質量密度を報告します。 特に、密度の整合性を検査し、変換によって物理量が変わっていないことを確認します。
主な機能: - prim: SpacegroupAnalyzerを用いた原始セルへの変換。 - romb: 六方晶設定のR-格子を菱面体晶の原始セルに変換。 - hex: 菱面体晶設定のR-格子を六方晶の慣用セルに変換。 - orth: 中心格子(A/B/C/F/I)を適切な変換で原始セルに変換。 - MATRIX: ユーザー定義の変換行列 '(a,b,c)(d,e,f)(g,h,i)' または '(a,b,c,tx)(d,e,f,ty)(g,h,i,tz)' を適用。
行列のエントリは算術式(例: 1/3, sqrt(2)/2)も使用可能。
基底変換は V' = T @ V、サイト座標は f' = f @ inv(T) + t で行い、重複サイトを結合します。
出力はセルの体積、有効原子数(占有率の合計)、総質量、原子密度、質量密度を含みます。
密度が指定されたeps(デフォルト1e-4)内で一致することを検証します。
関連リンク: プログラム convert_cell.py 技術ドキュメント
- crystal.convert_cell.centering_to_prim_T(centering: str) ndarray | None[ソース]
格子心タイプに応じた原始セルへの変換行列を返す。
- 詳細説明:
面心 (F), 体心 (I), A/B/C面心 (A, B, C) の格子から 原始セルへ変換するための3x3変換行列を返します。 原始格子 (P) の場合は None を返します。
- パラメータ:
centering -- str: 格子心タイプ('F', 'I', 'A', 'B', 'C'など)。
- 戻り値:
Optional[np.ndarray]: 原始セルへの変換行列、または変換が不要な場合は None。
- crystal.convert_cell.change_basis_preserving_geometry(structure: Structure, T: ndarray, t: ndarray | None = None, xyz_tol: float = 1e-06) Structure[ソース]
変換行列と並進ベクトルを用いて結晶構造の基底を変換する。
- 詳細説明:
新しい格子ベクトル V' = T @ V および、 新しい分数座標 f' = f @ inv(T) + t の変換を行います。 変換後のサイト座標は[0, 1)の範囲にラップされます。 変換後に同一とみなされる位置のサイトは結合され、重複が排除されます。 これにより、変換行列の行列式が1ではない場合でも、物理的な構造は維持されます。
- パラメータ:
structure -- pymatgen.core.structure.Structure: 基底変換の対象となる元の構造。
T -- np.ndarray: 新しい基底を定義する3x3の変換行列。
t -- Optional[np.ndarray]: サイト座標に適用する並進ベクトル(デフォルトはなし)。
xyz_tol -- float: 変換後に重複するサイトをマージするための座標の許容誤差。
- 戻り値:
pymatgen.core.structure.Structure: 基底変換とサイトのマージが適用された新しい構造。
- 例外:
ValueError -- 変換行列が特異な(行列式がほぼ0の)場合。
- crystal.convert_cell.detect_setting_and_centering(struct: Structure, sym_tol: float) Tuple[str, str, str][ソース]
構造の空間群、R-格子設定、格子心タイプを検出する。
- 詳細説明:
pymatgen.symmetry.analyzer.SpacegroupAnalyzer を使用して空間群を特定し、 特にR-格子の場合の六方晶または菱面体晶設定、 および一般的な格子心タイプ (P, A, B, C, I, F, R) を識別します。
- パラメータ:
struct -- pymatgen.core.structure.Structure: 分析対象の構造オブジェクト。
sym_tol -- float: 対称性解析に使用する許容誤差。
- 戻り値:
Tuple[str, str, str]: 空間群シンボル、R-格子の設定('hexagonal'または'rhombohedral')、 格子心タイプ('P', 'A', 'B', 'C', 'I', 'F', 'R'のいずれか)のタプル。
- crystal.convert_cell.dump_sites(struct: Structure, label: str)[ソース]
構造内の各サイトの情報を標準出力に表示する。
- 詳細説明:
各サイトのインデックス、原子種とその占有率、分数座標を整形して表示します。
- パラメータ:
struct -- pymatgen.core.structure.Structure: サイト情報表示対象の構造オブジェクト。
label -- str: 報告のヘッダーに使用されるラベル。
- crystal.convert_cell.hex_to_rhombo_T() ndarray[ソース]
六方晶設定から菱面体晶設定への変換行列を返す。
- 詳細説明:
六方晶 (Hexagonal) 記述のR-格子を菱面体晶 (Rhombohedral) 記述の 原始セルに変換するための3x3変換行列を返します。
- 戻り値:
np.ndarray: 六方晶から菱面体晶への変換行列。
- crystal.convert_cell.initialize()[ソース]
コマンドライン引数を解析し、プログラムの設定を初期化する。
- 詳細説明:
argparseモジュールを使用して、入力ファイル、変換タイプ、 対称性許容誤差などのコマンドライン引数を定義し、解析します。
- 戻り値:
argparse.Namespace: 解析されたコマンドライン引数を含むオブジェクト。
- crystal.convert_cell.main()[ソース]
メイン処理を実行し、結晶構造の変換と報告を行う。
- 詳細説明:
コマンドライン引数を解析し、入力CIFファイルを読み込む。
元の構造の空間群、R-格子設定、格子心タイプを検出する。
元の構造の情報を報告し、サイト情報を表示する。
指定された変換タイプ(prim, rhomb, hex, orth, MATRIX)に応じて、 適切な変換行列を生成または解析する。
変換行列と並進ベクトルを用いて構造の基底を変換する。
変換後の構造情報を報告し、サイト情報を表示する。
変換前後の原子密度と質量密度の整合性をチェックし、結果を標準出力に表示する。
変換された構造を新しいCIFファイルとして保存する。
部分占有に関する注意喚起メッセージを表示する。
- crystal.convert_cell.parse_conversion_matrix(spec: str) Tuple[ndarray, ndarray][ソース]
変換行列と並進ベクトルを表す文字列を解析する。
- 詳細説明:
'(a,b,c)(d,e,f)(g,h,i)' または '(a,b,c,tx)(d,e,f,ty)(g,h,i,tz)' 形式の文字列を解析し、numpy.ndarray 形式の変換行列 T と 並進ベクトル t を返します。各要素は算術式として解釈されます。
- パラメータ:
spec -- str: 変換行列と並進ベクトルを定義する文字列。
- 戻り値:
Tuple[np.ndarray, np.ndarray]: 変換行列 T と並進ベクトル t のタプル。
- 例外:
ValueError -- 不適切な形式の文字列が指定された場合。
- crystal.convert_cell.parse_number(expr: str) float[ソース]
文字列の数値式を安全に評価し、浮動小数点数に変換する。
- 詳細説明:
eval() 関数を使用しますが、SAFE_GLOBALS を指定することで、 実行可能な関数や変数を制限し、セキュリティを確保します。 例えば、"1/3" や "sqrt(2)" のような算術式を評価できます。
- パラメータ:
expr -- str: 評価する数値式。
- 戻り値:
float: 評価された数値。
- 例外:
ValueError -- 無効な数値式が指定された場合。
- crystal.convert_cell.print_matrix(message: str, T: ndarray)[ソース]
与えられた行列を整形して標準出力に表示する。
- パラメータ:
message -- str: 行列の前に表示するメッセージ。
T -- np.ndarray: 表示する行列。
- crystal.convert_cell.report_structure(struct: Structure, label: str) Tuple[float, float][ソース]
結晶構造の基本的な情報と密度を報告する。
- 詳細説明:
格子定数、格子角、セル体積、サイト数、有効原子数、総質量、 原子密度、質量密度を標準出力に表示します。 質量密度はamuからグラム、体積はÅ^3からcm^3に変換して計算されます。
- パラメータ:
struct -- pymatgen.core.structure.Structure: 報告対象の構造オブジェクト。
label -- str: 報告のヘッダーに使用されるラベル(例: "Original" または "Converted")。
- 戻り値:
Tuple[float, float]: 原子密度 (atoms/Å^3) と質量密度 (g/cm^3) のタプル。
- crystal.convert_cell.rhombo_to_hex_T() ndarray[ソース]
菱面体晶設定から六方晶設定への変換行列を返す。
- 詳細説明:
菱面体晶 (Rhombohedral) 記述のR-格子を六方晶 (Hexagonal) 記述の 慣用セルに変換するための3x3変換行列を返します。
- 戻り値:
np.ndarray: 菱面体晶から六方晶への変換行列。
- crystal.convert_cell.site_effective_occupancy_and_mass_amu(site) Tuple[float, float][ソース]
サイトの有効占有率と合計質量を計算する。
- 詳細説明:
pymatgenのSiteオブジェクトから、原子種の占有率の合計(有効原子数)と 原子質量単位 (amu) での合計質量を計算します。 部分占有サイトも考慮されます。
- パラメータ:
site -- pymatgen.core.structure.Site: 計算対象のサイトオブジェクト。
- 戻り値:
Tuple[float, float]: 有効占有率と合計質量 (amu) のタプル。
- crystal.convert_cell.structure_effective_counts(struct: Structure) Tuple[float, float, int][ソース]
構造全体の有効原子数、合計質量、サイト数を計算する。
- 詳細説明:
構造内の各サイトについて site_effective_occupancy_and_mass_amu を呼び出し、 全体の有効原子数 (occupancyの合計)、合計質量 (amu)、 およびサイトの総数を集計します。
- パラメータ:
struct -- pymatgen.core.structure.Structure: 計算対象の構造オブジェクト。
- 戻り値:
Tuple[float, float, int]: 有効原子数、合計質量 (amu)、サイト数のタプル。