analyze_TFT_refactored プログラム仕様
Id-Vg ExcelファイルからTFTの伝達特性を分析します。
- 概要:
このスクリプトは、線形領域と飽和領域の2つのId-Vg Excelファイルを読み込み、 Vth、移動度、SS、Ionなどの代表的なTFTパラメータを計算します。
- 詳細説明:
デフォルトの入出力ファイル名は元のスクリプトとの互換性を保っています。 入力ファイルは IdVg-Vd0.1.xlsx (線形領域) と IdVg-Vd10.xlsx (飽和領域) です。 デフォルトの出力ファイルは以下の通りです。
IdVg-Vd10_analyze.csv IdVg-Vd0.1_analyze.csv output.csv output_log.csv rootIdVg.png IdVg_LIN.png
- class analyze_TFT_refactored.AnalysisConfig(cox: float = 2.24e-08, channel_length: float = 5e-05, channel_width: float = 0.0003, target_current: float = 1e-10, ioff_threshold: float = 1e-14, rolling_window: int = 7)
ベースクラス:
objectTFTパラメータ抽出に使用される設定値を格納します。
- 属性:
- param cox:
単位面積あたりのゲート容量。L、W、Id、Vdと単位を合わせる必要があります。元のスクリプトでは 2.24e-8でした。
- type cox:
float
- param channel_length:
チャネル長 L。
- type channel_length:
float
- param channel_width:
チャネル幅 W。
- type channel_width:
float
- param target_current:
SSおよびVonの評価に使用される電流しきい値。
- type target_current:
float
- param ioff_threshold:
Ioffの平均化に使用される上限電流しきい値。
- type ioff_threshold:
float
- param rolling_window:
局所勾配の移動平均のウィンドウサイズ。
- type rolling_window:
int
- class analyze_TFT_refactored.IdVdResult(dataframe: DataFrame, mueff: float)
ベースクラス:
objectId-Vd曲線から計算された要約値を格納します。
- 属性:
- param dataframe:
処理されたデータを含むpandas DataFrame。
- type dataframe:
pandas.DataFrame
- param mueff:
実効移動度。
- type mueff:
float
- dataframe: DataFrame
- class analyze_TFT_refactored.IdVgResult(dataframe: DataFrame, vth: float, max_slope: float, vg_at_max_slope: float, mobility: float, ss: float, ion: float, ioff: float | None, ion_ioff_ratio: float | None, von: float)
ベースクラス:
objectId-Vg曲線から計算された要約値を格納します。
- 属性:
- param dataframe:
処理されたデータを含むpandas DataFrame。
- type dataframe:
pandas.DataFrame
- param vth:
しきい値電圧。
- type vth:
float
- param max_slope:
最大勾配。
- type max_slope:
float
- param vg_at_max_slope:
最大勾配を示すVg値。
- type vg_at_max_slope:
float
- param mobility:
移動度。
- type mobility:
float
- param ss:
サブスレッショルドスイング。
- type ss:
float
- param ion:
オン電流。
- type ion:
float
- param ioff:
オフ電流。推定できない場合はNone。
- type ioff:
Optional[float]
- param ion_ioff_ratio:
オン電流とオフ電流の比。IoffがNoneの場合はNone。
- type ion_ioff_ratio:
Optional[float]
- param von:
オン電圧。
- type von:
float
- dataframe: DataFrame
- analyze_TFT_refactored.analyze_idvd_lin(df: DataFrame, vth: float, config: AnalysisConfig) IdVdResult
- 概要:
線形領域Id-Vdデータを分析します。
- 詳細説明:
この関数は、元のスクリプトに analyze_IdVd_LIN が含まれていたため保持されていますが、 メインプロセスからは呼び出されません。
- 引数:
- param df:
入力DataFrame。必須列: Vd、Vg、および Id。
- type df:
pandas.DataFrame
- param vth:
mueff計算に使用されるしきい値電圧。
- type vth:
float
- param config:
分析設定。
- type config:
AnalysisConfig
- 戻り値:
- returns:
処理されたDataFrameと最大mueffを含むIdVdResult。
- rtype:
IdVdResult
- analyze_TFT_refactored.analyze_idvg_lin(df: DataFrame, config: AnalysisConfig) IdVgResult
- 概要:
線形領域Id-Vgデータを分析します。
- 詳細説明:
計算は元のスクリプトに従います。 - 負/非正のIdをNaNに変換します。 - Id および log10(Id) の局所勾配を計算します。 - Id 勾配を中心移動平均で平滑化します。 - 平滑化された Id 勾配から電界効果移動度を計算します。 - 最大勾配接線法によりVthを計算します。 - Id >= target_current となる最初のポイントでSSを計算します。
- 引数:
- param df:
入力DataFrame。必須列: Vg、Vd、および Id。
- type df:
pandas.DataFrame
- param config:
分析設定。
- type config:
AnalysisConfig
- 戻り値:
- returns:
処理されたDataFrameと要約値を含むIdVgResult。
- rtype:
IdVgResult
- analyze_TFT_refactored.analyze_idvg_sat(df: DataFrame, config: AnalysisConfig) IdVgResult
- 概要:
飽和領域Id-Vgデータを分析します。
- 詳細説明:
計算は元のスクリプトに従います。 - 負/非正のIdをログおよび平方根演算のためにNaNに変換します。 - log10(Id) および Id ** 0.5 (sqrt(Id)) を計算します。 - 3点線形フィッティングにより局所勾配を計算します。 - Id ** 0.5 (sqrt(Id)) 勾配を中心移動平均で平滑化します。 - 平滑化された Id ** 0.5 (sqrt(Id)) 勾配から飽和移動度を計算します。 - 最大勾配接線法によりVthを計算します。 - Id >= target_current となる最初のポイントでSSを計算します。
- 引数:
- param df:
入力DataFrame。必須列: Vg および Id。
- type df:
pandas.DataFrame
- param config:
分析設定。
- type config:
AnalysisConfig
- 戻り値:
- returns:
処理されたDataFrameと要約値を含むIdVgResult。
- rtype:
IdVgResult
- analyze_TFT_refactored.calculate_ion_ioff(id_series: Series, ioff_threshold: float) tuple[float, float | None, float | None]
- 概要:
Ion、Ioff、およびIon/Ioff比を計算します。
- 引数:
- param id_series:
ドレイン電流の値。正の値が期待されます。
- type id_series:
pandas.Series
- param ioff_threshold:
0 < Id < ioff_threshold を満たすデータポイントを平均してIoffを推定します。
- type ioff_threshold:
float
- 戻り値:
- returns:
(Ion, Ioff, Ion/Ioff) のタプル。Ioffが推定できない場合、IoffとIon/IoffはNoneとして返されます。
- rtype:
tuple
- analyze_TFT_refactored.calculate_local_slope_by_linear_fit(df: DataFrame, x_series: Series, y_series: Series, half_window: int = 1) list[float]
- 概要:
各データポイント周辺で y = a*x + b をフィッティングして局所勾配を計算します。
- 詳細説明:
この関数は、元のスクリプトの slope3data および slope7data スタイルの関数を置き換えます。 half_window=1 の場合、約3点を使用して、元の slope3data の動作に可能な限り一致させます。
- 引数:
- param df:
元となるDataFrame。その長さのみが使用されます。
- type df:
pandas.DataFrame
- param x_series:
X軸の値。
- type x_series:
pandas.Series
- param y_series:
Y軸の値。
- type y_series:
pandas.Series
- param half_window:
各側の隣接ポイント数。
- type half_window:
int
- 戻り値:
- returns:
局所勾配のリスト。フィットできないポイントはNaNとして返されます。
- rtype:
list[float]
- analyze_TFT_refactored.calculate_vth_by_max_slope(vg_series: Series, y_series: Series, slope_series: Series) tuple[float, float, float]
- 概要:
最大勾配接線法を使用してしきい値電圧を計算します。
- 引数:
- param vg_series:
ゲート電圧の値。
- type vg_series:
pandas.Series
- param y_series:
分析モードに応じてIdまたはsqrt(Id)。
- type y_series:
pandas.Series
- param slope_series:
局所勾配の値。
- type slope_series:
pandas.Series
- 戻り値:
- returns:
(Vth, max_slope, Vg_at_max_slope) のタプル。
- rtype:
tuple
- 例外:
- raises ValueError:
有効な勾配が見つからない場合。
- analyze_TFT_refactored.first_index_at_or_above(series: Series, threshold: float) int | None
- 概要:
シリーズ値がしきい値以上である最初のインデックスを返します。
- 引数:
- param series:
数値シリーズ。
- type series:
pandas.Series
- param threshold:
しきい値。
- type threshold:
float
- 戻り値:
- returns:
最初の一致するインデックス。条件を満たすポイントがない場合はNone。
- rtype:
Optional[int]
- analyze_TFT_refactored.intercept_x(x: float, y: float, slope: float) float
- 概要:
直線 y_line = slope * (x_line - x0) のX切片を計算します。
- 引数:
- param x:
直線上の点のX座標。
- type x:
float
- param y:
直線上の点のY座標。
- type y:
float
- param slope:
直線の勾配。
- type slope:
float
- 戻り値:
- returns:
X切片の値。
- rtype:
float
- analyze_TFT_refactored.main(argv: list[str] | None = None) int
- 概要:
コマンドライン実行のエントリポイントです。
- 引数:
- param argv:
コマンドライン引数のリスト。デフォルトはNoneで、sys.argvを使用します。
- type argv:
Optional[list[str]]
- 戻り値:
- returns:
終了コード。成功時は0、エラー時は1。
- rtype:
int
- analyze_TFT_refactored.output_path(output_dir: str, filename: str) str
- 概要:
出力ディレクトリ内のパスを返します。
- 引数:
- param output_dir:
出力ディレクトリのパス。
- type output_dir:
str
- param filename:
ファイル名。
- type filename:
str
- 戻り値:
- returns:
出力ディレクトリ内のファイルの完全パス。
- rtype:
str
- analyze_TFT_refactored.parse_args(argv: list[str] | None = None) Namespace
- 概要:
コマンドライン引数を解析します。
- 引数:
- param argv:
コマンドライン引数のリスト。デフォルトはNoneで、sys.argvを使用します。
- type argv:
Optional[list[str]]
- 戻り値:
- returns:
解析された引数を格納したargparse.Namespaceオブジェクト。
- rtype:
argparse.Namespace
- analyze_TFT_refactored.plot_idvg_lin(df: DataFrame, vth: float, max_slope: float, output_path: str) None
- 概要:
線形領域Id-Vgプロットを最大勾配接線とともに保存します。
- 引数:
- param df:
プロットするデータを含むDataFrame。
- type df:
pandas.DataFrame
- param vth:
しきい値電圧。
- type vth:
float
- param max_slope:
最大勾配。
- type max_slope:
float
- param output_path:
出力画像の保存パス。
- type output_path:
str
- 戻り値:
- returns:
なし
- rtype:
None
- analyze_TFT_refactored.plot_root_idvg(df: DataFrame, vth: float, max_slope: float, output_path: str) None
- 概要:
飽和領域 Id ** 0.5 (sqrt(Id)) -Vg プロットを接線とともに保存します。
- 引数:
- param df:
プロットするデータを含むDataFrame。
- type df:
pandas.DataFrame
- param vth:
しきい値電圧。
- type vth:
float
- param max_slope:
最大勾配。
- type max_slope:
float
- param output_path:
出力画像の保存パス。
- type output_path:
str
- 戻り値:
- returns:
なし
- rtype:
None
- analyze_TFT_refactored.read_excel_file(path: str, label: str) DataFrame
- 概要:
Excelファイルを読み込み、失敗時に明確なエラーメッセージを追加します。
- 引数:
- param path:
Excelファイルへのパス。
- type path:
str
- param label:
エラーメッセージで使用される人間が読める名前。
- type label:
str
- 戻り値:
- returns:
Excelファイルから読み込まれたDataFrame。
- rtype:
pandas.DataFrame
- 例外:
- raises FileNotFoundError:
ファイルが存在しない場合。
- raises ValueError:
pandasがファイルを読み込めない場合。
- analyze_TFT_refactored.run(args: Namespace) None
- 概要:
完全な分析ワークフローを実行します。
- 引数:
- param args:
コマンドライン引数を格納したNamespace。
- type args:
argparse.Namespace
- 戻り値:
- returns:
なし
- rtype:
None
- analyze_TFT_refactored.safe_inverse(value: float) float
- 概要:
1/value を返します。逆数が明確に定義されていない場合はNaNを返します。
- 引数:
- param value:
逆数を計算する数値。
- type value:
float
- 戻り値:
- returns:
valueの逆数、またはNaN。
- rtype:
float
- analyze_TFT_refactored.validate_config(config: AnalysisConfig) None
- 概要:
コマンドライン設定値を検証します。
- 引数:
- param config:
検証する分析設定オブジェクト。
- type config:
AnalysisConfig
- 戻り値:
- returns:
なし
- rtype:
None
- 例外:
- raises ValueError:
設定値が無効な場合。
- analyze_TFT_refactored.validate_required_columns(df: DataFrame, required_columns: list[str], label: str) None
- 概要:
DataFrameが必要な列を含んでいることを検証します。
- 引数:
- param df:
検証するDataFrame。
- type df:
pandas.DataFrame
- param required_columns:
分析に必要な列名。
- type required_columns:
list[str]
- param label:
エラーメッセージで使用される人間が読める名前。
- type label:
str
- 例外:
- raises ValueError:
1つ以上の必須列が欠落している場合。
- analyze_TFT_refactored.write_summary_outputs(sat: IdVgResult, lin: IdVgResult, output_dir: str) None
- 概要:
元のスクリプトと互換性のある要約CSVファイルを書き込みます。
- 詳細説明:
この関数は意図的に、元の出力列名を互換性のために保持しています。 これには、SSおよびIon値が列名を変更せずにlog10に変換される output_log.csv も含まれます。
- 引数:
- param sat:
飽和領域の分析結果。
- type sat:
IdVgResult
- param lin:
線形領域の分析結果。
- type lin:
IdVgResult
- param output_dir:
出力ディレクトリのパス。
- type output_dir:
str
- 戻り値:
- returns:
なし
- rtype:
None