tkpointgroup プログラム仕様

tkpointgroup.py
  • Pure NumPy point-group utilities extracted from point_group_inf.py

このモジュールは、NumPyを使用して点群に関連する様々なユーティリティを提供します。 主な機能として、Herman–Mauguin記号とSchoenflies記号の相互変換、群記号からの生成元と全要素の取得、 生成元からの閉包計算、点の軌道や独立代表点の取得、および回転、鏡映、反転などの基本的な幾何学操作が含まれます。 また、点群の指標表、クラスへの分類、振動モードの既約表現分解など、群論解析のための機能も提供します。

tkpointgroup.py 技術ドキュメント

提供機能(再利用向けAPI):
  • Herman–Mauguin (国際) と Schoenflies の相互変換

  • 群記号から generator と全要素(重複なし)を取得

  • generator から閉包を取り、全要素のラベルと行列を取得

  • 点の軌道・独立代表点(重複削除)を取得

  • 各種ユーティリティ(回転・鏡映・反転、スナップ、直交化など)

  • 点群の指標表の取得と操作の分類

  • 振動モードの既約表現分解

依存: numpy

crystal.tkpointgroup.build_Cn(n: int) List[ndarray][ソース]

n回軸 (Cn) 点群の全ての対称操作行列を構築します。

概要:

n回回転軸のみから構成される点群の全要素行列を返します。

詳細説明:

z軸周りの360/n度の回転を生成元とし、それらの閉包を計算します。

パラメータ:

n (int) -- 回転軸の次数。

戻り値:

Cn点群の対称操作行列のリスト。

戻り値の型:

List[numpy.ndarray]

crystal.tkpointgroup.build_Cnh(n: int) List[ndarray][ソース]

Cnh点群の全ての対称操作行列を構築します。

概要:

n回回転軸とそれに垂直な水平鏡映面から構成される点群の全要素行列を返します。

詳細説明:

z軸周りの360/n度の回転と、z軸に垂直な水平面(ez)での鏡映を生成元とし、それらの閉包を計算します。

パラメータ:

n (int) -- 回転軸の次数。

戻り値:

Cnh点群の対称操作行列のリスト。

戻り値の型:

List[numpy.ndarray]

crystal.tkpointgroup.build_Cnv(n: int) List[ndarray][ソース]

Cnv点群の全ての対称操作行列を構築します。

概要:

n回回転軸とそれに含まれる複数の鉛直鏡映面から構成される点群の全要素行列を返します。

詳細説明:

z軸周りの360/n度の回転と、z軸を含む垂直面(phi=0)での鏡映を生成元とし、それらの閉包を計算します。

パラメータ:

n (int) -- 回転軸の次数。

戻り値:

Cnv点群の対称操作行列のリスト。

戻り値の型:

List[numpy.ndarray]

crystal.tkpointgroup.build_Dn(n: int) List[ndarray][ソース]

Dn点群の全ての対称操作行列を構築します。

概要:

n回回転軸とそれに垂直な2回回転軸(n個)から構成される点群の全要素行列を返します。

詳細説明:

z軸周りの360/n度の回転と、x軸周りの180度回転を生成元とし、それらの閉包を計算します。

パラメータ:

n (int) -- 主回転軸の次数。

戻り値:

Dn点群の対称操作行列のリスト。

戻り値の型:

List[numpy.ndarray]

crystal.tkpointgroup.build_Dnd(n: int) List[ndarray][ソース]

Dnd点群の全ての対称操作行列を構築します。

概要:

Dn点群に、2回回転軸の間の対角鏡映面が加わった点群の全要素行列を返します。

詳細説明:

z軸周りの360/n度の回転、x軸周りの180度回転、および2回回転軸の間の対角鏡映面(phi=0)を生成元とし、それらの閉包を計算します。

パラメータ:

n (int) -- 主回転軸の次数。

戻り値:

Dnd点群の対称操作行列のリスト。

戻り値の型:

List[numpy.ndarray]

crystal.tkpointgroup.build_Dnh(n: int) List[ndarray][ソース]

Dnh点群の全ての対称操作行列を構築します。

概要:

Dn点群に水平鏡映面が加わった点群の全要素行列を返します。

詳細説明:

z軸周りの360/n度の回転、x軸周りの180度回転、およびz軸に垂直な水平鏡映を生成元とし、それらの閉包を計算します。

パラメータ:

n (int) -- 主回転軸の次数。

戻り値:

Dnh点群の対称操作行列のリスト。

戻り値の型:

List[numpy.ndarray]

crystal.tkpointgroup.build_O() List[ndarray][ソース]

O (八面体) 点群の全ての対称操作行列を構築します。

概要:

正八面体または立方体の対称性を持つ点群の全要素行列を返します。

詳細説明:

3次元空間における軸の順列と符号の組み合わせにより、立方体の回転対称操作を直接列挙します。 行列式が1の操作のみを含めます。

戻り値:

O点群の対称操作行列のリスト。

戻り値の型:

List[numpy.ndarray]

crystal.tkpointgroup.build_Oh() List[ndarray][ソース]

Oh (全八面体) 点群の全ての対称操作行列を構築します。

概要:

O点群に反転中心が加わった点群の全要素行列を返します。

詳細説明:

O点群の全ての操作に反転操作を適用したものを加え、ユニークな要素を抽出します。

戻り値:

Oh点群の対称操作行列のリスト。

戻り値の型:

List[numpy.ndarray]

crystal.tkpointgroup.build_Sn(n: int) List[ndarray][ソース]

Sn点群の全ての対称操作行列を構築します。

概要:

n回回映軸 (improper rotation axis) から構成される点群の全要素行列を返します。

詳細説明:

z軸に垂直な鏡映とz軸周りの360/n度の回転の積(回映操作)を生成元とし、その閉包を計算します。

パラメータ:

n (int) -- 回映軸の次数。

戻り値:

Sn点群の対称操作行列のリスト。

戻り値の型:

List[numpy.ndarray]

crystal.tkpointgroup.build_T() List[ndarray][ソース]

T (四面体) 点群の全ての対称操作行列を構築します。

概要:

正四面体の対称性を持つ点群の全要素行列を返します。

詳細説明:

[1,1,1]軸周りの120度回転と、x軸周りの180度回転を生成元とし、それらの閉包を計算します。

戻り値:

T点群の対称操作行列のリスト。

戻り値の型:

List[numpy.ndarray]

crystal.tkpointgroup.build_Td() List[ndarray][ソース]

Td (正四面体) 点群の全ての対称操作行列を構築します。

概要:

正四面体の対称性を持つ点群の全要素行列を返します。

詳細説明:

[1,1,1]軸周りの120度回転、x軸周りの180度回転、およびz軸周りのS4回映操作を生成元とし、それらの閉包を計算します。

戻り値:

Td点群の対称操作行列のリスト。

戻り値の型:

List[numpy.ndarray]

crystal.tkpointgroup.build_Th() List[ndarray][ソース]

Th (全四面体) 点群の全ての対称操作行列を構築します。

概要:

T点群に反転中心が加わった点群の全要素行列を返します。

詳細説明:

T点群の生成元に反転操作を追加し、それらの閉包を計算します。

戻り値:

Th点群の対称操作行列のリスト。

戻り値の型:

List[numpy.ndarray]

crystal.tkpointgroup.build_group(symbol: str) List[ndarray][ソース]

指定された点群シンボルに対応する全ての対称操作行列を構築します。

概要:

点群シンボル(SchoenfliesまたはHerman–Mauguin)に基づいて、その点群の全ての対称操作行列をリストで返します。

詳細説明:

入力シンボルを正規化し、対応する build_C*build_D* などの関数を呼び出します。 サポートされていないシンボルの場合は ValueError を発生させます。

パラメータ:

symbol (str) -- 構築する点群のシンボル(例: "C2v", "mmm")。

戻り値:

点群の全ての対称操作行列のリスト。

戻り値の型:

List[numpy.ndarray]

例外:

ValueError -- サポートされていない点群シンボルが指定された場合。

crystal.tkpointgroup.character_table(pg: str) Dict[str, Dict[str, complex]][ソース]

指定された点群の指標表(classes, irreps)を返します。

概要:

与えられた点群シンボルに対応する指標表を検索し、そのクラスと既約表現の指標を返します。

詳細説明:

PG_CHAR_TABLES 辞書から対応する指標表を取得します。 サポートされていない点群の場合は ValueError を発生させます。 シンボルは normalize_symbol で正規化されます。

パラメータ:

pg (str) -- 点群シンボル。

戻り値:

指標表を含む辞書。キーは 'classes' (クラス名のリスト) と 'irreps' (既約表現ごとの指標の辞書)。

戻り値の型:

Dict[str, Dict[str, complex]]

例外:

ValueError -- 指定された点群の指標表が利用できない場合。

crystal.tkpointgroup.class_aggregation(pg: str, raw_labels: List[str]) Tuple[List[str], Dict[str, str]][ソース]

生の操作ラベルを、指定された点群の指標表のクラス名に集約します。

概要:

classify_op_for_table によって生成された詳細な操作ラベルを、 点群の指標表で定義されているクラス名にマッピングし、集約します。

詳細説明:

点群の指標表からクラスのリストを取得し、入力された生のラベルを これらのクラス名に対応付ける辞書を構築します。 例えば、"σ_v(φ=0)" や "σ_v(φ=90)" のような複数のσv面が単一の "σv" クラスに集約されます。

パラメータ:
  • pg (str) -- 点群シンボル。

  • raw_labels (List[str]) -- 各対称操作に対する生の文字列ラベルのリスト。

戻り値:

(指標表のクラス名のリスト, 生ラベルからクラス名へのマッピング辞書) のタプル。

戻り値の型:

Tuple[List[str], Dict[str, str]]

crystal.tkpointgroup.classify_label(M: ndarray) str[ソース]

対称操作行列を簡易的なラベル(例: "E", "i", "σ_h", "C(z,90)")に分類します。

概要:

与えられた3x3の対称操作行列を行列式とトレースに基づいて分類し、対応する文字列ラベルを返します。

詳細説明:

単位行列は "E"、反転行列は "i" となります。 行列式が-1の操作で自乗すると単位行列になるものは鏡映(σ)と判断し、 法線ベクトルの方向によって σ_h, σ_v などを割り当てます。 行列式が1の操作は回転 (C)、行列式が-1の操作で鏡映でないものは回映 (S) と判断し、 回転軸と角度に基づいてラベルを生成します。

パラメータ:

M (numpy.ndarray) -- 分類する3x3の対称操作行列。

戻り値:

分類された操作を示す文字列ラベル。

戻り値の型:

str

crystal.tkpointgroup.classify_op_for_table(pg: str, R: ndarray, tol: float = 1e-06) str[ソース]

回転行列を、指定された点群の指標表中のクラス名に対応づけて分類します。

概要:

与えられた対称操作行列を、点群のコンテキストに基づいて標準的なクラスラベル(例: "C2", "C2(x)", "σh")に分類します。

詳細説明:

まず行列を直交化し、行列式を±1に修正します。 その後、行列式、トレース、固有ベクトル、そして特定の点群(例: D2h, D4h)の軸の方向に基づいて操作を分類します。 例えば、C2操作は点群によって "C2(x)", "C2(y)", "C2(z)"、または単に "C2" とラベル付けされます。

パラメータ:
  • pg (str) -- 点群シンボル (例: "C2v", "D2h")。

  • R (numpy.ndarray) -- 分類する3x3の対称操作行列。

  • tol (float) -- 浮動小数点比較の許容誤差。

戻り値:

指標表のクラス名に対応する文字列ラベル。

戻り値の型:

str

crystal.tkpointgroup.decompose_irreps(chars_by_class: Dict[str, float], pg: str, class_sizes_override: Dict[str, int] | None = None, order_override: int | None = None) Dict[str, int][ソース]

クラスごとの指標ベクトルを既約表現へ直交分解します。

概要:

与えられた可約表現の指標ベクトルを、指定された点群の既約表現に分解し、 各既約表現の多重度を計算します。

詳細説明:

群論の直交性定理 (m_i = (1/h) * sum(chi_reducible(R) * chi_irreducible(R)* * N_R)) を使用します。 h は群の位数、N_R はクラスRの要素数、chi(R) はクラスRの指標です。 クラスサイズと群の位数は、class_sizes_overrideorder_override で明示的に指定できます。 指定がない場合、group_orderclassify_op_for_table を用いて自動的に計算されます。

パラメータ:
  • chars_by_class (Dict[str, float]) -- 各クラスに対する可約表現の指標値の辞書。

  • pg (str) -- 点群シンボル。

  • class_sizes_override (Optional[Dict[str, int]]) -- クラスサイズを明示的に指定する辞書(クラス名: サイズ)。

  • order_override (Optional[int]) -- 群の位数を明示的に指定する整数。

戻り値:

各既約表現名とその多重度(整数)の辞書。

戻り値の型:

Dict[str, int]

例外:

ValueError -- 指定された点群の指標表が利用できない場合、または群の位数を特定できない場合。

crystal.tkpointgroup.dedup_points(orbits: List[Tuple[ndarray, List[int]]], tol: float = 1e-08) List[Tuple[ndarray, List[int]]][ソース]

(点, 操作IDリスト) のリストからユニークな点を抽出します。

概要:

orbit_for_point の結果から、座標が同じ点をまとめ、それらに対応する操作IDを結合します。

詳細説明:

point_key を使用して点の重複を検出し、重複する点が見つかった場合は、 対応する操作IDのセットを結合します。最終的に、ユニークな点とその点を生成する 全ての操作ID(ソート済みリスト)のペアを返します。

パラメータ:
  • orbits (List[Tuple[numpy.ndarray, List[int]]]) -- orbit_for_point から返される (点, 操作IDリスト) のリスト。

  • tol (float) -- 点の比較に用いる許容誤差。

戻り値:

重複排除された (ユニークな点, その点を生成する操作IDのリスト) のペアのリスト。

戻り値の型:

List[Tuple[numpy.ndarray, List[int]]]

crystal.tkpointgroup.det_from_label(lab: str) int[ソース]

操作ラベルから、その操作の行列式を返します。

概要:

与えられた対称操作のラベルに基づいて、その操作の行列式 (1または-1) を返します。

詳細説明:

'E' や 'C' (純粋回転) 操作は行列式が1です。 'i' (反転)、'σ' (鏡映)、'S' (回映) 操作は行列式が-1です。

パラメータ:

lab (str) -- 対称操作のラベル。

戻り値:

行列式 (1または-1)。

戻り値の型:

int

crystal.tkpointgroup.diagonal_plane(phi_deg: float) ndarray[ソース]

対角面(z軸に対して45度の角度を持つ面)の法線ベクトルを生成します。

概要:

指定された角度に対する対角面の法線ベクトルを計算します。

詳細説明:

vertical_plane 関数を呼び出し、角度に90度を加えることで、 xy平面内で45度の傾きを持つ(例: (1,1,0) や (1,-1,0) 方向を法線に持つ)面を表現します。

パラメータ:

phi_deg (float) -- xy平面内での角度(度数)。

戻り値:

対角面の法線ベクトル。

戻り値の型:

numpy.ndarray

crystal.tkpointgroup.elements_from_generators(generators: List[ndarray]) List[Tuple[str, ndarray]][ソース]

生成元行列のリストから閉包をとり、ラベル付きの全要素を返します。

概要:

与えられた生成元行列のリストから、それらによって生成される全てのユニークな群要素を計算し、 それぞれの操作に簡易ラベルを付けて返します。

詳細説明:

unique_closure を使用して生成元から全ての群要素行列を計算し、 label_elements で各行列にラベルを付けます。

パラメータ:

generators (List[numpy.ndarray]) -- 群の生成元であるNumPy行列のリスト。

戻り値:

ラベルと群要素行列のペアのリスト。

戻り値の型:

List[Tuple[str, numpy.ndarray]]

crystal.tkpointgroup.gamma_3N_characters(coords: ndarray, op_mats: List[ndarray], labels: List[str], tol: float = 1e-05) Dict[str, float][ソース]

分子の全並進振動モード (Γ_3N) の指標を計算します。

概要:

与えられた原子座標、対称操作行列、およびそれらのラベルを使用して、 分子の全振動モードの可約表現の指標を計算します。

詳細説明:

各対称操作Rに対して、その操作によって移動しない原子を特定します。 移動しない原子については、Rのトレースが指標に貢献します。 全ての操作についてこれを合計し、各ラベルに対応する総指標を算出します。

パラメータ:
  • coords (numpy.ndarray) -- 原子座標のNumPy配列 (N, 3)。

  • op_mats (List[numpy.ndarray]) -- 対称操作行列のリスト。

  • labels (List[str]) -- 各操作行列に対応するラベルのリスト。

  • tol (float) -- 原子位置の比較に用いる許容誤差。

戻り値:

各操作ラベルに対するΓ_3Nの指標値の辞書。

戻り値の型:

Dict[str, float]

crystal.tkpointgroup.gamma_rot_characters(labels: List[str], class_map: Dict[str, str]) Dict[str, float][ソース]

分子の回転振動モード (Γ_R) の指標を計算します。

概要:

対称操作のラベルとクラスマップを使用して、分子の回転モードの可約表現の指標を計算します。

詳細説明:

各操作ラベルについて、その操作の3x3行列のトレースにその行列式 (det_from_label) を乗じた値を計算します。 これは、回転操作 (det=1) にはトレースそのままを、回転-反転操作 (det=-1) にはトレースに-1を乗じた値を意味します。 これらの値をクラスマップに従って集約し、各クラスのΓ_R指標を求めます。

パラメータ:
  • labels (List[str]) -- 各対称操作のラベルのリスト。

  • class_map (Dict[str, str]) -- 生ラベルから指標表クラス名へのマッピング辞書。

戻り値:

各クラスに対するΓ_Rの指標値の辞書。

戻り値の型:

Dict[str, float]

crystal.tkpointgroup.gamma_trans_characters(labels: List[str], class_map: Dict[str, str]) Dict[str, float][ソース]

分子の並進振動モード (Γ_T) の指標を計算します。

概要:

対称操作のラベルとクラスマップを使用して、分子の並進モードの可約表現の指標を計算します。

詳細説明:

各操作ラベルについて、その操作の3x3行列のトレースを polar_trace_from_label を用いて計算します。 これらのトレース値をクラスマップに従って集約し、各クラスのΓ_T指標を求めます。

パラメータ:
  • labels (List[str]) -- 各対称操作のラベルのリスト。

  • class_map (Dict[str, str]) -- 生ラベルから指標表クラス名へのマッピング辞書。

戻り値:

各クラスに対するΓ_Tの指標値の辞書。

戻り値の型:

Dict[str, float]

crystal.tkpointgroup.generators_for(symbol: str) List[Tuple[str, ndarray]][ソース]

指定された点群シンボルに対応する規約な生成元を返します(ラベル付き)。

概要:

特定の点群シンボルに対して、その群を生成するための最小限の操作行列のリストをラベル付きで提供します。

詳細説明:

ほとんどのSchoenflies記号に対して定義済みの生成元を返します。 国際記号など、生成元が明確に定義されていない場合は空のリストを返します。 返される全ての生成元は snap_matrix で正規化されています。

パラメータ:

symbol (str) -- 点群シンボル。

戻り値:

ラベルと生成元行列のペアのリスト。生成元が定義されていない場合は空リスト。

戻り値の型:

List[Tuple[str, numpy.ndarray]]

crystal.tkpointgroup.get_all_operations(symbol: str) List[Tuple[str, ndarray]][ソース]

点群シンボルから全要素(ラベル付き、重複なし)を返します。

概要:

指定された点群シンボルに対応する全ての対称操作行列と、それぞれの簡易ラベルのペアのリストを返します。

詳細説明:

build_group を使用して行列を構築し、label_elements でラベル付けを行います。

パラメータ:

symbol (str) -- 点群シンボル。

戻り値:

ラベルと操作行列のペアのリスト。

戻り値の型:

List[Tuple[str, numpy.ndarray]]

例外:

ValueError -- サポートされていない点群シンボルが指定された場合。

crystal.tkpointgroup.get_generators(symbol: str) List[Tuple[str, ndarray]][ソース]

点群シンボルから生成元(ラベル付き)を返します。

概要:

指定された点群シンボルに対応する生成元の操作行列と、それぞれの簡易ラベルのペアのリストを返します。

詳細説明:

generators_for を使用して定義済みの生成元を取得します。 もし generators_for が生成元を返さない場合(国際記号など)、get_all_operations にフォールバックし、 全ての群要素を生成元と見なして返します。

パラメータ:

symbol (str) -- 点群シンボル。

戻り値:

ラベルと生成元行列のペアのリスト。

戻り値の型:

List[Tuple[str, numpy.ndarray]]

例外:

ValueError -- サポートされていない点群シンボルが指定された場合(`build_group`経由)。

crystal.tkpointgroup.group_ops(symbol: str) List[ndarray][ソース]

点群の全ての対称操作(3x3行列)を返します。

概要:

指定された点群シンボルに対応する全ての対称操作行列のリストを返します。

詳細説明:

build_group 関数を呼び出して操作行列を構築し、snap_matrix で正規化します。 build_group で対応していない抽象群の場合は、ValueError が発生します。

パラメータ:

symbol (str) -- 点群シンボル。

戻り値:

点群の全ての対称操作行列のリスト。

戻り値の型:

List[numpy.ndarray]

例外:

ValueError -- 抽象群など、build_group で操作行列を構築できない場合。

crystal.tkpointgroup.group_order(symbol: str) int[ソース]

点群の位数を返します。

概要:

指定された点群シンボルに対応する群の位数(要素数)を返します。

詳細説明:

build_group で構築可能な群については、実際に構築された操作の数を返します。 ABSTRACT_CLASS_SIZES に定義されている抽象群については、その合計クラスサイズを返します。 どちらにも対応しない場合は ValueError を発生させます。

パラメータ:

symbol (str) -- 点群シンボル。

戻り値:

点群の位数。

戻り値の型:

int

例外:

ValueError -- サポートされていない、または抽象定義されていない点群シンボルが指定された場合。

crystal.tkpointgroup.hm_to_schoenflies(h: str) str[ソース]

Herman–Mauguin (国際) 点群記号をSchoenflies記号に変換します。

概要:

与えられたHerman–Mauguin記号を対応するSchoenflies記号に変換します。

詳細説明:

変換マップ _H_to_S を使用します。マップにない記号はそのまま返されます。 変換前に normalize_symbol でシンボルを正規化します。

パラメータ:

h (str) -- Herman–Mauguin点群記号。

戻り値:

対応するSchoenflies点群記号。

戻り値の型:

str

crystal.tkpointgroup.inversion() ndarray[ソース]

反転操作の行列を生成します。

概要:

原点に対する反転操作を表す3x3の行列を返します。

詳細説明:

これは -I(マイナス単位行列)と等価です。

戻り値:

3x3の反転行列。

戻り値の型:

numpy.ndarray

crystal.tkpointgroup.label_elements(mats: List[ndarray]) List[Tuple[str, ndarray]][ソース]

対称操作行列のリストをラベル付きのリストに変換します。

概要:

各対称操作行列に対して classify_label 関数を適用し、(ラベル, 行列) のペアのリストを生成します。

パラメータ:

mats (List[numpy.ndarray]) -- 対称操作行列のリスト。

戻り値:

ラベルとそれに対応する行列のペアのリスト。

戻り値の型:

List[Tuple[str, numpy.ndarray]]

crystal.tkpointgroup.mat_key(M: ndarray) tuple[ソース]

行列の一意な識別キーを生成します。

概要:

NumPy配列を行列の同一性チェックに使用できるハッシュ可能なタプルに変換します。

詳細説明:

行列を1次元に平坦化し、各要素を小数点以下10桁で丸めてタプルに変換します。 これにより、浮動小数点誤差に強いキーとして、辞書のキーや集合の要素として利用可能になります。

パラメータ:

M (numpy.ndarray) -- キーを生成する入力行列。

戻り値:

行列の要素を丸めたタプルのキー。

戻り値の型:

tuple

crystal.tkpointgroup.mirror(normal: ndarray) ndarray[ソース]

指定された法線ベクトルを持つ平面での鏡映行列を生成します。

概要:

与えられた法線ベクトルに垂直な平面に関する3x3の鏡映行列を計算します。

詳細説明:

鏡映行列は I - 2*(n @ n.T) で計算されます。ここで I は単位行列、n は正規化された法線ベクトルです。

パラメータ:

normal (numpy.ndarray) -- 鏡映平面の法線ベクトル。

戻り値:

3x3の鏡映行列。

戻り値の型:

numpy.ndarray

crystal.tkpointgroup.normalize_symbol(s: str) str[ソース]

点群シンボル文字列を正規化します。

概要:

入力された点群シンボル文字列から空白、ハイフン、アンダースコアを除去し、標準形式に変換します。

詳細説明:

異なる形式で入力されうるハイフン文字(U+2212, U+2013, U+2014)も標準のASCIIハイフンに統一します。

パラメータ:

s (str) -- 正規化する点群シンボル文字列。

戻り値:

正規化された点群シンボル文字列。

戻り値の型:

str

crystal.tkpointgroup.orbit_for_point(ops: List[ndarray], p: ndarray, tol: float = 1e-08) List[Tuple[ndarray, List[int]]][ソース]

一点から生成される軌道上の全ての等価点と、それらを生成する操作のインデックスを返します。

概要:

与えられた点pに、点群の全ての操作を適用して生成される軌道上のユニークな点をリストアップします。

詳細説明:

各操作 M に対して M @ p を計算し、point_key を使用してユニークな点を識別します。 結果は、(等価点, [その点を生成する操作のインデックスのリスト]) のタプルのリストとして返されます。

パラメータ:
  • ops (List[numpy.ndarray]) -- 点群の対称操作行列のリスト。

  • p (numpy.ndarray) -- 軌道を計算する開始点。

  • tol (float) -- 点の比較に用いる許容誤差。

戻り値:

軌道上の各ユニークな点と、それを生成する操作インデックスのリストのタプル。

戻り値の型:

List[Tuple[numpy.ndarray, List[int]]]

crystal.tkpointgroup.point_key(p: ndarray, tol: float = 1e-08) tuple[ソース]

点の同一性判定用キーを生成します(トレランスつき)。

概要:

与えられた3D点のNumPy配列を、浮動小数点誤差を考慮したハッシュ可能なタプルキーに変換します。

詳細説明:

点を指定された許容誤差 (tol) でスケールし、最も近い整数に丸めます。 これにより、非常に近い点が同じキーを持つようになり、集合や辞書での重複排除に利用できます。

パラメータ:
  • p (numpy.ndarray) -- 3次元の点座標。

  • tol (float) -- 点の比較に用いる許容誤差。

戻り値:

点のハッシュ可能なタプルキー。

戻り値の型:

tuple

crystal.tkpointgroup.polar_trace_from_label(lab: str) float[ソース]

操作ラベルから、3次元の直交変換行列のトレースを計算します。

概要:

与えられた対称操作のラベルに基づいて、その操作の3x3行列のトレース(対角成分の和)を返します。

詳細説明:

'E' は3、'i' は-3。 鏡映操作 ('σ') は1。 回転操作 ('C') は 1 + 2*cos(theta) を計算します。 回映操作 ('S') は 2*cos(theta) - 1 を計算します。 角度 theta はラベルから解析される次数 n と指数 p に基づきます (2*pi*p/n)。

パラメータ:

lab (str) -- 対称操作のラベル。

戻り値:

その操作の3x3行列のトレース。

戻り値の型:

float

crystal.tkpointgroup.pretty_irreps(pg: str, mults: Dict[str, int]) str[ソース]

既約表現の多重度を見やすい和の形式で整形します。

概要:

既約表現の多重度を示す辞書を受け取り、それを "A1 + 2E + T2" のような 人間が読みやすい文字列形式に変換します。

詳細説明:

一般的な点群の既約表現には標準的な並び順があります。 この関数では、order_map を使用して、指定された点群の既約表現を その慣習的な順序で並べ替えます。 多重度が1より大きい場合は 2E のように係数を付け、1の場合は A1 のように表現名を直接使用します。 多重度が0の表現は省略されます。

パラメータ:
  • pg (str) -- 点群シンボル。

  • mults (Dict[str, int]) -- 各既約表現名とその多重度(整数)の辞書。

戻り値:

整形された既約表現の和の文字列。

戻り値の型:

str

crystal.tkpointgroup.reduce_to_classes(vec_by_label: Dict[str, float], classes: List[str], class_map: Dict[str, str]) Dict[str, float][ソース]

ラベルごとの指標ベクトルを指標表のクラスに集約します。

概要:

詳細な操作ラベルに対応する指標値を、点群の指標表で定義されたクラス名に対応する指標値に集約します。

詳細説明:

class_map を使用して、各ラベルの指標値を対応するクラスに加算します。 最終結果は、指標表の全てのクラス名を含む辞書として返され、対応する指標値がないクラスには0が割り当てられます。

パラメータ:
  • vec_by_label (Dict[str, float]) -- 各操作ラベルに対する指標値の辞書。

  • classes (List[str]) -- 指標表で定義されたクラス名のリスト。

  • class_map (Dict[str, str]) -- 生ラベルから指標表クラス名へのマッピング辞書。

戻り値:

各クラスに対する集約された指標値の辞書。

戻り値の型:

Dict[str, float]

crystal.tkpointgroup.rot(axis: ndarray, angle_deg: float) ndarray[ソース]

指定された軸を中心とした回転行列を生成します。

概要:

与えられた軸と角度に基づいて3x3の回転行列を計算します。

詳細説明:

ロドリゲスの回転公式を使用して回転行列を構築します。 角度は度数で指定します。

パラメータ:
  • axis (numpy.ndarray) -- 回転軸を示すベクトル。

  • angle_deg (float) -- 回転角度(度数)。

戻り値:

3x3の回転行列。

戻り値の型:

numpy.ndarray

crystal.tkpointgroup.schoenflies_to_hm(s: str) str[ソース]

Schoenflies点群記号をHerman–Mauguin (国際) 記号に変換します。

概要:

与えられたSchoenflies記号を対応するHerman–Mauguin記号に変換します。

詳細説明:

変換マップ _S_to_H を使用します。マップにない記号はそのまま返されます。 変換前に normalize_symbol でシンボルを正規化します。

パラメータ:

s (str) -- Schoenflies点群記号。

戻り値:

対応するHerman–Mauguin点群記号。

戻り値の型:

str

crystal.tkpointgroup.snap_matrix(M: ndarray) ndarray[ソース]

行列要素を代表値へスナップし、直交性/ det=±1 を保証します。

概要:

入力された3x3行列の各要素を事前に定義された代表的な浮動小数点数にスナップし、 さらにその行列が直交性を満たし、かつ行列式が±1であることを保証します。

詳細説明:

まず、各要素を _closest 関数でスナップします。 次に、スナップ後の行列が厳密に直交行列でない場合、SVD (特異値分解) を用いて 最も近い直交行列に変換し、再度要素をスナップします。 最後に、行列式が±1でない場合、SVDを用いて行列式を±1に修正します。 これにより、数値誤差によって生じるわずかなずれを修正し、物理的に正しい対称操作行列を保証します。

パラメータ:

M (numpy.ndarray) -- スナップ処理を行う3x3の浮動小数点行列。

戻り値:

スナップされ、直交性および行列式の条件を満たす3x3行列。

戻り値の型:

numpy.ndarray

crystal.tkpointgroup.supported_symbols() List[str][ソース]

このモジュールで構築可能な点群シンボルの一覧を返します。

概要:

現在サポートされている点群シンボルのリストを返します。

詳細説明:

Schoenflies記号と、それに対応する代表的なHerman–Mauguin記号が含まれます。

戻り値:

サポートされている点群シンボルのリスト。

戻り値の型:

List[str]

crystal.tkpointgroup.unique_closure(generators: List[ndarray]) List[ndarray][ソース]

生成元のリストから有限群の閉包を構成します(重複なし)。

概要:

与えられた生成元行列のセットから、それらによって生成される全てのユニークな群要素(行列)を計算します。

詳細説明:

生成元と既存の群要素の積を計算し、新しいユニークな要素が見つかるたびにキューに追加していく 幅優先探索(またはダイクストラ法に似た)アプローチを使用します。 全ての要素は snap_matrix で正規化され、mat_key で重複がチェックされます。 入力が空の場合、単位行列のみを含むリストを返します。

パラメータ:

generators (List[numpy.ndarray]) -- 群の生成元であるNumPy行列のリスト。

戻り値:

生成元から構成される点群の全てのユニークな要素行列のリスト。

戻り値の型:

List[numpy.ndarray]

crystal.tkpointgroup.unique_orbit_points(ops: List[ndarray], p: ndarray, tol: float = 1e-08) List[Tuple[ndarray, List[int]]][ソース]

対称操作行列と開始点を受け取り、重複排除された軌道上の独立点とその生成操作のインデックスを返します。

概要:

与えられた点pに点群の全ての操作を適用し、結果として得られる軌道上の重複しない点を抽出します。

詳細説明:

orbit_for_pointdedup_points を内部的に使用して、 最終的な独立代表点と、それらを作成する全ての対称操作のインデックスをまとめます。

パラメータ:
  • ops (List[numpy.ndarray]) -- 点群の対称操作行列のリスト。

  • p (numpy.ndarray) -- 軌道を計算する開始点。

  • tol (float) -- 点の比較に用いる許容誤差。

戻り値:

軌道上のユニークな各点と、それを生成する操作インデックスのリストのタプル。

戻り値の型:

List[Tuple[numpy.ndarray, List[int]]]

crystal.tkpointgroup.vertical_plane(phi_deg: float) ndarray[ソース]

z軸に垂直な平面(xz平面またはyz平面を含む)に垂直な、xy平面内の法線ベクトルを生成します。

概要:

与えられた角度を持つ垂直面の法線ベクトル(xy平面内)を計算します。

詳細説明:

phi_deg が 0 の場合、y軸に沿ったベクトル ([0, -1, 0]) となり、これはxz平面 (y=0) に垂直です。 phi_deg が 90 の場合、x軸に沿ったベクトル ([-1, 0, 0]) となり、これはyz平面 (x=0) に垂直です。

パラメータ:

phi_deg (float) -- xy平面内での角度(度数)。

戻り値:

垂直面の法線ベクトル。

戻り値の型:

numpy.ndarray