以下のPythonプログラム draw_unit_cells.py の解析に基づき、Sphinx (MyST) でビルド可能なMarkdownドキュメントを作成します。

# プログラム概要

``draw_unit_cells.py`` は、結晶学における単位格子(unit cell)や、その繰り返しからなる超格子(supercell)を3Dで可視化するためのPythonスクリプトです。

このスクリプトは、格子定数と角度を入力として、3D空間における単位格子を構築し、指定された数だけ繰り返して描画します。基本ベクトルを計算し、平行六面体を積み重ねることで超格子の形状を表現します。最終的な可視化は画像ファイルとして保存され、画面にも表示されます。

スクリプトのdocstringには、別途 ``draw_unit_cells_usage`` というドキュメントとの関連が示されています。

# インストール

このスクリプトを実行するには、以下のライブラリが必要です。

*   ``numpy``
*   ``matplotlib``

これらのライブラリは ``pip`` を使用してインストールできます。

```bash
pip install numpy matplotlib

使用方法

draw_unit_cells.py はコマンドライン引数を持ちません。スクリプト内の main() 関数に記述されているデフォルトのパラメータで超格子が描画されます。

実行するには、スクリプトファイルを保存し、Pythonインタプリタで実行します。

python draw_unit_cells.py

実行後、超格子を描画した画像ファイル unit_cells.png がスクリプトと同じディレクトリに保存され、同時にプロットウィンドウが表示されます。描画される超格子のパラメータを変更したい場合は、スクリプトの main() 関数内の params 辞書を直接編集する必要があります。

コマンドライン引数

このスクリプトはコマンドライン引数を受け付けません。すべてのパラメータはスクリプト内部で定義されています。

設定

このスクリプトには、描画に関するいくつかのデフォルト設定が定数として定義されています。これらは draw_supercell_plot() 関数のデフォルト引数として使用されます。

  • ELEV_DEF (float): カメラの仰角のデフォルト値(初期値: 5.90)。

  • AZIM_DEF (float): カメラの方位角のデフォルト値(初期値: -67.55)。

  • AXIS_FONT_SIZE_DEF (int): 軸ラベルのフォントサイズのデフォルト値(初期値: 24)。

  • DRAW_LATTICE_VECTORS_DEF (bool): 基本格子ベクトルを描画するかどうかのデフォルト値(初期値: False)。

これらの設定を変更するには、スクリプトの該当する定数を直接編集するか、draw_supercell_plot() 関数を呼び出す際に引数として値を渡す必要があります(main() 関数から呼び出す場合も params 辞書に追加して渡すことで変更可能です)。

main() 関数は、以下のパラメータを使用して超格子を描画します。

  • 格子定数: a=5.0, b=5.5, c=4.5

  • 角度: alpha=80 度, beta=70 度, gamma=100

  • 繰り返し数: nx=3, ny=3, nz=3

この設定でスクリプトを実行すると、3x3x3の超格子が描画されます。

python draw_unit_cells.py

このコマンドを実行すると、超格子が描画されたMatplotlibのウィンドウが表示され、同時に unit_cells.png という画像ファイルが生成されます。

関数リファレンス

lattice_vectors(a, b, c, alpha, beta, gamma)

結晶の格子定数と角度から基本格子ベクトルを計算します。直交座標系における3つの基本格子ベクトル va, vb, vc を導出します。va はX軸に沿い、vb はXY平面にあり、vc は3次元空間に配置されるように定義されます。

Parameters:

  • a (float): 格子定数aの長さ。

  • b (float): 格子定数bの長さ。

  • c (float): 格子定数cの長さ。

  • alpha (float): 角度α(度)。vbvc のなす角。

  • beta (float): 角度β(度)。vavc のなす角。

  • gamma (float): 角度γ(度)。vavb のなす角。

Returns:

  • tuple[np.ndarray, np.ndarray, np.ndarray]: 3つの基本格子ベクトル va, vb, vc

set_equal_aspect(ax, points)

Matplotlib 3Dプロットのアスペクト比を全ての軸で等しく設定します。これにより、3Dプロットが歪まずに表示されます。

Parameters:

  • ax (matplotlib.axes.Axes): 3DプロットのAxesオブジェクト。

  • points (np.ndarray): 表示範囲を決定するための点群。

Returns:

  • None

draw_cell(ax, va, vb, vc, origin, linewidth=0.5)

指定された基本格子ベクトルと原点に基づいて単一の単位格子を描画します。

Parameters:

  • ax (matplotlib.axes.Axes): 3DプロットのAxesオブジェクト。

  • va (np.ndarray): 第1基本格子ベクトル。

  • vb (np.ndarray): 第2基本格子ベクトル。

  • vc (np.ndarray): 第3基本格子ベクトル。

  • origin (np.ndarray): 描画開始点(原点)。

  • linewidth (float): 線の太さ。デフォルトは 0.5

Returns:

  • None

draw_supercell_plot(a, b, c, alpha, beta, gamma, nx=3, ny=3, nz=3, elev=5.90, azim=-67.55, draw_lattice_vectors=False, font_size=24)

指定された格子定数と角度に基づき、超格子を描画し、画像として保存して表示します。

Parameters:

  • a (float): 格子定数aの長さ。

  • b (float): 格子定数bの長さ。

  • c (float): 格子定数cの長さ。

  • alpha (float): 角度α(度)。

  • beta (float): 角度β(度)。

  • gamma (float): 角度γ(度)。

  • nx (int): X軸方向の繰り返し数。デフォルトは 3

  • ny (int): Y軸方向の繰り返し数。デフォルトは 3

  • nz (int): Z軸方向の繰り返し数。デフォルトは 3

  • elev (float): カメラの仰角。デフォルトは ELEV_DEF (5.90)。

  • azim (float): カメラの方位角。デフォルトは AZIM_DEF (-67.55)。

  • draw_lattice_vectors (bool): 基本格子ベクトルを描画するかどうか。デフォルトは DRAW_LATTICE_VECTORS_DEF (False)。

  • font_size (int): 軸ラベルのフォントサイズ。デフォルトは AXIS_FONT_SIZE_DEF (24)。

Returns:

  • None

main()

メインの実行フローを定義する関数です。特定のパラメータで超格子を描画します。

Parameters:

  • なし

Returns:

  • None

ライブラリ

このスクリプトは以下の非標準ライブラリを使用しています。

  • numpy: 数値計算、特にベクトル演算や配列操作に使用されます。

  • matplotlib.pyplot: 2D/3Dプロットの描画に使用されます。

  • mpl_toolkits.mplot3d: matplotlib の一部であり、3Dプロット機能を提供します。

著作権/ライセンス

コードには著作権情報やライセンスに関する記述は確認できません。