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のベクトルは反転され、±同一視で重複排除されます。

戻り値:

一意な方向ベクトルのリスト。