以下は、crystal_convert_cell.py のソースコードに基づいて作成されたMarkdownドキュメントです。


crystal_convert_cell.py

概要

このスクリプトは、指定された結晶構造の単位格子を、異なる基底ベクトル(例えばプリミティブセル)を持つ新しい単位格子に変換します。変換前と変換後の単位格子の格子パラメータ、格子ベクトル、体積、原子サイト情報を計算して表示し、さらに matplotlib の3Dプロット機能を使用して両方の単位格子と原子配置を視覚的に表示します。コマンドライン引数で結晶の種類、変換モード、原子の描画サイズを調整できます。

機能

  • 与えられた結晶名に基づいて、格子パラメータと原子サイト情報を取得します。

  • 指定された変換モードに従って、変換行列を生成します。

  • 元の単位格子の格子パラメータ、格子ベクトル、メートルテンソル、体積、および原子サイト情報を計算し、標準出力に表示します。

  • 変換行列を使用して、元の単位格子から新しい単位格子への変換を実行します。

  • 変換された単位格子の格子パラメータ、格子ベクトル、メートルテンソル、体積、および原子サイト情報を計算し、標準出力に表示します。

  • matplotlib を使用して、変換前と変換後の両方の単位格子と原子配置を3Dで可視化します。

制限事項

  • サポートされている結晶タイプは 'FCC', 'BCC', 'Hex', 'Rhomb' のみです。

  • サポートされている変換モードは 'FCCPrim', 'BCCPrim', 'ACenterPrim', 'BCenterPrim', 'CCenterPrim', 'RhombHex', 'HexRhomb', 'HexOrtho' のみです。

  • 3Dプロットでは、アスペクト比を等しく設定する ax.set_aspect('equal','box') はコメントアウトされており、機能していません。

  • 3Dプロットの軸ティックはコメントアウトされており、設定されていません。

インストール方法

本スクリプトを実行するには、Pythonとその依存ライブラリ、およびカスタムモジュールが必要です。

  1. Pythonのインストール: システムにPythonがインストールされていることを確認してください。

  2. 必要な非標準ライブラリのインストール: 以下のライブラリを pip を使用してインストールします。

    pip install numpy matplotlib
    
  3. tkcrystalbase.py の配置: 本スクリプトがインポートするカスタムモジュール tkcrystalbase.py が、crystal_convert_cell.py と同じディレクトリにあるか、Pythonのパスが通っているディレクトリに配置されている必要があります。

使用方法

スクリプトはコマンドラインから実行します。

python crystal_convert_cell.py crystal_name conversion_mode kRatom

使用例

python crystal_convert_cell.py FCC FCCPrim 1000.0

コマンドライン引数

  • crystal_name (必須): 変換する結晶の種類を指定します。サポートされている値は 'FCC', 'BCC', 'Hex', 'Rhomb' です。

  • conversion_mode (必須): 単位格子の変換モードを指定します。サポートされている値は 'FCCPrim', 'BCCPrim', 'HexOrtho', 'HexRhomb', 'RhombHex' などです。

  • kRatom (オプション): 原子の描画サイズを調整するための係数を指定します。浮動小数点数でなければなりません。デフォルト値は 1000.0 です。

設定ファイル

このスクリプトは設定ファイルを使用しません。

入出力

入力

  • コマンドライン引数:

    • crystal_name: 変換対象の結晶名を指定します。

    • conversion_mode: 適用する変換モードを指定します。

    • kRatom: 原子半径描画のための係数を指定します。

  • 内部変数:

    • crystal_name (デフォルト: 'FCC')

    • conversion_mode (デフォルト: 'FCCPrim')

    • lattice_parameters (デフォルト: [ 5.62, 5.62, 5.62, 90.0, 90.0, 90.0])

    • crystal_sites (デフォルト: FCC構造の原子サイト情報)

    • kr (デフォルト: 1000.0)

    • rmin (デフォルト: 0.1)

    • nrange (デフォルト: [[-0.1, 1.1], [-0.1, 1.1], [-0.1, 1.1]])

    • figsize (デフォルト: (12, 12))

    • converted_atom_color (デフォルト: 'gray')

出力

  • 標準出力:

    • 変換前の結晶名、格子パラメータ、格子ベクトル、メートルテンソル、体積、原子サイト情報。

    • 変換モード、変換行列。

    • 変換後の格子ベクトル、格子パラメータ、メートルテンソル、体積、原子サイト情報。

    • 描画対象となるすべての原子サイト情報(変換前と変換後)。

  • グラフィカル出力:

    • matplotlib を用いた3Dプロットウィンドウが表示され、変換前(黒線)と変換後(青線)の単位格子、およびそれぞれの原子配置が可視化されます。

主要な関数

  • get_crystal(name)

    • 説明: 指定された結晶名に対応する格子パラメータとサイト情報を返します。

    • 引数:

      • name: str, 結晶名 ('FCC', 'BCC', 'Hex', 'Rhomb')。

    • 戻り値: tuple, (lattice_parameters, crystal_sites)

      • lattice_parameters: list, 格子定数 [a, b, c, alpha, beta, gamma]

      • crystal_sites: list, 原子サイト情報リスト。

  • get_conversion_matrix(key)

    • 説明: 指定された変換キーに対応する変換行列を返します。

    • 引数:

      • key: str, 変換モードのキー ('FCCPrim', 'BCCPrim', 'ACenterPrim', 'BCenterPrim', 'CCenterPrim', 'RhombHex', 'HexRhomb', 'HexOrtho')。

    • 戻り値: numpy.ndarray, 3x3の変換行列。

  • usage()

    • 説明: スクリプトの正しい使用方法を標準出力に表示します。

    • 引数: なし

    • 戻り値: なし

  • terminate()

    • 説明: usage() メッセージを表示し、スクリプトを終了します。

    • 引数: なし

    • 戻り値: なし

  • main()

    • 説明: 単位格子の変換と描画のメイン処理を実行します。結晶情報と変換行列を取得し、変換前後の格子パラメータ、格子ベクトル、体積、原子サイト情報を計算して標準出力に表示します。その後、変換前後の単位格子と原子配置を matplotlib の3Dプロットで可視化します。tkcrystalbase モジュール内のヘルパー関数を利用して、幾何学的計算と描画を行います。

    • 引数: なし

    • 戻り値: なし

グローバル変数

  • crystal_name

    • : str

    • 説明: 結晶の名前。コマンドライン引数で上書きされない場合のデフォルト値は 'FCC' です。

  • conversion_mode

    • : str

    • 説明: 単位格子の変換モード。コマンドライン引数で上書きされない場合のデフォルト値は 'FCCPrim' です。

  • lattice_parameters

    • : list

    • 説明: 変換前の単位格子の格子パラメータ [a, b, c, alpha, beta, gamma] (オングストロームおよび度)。デフォルト値は [ 5.62, 5.62, 5.62, 90.0, 90.0, 90.0] です。

  • crystal_sites

    • : list

    • 説明: 変換前の単位格子の原子サイト情報。各要素は [原子名, サイトラベル, 原子番号, 原子質量, 電荷, 半径, 色, 座標] のリストです。

  • kr

    • : float

    • 説明: 原子を描画する際の半径に対する係数。デフォルト値は 1000.0 です。コマンドライン引数で上書き可能です。

  • rmin

    • : float

    • 説明: 同一の原子サイトと判断するための距離の閾値 (オングストローム)。デフォルト値は 0.1 です。

  • nrange

    • : list

    • 説明: 結晶構造を描画する際の単位格子の範囲 ([[min_x, max_x], [min_y, max_y], [min_z, max_z]])。デフォルト値は [[-0.1, 1.1], [-0.1, 1.1], [-0.1, 1.1]] です。

  • figsize

    • : tuple

    • 説明: matplotlib の図のサイズ (幅, 高さ)。デフォルト値は (12, 12) です。

  • converted_atom_color

    • : str

    • 説明: 変換後の単位格子の原子を描画する際の色。デフォルト値は 'gray' です。

  • argv

    • : list

    • 説明: スクリプト実行時に sys.argv で初期化されるコマンドライン引数のリストです。

外部ライブラリ

  • Python標準ライブラリ

    • sys: システム固有のパラメータと関数へのアクセスを提供します。

    • os: オペレーティングシステム機能へのインターフェースを提供します。

    • copy: オブジェクトの浅いコピーと深いコピーの機能を提供します。

  • 非標準ライブラリ

    • numpy (as np): 数値計算、特に配列操作と数学関数に使用されます。

    • numpy.linalg (as la): 線形代数ルーチンを提供します。

    • matplotlib.pyplot (as plt, tkcrystalbase モジュール経由で利用): 2Dおよび3Dプロットの作成に使用されます。

    • tkcrystalbase: 結晶構造の計算と描画に関するカスタムヘルパー関数を提供するモジュールです。このスクリプトで使用される主な関数は cal_lattice_vectors(), cal_metrics(), cal_volume(), cal_lattice_parameters_from_lattice_vectors(), convert_lattice_vectors(), reduce01(), add_site(), draw_unitcell() などです。

ライセンス

このコードのライセンスは、コードからは確認できません。

著作権

このコードの著作権情報は、コードからは確認できません。