LabTalkによるピーク解析

概要

このチュートリアルでは、ピーク分析でLabTalkを使用する方法を示します。

学習する項目

このチュートリアルでは、LabTalk スクリプトを使用して次のことを行う方法を説明します。

  • ソースデータから行を減算
  • 各データセットで高さが最大のピークを検索
  • 高さが最大のピークについて面積高さ、FWHMを計算
  • ピークに関する値のグラフを作成
  • ピークアナライザーのテーマを作成し保存したテーマでバッチ処理を実行

ステップ

サンプル1: スクリプトでピーク分析

  1. <Origin EXE folder>\Samples\GraphingのデータファイルWaterfall.dat を関連するインポートフィルタでワークブックWaterfallにインポートします。
  2. // 新規ブックを作成し、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!;
    
  3. ループとXファンクションsubtract_lineを使用して、エンドポイント接続の単純な基線を減算します。
  4. // 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;
            }
    }
    
  5. 概要レポート用の新しいシートを作成します。
  6. // 要約レポート用の新しいシートを作成し、範囲を定義
    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";
    
  7. 高さ最大のピークに関する値を計算するには、 pkfind Xファンクションで最大ピークを見つけてから、integ1 Xファンクションでそれぞれの値を計算する必要があります。
  8.  // 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]$);
    }
    
  9. Xファンクションplotxyを使用して、励起波長の値のグラフを作成します。
  10. // 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>];
    

サンプル2: 事前保存したテーマでバッチ処理を実行

  1. <Origin EXE folder>\Samples\Batch Processingフォルダにある事前に用意されたテーマファイル0-PA-BatchPA.oisをOriginにドラッグ&ドロップします。
  2. ピーク分析用のデータを含むプロジェクトファイルを開きます。
  3. // Originのプロジェクトファイルを開く
    string fname$ = system.path.program$ + "Samples\Batch Processing\Batch Peak Analysis.opj";
    doc -o %(fname$);   //  ''document -open''の略
    
  4. 事前保存されたテーマを使ってXファンクション pamultiYでピーク分析のバッチ処理を実行します。
  5. paMultiY iy:=2:end theme:="BatchPA" append:=4 dataid:="My Parameter";