mu-TN-Fit.py 技術ドキュメント

プログラムの動作

mu-TN-Fit.py は、半導体のホール移動度 (\(\mu\)) の温度 (\(T\)) およびキャリア濃度 (\(N\)) 依存性を、散乱メカニズムに基づいた非線形最小二乗法によりフィッティングするためのPythonプログラムです。主に、実験的に得られたホール移動度データから、材料固有の散乱パラメータを抽出することを目的としています。

このプログラムの主な機能は以下の通りです。

  • データ読み込み: Excel形式の入力ファイルから、ホール移動度、温度、キャリア濃度などの実験データを読み込みます。

  • 散乱モデルの適用: ホール移動度を構成する複数の散乱メカニズム(光学フォノン散乱、中性不純物散乱、イオン化不純物散乱、バリア散乱など)を考慮した物理モデルを定義します。これらの散乱メカニズムの寄与は、キャリア濃度に依存するパラメータによって表現されます。

  • 非線形最小二乗法によるフィッティング: scipy.optimize.minimize を用いて、実験データとモデルが最もよく一致するような散乱パラメータを最適化します。フィッティング対象は、ホール移動度全体の\(T\)-\(N\)依存性、ホール移動度の\(T\)依存性(特定のサンプルに対して)、または個々の散乱メカニズムを記述するパラメータの\(N\)依存性のいずれかを選択できます。

  • 結果の保存: フィッティングで得られた最適パラメータ、測定値、初期推定値、フィッティング結果をExcelファイルに出力します。また、最適化されたパラメータは、将来の実行で再利用できるように設定ファイル(.in形式)に保存されます。

  • グラフ表示: フィッティングの進行状況と最終結果をグラフで視覚的に表示します。

このプログラムは、半導体デバイスの設計や材料開発において、キャリア輸送特性を理解し予測するための重要なツールとなります。

原理

このプログラムは、半導体のホール移動度 \(\mu\) が、複数の独立した散乱メカニズムの合計の逆数として表現されるMatthiessenの法則と、有効キャリア濃度によるバリア散乱の効果を組み合わせたモデルに基づいています。

基本となるホール移動度モデルは以下の式で表されます。

\[ \mu = \frac{1}{\frac{A_{op}}{\exp(E_{op}/k_B T) - 1} + A_{T0} + A_{T3/2} T^{-1.5}} \exp\left(-\frac{V_B}{k_B T}\right) \]

ここで、\(k_B\) はボルツマン定数、\(e\) は素電荷です。各項は以下の散乱メカニズムの寄与を表し、それぞれのパラメータはキャリア濃度 \(N\) の関数として定義されます。

  • 光学フォノン散乱 (Optical Phonon Scattering): \(\mu_{op}^{-1} = \frac{A_{op}}{\exp(E_{op}/k_B T) - 1}\)

    • \(E_{op}\) は光学フォノンエネルギーで、プログラム内では定数 \(E_{op\_0}\) と見なされます。

    • \(A_{op}(N)\) は以下の式でキャリア濃度 \(N\) に依存します。 $\( A_{op}(N) = \frac{A_1}{1 + \exp(-B_1 (\log_{10}N - \log_{10}N_{01}))} + C_1 \)$

  • 中性不純物散乱 / 合金散乱 (Neutral Impurity/Alloy Scattering): \(\mu_{T0}^{-1} = A_{T0}\)

    • \(A_{T0}(N)\) は以下の式でキャリア濃度 \(N\) に依存します。 $\( A_{T0}(N) = \frac{A_2}{1 + \exp(B_2 (\log_{10}N - \log_{10}N_{02}))} + C_2 \)$

  • イオン化不純物散乱 (Ionized Impurity Scattering): \(\mu_{T3/2}^{-1} = A_{T3/2} T^{-1.5}\)

    • \(A_{T3/2}(N)\) は以下の式でキャリア濃度 \(N\) に依存します。 $\( A_{T3/2}(N) = \frac{A_3 N^2}{1 + \exp(B_3 (\log_{10}N - \log_{10}N_{03}))} + \frac{C_3}{(1 + \exp(-B_3 (\log_{10}N - \log_{10}N_{03}))) (1 + D_3 N)} + F_3 \)$

  • バリア散乱 / 伝導帯の裾の効果 (Barrier Scattering / Conduction Band Tail Effects): \(\mu_{VB} \propto \exp(-V_B/k_B T)\)

    • \(V_B(N)\) は以下の式でキャリア濃度 \(N\) に依存します。 $\( V_B(N) = \frac{A_6 (1 - D_6 \log_{10}N)}{1 + \exp(B_6 (\log_{10}N - \log_{10}N_{06}))} + C_6 \)$

これらの複雑な非線形モデルは、scipy.optimize.minimize 関数を用いた非線形最小二乗法によってフィッティングされます。最適化アルゴリズムとして、"nelder-mead" (Nelder-Mead法)、"cg" (共役勾配法)、"bfgs" (BFGS法)、"newton-cg" (Newton-CG法) などが選択可能です。フィッティングの目的は、測定データとモデル計算値との残差二乗和を最小化することです。

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

このプログラムは以下のPythonライブラリに依存しています。これらのライブラリは、Pythonの標準パッケージインストーラー pip を使用してインストールできます。

  • numpy: 数値計算のための基盤ライブラリ。

    pip install numpy
    
  • scipy: 科学技術計算のためのライブラリ。最適化機能 (scipy.optimize.minimize) を使用します。

    pip install scipy
    
  • pandas: データ解析と操作のためのライブラリ。Excelファイルの読み書きに使用します。

    pip install pandas
    
  • matplotlib: グラフ描画のためのライブラリ。フィッティング結果の可視化に使用します。

    pip install matplotlib
    
  • tklib: tklib は、このプログラムが依存するカスタムライブラリです。PyPIなどの公開リポジトリには登録されていません。そのため、このプログラムを実行するには、mu-TN-Fit.py と同じディレクトリ、またはPythonのパスが通っている場所に tklib パッケージ(ディレクトリ)を配置する必要があります。このライブラリは別途提供されるものと仮定します。

必要な入力ファイル

プログラムはExcel形式のファイル (.xlsx) を入力として期待します。このファイルには、ホール移動度、温度、キャリア濃度などの実験データが含まれている必要があります。

  • ファイル形式: Microsoft Excel Workbook (.xlsx)

  • データ構造:

    • 各データ列は、コマンドライン引数または設定ファイルで指定されたカラム番号(0始まり)またはカラム名でアクセスされます。

    • 最低限、温度 (\(T\))、ホール移動度 (\(\mu\))、キャリア濃度 (\(N\)) のデータが必要です。

    • オプションでサンプル名や物質名を識別するためのカラムも利用されます。

  • デフォルトのカラム指定(initialize 関数内の初期値):

    • cparams.xlabel: X軸データ (デフォルト: 2)

    • cparams.ylabel: Y軸データ (デフォルト: 6)

    • cparams.sample_label: サンプル名 (デフォルト: 0)

    • cparams.formula_label: 物質名 (デフォルト: 1)

    • cparams.T_label: 温度 (デフォルト: 6 - fit_mu_T モードでのみ使用)

    • cparams.mu_label: ホール移動度 (デフォルト: 7 - fit_mu_T モードでのみ使用)

    • cparams.Nlabel: キャリア濃度 (デフォルト: 8)

  • パラメータファイル:

    • ファイル名: 入力ファイル名に基づいて自動生成 ({filebody}.in)。例: IO.xlsx なら IO.in

    • 形式: iniファイル形式。

    • 内容: 以前のフィッティングで得られたパラメータが保存され、プログラムの初期値として読み込まれます。このファイルが存在しない場合、プログラムは内部のデフォルト値を使用します。

生成される出力ファイル

プログラムの実行により、以下のファイルが生成または更新されます。

  1. フィッティング結果のExcelファイル (.xlsx):

    • ファイル名: 入力ファイル名とフィッティングモードに基づいて自動生成されます。

      • mu_TN または mu_T_Nfix モードの場合: {infile_body}-mu_TN-fit.xlsx

      • mu_T モードの場合: {infile_body}-mu-fit.xlsx

      • Aop, A_T0, A_T32, VB (個別のパラメータフィッティング) モードの場合: {infile_body}-{target}-fit.xlsx (例: IO-Aop-fit.xlsx

    • 内容:

      • 元の測定データ。

      • フィッティング開始時の初期推定値。

      • フィッティングによって得られた最終的な計算値。

      • 各カラムには適切なヘッダーが付けられます (例: N(cm-3), T(K), mu, mu(ini), mu(fin))。

  2. パラメータファイル (.in):

    • ファイル名: 入力ファイル名に基づいて自動生成 ({filebody}.in)。例: IO.xlsx なら IO.in

    • 内容: フィッティングで得られた最適化された散乱パラメータが保存されます。INI形式で、[Preferences], [Aop], [AT0], [AT32], [VB] などのセクションに分類されます。また、特定のキャリア濃度 (Tbase での N 値) における各散乱メカニズムのパラメータ値も各サンプルIDのセクションに保存されます。

  3. パラメータバックアップファイル (.in):

    • ファイル名: 入力ファイル名に基づいて自動生成 ({filebody}-back.in)。例: IO.xlsx なら IO-back.in

    • 内容: プログラム実行前のパラメータファイルの内容が自動的にバックアップされます。

  4. ログファイル (.log):

    • ファイル名: 入力ファイル名に基づいて自動生成 ({filebody}.log)。例: IO.xlsx なら IO.log

    • 内容: プログラムの標準出力(コンソールに出力されるメッセージ、フィッティングの進行状況、最終パラメータなど)がすべてこのファイルにリダイレクトされて記録されます。

  5. グラフウィンドウ:

    • フィッティングの進行状況と最終的なフィッティング曲線および測定データがmatplotlibのグラフウィンドウでリアルタイムに表示されます。

出力ファイル名における {dirname} は入力ファイルと同じディレクトリを、{filebody} は入力ファイル名から拡張子を除いた部分を指します。

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

mu-TN-Fit.py は、コマンドライン引数を受け付けて動作を制御します。 基本的な書式は以下の通りです。

python mu-TN-Fit.py <mode> <target> <infile> <xlabel> <ylabel> [Nlabel]

各引数の説明:

  • <mode>: 実行モードを指定します。

    • fit: フィッティングを実行します。現在のプログラムでは、このモードが主要な機能です。

    • initsim はプログラム中に存在しますが、現時点では実装されていません。)

  • <target>: フィッティングの対象とするモデルを指定します。

    • mu_TN: ホール移動度全体の温度およびキャリア濃度依存性をフィッティングします。

    • mu_T: 特定のサンプルにおけるホール移動度の温度依存性をフィッティングします。

    • mu_T_Nfix: mu_TN と同様ですが、キャリア濃度 \(N\) は固定値(Tbase での \(N\) 値に補間)として扱われます。

    • Aop: 光学フォノン散乱パラメータ \(A_{op}(N)\) のキャリア濃度依存性をフィッティングします。

    • A_T0: 中性不純物散乱パラメータ \(A_{T0}(N)\) のキャリア濃度依存性をフィッティングします。

    • A_T32: イオン化不純物散乱パラメータ \(A_{T3/2}(N)\) のキャリア濃度依存性をフィッティングします。

    • VB: バリア散乱パラメータ \(V_B(N)\) のキャリア濃度依存性をフィッティングします。

  • <infile>: 入力データを含むExcelファイル(.xlsx)のパスを指定します。

  • <xlabel>: X軸データとして使用する入力ファイルのカラム番号(0始まり)またはカラム名を指定します。

  • <ylabel>: Y軸データとして使用する入力ファイルのカラム番号(0始まり)またはカラム名を指定します。

  • [Nlabel] (オプション): キャリア濃度 \(N\) のデータを含む入力ファイルのカラム番号(0始まり)またはカラム名を指定します。この引数は、mu_TN または mu_T_Nfix モードで必須となります。

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

ここでは、一般的なフィッティングモードである mu_TN を使用した具体的な実行例を示します。

前提: IO.xlsx というExcelファイルが存在し、以下のデータが含まれていると仮定します。

  • カラム 2: 温度 T (K)

  • カラム 6: ホール移動度 mu (cm²/Vs)

  • カラム 8: キャリア濃度 N (cm⁻³)

実行コマンド:

python mu-TN-Fit.py fit mu_TN IO.xlsx 2 6 8

コマンドの説明: このコマンドは、IO.xlsx ファイルからデータを読み込み、カラム 2 を温度 \(T\)、カラム 6 をホール移動度 \(\mu\)、カラム 8 をキャリア濃度 \(N\) として、ホール移動度の温度・キャリア濃度依存性 (mu_TN モード) を非線形最小二乗法でフィッティングするようプログラムに指示します。

実行結果の説明:

  1. データ読み込み: プログラムは IO.xlsx から指定されたカラムのデータを読み込み、コンソールに読み込んだデータの概要(データ数、最小/最大温度など)を表示します。

  2. 初期推定の表示: 事前に設定された、または前回フィッティングで保存された初期パラメータに基づき、計算された初期のホール移動度曲線がコンソールとグラフウィンドウに表示されます。

  3. フィッティングの実行: scipy.optimize.minimize を用いた非線形最適化が開始されます。最適化の進行状況(反復回数、現在の誤差関数値)がコンソールとグラフウィンドウに表示されます。

  4. 収束と最終結果: フィッティングが収束すると、最終的な最適化パラメータとその値、および最小化された誤差関数値がコンソールに表示されます。

  5. 出力ファイルの生成:

    • IO-mu_TN-fit.xlsx: 測定された \(N\), \(T\), \(\mu\) データに加え、フィッティング開始時の初期推定値と最終的なフィッティング結果のホール移動度値が含まれるExcelファイルが生成されます。

    • IO.in: 今回のフィッティングで得られた最適化パラメータがINI形式で保存・更新されます。これにより、次回以降の実行でこれらのパラメータを初期値として利用できます。

    • IO-back.in: 実行前の IO.in の内容がバックアップとして保存されます。

    • IO.log: プログラムの実行中のすべてのコンソール出力が記録されたログファイルが生成されます。

  6. 最終グラフ表示: フィッティングが完了すると、測定データ、初期推定曲線、最終フィッティング曲線を比較表示したグラフウィンドウが表示されます。ユーザーがEnterキーを押すと、プログラムは終了します。