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()[ソース]

メイン処理を実行し、結晶構造の変換と報告を行う。

詳細説明:
  1. コマンドライン引数を解析し、入力CIFファイルを読み込む。

  2. 元の構造の空間群、R-格子設定、格子心タイプを検出する。

  3. 元の構造の情報を報告し、サイト情報を表示する。

  4. 指定された変換タイプ(prim, rhomb, hex, orth, MATRIX)に応じて、 適切な変換行列を生成または解析する。

  5. 変換行列と並進ベクトルを用いて構造の基底を変換する。

  6. 変換後の構造情報を報告し、サイト情報を表示する。

  7. 変換前後の原子密度と質量密度の整合性をチェックし、結果を標準出力に表示する。

  8. 変換された構造を新しいCIFファイルとして保存する。

  9. 部分占有に関する注意喚起メッセージを表示する。

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)、サイト数のタプル。

crystal.convert_cell.terminate()[ソース]

プログラムの実行を終了させ、ユーザーからの入力を待つ。

詳細説明:

標準入力からENTERキーの入力を受け付けるまで待機し、 その後、プログラムを強制終了します。