<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />こんにちは、
信号トレースを処理し、ランダムなウェハ形状に対するパルストレースを識別します。 以下のプロットでは、隣接するサンプリング点を持つ信号値のみがゼロ以外の値を持ちますが、1つのサンプル点がゼロ以外の値を持つ場合は、破棄されます。
次に、特定の値、ここでは1.5などのしきい値を超えるパルストレースのみがカウントされます。
このための簡単なスクリプトを開発しようと思っています。 信号、サンプルおよびトレースは列として格納されます。

これを実行するためのより効率的な方法があることは間違いありませんが、以下のコードで作業を始めることができます。
NamesDefaultToHere ( 1 ) ;
//データベクトル内の「シグナル」をカウントする関数
countSignals =
関数 ({ vec 、ヴァル } 、 { デフォルトのローカル } 、
//値 'val'より上の点を探す
plusPos = Loc ( vec > ヴァル ) ;
zeroPos = Loc ( vec <= ヴァル ) ;
//ポイントを適切に書き換える
vec [ plusPos ] = 1 ;
vec [ zeroPos ] = 0 ;
//シグナルの数を数えます(+1の2つ以上の値のラン):変数を初期化します
n信号 = 0 ;
isSignal = 0 ;
前 = vec [ 1 ] ;
// 2番目からvecの要素をループします。。。
にとって ( e = 2 、 e <= 今 ( vec ) 、 e ++、
もし ( ! isSignal 、
//まだシグナルの「中央」にいない場合は、開始します
もし ( vec [ e ] == 前 & 前 == 1 、 isSignal = 1 ) 、
//すでにシグナルの「真ん中」にいる場合、それは終了しましたか?もしそうなら、それを数えて、リセットします。
もし ( vec [ e ] == 0 、 n信号 ++; isSignal = 0 )
) ;
// vecの終わりにあり、シグナルの「中」にいる場合でも、カウントする必要があります
もし ( e == 今 ( vec ) & isSignal 、 n信号 ++ ) ;
//次の繰り返しに備えて 'previous'値を更新する
前 = vec [ e ] ;
) ;
//シグナル数を返す
n信号 ;
) ;
/ *
//このテストベクトルは4回実行されます(しきい値0.5を使用)。
v = [0、1、0、0、1、1、0、1、1、1、0、1、1、0、1、0、0、0、1、1、1、1]。
印刷(countSignals(v、0.5));
* /
//ダミーデータを作成します。。。
n = 100 ;
データ = ランダムシャッフル ( J ( n / 2 、 1 、ランダム正規 ( 4 、 1 )) | / J ( n / 2 、 1 、 0 )) ;
dt = AsTable ( データ ) ;
dt << setName ( 「シグナルカウント用のテストデータ」 ) ;
カラム ( dt 、 "Col1" ) << setName ( "値" ) ;
//プロットします 。。
新しい窓 ( 「このデータは持っています」 || チャー ( countSignals ( データ 、 1.0 )) || 「シグナル」 、
dt << グラフビルダー (
コントロールパネルを表示 ( 0 ) 、
凡例を表示 ( 0 ) 、
変数 ( バツ ( 変換列 ( "行" 、式 ( 行 () ) ) ) 、 Y ( : 値 ) ) 、
要素 ( ライン ( バツ 、 Y 、伝説 ( 4 ) ) 、ポイント ( バツ 、 Y 、伝説 ( 5 ) ) ) 、
SendToReport (
ディスパッチ ( {} 、 "値" 、 ScaleBox 、 { 参照行を追加 ( 1 、 "固体" 、 "赤" 、 「」 、 1 )} )
)
) ;
) ;