PDOS Plotting Script Documentation

プログラムの動作

pdos.py は、指定されたテキストファイルからPartial Density of States (PDOS) データを読み込み、エネルギー (\(E - E_F\)) に対するPDOSのプロット画像を生成するPythonスクリプトです。このプログラムは、量子化学計算や固体物理計算の出力として得られるDOSデータを視覚化することを主な目的としています。

主な機能は以下の通りです。

  • コマンドライン引数として渡されたファイルからPDOSデータを読み込みます。

  • 入力ファイルの1行目をプロットの凡例(レジェンド)として抽出し、アンダースコア (_) をスペースに置換して整形します。

  • 2行目以降の数値データをNumPy配列として効率的に処理します。

  • matplotlib ライブラリを使用して、指定されたデータ範囲とスタイル設定に基づいてPDOSプロットを生成します。

  • x軸ラベル (\(E - E_F\) (eV))、y軸ラベル (PDOS (states/eV))、軸範囲、フォントサイズ、凡例の位置などを自動的に設定します。

  • 生成されたプロットを dos.png というファイル名で、高解像度(300 dpi)、透明背景のPNG画像として保存します。

原理

このプログラムは、物質の電子状態密度(DOS)のうち、特定の原子軌道やサイトに寄与する部分状態密度(PDOS)を可視化することに基づいています。PDOSは、通常、第一原理計算(例えば、密度汎関数理論 (DFT) 計算)の結果として得られるもので、電子のエネルギー準位とその状態数の分布を詳細に理解するために使用されます。

プログラム自体は、DOS/PDOSの計算アルゴリズムを含んでいません。代わりに、計算済みのPDOSデータが特定の形式のテキストファイルとして与えられていることを前提としています。

グラフ描画の原理は、NumPyで読み込んだ数値データをmatplotlibライブラリの plot 関数に渡し、以下のようにx軸にエネルギー値、y軸にPDOS値をマッピングして線グラフを描画するという標準的なものです。

入力データの一般的な構造は以下のようになります。 $\( E, \text{PDOS}_1, \text{PDOS}_2, \dots, \text{PDOS}_N \)\( ここで、\)E\( はエネルギー(通常はフェルミ準位 \)E_F\( を基準とした相対エネルギー \)E - E_F\()、\)\text{PDOS}_i\( は \)i$ 番目の部分状態密度に対応する値です。プログラムはこれらのデータポイントを線で結び、複数のPDOS成分を同じグラフ上にプロットします。

必要な非標準ライブラリとインストール方法

pdos.py を実行するには、以下の非標準Pythonライブラリが必要です。

  • numpy: 数値計算と配列操作のため。

  • matplotlib: データのプロットとグラフ描画のため。

これらのライブラリは、Pythonのパッケージ管理ツール pip を使用してインストールできます。コマンドプロンプトやターミナルで以下のコマンドを実行してください。

pip install numpy matplotlib

必要な入力ファイル

pdos.py が必要とする入力ファイルは、以下の形式のテキストファイルです。

  • ファイル名: コマンドライン引数で指定される任意のファイル名(例: data.dos, pdos.txt)。

  • ファイル形式: スペース区切りのテキストファイル。

  • データ構造:

    • 1行目: ヘッダ行。半角スペースで区切られた文字列のリストであり、最初の要素は通常「Energy」のようなもので、それ以降の要素がプロットの凡例(レジェンド)として使用されるPDOSチャネル名(例: s_orbital, p_orbital, d_orbital)を示します。PDOSチャネル名に含まれるアンダースコア _ は、プロットの凡例ではスペースに置換されます。

    • 2行目以降: 数値データ。半角スペースで区切られた浮動小数点数のリスト。

      • 1列目: エネルギー値(通常はフェルミ準位からの相対エネルギー \(E - E_F\) をeV単位で)。

      • 2列目以降: 各PDOSチャネルに対応するPDOS値(states/eV単位で)。

入力ファイルの例 (example_pdos.dat):

Energy s_orbital p_orbital d_orbital
-2.5 0.01 0.02 0.03
-2.0 0.10 0.15 0.20
-1.5 0.30 0.40 0.50
-1.0 0.50 0.60 0.70
-0.5 0.80 0.90 1.00
0.0 1.20 1.50 1.80
0.5 1.00 1.30 1.60
1.0 0.70 0.80 0.90
1.5 0.40 0.30 0.20
2.0 0.10 0.05 0.03
2.5 0.00 0.00 0.00

生成される出力ファイル

pdos.py の実行により、以下の画像ファイルが生成されます。

  • ファイル名: dos.png

  • 内容: 入力されたPDOSデータに基づいて生成されたプロットを含むPNG画像ファイル。

    • x軸: \({E}\)-\(E_{F}\) (eV)

    • y軸: PDOS (states/eV)

    • x軸範囲: -2 eV から 2 eV

    • y軸範囲: 0 states/eV から 10 states/eV

    • 凡例: 入力ファイルのヘッダ行から抽出され、アンダースコアがスペースに置換されたPDOSチャネル名(例: "s orbital", "p orbital", "d orbital")。グラフの右上 (upper right) に配置されます。

    • 画像サイズ: 幅 5インチ、高さ 4インチ

    • 解像度: 300 dpi

    • 背景: 透明

コマンドラインでの使用例 (Usage)

pdos.py スクリプトは、プロットするPDOSデータファイル名を唯一の引数として実行されます。

python pdos.py <input_file>
  • <input_file>: プロットするPDOSデータが格納されたテキストファイルのパスを指定します。

コマンドラインでの具体的な使用例

ここでは、前述の「必要な入力ファイル」セクションで示した example_pdos.dat ファイルを使用する具体的な例を示します。

まず、以下の内容で example_pdos.dat ファイルを作成し、pdos.py と同じディレクトリに保存します。

Energy s_band p_band d_band
-2.5 0.01 0.02 0.03
-2.0 0.10 0.15 0.20
-1.5 0.30 0.40 0.50
-1.0 0.50 0.60 0.70
-0.5 0.80 0.90 1.00
0.0 1.20 1.50 1.80
0.5 1.00 1.30 1.60
1.0 0.70 0.80 0.90
1.5 0.40 0.30 0.20
2.0 0.10 0.05 0.03
2.5 0.00 0.00 0.00

example_pdos.dat を作成した後、以下のコマンドをターミナルで実行します。

python pdos.py example_pdos.dat

実行結果の説明:

上記のコマンドを実行すると、標準出力に以下のメッセージが表示されます。

Read DOS from [example_pdos.dat]

その後、スクリプトが正常に完了すると、カレントディレクトリに dos.png という名前の画像ファイルが生成されます。 この dos.png ファイルを開くと、example_pdos.dat ファイルのデータに基づいてプロットされたPDOSグラフが表示されます。具体的には、x軸は -2.0 eV から 2.0 eV の範囲で \(E - E_F\) を示し、y軸は 0.0 states/eV から 10.0 states/eV の範囲でPDOSを示します。グラフ上には s band, p band, d band の3つのPDOSチャネルがそれぞれ異なる色で線グラフとしてプロットされ、右上に凡例が表示されます。