以下の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): 角度α(度)。vbとvcのなす角。beta(float): 角度β(度)。vaとvcのなす角。gamma(float): 角度γ(度)。vaとvbのなす角。
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プロット機能を提供します。
著作権/ライセンス
コードには著作権情報やライセンスに関する記述は確認できません。