列のカスタム式次の計算を使用して、テーブルに新しい列「Vth」を追加したいと考えています。
まず、「Id」が 1e-6 に最も近い列「Id」のインデックス i を見つける必要があります。そして、Vth = Vg(i)となります。 Mod 列と Device 列でもグループ化する必要があります。 つまり、Mod と Device の一意の組み合わせごとに 1 つの Vth 値が存在します。
| ID | Vg | モッド | デバイス | Vth |
| 2.00E-06 | 3 | 1A | X1 | |
| 2.00E-07 | 2.8 | 1A | X1 | |
| 2.00E-08 | 2.6 | 1A | X1 | |
| 2.00E-09 | 2.4 | 1A | X1 | |
| 2.00E-10 | 2.2 | 1A | X1 | |
| 2.00E-12 | 2 | 1A | X1 | |
| 3.00E-06 | 3 | 1B | X1 | |
| 3.00E-07 | 2.8 | 1B | X1 | |
| 3.00E-08 | 2.6 | 1B | X1 | |
| 3.00E-09 | 2.4 | 1B | X1 | |
| 3.00E-10 | 2.2 | 1B | X1 | |
| 3.00E-12 | 2 | 1B | X1 | |
| 4.00E-06 | 3 | 1A | Y1 | |
| 4.00E-07 | 2.8 | 1A | Y1 | |
| 4.00E-08 | 2.6 | 1A | Y1 | |
| 4.00E-09 | 2.4 | 1A | Y1 | |
| 4.00E-10 | 2.2 | 1A | Y1 | |
| 4.00E-12 | 2 | 1A | Y1 | |
| 5.00E-06 | 3 | 1B | Y1 | |
| 5.00E-07 | 2.8 | 1B | Y1 | |
| 5.00E-08 | 2.6 | 1B | Y1 | |
| 5.00E-09 | 2.4 | 1B | Y1 | |
| 5.00E-10 | 2.2 | 1B | Y1 | |
| 5.00E-12 | 2 | 1B | Y1 | |
データのブレンディングとクリーンアップRe: 列のカスタム数式求めているものを生成するための列は次のとおりです。補間式をそのまま採用して実装しました。いくつかの点を変更する必要があるかもしれません。
Names default to Here(1);
// Create the sample data table
dt=New Table( "Example",
Add Rows( 24 ),
New Column( "ID",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values(
[0.000002, 0.0000002, 0.00000002, 0.000000002, 0.0000000002,
0.000000000002, 0.000003, 0.0000003, 0.00000003, 0.000000003,
0.0000000003, 0.000000000003, 0.000004, 0.0000004, 0.00000004,
0.000000004, 0.0000000004, 0.000000000004, 0.000005, 0.0000005,
0.00000005, 0.000000005, 0.0000000005, 0.000000000005]
)
),
New Column( "VG",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values(
[3, 2.8, 2.6, 2.4, 2.2, 2, 3, 2.8, 2.6, 2.4, 2.2, 2, 3, 2.8, 2.6, 2.4,
2.2, 2, 3, 2.8, 2.6, 2.4, 2.2, 2]
)
),
New Column( "Mod",
Character( 16 ),
"Nominal",
Set Values(
{"1A", "1A", "1A", "1A", "1A", "1A", "1B", "1B", "1B", "1B", "1B", "1B",
"1A", "1A", "1A", "1A", "1A", "1A", "1B", "1B", "1B", "1B", "1B", "1B"}
)
),
New Column( "Device",
Character( 16 ),
"Nominal",
Set Values(
{"X1", "X1", "X1", "X1", "X1", "X1", "X1", "X1", "X1", "X1", "X1", "X1",
"Y1", "Y1", "Y1", "Y1", "Y1", "Y1", "Y1", "Y1", "Y1", "Y1", "Y1", "Y1"}
)
)
);
// Find the index
dt << New Column("Row", formula(
theMin = Col Minimum( Abs( 0.000001 - :ID ), :Mod, :Device );
theValue = .;
If( Abs( 0.000001 - :ID[Row()] ) == theMin,
show(.000001 - :ID[Row()]);
theValue = Row()
);));
dt<<NEW column=""> 0,
iRow = theRow - 1,
.000001 - :ID[theRow] < 0,
iRow = theRow +1,
iRow = theRow
);
);
));
iRow;
// Set the Vth
dt<<NEW column=""></NEW></NEW>Re: 列のカスタム数式ありがとうジム。 それは動作します。 Vth を見つけるためにこれを変更するにはどうすればよいですかこれは補間により ID の 1e-6 に正確に対応します。 つまり、ID の 1e-6 の前後のインデックスを見つけて補間します。
Index=1e-6 に最も近い (1e-6 より大きい)
Interpolate( x, [VG(インデックス) VG(インデックス-1) ], [log10(ID(インデックス)) log10(ID(インデックス-1))] );
Re: 列のカスタム数式これは、要求した結果を提供する 2 つの新しい列を作成する小さなスクリプトです。以下の画像では、暫定列は単なる作業列であるため、削除されています。
Names default to Here(1);
// Create the sample data table
dt=New Table( "Example",
Add Rows( 24 ),
New Column( "ID",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values(
[0.000002, 0.0000002, 0.00000002, 0.000000002, 0.0000000002,
0.000000000002, 0.000003, 0.0000003, 0.00000003, 0.000000003,
0.0000000003, 0.000000000003, 0.000004, 0.0000004, 0.00000004,
0.000000004, 0.0000000004, 0.000000000004, 0.000005, 0.0000005,
0.00000005, 0.000000005, 0.0000000005, 0.000000000005]
)
),
New Column( "VG",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values(
[3, 2.8, 2.6, 2.4, 2.2, 2, 3, 2.8, 2.6, 2.4, 2.2, 2, 3, 2.8, 2.6, 2.4,
2.2, 2, 3, 2.8, 2.6, 2.4, 2.2, 2]
)
),
New Column( "Mod",
Character( 16 ),
"Nominal",
Set Values(
{"1A", "1A", "1A", "1A", "1A", "1A", "1B", "1B", "1B", "1B", "1B", "1B",
"1A", "1A", "1A", "1A", "1A", "1A", "1B", "1B", "1B", "1B", "1B", "1B"}
)
),
New Column( "Device",
Character( 16 ),
"Nominal",
Set Values(
{"X1", "X1", "X1", "X1", "X1", "X1", "X1", "X1", "X1", "X1", "X1", "X1",
"Y1", "Y1", "Y1", "Y1", "Y1", "Y1", "Y1", "Y1", "Y1", "Y1", "Y1", "Y1"}
)
)
);
// Find the index
dt << New Column("Row", formula(
theMin = Col Minimum( Abs( 0.000001 - :ID ), :Mod, :Device );
theValue = .;
If( Abs( 0.000001 - :ID[Row()] ) == theMin,
theValue = Row()
);));
// Set the Vth
dt<<NEW column=""></NEW>