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)

ベースクラス: object

TFTパラメータ抽出に使用される設定値を格納します。

属性:
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

channel_length: float = 5e-05
channel_width: float = 0.0003
cox: float = 2.24e-08
ioff_threshold: float = 1e-14
rolling_window: int = 7
target_current: float = 1e-10
class analyze_TFT_refactored.IdVdResult(dataframe: DataFrame, mueff: float)

ベースクラス: object

Id-Vd曲線から計算された要約値を格納します。

属性:
param dataframe:

処理されたデータを含むpandas DataFrame。

type dataframe:

pandas.DataFrame

param mueff:

実効移動度。

type mueff:

float

dataframe: DataFrame
mueff: float
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)

ベースクラス: object

Id-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
ioff: float | None
ion: float
ion_ioff_ratio: float | None
max_slope: float
mobility: float
ss: float
vg_at_max_slope: float
von: float
vth: float
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