find_point_group プログラム仕様

概要:

XYZ 分子から点群を推定し、対称操作を直交化、整列、ラベル付けして表示します。

詳細説明:

このスクリプトは、XYZ分子ファイルから点群を推定し、検出された対称操作を分類・ラベル付けするツールです。 質量中心への平行移動、慣性主軸への整列などの前処理オプションも提供します。 pymatgen を使用してXYZファイルを読み込み、PointGroupAnalyzer で点群記号と対称操作を特定します。 対称操作の行列はSVDにより直交化され、tkpointgroup ライブラリの関数を用いて代表値にスナップされます。 Cnv (n=3,4,6), C2v, Dn (n=3,4,6), T, Td, Th, O, Oh などの点群ファミリーに対応するカスタムラベリング関数により、 各対称操作に詳細なSchoenflies記号のラベルが付与されます。 Cnv群ではσvとσdの区別、C2v群ではσv(xz)とσv'(yz)の区別、Dn群ではCn^k(z)とC2'(x系)の分類が行われます。 必要となるライブラリは pymatgen です。pip install pymatgen でインストールしてください。 tkpointgroup.py はこのスクリプトと同じディレクトリ、またはPYTHONPATHに存在する必要があります。

関連リンク:

find_point_group_usage

crystal.find_point_group.align_score(axis: ndarray, fam: List[ndarray]) float
概要:

特定の方向群に対する軸の整列スコアを計算します。

詳細説明:

与えられた軸が方向群のいずれかのベクトルとどれだけ平行に近いかを示すスコアを計算します。 最大の内積の絶対値をスコアとします。

引数:
param axis:

評価する軸。

type axis:

numpy.ndarray

param fam:

比較する方向ベクトル群。

type fam:

List[numpy.ndarray]

戻り値:
returns:

整列スコア (0.0から1.0)。

rtype:

float

crystal.find_point_group.apply_rigid_transform(mol: Molecule, R: ndarray, t: ndarray) Molecule
概要:

分子に剛体変換(回転と平行移動)を適用します。

詳細説明:

分子の原子座標に平行移動 t を適用し、その後に回転行列 R を適用します。

引数:
param mol:

変換を適用する pymatgen.core.Molecule オブジェクト。

type mol:

pymatgen.core.Molecule

param R:

回転行列。

type R:

numpy.ndarray

param t:

平行移動ベクトル。

type t:

numpy.ndarray

戻り値:
returns:

変換が適用された新しい Molecule オブジェクト。

rtype:

pymatgen.core.Molecule

crystal.find_point_group.center_of_mass(mol: Molecule) ndarray
概要:

分子の質量中心を計算します。

引数:
param mol:

pymatgen.core.Molecule オブジェクト。

type mol:

pymatgen.core.Molecule

戻り値:
returns:

分子の質量中心座標。

rtype:

numpy.ndarray

crystal.find_point_group.guess_point_group(mol: Molecule, tolerance: float = 0.03, eigen_tolerance: float = 0.01)
概要:

Molecule オブジェクトから点群とその対称操作を推定します。

詳細説明:

pymatgen.symmetry.analyzer.PointGroupAnalyzer を使用して点群記号と対称操作を特定します。 toleranceとeigen_toleranceは対称性の検出における許容誤差を制御します。

引数:
param mol:

点群を推定する Molecule オブジェクト。

type mol:

pymatgen.core.Molecule

param tolerance:

座標の許容差 (Å)。

type tolerance:

float

param eigen_tolerance:

固有値縮退の許容差。

type eigen_tolerance:

float

戻り値:
returns:

Schoenflies記号と対称操作のリストのタプル。

rtype:

tuple

crystal.find_point_group.inertia_align_matrix(mol: Molecule) ndarray
概要:

分子の慣性主軸に整列するための回転行列を計算します。

詳細説明:

質量中心を計算し、それに基づいて慣性テンソルを構築します。 慣性テンソルの固有ベクトルが慣性主軸となり、これらを基底とする回転行列を生成します。 行列式が負になる場合は、主軸の一つを反転して右手系を保ちます。

引数:
param mol:

pymatgen.core.Molecule オブジェクト。

type mol:

pymatgen.core.Molecule

戻り値:
returns:

慣性主軸に整列させるための回転行列。

rtype:

numpy.ndarray

crystal.find_point_group.label_c2v(R: ndarray) str
概要:

C2v点群の対称操作にラベルを付けます。

詳細説明:

単位元、鏡映(σv(xz)またはσv'(yz))、またはC2回転(C2(z)またはC2)に分類します。

引数:
param R:

対称操作の回転行列。

type R:

numpy.ndarray

戻り値:
returns:

ラベル文字列(例: E, σv(xz), C2)。

rtype:

str

crystal.find_point_group.label_cnv(n: int, R: ndarray) str
概要:

Cnv点群(C3v, C4v, C6v)の対称操作にラベルを付けます。

詳細説明:

単位元、Cn^k(z)回転、または鏡映(σvまたはσd)に分類します。 nの値に基づいて回転軸と鏡映面を判定します。

引数:
param n:

Cn回転軸の次数(3, 4, 6)。

type n:

int

param R:

対称操作の回転行列。

type R:

numpy.ndarray

戻り値:
returns:

ラベル文字列(例: E, C3^1(z), σv)。

rtype:

str

crystal.find_point_group.label_dn(n: int, R: ndarray) str
概要:

Dn点群(D3, D4, D6)の対称操作にラベルを付けます。

詳細説明:

単位元、Cn^k(z)回転、またはC2'(xy)回転に分類します。 z軸周りのCn回転とxy面内のC2回転を識別します。

引数:
param n:

Cn回転軸の次数(3, 4, 6)。

type n:

int

param R:

対称操作の回転行列。

type R:

numpy.ndarray

戻り値:
returns:

ラベル文字列(例: E, C3^1(z), C2'(xy))。

rtype:

str

crystal.find_point_group.label_o(R: ndarray) str
概要:

O点群の対称操作にラベルを付けます。

詳細説明:

単位元、C3回転、C4回転、またはC2回転に分類します。 回転軸が<100>または<110>または<111>方向であるかを評価します。

引数:
param R:

対称操作の回転行列。

type R:

numpy.ndarray

戻り値:
returns:

ラベル文字列(例: E, C3, C4, C2(⟨100⟩))。

rtype:

str

crystal.find_point_group.label_oh(R: ndarray) str
概要:

Oh点群の対称操作にラベルを付けます。

詳細説明:

単位元、反転中心 i、O点群の回転操作、S4回転、またはS6回転に分類します。 回転軸が<100>または<111>方向であるかを評価します。

引数:
param R:

対称操作の回転行列。

type R:

numpy.ndarray

戻り値:
returns:

ラベル文字列(例: E, i, C4, S6)。

rtype:

str

crystal.find_point_group.label_t(R: ndarray) str
概要:

T点群の対称操作にラベルを付けます。

詳細説明:

単位元、C3回転(<111>方向)、またはC2回転(<110>または<100>方向)に分類します。

引数:
param R:

対称操作の回転行列。

type R:

numpy.ndarray

戻り値:
returns:

ラベル文字列(例: E, C3, C2)。

rtype:

str

crystal.find_point_group.label_td(R: ndarray) str
概要:

Td点群の対称操作にラベルを付けます。

詳細説明:

単位元、C3回転、C2回転、S4回転、またはσd鏡映に分類します。 各操作の回転軸や法線ベクトルが特定の結晶軸方向(<100>, <110>, <111>)にどれだけ一致するかを評価します。

引数:
param R:

対称操作の回転行列。

type R:

numpy.ndarray

戻り値:
returns:

ラベル文字列(例: E, C3, S4, σd)。

rtype:

str

crystal.find_point_group.label_th(R: ndarray) str
概要:

Th点群の対称操作にラベルを付けます。

詳細説明:

単位元、反転中心 i、T点群の回転操作、S6回転、またはσh鏡映に分類します。 行列式が負の操作には逆行列の回転軸と角度を評価します。

引数:
param R:

対称操作の回転行列。

type R:

numpy.ndarray

戻り値:
returns:

ラベル文字列(例: E, i, C3, S6, σh)。

rtype:

str

crystal.find_point_group.main()
概要:

コマンドライン引数に基づいてXYZ分子の点群を推定し、対称操作をラベル付けして表示します。

詳細説明:

入力XYZファイルから分子を読み込み、オプションに応じて質量中心への平行移動や慣性主軸への整列を行います。 pymatgen.symmetry.analyzer.PointGroupAnalyzer を使用して点群を推定し、 tkpointgroup ユーティリティとカスタムのラベリング関数を使って対称操作を分類・表示します。 点群の推定結果と、選択された点群ファミリーに基づくラベル付け結果が標準出力されます。 --xyz で入力ファイル、--tolerance で座標許容差、--eigen-tol で固有値縮退の許容差を指定します。 --center で質量中心へ平行移動、--align で慣性主軸整列を行います。 --dump-ops を指定すると直交化前の行列も表示され、--write-aligned で整列後のXYZファイルを保存できます。 --assume オプションで分類ファミリーを明示的に指定することも可能です。

戻り値:

なし

crystal.find_point_group.mirror_normal(R: ndarray) ndarray | None
概要:

鏡映の法線ベクトルを返します(鏡映でない場合は None)。

詳細説明:

行列式が負でかつ二乗して単位行列となる行列を鏡映と判定します。 鏡映の場合、固有値-1に対応する固有ベクトルを法線ベクトルとします。

引数:
param R:

検査する行列。

type R:

numpy.ndarray

戻り値:
returns:

鏡映の法線ベクトル、またはNone。

rtype:

Optional[numpy.ndarray]

crystal.find_point_group.pretty_matrix(R: ndarray) str
概要:

行列を整形して文字列として返します。

詳細説明:

微小な要素を0として丸め、指定された書式で数値文字列を生成します。

引数:
param R:

整形する行列。

type R:

numpy.ndarray

戻り値:
returns:

整形された行列の文字列表現。

rtype:

str

crystal.find_point_group.rot_axis_angle(R: ndarray) Tuple[ndarray | None, float]
概要:

回転行列 R の回転軸(Noneのときは不定)と回転角(0..π)を返します。

詳細説明:

回転行列から固有値と固有ベクトルを計算し、固有値1に対応する固有ベクトルを回転軸とします。 回転角はトレースから計算します。回転軸が不定の場合はNoneを返します。

引数:
param R:

回転行列。

type R:

numpy.ndarray

戻り値:
returns:

回転軸(Noneの場合あり)と回転角(ラジアン、0からπの範囲)のタプル。

rtype:

tuple

crystal.find_point_group.write_xyz(mol: Molecule, path: Path, comment: str = '')
概要:

Molecule オブジェクトをXYZファイルとして書き込みます。

引数:
param mol:

書き込む Molecule オブジェクト。

type mol:

pymatgen.core.Molecule

param path:

出力ファイルのパス。

type path:

pathlib.Path

param comment:

XYZファイルの2行目に書き込むコメント。

type comment:

str

戻り値:

なし