N_T_Fit_semi_FEA プログラム仕様
N-T Fit Semi-FEA: ホール効果データを用いた半導体キャリア濃度・移動度解析スクリプト
- 概要:
温度依存性のあるホール効果データ(キャリア濃度、移動度、ホール係数など)を 自由電子近似 (FEA) モデルに基づいて解析し、バンド構造や不純物準位に関する パラメータをフィッティング、またはシミュレーションします。
- 詳細説明:
このスクリプトは、測定されたホール効果の温度依存性データ(ホールキャリア濃度、 ホール移動度、導電率、ホール係数など)を読み込み、tkDOS (半導体統計計算) および tkMobility (移動度計算) モジュールと連携して、自由電子近似モデルを用いた 理論曲線と実験データを比較・解析します。 以下のモードをサポートします。 - 'sim': 現在のパラメータでキャリア濃度、移動度、ホール係数などの温度依存性を
シミュレーションし、結果をプロットして保存します。
- 'fit' / 'fit_e' / 'fit_h': ホールキャリア濃度データ (Ns = 1/eRH) に対して
非線形最小二乗フィッティングを行います。 'fit' は二キャリアモデル、'fit_e' は電子のみ、 'fit_h' はホールのみの単一キャリアモデルを使用します。 散乱因子は r=0.5 に固定されます。
- 'fit_RH': ホール係数 (RH) データに対して非線形最小二乗フィッティングを行います。
二キャリアモデルを使用し、散乱因子 r は tkMobility オブジェクトで 設定された値を使用します。
最適化には scipy.optimize.minimize を使用し、指定されたアルゴリズムで DOSパラメータ(有効質量、バンドギャップ、不純物準位、不純物濃度など)を調整します。 フィッティングの進行状況はリアルタイムでコンソール出力およびグラフ更新によって 可視化されます。
- 関連リンク:
N-T-Fit-semi_FEA_usage
- electrical.N_T_Fit_semi_FEA.calS2(app, cparams, dos, mobility, ai)[ソース]
概要: キャリア濃度データに対する二乗誤差 (S2) を計算します。
- 詳細説明:
入力されたパラメータ ai を使用して tkDOS オブジェクトのパラメータを更新し、 指定された温度リスト dos.xT における理論的なキャリア濃度 (yNc) を計算します。 観測されたキャリア濃度 dos.yN と計算された yNc の対数間の二乗誤差を計算し、 その平均値を返します。フィッティングモードに応じて、電子、ホール、または 絶対キャリア濃度が比較対象となります。
- パラメータ:
app (tkApplication) -- アプリケーションオブジェクト。
cparams (tkParams) -- アプリケーションパラメータオブジェクト。
dos (tkDOS) -- 状態密度オブジェクト。
mobility (tkMobility) -- 移動度オブジェクト (この関数内では直接使用されない)。
- 戻り値:
計算された二乗誤差 (S2) の値。
- 戻り値の型:
- electrical.N_T_Fit_semi_FEA.calS2RH(app, cparams, dos, mobility, ai)[ソース]
概要: ホール係数 (RH) またはキャリア濃度データに対する二乗誤差 (S2) を計算します。
- 詳細説明:
入力されたパラメータ ai を使用して tkDOS オブジェクトのパラメータを更新し、 指定された温度リスト dos.xT における理論的なキャリア濃度やホール係数を計算します。 フィッティングモードが fit_RH の場合は、観測されたホール係数 dos.yRH と 計算された yRHfin の対数間の二乗誤差を計算します。それ以外のモードでは、 calS2 と同様にキャリア濃度間の対数誤差を計算します。
- パラメータ:
app (tkApplication) -- アプリケーションオブジェクト。
cparams (tkParams) -- アプリケーションパラメータオブジェクト。
dos (tkDOS) -- 状態密度オブジェクト。
mobility (tkMobility) -- 移動度オブジェクト。
- 戻り値:
計算された二乗誤差 (S2) の値。
- 戻り値の型:
- electrical.N_T_Fit_semi_FEA.callback(app, cparams, dos, mobility, xk)[ソース]
概要: scipy.optimize.minimize のコールバック関数として、最適化の進捗状況を更新・表示します。
- 詳細説明:
最適化の各イテレーションで呼び出され、現在のパラメータセット xk を用いて 二乗誤差 S2 を計算します。outputinterval で指定された間隔で、 現在のパラメータと S2 の値を標準出力に表示します。 また、graphupdateinterval で指定された間隔でグラフを更新し、 フィッティングの進行状況を視覚的に確認できるようにします。
- パラメータ:
app (tkApplication) -- アプリケーションオブジェクト。
cparams (tkParams) -- アプリケーションパラメータオブジェクト。
dos (tkDOS) -- 状態密度オブジェクト。
mobility (tkMobility) -- 移動度オブジェクト。
xk (numpy.ndarray) -- 現在の最適化パラメータの配列。
- 戻り値:
None
- 戻り値の型:
None
- electrical.N_T_Fit_semi_FEA.callbackRH(app, cparams, dos, mobility, xk)[ソース]
概要: ホール係数フィッティングモードにおける scipy.optimize.minimize のコールバック関数です。
- 詳細説明:
callback 関数と同様の機能ですが、calS2RH を使用して二乗誤差を計算し、 fit_RH モードに特化した情報(ホールキャリア濃度など)を含むグラフを更新します。 最適化の進行状況とホール係数のフィッティング状況を可視化します。
- パラメータ:
app (tkApplication) -- アプリケーションオブジェクト。
cparams (tkParams) -- アプリケーションパラメータオブジェクト。
dos (tkDOS) -- 状態密度オブジェクト。
mobility (tkMobility) -- 移動度オブジェクト。
xk (numpy.ndarray) -- 現在の最適化パラメータの配列。
- 戻り値:
None
- 戻り値の型:
None
- electrical.N_T_Fit_semi_FEA.choose_parameters(ais0, optid)[ソース]
概要: 完全なパラメータリストから最適化対象のパラメータのみを抽出します。
- 詳細説明:
optid リストで 1 とマークされたパラメータ (ais0 内の) のみを抽出し、 最適化関数 (scipy.optimize.minimize) に渡すための新しいリストを生成します。
- electrical.N_T_Fit_semi_FEA.diff1(app, cparams, dos, mu, ai)[ソース]
概要: 二乗誤差関数 calS2 の一次導関数を数値的に近似計算します。
- 詳細説明:
各最適化パラメータ ai に対して微小な変化 h_diff を与え、 前方差分法 (forward difference method) を用いて calS2 の勾配を近似します。 この導関数は、共役勾配法 (CG) など一部の最適化アルゴリズムで利用されます。
- パラメータ:
app (tkApplication) -- アプリケーションオブジェクト。
cparams (tkParams) -- アプリケーションパラメータオブジェクト。
dos (tkDOS) -- 状態密度オブジェクト。
mu (tkMobility) -- 移動度オブジェクト。
- 戻り値:
各パラメータに関する一次導関数の配列。
- 戻り値の型:
numpy.ndarray
- electrical.N_T_Fit_semi_FEA.fit(app, cparams, dos, mobility)[ソース]
概要: 温度依存性ホールキャリア濃度データに対して非線形最小二乗フィッティングを行います。
- 詳細説明:
ホール効果測定によって得られたキャリア濃度データ (Ns = 1/eRH) を読み込み、 cparams.mode に応じて単一キャリアまたは二キャリアモデル(散乱因子 r=0.5 固定) を用いてDOSパラメータの最適化を行います。 最適化には scipy.optimize.minimize が使用され、指定されたアルゴリズム (cparams.method) に基づいてパラメータが調整されます。 最適化されたパラメータはファイルに保存され、初期値とフィッティング後の結果がプロットされます。
- パラメータ:
app (tkApplication) -- アプリケーションオブジェクト。
cparams (tkParams) -- アプリケーションパラメータオブジェクト。
dos (tkDOS) -- 状態密度オブジェクト。
mobility (tkMobility) -- 移動度オブジェクト。
- 戻り値:
None
- 戻り値の型:
None
- electrical.N_T_Fit_semi_FEA.fit_RH(app, cparams, dos, mobility)[ソース]
概要: ホール係数 (RH) の温度依存性データに対して非線形最小二乗フィッティングを行います。
- 詳細説明:
ホール効果測定によって得られたホール係数データ (yRH) を読み込み、 二キャリアモデルと、mobility.rfac で設定された散乱因子を用いて、 DOSパラメータの最適化を行います。 最適化には scipy.optimize.minimize が使用され、指定されたアルゴリズム (cparams.method) に基づいてパラメータが調整されます。 最適化されたパラメータはファイルに保存され、初期値とフィッティング後の結果が 詳細な情報(ホールホール濃度、電子ホール濃度など)とともにプロットされます。
- パラメータ:
app (tkApplication) -- アプリケーションオブジェクト。
cparams (tkParams) -- アプリケーションパラメータオブジェクト。
dos (tkDOS) -- 状態密度オブジェクト。
mobility (tkMobility) -- 移動度オブジェクト。
- 戻り値:
None
- 戻り値の型:
None
- electrical.N_T_Fit_semi_FEA.initialize()[ソース]
概要: アプリケーションの初期設定を行い、主要なオブジェクトを初期化します。
- 詳細説明:
tkApplication, tkDOS, tkMobility の各オブジェクトを生成し、 それらのデフォルトパラメータを設定します。これには、フィッティングモード、 入力ファイルパス、半導体のDOS (状態密度) パラメータ(有効質量、バンドギャップ、 不純物準位と濃度)、および移動度パラメータ(散乱因子など)が含まれます。 最適化アルゴリズムやグラフ表示に関する設定も行われます。
- 戻り値:
初期化されたアプリケーション、パラメータ、DOS、移動度の各オブジェクト。
- 戻り値の型:
tuple[tkApplication, tkParams, tkDOS, tkMobility]
- electrical.N_T_Fit_semi_FEA.main(app, cparams, dos, mobility)[ソース]
概要: アプリケーションのメイン実行関数です。
- 詳細説明:
初期化されたアプリケーション、パラメータ、DOS、移動度オブジェクトを受け取り、 コマンドライン引数と設定ファイルに基づいて設定を更新します。 初期パラメータを表示し、バンド構造や不純物準位に関する詳細な情報も出力します。 その後、cparams.mode で指定されたモード(シミュレーションまたはフィッティング) に応じて、適切な解析関数 (sim, fit_RH, fit) を呼び出します。
- パラメータ:
app (tkApplication) -- アプリケーションオブジェクト。
cparams (tkParams) -- アプリケーションパラメータオブジェクト。
dos (tkDOS) -- 状態密度オブジェクト。
mobility (tkMobility) -- 移動度オブジェクト。
- 戻り値:
None
- 戻り値の型:
None
- electrical.N_T_Fit_semi_FEA.pfloat(str)[ソース]
概要: 文字列を浮動小数点数に変換します。
- 詳細説明:
Python組み込みのfloat()関数を呼び出します。 この関数はtklib.tkutilsにも同名の関数がありますが、ここではローカルで再定義されています。
- electrical.N_T_Fit_semi_FEA.pint(str)[ソース]
概要: 文字列を整数に変換します。
- 詳細説明:
Python組み込みのint()関数を呼び出します。 この関数はtklib.tkutilsにも同名の関数がありますが、ここではローカルで再定義されています。
- electrical.N_T_Fit_semi_FEA.plot(app, cparams, dos, mobility, xTinv, yN, yNhini, yNeini, yNsabsini, yNhfin=None, yNefin=None, yNsabsfin=None, ymu=None, ymu_fin=None, yNhHallfin=None, yNeHallfin=None)[ソース]
概要: キャリア濃度、移動度、ホール係数などの温度依存性データをプロットします。
- 詳細説明:
観測データと初期計算値、最終フィッティング値を比較してグラフを作成します。 通常は2x2のサブプロット構成で、キャリア濃度(対数スケール)、 フィッティング後のキャリア濃度、移動度を表示します。 必要に応じてホールキャリア濃度などの詳細なフィッティング結果も表示します。
- パラメータ:
app (tkApplication) -- アプリケーションオブジェクト。
cparams (tkParams) -- アプリケーションパラメータオブジェクト。
dos (tkDOS) -- 状態密度オブジェクト。
mobility (tkMobility) -- 移動度オブジェクト。
yNsabsini (list[float]) -- 初期計算された絶対キャリア濃度 (|Ns|) (cm^-3) のリスト。
yNhfin (list[float] or None) -- (オプション) 最終フィッティングされたホール濃度 (cm^-3) のリスト。
yNefin (list[float] or None) -- (オプション) 最終フィッティングされた電子濃度 (cm^-3) のリスト。
yNsabsfin (list[float] or None) -- (オプション) 最終フィッティングされた絶対キャリア濃度 (|Ns|) (cm^-3) のリスト。
ymu (list[float] or None) -- (オプション) 観測された移動度 (cm^2/(Vs)) のリスト。
ymu_fin (list[float] or None) -- (オプション) 最終フィッティングされた移動度 (cm^2/(Vs)) のリスト。
yNhHallfin (list[float] or None) -- (オプション) 最終フィッティングされたホールによるホール濃度 (cm^-3) のリスト。
yNeHallfin (list[float] or None) -- (オプション) 最終フィッティングされた電子によるホール濃度 (cm^-3) のリスト。
- 戻り値:
None
- 戻り値の型:
None
- electrical.N_T_Fit_semi_FEA.print_parameters(varname, varunit, ai, optid)[ソース]
概要: 指定されたパラメータリストを整形して標準出力に表示します。
- 詳細説明:
パラメータ名、その値、単位、およびそのパラメータが最適化の対象であるか を示すID (optid) を含めて表示します。
- electrical.N_T_Fit_semi_FEA.recover_parameters(ais, optid, aidef0)[ソース]
概要: 最適化された可変パラメータと固定パラメータを結合し、完全なパラメータリストを再構築します。
- 詳細説明:
optid リストに基づいて、ais (最適化されたパラメータのサブセット) と aidef0 (最適化されない固定パラメータ、またはデフォルト値) を結合し、 元のパラメータリストと同じ構造で完全なリストを生成して返します。
- electrical.N_T_Fit_semi_FEA.sigint_handler(signal, frame)[ソース]
概要: Ctrl+C (SIGINT) シグナルを処理するハンドラ関数です。
- 詳細説明:
キーボードからの割り込み (Ctrl+C) を検知した際に呼び出されます。 "KeyboardInterrupt is caught" というメッセージを表示し、 アプリケーションを強制終了します。
- パラメータ:
signal (int) -- シグナル番号 (SIGINT)。
frame (types.FrameType) -- 現在のスタックフレーム。
- 戻り値:
None
- 戻り値の型:
None
- electrical.N_T_Fit_semi_FEA.sim(app, cparams, dos, mobility)[ソース]
概要: 現在のパラメータに基づいてホール効果関連データの温度依存性をシミュレーションし、プロットします。
- 詳細説明:
入力ファイルから観測データを読み込み、現在のDOSおよび移動度パラメータを用いて、 キャリア濃度、移動度、ホール係数、活性化エネルギーなどの温度依存性を計算します。 計算結果は標準出力に表示され、CSVファイルに保存されます。 また、キャリア濃度、移動度、ホール因子、フェルミ準位、活性化エネルギーなどを含む 複数のグラフが生成され、視覚的に結果を確認できます。
- パラメータ:
app (tkApplication) -- アプリケーションオブジェクト。
cparams (tkParams) -- アプリケーションパラメータオブジェクト。
dos (tkDOS) -- 状態密度オブジェクト。
mobility (tkMobility) -- 移動度オブジェクト。
- 戻り値:
None
- 戻り値の型:
None
- electrical.N_T_Fit_semi_FEA.updatevars(app, cparams, dos, mu)[ソース]
概要: コマンドライン引数に基づいてアプリケーションの設定を更新します。
- 詳細説明:
sys.argvからフィッティングモード、入力ファイル名、DOSパラメータ(EC, EA, NA, ED, ND)を抽出し、 cparams と dos オブジェクトの対応する属性を更新します。 入力ファイルが指定されていない場合はエラーで終了します。 ファイルパスの拡張子処理も行います。
- パラメータ:
app (tkApplication) -- アプリケーションオブジェクト。
cparams (tkParams) -- アプリケーションパラメータオブジェクト。
dos (tkDOS) -- 状態密度オブジェクト。
mu (tkMobility) -- 移動度オブジェクト (この関数内では直接使用されない)。
- 戻り値:
None
- 戻り値の型:
None
- electrical.N_T_Fit_semi_FEA.usage(app)[ソース]
概要: アプリケーションの使用方法メッセージを表示します。
- 詳細説明:
tkApplication オブジェクトに格納されている usage_str を解析し、 整形して標準出力に表示します。
- パラメータ:
app (tkApplication) -- アプリケーションオブジェクト。
- 戻り値:
None
- 戻り値の型:
None