Tutorial-Peak-Analysis
このチュートリアルでは、ピーク分析でLabTalkを使用する方法を示します。
このチュートリアルでは、LabTalk スクリプトを使用して次のことを行う方法を説明します。
// 新規ブックを作成し、Waterfallと名前付け(ロングネームとショートネーム両方) newbook name:="Waterfall" option:=lsname; // ファイル名とフィルタ名を定義 string fname$ = system.path.program$ + "Samples\Graphing\Waterfall.dat"; string filtername$ = "waterfall.oif"; // Xファンクションimpfileを使用して、インポートフィルタで指定ファイルをインポート impfile fname:=fname$ filtername:=filtername$ location:=data orng:=[Waterfall]1!;
// SubtractedDataという新しいシートを作成 newsheet name:=SubtractedData; //新しく作成したワークシート(現在アクティブ)を範囲変数として定義 range sdwk = !; //名前で "Waterfall" シートをアクティブ化 page.active$ = "Waterfall"; //Waterfallシートの列数を保持する整数を定義 int nc = wks.nCols; //excitation wavelength = 600, 610, 620, 630 etcの列を検索 //Xファンクションloopおよびsubtract_lineを使用して、ベースラインを減算 //最初と最後のデータ ポイントが検出され、直線的に接続 //この線をベースラインとしてソースデータから減算 //減算されたデータは、ソース データのexcitation wavelengthの値で名前付け int nexc; loop(ii, 2, nc) { range ry = [Waterfall]Waterfall!col($(ii)); int nWave = %(ry[D1]$); if (mod(nWave, 10)==0) { nexc = nexc + 1; range rx = [Waterfall]Waterfall!col(1); range rr = [Waterfall]SubtractedData!(1,$(nexc)); subtract_line iy:=ry x1:=rx[1] /* 最初の点の X 値を指定*/ y1:=ry[1] /* 最初の点の Y 値を指定*/ x2:=rx[$(wks.maxRows)] /* 最後の点の X 値を指定*/ y2:=ry[$(wks.maxRows)] /* 最後の点の Y 値を指定*/ oy:=rr; //SubtractedDataシートの列のロングネームを変更 //Waterfallシートでユーザ定義パラメータWavelengthを使用 rr[L]$ = ry[D1]$; //次のループのために新しい列を追加 wks.addcol(); } else { continue; } }
// 要約レポート用の新しいシートを作成し、範囲を定義 newsheet cols:=7 xy:="XYYYYYY" name:="Summary"; range rWaveLength = 1, rCntrInd = 2, rLtInd =3, rRtInd = 4; range rArea = 5, rCntr = 6, rHt = 7, rFWHM = 8; rWaveLength[L]$ = "WaveLength"; rCntrInd[L]$ = "Peak Center Index"; rLtInd[L]$ = "Peak Left Index"; rRtInd[L]$ = "Peak Right Index"; rArea[L]$ = "Peak Area"; rCntr[L]$ = "Peak Center"; rHt[L]$ = "Peak Height"; rFWHM[L]$ = "FWHM";
// SubtractedDataシートをアクティブにする page.active$="SubtractedData"; //見つかったピークの一時的な結果を出力する列を追加 loop(cc, 1, 2) { wks.addcol(); }; loop(ii, 2, nexc) { //最大ピーク range rData = col($(ii)); range pcenter= $(nexc+1), pleft= $(nexc+2), pright= $(nexc+3); pkfind rData filter:=num value:= 1 ocenter:=pcenter oleft:=pleft oright:=pright; //最大ピークを検索 //一時列の結果を概要シートにコピー wrcopy iw:=SubtractedData ow:=Summary c1:=nexc+1 c2:=nexc+3 r1:=1 r2:=1 dc1:=2 dr1:= ii-1; //integ1で最大ピークに関する値を出力 int n1 = pleft[1]; //ピーク左インデックスを指定 int n2 = pright[1]; //ピーク右インデックスを指定 range rint = rData[$(n1):$(n2)]; // 積分のデータ範囲 double aa, cc, hh, fw; integ1 iy:=rint area:=aa x0:=cc y0:=hh dx:=fw oy:=<optional>; //概要シートに値を出力 rArea[$(ii-1)] = aa; rCntr[$(ii-1)] = cc; rHt[$(ii-1)] = hh; rFWHM[$(ii-1)] =fw; //計算されたデータのロングネームを概要シートにコピー rWaveLength[$(ii-1)] = %(rData[L]$); }
// excitation wavelengthに関する値のグラフを作成 plotxy iy:=(rWaveLength, rArea) plot:=202 ogl:=[<new>]; plotxy iy:=(rWaveLength, rHt) plot:=202 ogl:=[<new>]; plotxy iy:=(rWaveLength, rFWHM) plot:=202 ogl:=[<new>];
// Originのプロジェクトファイルを開く string fname$ = system.path.program$ + "Samples\Batch Processing\Batch Peak Analysis.opj"; doc -o %(fname$); // ''document -open''の略
paMultiY iy:=2:end theme:="BatchPA" append:=4 dataid:="My Parameter";