point_group プログラム仕様
python point_group.py list python point_group.py pg --pg Td python point_group.py expand --pg C3v --vec "0.1 0.2 0.3" python point_group.py stereo --pg D2h python point_group.py pg --pg Oh --no-anno
- crystal.point_group.classify_symop_pg(R)[ソース]
直交化された3x3行列から点群の対称操作の種類を簡易的に分類します。
- 概要:
直交化済み行列 R を受け取り、点群の操作を簡易的に分類します。
- 詳細説明:
恒等操作、反転操作、回転操作(Cn)、鏡映操作(σ)、回反操作(Sn)を判別します。 行列の行列式(det)とトレース(trace)に基づいて分類を行います。 (ここは従来のロジックのままであり、必要に応じて tkg.classify_label も利用可能です)。
- パラメータ:
R -- 直交化された3x3の対称操作行列(numpy.ndarray)。
- 戻り値:
分類された対称操作の種別を示す文字列(例: "Rotation C3", "Mirror (σ)")。
- crystal.point_group.display_pg_info(symbol=None)[ソース]
指定された点群、または全ての利用可能な点群の情報を表示します。
- 概要:
点群のリスト、または指定された点群の対称操作と種類を標準出力に出力します。
- 詳細説明:
symbol がNoneの場合、32種の結晶点群Hermann–Mauguin記号を一覧表示します。 symbol が指定された場合、その点群に含まれる全ての対称操作行列(3x3 numpy.ndarray)と、 それぞれの操作の簡易分類 (classify_symop_pg による) を表示します。 tkpointgroup ライブラリを使用して操作行列を取得します。
- パラメータ:
symbol -- 表示する点群のHermann–Mauguin記号(文字列)。Noneの場合は全点群をリストします。
- 戻り値:
なし。情報を標準出力に出力します。
- crystal.point_group.expand_direction(symbol, vec)[ソース]
指定された点群の全操作を与えられた方向ベクトルに作用させ、展開された一意な方向の集合を返します。
- 概要:
点群の全操作を与えられた方向ベクトル vec に作用させ、一意な方向の集合を返します。
- 詳細説明:
入力ベクトルはまず正規化され、z>=0の上半球に統一されます。 各対称操作によって変換されたベクトルも同様に正規化・上半球統一され、 重複排除 (unique_dirs) 後にリストとして返されます。 ゼロベクトルに近い入力は許可されません。
- パラメータ:
symbol -- 方向展開に使用する点群のHermann–Mauguin記号。
vec -- 展開する開始方向ベクトル(3次元のリスト、タプル、またはnumpy.ndarray)。
- 戻り値:
点群によって展開された一意な方向ベクトルのリスト。
- 例外:
RuntimeError -- 点群の構築に失敗した場合。
ValueError -- ゼロベクトルが入力された場合。
- crystal.point_group.main()[ソース]
コマンドラインインターフェース(CLI)のエントリポイントです。
- 概要:
本スクリプトのコマンドラインインターフェースを処理し、指定されたモードに応じた機能を実行します。
- 詳細説明:
プログラムの実行モード(list, pg, stereo, expand)を解析し、 対応する関数を呼び出します。点群記号、シードベクトル、アノテーションオプションなどの コマンドライン引数を処理し、不正な入力があった場合はエラーメッセージを表示して終了します。 matplotlibの図が表示された場合は、ユーザーがEnterを押すまでブロックします。
- パラメータ:
None
- 戻り値:
なし。
- crystal.point_group.orthogonalize(R)[ソース]
入力行列を最も近い直交行列に射影します。
- 概要:
入力行列を特異値分解(SVD)を用いて最も近い直交行列へ射影し、det=±1 を保証します。
- 詳細説明:
行列の数値誤差を修正し、det=±1 の直交行列であることを保証します。 tkpointgroup.snap_matrix を利用して、直交性と行列式の符号を整えます。
- パラメータ:
R -- 3x3の行列(numpy.ndarrayまたはそれに変換可能なもの)。
- 戻り値:
直交化された3x3のnumpy.ndarray。
- crystal.point_group.plot_pg_projection(symbol, seed_vec=None, annotate=True)[ソース]
指定された点群のステレオ投影図を生成し、表示します。
- 概要:
点群のステレオ投影図をプロットします。これには回転軸、鏡映面、そしてシードベクトルを群で展開した方向が含まれます。
- 詳細説明:
回転軸(固有値1の固有ベクトル)、鏡映面(大円)、および与えられたシードベクトルを 点群の操作で展開した方向をプロットします。全ての方向はz>=0の上半球に正規化され、 ステレオ投影されます。鏡映面は破線で、回転軸は白い三角形で、展開された方向は 番号付きの青い丸で示されます。プロット後、展開された方向の座標もコンソールに出力します。
- パラメータ:
symbol -- 描画する点群のHermann–Mauguin記号。
seed_vec -- 点群で展開する開始方向ベクトル(3次元numpy.ndarray)。 Noneの場合、デフォルト値 [0.8, 0.1, 0.05] を使用します。
annotate -- 展開された方向に番号ラベルを表示するかどうかのブール値。
- 戻り値:
なし。matplotlibの図を表示します。
- crystal.point_group.stereo_project(v)[ソース]
単位球上の点 v=(x,y,z) をステレオ投影(南極からz=0平面へ)します。
- 概要:
3D単位球上の点を2D平面にステレオ投影します。
- 詳細説明:
単位球上の点 v=(x,y,z) をステレオ投影(南極から z=0 平面)します。 上半球 z>=0 を単位円内に写す: x' = x/(1+z), y' = y/(1+z)。 z座標が -1 に近い点(南極)は無限遠になるため、数値的に問題がある場合は None を返します。
- パラメータ:
v -- 単位球上の点の3次元座標ベクトル(numpy.ndarray)。
- 戻り値:
ステレオ投影された2次元座標のタプル (x', y')。南極点に近い場合は None。
- crystal.point_group.unique_dirs(vs, tol=1e-05, hemisphere=True)[ソース]
方向ベクトルのリストから重複するものを排除し、一意な方向ベクトルを抽出します。
- 概要:
方向ベクトルの重複排除を行います。hemisphere=True の場合、z>=0 に統一し、正負を同一視します。
- 詳細説明:
ベクトルはまず正規化されます。hemisphere=True の場合、z座標が負のベクトルは符号を反転させて 上半球(z>=0)に統一し、正負を同一視して重複排除を行います。比較には指定された許容誤差 tol を使用します。 ノルムが EPS より小さいゼロベクトルに近いものは無視されます。
- パラメータ:
vs -- 方向ベクトルのリストまたは配列。
tol -- ベクトルの比較に使用する数値的な許容誤差。
hemisphere -- Trueの場合、z<0のベクトルは反転され、±同一視で重複排除されます。
- 戻り値:
一意な方向ベクトルのリスト。