Ne_T_fit プログラム仕様
- 概要:
半導体キャリア統計シミュレーター (フィッティングモード付き)
- 詳細説明:
このスクリプトは、半導体内の電子・正孔濃度、イオン化不純物濃度を温度の関数として計算する機能を提供します。 また、実験的なキャリア密度データにモデルをフィッティングする機能も含まれます。 フィッティングはネルダー・ミード法をデフォルトとし、ドナー/アクセプターのイオン化エネルギー、濃度、バンドギャップをフィッティングパラメータとして利用します。 ログ空間での最適化とパラメータの不確かさ(共分散、相関、標準誤差)推定もサポートします。
- 関連リンク:
Ne_T_fit_usage
- electrical.Ne_T_fit.F_half(eta: float) float
- 概要:
係数 2/sqrt(pi) を含まない1/2次のフェルミ・ディラック積分を計算する。
- 詳細説明:
デフォルトでは高速化のために eta を 10^-3 の精度で量子化し、結果をキャッシュする。 FD_CACHE_DISABLE が True の場合は量子化を行わず、より正確な計算(ただし低速)を行う。 これは特に数値ヤコビアンの計算時に重要となる。
- 引数:
- param eta:
無次元化されたフェルミ準位 eta = (Ef - Ec) / k_B T または (Ev - Ef) / k_B T。
- type eta:
float
- 戻り値:
- returns:
フェルミ・ディラック積分 F_half(eta) の結果。
- rtype:
float
- electrical.Ne_T_fit.NAm(Ef: float, Ev: float, EA: float, NA: float, T: float, g: float = 1.0) float
- 概要:
イオン化されたアクセプター密度 NAm [cm^-3] を計算する。
- 詳細説明:
アクセプター準位 EA は価電子帯端 Ev から EA [eV] 上にある (EA > 0 でより深い)。 アクセプターのイオン化された状態の占有率 fA を用い、NAm = NA fA でイオン化アクセプター密度を算出する。 special.expit を使用してオーバーフローを回避する。
- 引数:
- param Ef:
フェルミ準位 [eV]。
- type Ef:
float
- param Ev:
価電子帯端のエネルギー [eV]。
- type Ev:
float
- param EA:
アクセプターのイオン化エネルギー(価電子帯端からの深さ) [eV]。
- type EA:
float
- param NA:
アクセプターの全密度 [cm^-3]。
- type NA:
float
- param T:
温度 [K]。
- type T:
float
- param g:
アクセプターの縮退因子 (デフォルト: 1.0)。
- type g:
float
- 戻り値:
- returns:
イオン化されたアクセプター密度 NAm [cm^-3]。
- rtype:
float
- electrical.Ne_T_fit.NDp(Ef: float, Ec: float, ED: float, ND: float, T: float, g: float = 1.0) float
- 概要:
イオン化されたドナー密度 NDp [cm^-3] を計算する。
- 詳細説明:
ドナー準位 ED は伝導帯端 Ec から ED [eV] 下にある (ED > 0 でより深い)。 ドナーの中性占有率 fD を用い、NDp = ND (1 - fD) でイオン化ドナー密度を算出する。 special.expit を使用してオーバーフローを回避する。
- 引数:
- param Ef:
フェルミ準位 [eV]。
- type Ef:
float
- param Ec:
伝導帯端のエネルギー [eV]。
- type Ec:
float
- param ED:
ドナーのイオン化エネルギー(伝導帯端からの深さ) [eV]。
- type ED:
float
- param ND:
ドナーの全密度 [cm^-3]。
- type ND:
float
- param T:
温度 [K]。
- type T:
float
- param g:
ドナーの縮退因子 (デフォルト: 1.0)。
- type g:
float
- 戻り値:
- returns:
イオン化されたドナー密度 NDp [cm^-3]。
- rtype:
float
- electrical.Ne_T_fit.Ne(Ef: float, Ec: float, T: float, Nc: float) float
- 概要:
伝導帯における電子濃度 n [cm^-3] を計算する。
- 詳細説明:
フェルミ準位 Ef と伝導帯端 Ec の相対位置から無次元化されたフェルミ準位 eta を計算し、 フェルミ・ディラック積分を用いて電子濃度を算出する。
- 引数:
- param Ef:
フェルミ準位 [eV]。
- type Ef:
float
- param Ec:
伝導帯端のエネルギー [eV]。
- type Ec:
float
- param T:
温度 [K]。
- type T:
float
- param Nc:
伝導帯の有効状態密度 [cm^-3]。
- type Nc:
float
- 戻り値:
- returns:
電子濃度 n [cm^-3]。
- rtype:
float
- electrical.Ne_T_fit.Nh(Ef: float, Ev: float, T: float, Nv: float) float
- 概要:
価電子帯における正孔濃度 p [cm^-3] を計算する。
- 詳細説明:
フェルミ準位 Ef と価電子帯端 Ev の相対位置から無次元化されたフェルミ準位 eta を計算し、 フェルミ・ディラック積分を用いて正孔濃度を算出する。
- 引数:
- param Ef:
フェルミ準位 [eV]。
- type Ef:
float
- param Ev:
価電子帯端のエネルギー [eV]。
- type Ev:
float
- param T:
温度 [K]。
- type T:
float
- param Nv:
価電子帯の有効状態密度 [cm^-3]。
- type Nv:
float
- 戻り値:
- returns:
正孔濃度 p [cm^-3]。
- rtype:
float
- class electrical.Ne_T_fit.Params(Eg: float, ED: float, EA: float, ND: float, NA: float, me: float, mh: float)
ベースクラス:
object- 概要:
半導体の物理パラメータを格納するデータクラス。
- 詳細説明:
バンドギャップ、ドナー/アクセプターのイオン化エネルギー、濃度、有効質量といった 主要な物理パラメータをカプセル化する。
- 属性:
- param Eg:
バンドギャップ [eV]。
- type Eg:
float
- param ED:
ドナーのイオン化エネルギー(伝導帯端からの深さ) [eV]。
- type ED:
float
- param EA:
アクセプターのイオン化エネルギー(価電子帯端からの深さ) [eV]。
- type EA:
float
- param ND:
ドナーの全密度 [cm^-3]。
- type ND:
float
- param NA:
アクセプターの全密度 [cm^-3]。
- type NA:
float
- param me:
電子の有効質量比 (m_e^* / m_0)。
- type me:
float
- param mh:
正孔の有効質量比 (m_h^* / m_0)。
- type mh:
float
- electrical.Ne_T_fit.calc_at_T(T: float, p: Params, args=None) Dict[str, float]
- 概要:
指定された温度 T と物理パラメータ p におけるキャリア統計関連の値を計算する。
- 詳細説明:
有効状態密度 (Nc, Nv) を計算し、電荷中性条件を満たすフェルミ準位 (Ef) を求め、 そこから電子・正孔濃度、イオン化ドナー・アクセプター濃度を算出する。 結果は辞書形式で返される。
- 引数:
- param T:
温度 [K]。
- type T:
float
- param p:
半導体の物理パラメータ (Params オブジェクト)。
- type p:
Params
- param args:
コマンドライン引数を格納するオブジェクト(ドナー/アクセプターの縮退因子 gD/gA を取得するために使用)。
- type args:
argparse.Namespace or None
- 戻り値:
- returns:
計算結果を格納した辞書。キーは "T", "Ef", "n", "p", "NDp", "NAm", "Nc", "Nv"。
- rtype:
Dict[str, float]
- electrical.Ne_T_fit.cov_to_corr(Cov: ndarray) Tuple[ndarray, ndarray]
- 概要:
共分散行列から相関行列と標準偏差を計算する。
- 詳細説明:
共分散行列 Cov の対角要素から標準偏差を抽出し、それらを用いて相関行列 Corr を計算する。 対角要素は1.0、標準偏差が0の場合は対応する相関値をNaNとする。
- 引数:
- param Cov:
共分散行列 (numpy.ndarray)。
- type Cov:
np.ndarray
- 戻り値:
- returns:
相関行列 (numpy.ndarray) と標準偏差の配列 (numpy.ndarray)。
- rtype:
Tuple[np.ndarray, np.ndarray]
- electrical.Ne_T_fit.deltaQ(Ef: float, Ec: float, Ev: float, ED: float, EA: float, ND: float, NA: float, T: float, Nc: float, Nv: float, gD: float = 1.0, gA: float = 1.0) float
- 概要:
電荷中性条件の残差 p - n + NDp - NAm を計算する。
- 詳細説明:
フェルミ準位 Ef を解くための根を探索する関数。 使用する縮退因子 gD/gA は、Ef の計算時と NDp/NAm の事後評価時で一貫している必要がある。
- 引数:
- param Ef:
フェルミ準位 [eV]。
- type Ef:
float
- param Ec:
伝導帯端のエネルギー [eV]。
- type Ec:
float
- param Ev:
価電子帯端のエネルギー [eV]。
- type Ev:
float
- param ED:
ドナーのイオン化エネルギー [eV]。
- type ED:
float
- param EA:
アクセプターのイオン化エネルギー [eV]。
- type EA:
float
- param ND:
ドナーの全密度 [cm^-3]。
- type ND:
float
- param NA:
アクセプターの全密度 [cm^-3]。
- type NA:
float
- param T:
温度 [K]。
- type T:
float
- param Nc:
伝導帯の有効状態密度 [cm^-3]。
- type Nc:
float
- param Nv:
価電子帯の有効状態密度 [cm^-3]。
- type Nv:
float
- param gD:
ドナーの縮退因子 (デフォルト: 1.0)。
- type gD:
float
- param gA:
アクセプターの縮退因子 (デフォルト: 1.0)。
- type gA:
float
- 戻り値:
- returns:
電荷中性条件の残差。
- rtype:
float
- electrical.Ne_T_fit.eigen_sorted_sym(A: ndarray, descending: bool = True) Tuple[ndarray, ndarray]
- 概要:
対称行列の固有値分解を行い、結果をソートして返す。
- 詳細説明:
対称行列 A の固有値と固有ベクトルを計算し、固有値を降順 (descending=True の場合) または昇順にソートして返す。 固有ベクトルは対応する固有値の順序に合わせて並べ替えられる。
- 引数:
- param A:
対称行列 (numpy.ndarray)。
- type A:
np.ndarray
- param descending:
固有値を降順にソートするかどうか (デフォルト: True)。
- type descending:
bool
- 戻り値:
- returns:
ソートされた固有値の配列 (numpy.ndarray) と対応する固有ベクトルの行列 (numpy.ndarray)。
- rtype:
Tuple[np.ndarray, np.ndarray]
- electrical.Ne_T_fit.estimate_param_errors(theta_hat: ndarray, T: ndarray, Ne_obs: ndarray, args, fix: set[str], free_names: List[str]) Dict[str, Dict[str, float]]
- 概要:
最適化されたパラメータの1-シグマ誤差を推定する。
- 詳細説明:
フィッティング後のパラメータ theta_hat における残差と数値ヤコビアンを用いて、 自由パラメータの共分散行列を推定する。共分散行列から標準誤差(1-シグマ誤差)を導出し、 log10 変換されたパラメータ (ND, NA) については物理空間での誤差を伝播させて算出する。 診断目的で相関行列なども含めて返す。
- 引数:
- param theta_hat:
最適化された自由パラメータの内部表現ベクトル (numpy.ndarray)。
- type theta_hat:
np.ndarray
- param T:
フィッティングに使用された温度のNumpy配列 [K]。
- type T:
np.ndarray
- param Ne_obs:
フィッティングに使用された観測電子濃度データのNumpy配列 [cm^-3]。
- type Ne_obs:
np.ndarray
- param args:
コマンドライン引数を格納するオブジェクト。
- type args:
argparse.Namespace
- param fix:
固定パラメータ名のセット。
- type fix:
set[str]
- param free_names:
自由パラメータ名のリスト。
- type free_names:
List[str]
- 戻り値:
- returns:
各パラメータの推定値、標準誤差、および共分散・相関行列などの診断情報を含む辞書。
- rtype:
Dict[str, Dict[str, float]]
- electrical.Ne_T_fit.initialize()
- 概要:
コマンドライン引数をパースし、argparse.Namespace オブジェクトとして返す。
- 詳細説明:
シミュレーションおよびフィッティングに必要な各種パラメータ(I/O、物理定数、温度範囲、 フィッティングオプション、診断出力など)を定義し、ユーザーからの入力を処理する。
- 戻り値:
- returns:
パースされたコマンドライン引数を格納した argparse.Namespace オブジェクト。
- rtype:
argparse.Namespace
- electrical.Ne_T_fit.load_params(filename: str = 'fit_params.json') dict
- 概要:
JSONファイルからパラメータ辞書を読み込む。
- 詳細説明:
指定されたJSONファイルからパラメータを読み込み、辞書として返す。 ファイルが存在しない場合は空の辞書を返す。
- 引数:
- param filename:
読み込むJSONファイル名 (デフォルト: "fit_params.json")。
- type filename:
str
- 戻り値:
- returns:
読み込んだパラメータを格納した辞書。
- rtype:
dict
- electrical.Ne_T_fit.m2Nc(T: float, me_eff: float) float
- 概要:
伝導帯の有効状態密度 Nc [cm^-3] を計算する。
- 詳細説明:
電子の有効質量 me_eff と温度 T を用いて有効状態密度を計算し、単位を m^-3 から cm^-3 に変換する。
- 引数:
- param T:
温度 [K]。
- type T:
float
- param me_eff:
電子の有効質量比 (m_e^* / m_0)。
- type me_eff:
float
- 戻り値:
- returns:
伝導帯の有効状態密度 Nc [cm^-3]。
- rtype:
float
- electrical.Ne_T_fit.m2Nv(T: float, mh_eff: float) float
- 概要:
価電子帯の有効状態密度 Nv [cm^-3] を計算する。
- 詳細説明:
正孔の有効質量 mh_eff と温度 T を用いて有効状態密度を計算し、単位を m^-3 から cm^-3 に変換する。
- 引数:
- param T:
温度 [K]。
- type T:
float
- param mh_eff:
正孔の有効質量比 (m_h^* / m_0)。
- type mh_eff:
float
- 戻り値:
- returns:
価電子帯の有効状態密度 Nv [cm^-3]。
- rtype:
float
- electrical.Ne_T_fit.main()
- 概要:
プログラムのエントリポイント。
- 詳細説明:
initialize 関数を呼び出してコマンドライン引数をパースする。 args.save, args.diag_save, args.suggest_save が指定されていない場合、 args.input に基づいてデフォルトのファイル名を生成する。 --mode 引数の値に応じて、run_read, run_fit, run_sim のいずれかの関数を実行する。
- electrical.Ne_T_fit.numerical_jacobian(theta: ndarray, T: ndarray, Ne_obs: ndarray, args, fix: set[str]) ndarray
- 概要:
残差ベクトルに関するパラメータ theta の数値ヤコビアンを計算する。中央差分法を使用する。
- 詳細説明:
このコードベースでは F_half(eta) の計算を高速化するために eta を 10^-3 単位で量子化してキャッシュする。 有限差分によるヤコビアン計算の場合、この量子化は小さなパラメータ摂動に対して残差を区分的に定数とし、 J≈0、したがって (J^T J)≈0 を引き起こす可能性がある。 したがって、ここでは一時的に量子化キャッシュ (FD_CACHE_DISABLE=True) を無効にする。
- 引数:
- param theta:
自由パラメータの内部表現ベクトル (numpy.ndarray)。
- type theta:
np.ndarray
- param T:
温度のNumpy配列 [K]。
- type T:
np.ndarray
- param Ne_obs:
観測された電子濃度データのNumpy配列 [cm^-3]。
- type Ne_obs:
np.ndarray
- param args:
コマンドライン引数を格納するオブジェクト。
- type args:
argparse.Namespace
- param fix:
固定パラメータ名のセット。
- type fix:
set[str]
- 戻り値:
- returns:
ヤコビアン行列 (numpy.ndarray)。
- rtype:
np.ndarray
- electrical.Ne_T_fit.objective(theta: ndarray, T: ndarray, Ne_obs: ndarray, args, fix: set[str]) float
- 概要:
最適化アルゴリズムのための目的関数。log10 空間での残差の二乗和を返す。
- 詳細説明:
自由パラメータ theta から物理パラメータを再構築し、residuals_log10 を計算し、 その二乗和を目的値とする。物理的に不可能なパラメータ値(例: バンドギャップが負)や 不自然な関係(例: ドナー準位がバンドギャップより深い)に対してはペナルティ項を加えて最適化をガイドする。
- 引数:
- param theta:
自由パラメータの内部表現ベクトル (numpy.ndarray)。
- type theta:
np.ndarray
- param T:
温度のNumpy配列 [K]。
- type T:
np.ndarray
- param Ne_obs:
観測された電子濃度データのNumpy配列 [cm^-3]。
- type Ne_obs:
np.ndarray
- param args:
コマンドライン引数を格納するオブジェクト。
- type args:
argparse.Namespace
- param fix:
固定パラメータ名のセット。
- type fix:
set[str]
- 戻り値:
- returns:
log10 空間での残差の二乗和(目的関数の値)。
- rtype:
float
- electrical.Ne_T_fit.pack_free_params(args, fix: set[str]) Tuple[ndarray, List[str]]
- 概要:
フィッティングのために、自由パラメータを内部表現のベクトル theta0 にパックする。
- 詳細説明:
固定されていないパラメータのみを抽出し、ND, NA は log10 空間に変換してベクトルに格納する。 エネルギー系のパラメータは線形空間のまま。
- 引数:
- param args:
CLI引数を格納するオブジェクト。
- type args:
argparse.Namespace
- param fix:
固定パラメータ名のセット。
- type fix:
set[str]
- 戻り値:
- returns:
自由パラメータの初期値ベクトル (numpy.ndarray) とその名前のリスト。
- rtype:
Tuple[np.ndarray, List[str]]
- electrical.Ne_T_fit.parse_fix_list(s: str | None) set[str]
- 概要:
カンマ区切りの文字列から固定パラメータ名のセットをパースする。
- 詳細説明:
--fix オプションで与えられた文字列を処理し、空白を除去して有効なパラメータ名のセットを生成する。
- 引数:
- param s:
固定パラメータ名のカンマ区切り文字列、または None。
- type s:
str or None
- 戻り値:
- returns:
固定パラメータ名を含む文字列のセット。
- rtype:
set[str]
- electrical.Ne_T_fit.prediction_band_log10_Ne(T: ndarray, theta_hat: ndarray, args, fix: set[str], Cov: ndarray, nsigma: float = 1.0) Tuple[ndarray, ndarray, ndarray]
- 概要:
log10(Ne) における予測誤差帯(デルタ法)を計算する。
- 詳細説明:
最適化されたパラメータ theta_hat とその共分散行列 Cov を用いて、デルタ法により 予測値 y0 (log10(Ne)) の標準誤差を計算し、指定された nsigma 幅の誤差帯 (ylo, yhi) を提供する。 数値ヤコビアンの計算と同様に F_half 関数のキャッシュを一時的に無効にする。
- 引数:
- param T:
温度のNumpy配列 [K]。
- type T:
np.ndarray
- param theta_hat:
最適化された自由パラメータの内部表現ベクトル (numpy.ndarray)。
- type theta_hat:
np.ndarray
- param args:
コマンドライン引数を格納するオブジェクト。
- type args:
argparse.Namespace
- param fix:
固定パラメータ名のセット。
- type fix:
set[str]
- param Cov:
自由パラメータの共分散行列 (numpy.ndarray)。
- type Cov:
np.ndarray
- param nsigma:
誤差帯の幅(標準偏差の倍数) (デフォルト: 1.0)。
- type nsigma:
float
- 戻り値:
- returns:
予測中央値 (y0)、下限 (ylo)、上限 (yhi) のNumpy配列 (log10 空間)。共分散行列が利用できない場合は None を返す。
- rtype:
Tuple[np.ndarray, np.ndarray, np.ndarray]
- electrical.Ne_T_fit.propose_fix_candidates(names: List[str], theta_hat: ndarray, stderr: ndarray, corr: ndarray, evals_cov: ndarray, evecs_cov: ndarray, corr_thr: float = 0.95, relerr_thr: float = 0.5, topn: int = 3)
- 概要:
フィッティングパラメータとして固定すべき/制約すべき候補をヒューリスティックに提案する。
- 詳細説明:
自由パラメータの相対標準誤差が閾値 relerr_thr を超えるもの、 他のパラメータとの相関が閾値 corr_thr を超えるもの、 共分散行列の最も不確かな固有方向(最大固有値に対応する固有ベクトル)に強く寄与するものを特定し、提案リストを生成する。 各候補について、スコア、推定値、標準誤差、相対誤差、および提案理由を報告する。
- 引数:
- param names:
自由パラメータ名のリスト。
- type names:
List[str]
- param theta_hat:
最適化された自由パラメータの内部表現ベクトル (numpy.ndarray)。
- type theta_hat:
np.ndarray
- param stderr:
自由パラメータの標準誤差の配列 (numpy.ndarray)。
- type stderr:
np.ndarray
- param corr:
自由パラメータの相関行列 (numpy.ndarray)。
- type corr:
np.ndarray
- param evals_cov:
共分散行列の固有値の配列。
- type evals_cov:
np.ndarray
- param evecs_cov:
共分散行列の固有ベクトルの行列。
- type evecs_cov:
np.ndarray
- param corr_thr:
強相関と見なす相関係数の閾値 (デフォルト: 0.95)。
- type corr_thr:
float
- param relerr_thr:
相対誤差が高いと見なす閾値 (デフォルト: 0.5)。
- type relerr_thr:
float
- param topn:
上位何件の候補を提案するか (デフォルト: 3)。
- type topn:
int
- 戻り値:
- returns:
固定/制約候補の提案を含む辞書のリスト。
- rtype:
list
- electrical.Ne_T_fit.read_data(path: str, temp_col: int = 0, ne_col: int = 3, sheet_name: str | int | None = None) Tuple[ndarray, ndarray, DataFrame]
- 概要:
CSVまたはExcelファイルから実験データを読み込む。
- 詳細説明:
指定されたパスからファイル(CSV, TSV, Excel)を読み込み、温度 (temp_col) とキャリア濃度 (ne_col) の列を抽出する。 NaN値は除去される。Excelファイルの場合、シート名を指定できる。
- 引数:
- param path:
入力ファイルのパス。
- type path:
str
- param temp_col:
温度データの列インデックス (0始まり) (デフォルト: 0)。
- type temp_col:
int
- param ne_col:
キャリア濃度データの列インデックス (0始まり) (デフォルト: 3)。
- type ne_col:
int
- param sheet_name:
Excelファイルの場合のシート名またはシートインデックス (デフォルト: None, 最初のシート)。
- type sheet_name:
str or int or None
- 戻り値:
- returns:
温度のNumpy配列、キャリア濃度のNumpy配列、読み込んだDataFrame。
- rtype:
Tuple[np.ndarray, np.ndarray, pd.DataFrame]
- 例外:
- raises ValueError:
入力ファイルのパスがNoneの場合、またはデータ列が不足している場合。
- raises FileNotFoundError:
入力ファイルが見つからない場合。
- electrical.Ne_T_fit.replace_ext(path: str, target_ext: str) str
- 概要:
ファイルパスの拡張子を新しいものに置き換える。
- 詳細説明:
与えられたファイルパスの拡張子を target_ext で指定されたものに置き換えた新しいファイルパス文字列を返す。 ファイル名自体は変更しない。
- 引数:
- param path:
元のファイルパス文字列。
- type path:
str
- param target_ext:
新しい拡張子(例: ".json")。
- type target_ext:
str
- 戻り値:
- returns:
拡張子が置き換えられた新しいファイルパス文字列。
- rtype:
str
- electrical.Ne_T_fit.residuals_log10(T: ndarray, Ne_obs: ndarray, p: Params, args=None) ndarray
- 概要:
モデルと観測値の間の残差ベクトルを log10 空間で計算する。
- 詳細説明:
モデル計算で得られた電子濃度 n_model と観測された電子濃度 Ne_obs の比の log10 を残差として返す。 これにより相対誤差が強調され、広い濃度範囲でのフィッティングに適する。 Ne_obs は0より大きい必要がある。
- 引数:
- param T:
温度のNumpy配列 [K]。
- type T:
np.ndarray
- param Ne_obs:
観測された電子濃度データのNumpy配列 [cm^-3]。
- type Ne_obs:
np.ndarray
- param p:
物理パラメータ (Params オブジェクト)。
- type p:
Params
- param args:
コマンドライン引数を格納するオブジェクト(縮退因子を取得するため)。
- type args:
argparse.Namespace or None
- 戻り値:
- returns:
log10 空間での残差ベクトル (numpy.ndarray)。
- rtype:
np.ndarray
- 例外:
- raises ValueError:
観測された Ne が一つでも0以下の場合。
- electrical.Ne_T_fit.run_fit(args)
- 概要:
実験データに対して半導体パラメータをフィッティングする。
- 詳細説明:
入力ファイルから実験データを読み込み、指定された温度範囲でフィッティングを行う。 JSONファイルから初期パラメータをロードする(CLI指定が優先)。 指定されたパラメータを固定し、残りの自由パラメータをnelder-meadなどの最適化アルゴリズムでフィッティングする。 ND, NA は log10 空間で最適化される。 フィット結果、パラメータの不確かさ(標準誤差、共分散、相関)、および固定すべきパラメータの提案を コンソールに出力し、オプションでJSONファイルに保存する。 モデル計算値と実験データ、および予測誤差帯をプロットする。
- 引数:
- param args:
コマンドライン引数を格納する argparse.Namespace オブジェクト。
- type args:
argparse.Namespace
- electrical.Ne_T_fit.run_read(args)
- 概要:
入力ファイルからデータを読み込み、プロットして表示する。
- 詳細説明:
read_data 関数を使用して指定された入力ファイルから温度と電子濃度データを読み込み、 matplotlibを使用して Ne(T) データをプロットし、表示する。
- 引数:
- param args:
コマンドライン引数を格納する argparse.Namespace オブジェクト。
- type args:
argparse.Namespace
- electrical.Ne_T_fit.run_sim(args)
- 概要:
指定されたパラメータでキャリア統計をシミュレーションし、結果をプロットする。
- 詳細説明:
オプションでJSONファイルから初期パラメータをロードする(CLI指定が優先)。 入力データファイルが指定されている場合は、その温度範囲を使用してシミュレーションを行う。 そうでない場合は、--Tmin, --Tmax, --nT で定義された温度範囲を使用する。 calc_at_T 関数で電子濃度を計算し、結果をデータ(あれば)と共に 1000/T vs Ne の半対数プロットとして表示する。
- 引数:
- param args:
コマンドライン引数を格納する argparse.Namespace オブジェクト。
- type args:
argparse.Namespace
- electrical.Ne_T_fit.sanitize_args_for_fit(args, fix: set[str]) None
- 概要:
フィッティングのためにCLI引数のパラメータ値をサニタイズする。
- 詳細説明:
ND と NA が自由変数として最適化される場合、log10 変換を避けるために0より大きい値に強制する。 Eg, ED, EA については物理的に妥当な範囲に調整する。 gD, gA は log で使用されるため0より大きい値に強制する。
- 引数:
- param args:
CLI引数を格納するオブジェクト。
- type args:
argparse.Namespace
- param fix:
固定パラメータ名のセット。
- type fix:
set[str]
- electrical.Ne_T_fit.save_params(params: dict, filename: str = 'fit_params.json')
- 概要:
パラメータ辞書をJSONファイルとして保存する。
- 詳細説明:
フィッティング結果などのパラメータを、指定されたファイル名でJSON形式で保存する。
- 引数:
- param params:
保存するパラメータを格納した辞書。
- type params:
dict
- param filename:
保存するJSONファイル名 (デフォルト: "fit_params.json")。
- type filename:
str
- electrical.Ne_T_fit.solve_Ef(Ec: float, Ev: float, ED: float, EA: float, ND: float, NA: float, T: float, Nc: float, Nv: float, gD: float = 1.0, gA: float = 1.0, low0: float = -5.0, high0: float = 5.0, max_expand: int = 50) float
- 概要:
Brentq法と自動ブラケット拡張を用いてフェルミ準位 Ef を解く。
- 詳細説明:
deltaQ 関数のゼロ点を見つけることで、Ef を計算する。 初期の探索範囲 (low0, high0) で根が見つからない場合、自動的に探索範囲を拡張する。
- 引数:
- param Ec:
伝導帯端のエネルギー [eV]。
- type Ec:
float
- param Ev:
価電子帯端のエネルギー [eV]。
- type Ev:
float
- param ED:
ドナーのイオン化エネルギー [eV]。
- type ED:
float
- param EA:
アクセプターのイオン化エネルギー [eV]。
- type EA:
float
- param ND:
ドナーの全密度 [cm^-3]。
- type ND:
float
- param NA:
アクセプターの全密度 [cm^-3]。
- type NA:
float
- param T:
温度 [K]。
- type T:
float
- param Nc:
伝導帯の有効状態密度 [cm^-3]。
- type Nc:
float
- param Nv:
価電子帯の有効状態密度 [cm^-3]。
- type Nv:
float
- param gD:
ドナーの縮退因子 (デフォルト: 1.0)。
- type gD:
float
- param gA:
アクセプターの縮退因子 (デフォルト: 1.0)。
- type gA:
float
- param low0:
Ef 探索の初期下限値 [eV]。
- type low0:
float
- param high0:
Ef 探索の初期上限値 [eV]。
- type high0:
float
- param max_expand:
探索範囲を拡張する最大回数。
- type max_expand:
int
- 戻り値:
- returns:
計算されたフェルミ準位 Ef [eV]。
- rtype:
float
- 例外:
- raises RuntimeError:
指定された範囲でフェルミ準位をブラケット化できなかった場合。
- electrical.Ne_T_fit.summarize_eigenvectors(evals: ndarray, evecs: ndarray, names: List[str], topk: int = 3, compk: int = 4)
- 概要:
主要な固有ベクトルを人間が読める形式で要約する。
- 詳細説明:
固有値と固有ベクトル、パラメータ名のリストを受け取り、上位 topk 個の固有ベクトルについて、 その主要な compk 個の成分と対応するパラメータ名を報告する辞書のリストを生成する。 これにより、どのパラメータが特定の不確かさの方向に強く寄与しているかを理解しやすくなる。
- 引数:
- param evals:
固有値の配列。
- type evals:
np.ndarray
- param evecs:
固有ベクトルの行列。
- type evecs:
np.ndarray
- param names:
パラメータ名のリスト。
- type names:
List[str]
- param topk:
要約する上位の固有ベクトルの数 (デフォルト: 3)。
- type topk:
int
- param compk:
各固有ベクトルで報告する主要成分の数 (デフォルト: 4)。
- type compk:
int
- 戻り値:
- returns:
要約された固有ベクトル情報を含む辞書のリスト。
- rtype:
list
- electrical.Ne_T_fit.unpack_params(theta: ndarray, args, fix: set[str]) Params
- 概要:
内部表現のパラメータベクトル theta と固定値を物理的な Params オブジェクトにアンパックする。
- 詳細説明:
最適化された自由パラメータ theta の値と、CLI引数 args から取得した固定パラメータの値を結合し、 物理的な意味を持つ Params オブジェクトを構築する。 log10 変換された ND, NA は元のスケールに戻される。
- 引数:
- param theta:
自由パラメータの内部表現ベクトル (numpy.ndarray)。
- type theta:
np.ndarray
- param args:
CLI引数を格納するオブジェクト(固定パラメータの値、および me, mh を取得)。
- type args:
argparse.Namespace
- param fix:
固定パラメータ名のセット。
- type fix:
set[str]
- 戻り値:
- returns:
物理パラメータを格納した Params オブジェクト。
- rtype:
Params