LabTalkでXファンクションを使う

 

概要

Xファンクションは、LabTalkスクリプトからOriginの機能のほとんどを一律に利用できます。

Xファンクションを呼び出す構文は以下の通りです。

xFunctionName [argument1:=<range,name or value> argument2:=<range,name or value> ...][ -switch];

オプションスイッチは、スクリプトからXファンクションを実行する代替のモードにアクセスします。各Xファンクションで、-hスイッチを使ってヘルプファイルにアクセスして引数および定義を出力できます。

xFunctionName -h;

Xファンクションの操作は、多くの場合Xファンクションop_changeでアクセス可能なオプションツリーに関連付けられています。Xファンクションop_changeを使って、引数の変更やXファンクション操作の再実行が可能です。

Xファンクションがレポートデータを生成する場合、データを取得して指定したワークシート/列またはツリー変数に配置できます。

学習する項目

このチュートリアルでは、以下の項目について解説します。

  • LabTalkスクリプトでXファンクションを呼び出す
  • Xファンクションのツリーノードオプションを操作
  • ダイアログ設定からスクリプトを生成
  • 操作ツリーを取得、設定を変更、新しい設定でXファンクションを実行
  • 結果データをツリー変数またはワークシート/列に送る
  • Xファンクションにアクセスする際にスイッチオプションを使用

ステップ

Xファンクションの呼び出し

  1. Originを起動して新しい空のOPJUファイルを開始します。Xファンクションnewbookを呼び出して新しいワークブックをします。
  2. //ワークブックのロングネームを"Curves"に設定
    //ワークブックのショートネーム文字列変数bkn$に保存
    newbook name:="Curves" result:=bkn$;
    
  3. 以下のスクリプトを実行してXファンクションimpASCのグラフィカルインターフェースである ASCII のインポートダイアログを開きます。
  4. impASC -d;
    //"-d" はXファンクションの実行オプションでグラフィカルインターフェースを開くときに使用
    
  5. <Origin Exe Folder>\Samples\Curve Fitting\にあるPolynomial Fit.datファイルを参照して選択します。
  6. インポートオプションツリーノードで、スパークラインの追加しないにし、シート名を(部分)ファイル名に変更するブック名を(部分)ファイル名に変更するファイル名をワークブックコメントに含めるのチェックを外します。
  7. ダイアログ上のダイアログテーマの右側にある矢印ボタンをクリックして開くメニューでスクリプトの生成を選択すると、この操作に対するLabTalkスクリプトがスクリプトウィンドウに表示されます。
  8. キャンセルをクリックしてImpASCを終了します。改行して見やすくすると以下のようになります。
  9. //Note: ファイルパスはOrigin EXEパスにより異なります
    
    impASC fname:="C:\Program Files\OriginLab\Origin2016\Samples\Curve Fitting\Polynomial Fit.dat" 
    options.sparklines:=0 
    options.FileStruct.NumericSeparator:=0 
    options.Cols.ColDesign:=<Unchanged> 
    options.Names.FNameToSht:=0 
    options.Names.FNameToBk:=0 
    options.Names.FNameToBkComm:=0;
    
  10. 1行のスクリプトの場合カーソルをスクリプト行に置き、Enterキーを押すと実行できます。複数行のスクリプトの場合、選択状態にしてからEnterを押すと実行できます。上のスクリプトの"options"はツリー変数で、このXファンクションのパラメータを設定および保存するために使用されます。
  11. Xファンクションfitpolyを使って、最初の2列のXYデータセットで多項式フィットを実行します。"-r"スイッチで再計算モードを自動に設定します。
  12. fitpoly iy:=[%(bkn$)]!(1,2) polyorder:=2 
            coef:=<new> oy:=[<Input>]<new>!<new> 
            AdjRSq:=arsq RSqCOD:=rsq -r 1;
    

Xファンクションの再計算

  1. この操作を含む範囲変数を取得します。これは後に使用します。
  2. range r1 = [%(bkn$)]%(page.active$)!col(1);
    
  3. 操作の設定をツリー変数mytreeとして取得します。
  4. op_change ir:=r1 tr:=mytree;
    
  5. スクリプトウィンドウで、以下のスクリプトを実行してツリー構造および値を取得します。
  6. mytree.=;
    
  7. Mytree 変数を使って操作の設定を変更します。
  8. //入力データを変更
    mytree.xfGetN.iy.Range1.Y$ = "[%(bkn$)]1!C";
    //多項式次数を変更
    mytree.xfGetN.polyorder = 3;
    
  9. スクリプト"mytree.=;"を再度実行して変更した設定を確認します。
  10. 変更した設定で操作を再実行します。
  11. op_change ir:=r1 tr:=mytree op:=run;
    

Xファンクションから結果を取得

Xファンクション操作からレポートデータを取得し、指定したブック/シート/列やツリー変数に送信できます。

  1. Xファンクションnewsheetで新しいワークシートを作成します。
  2. newsheet;
    //文字列レジスタ%Bのシート名を取得
    %B = page.active$;
    
  3. 列Aにデータを入力します。
  4. col(A) = {13.2, 14.1, 11.7, 23.9, 10.3};
    
  5. Xファンクションgrubbsを使って列Aに外れ値があるか検出します。
  6. //ツリー変数trにレポートデータを出力
    //trがない場合、作成
    grubbs ix:=col(A) rt:=tr;
    
  7. 以下のスクリプトを使って、ツリー構造及び値を取得します。
  8. tr.=;
    
  9. ツリー変数から結果の値を取得してdouble型変数または文字列変数に渡します。
  10. //外れ値と疑われる行番号を取得
    double rindex = tr.Stats.Stats.C2;
    //conclusion文字列を取得
    string conclusion$ = tr.Stats.Footer$;
    //外れ値と疑われるデータセルの右に結論文を表示
    col(B)[$(rindex)]$ = conclusion$;
    //列幅を調整してテキストを表示
    wks.col2.width=40;
    
  11. Xファンクションgrubbsを再実行しますが、指定したワークシートResultにレポートデータを送信します。
  12. //新しいワークシート"Result"を作成
    newsheet name:=Result;
    //Resultワークシートにレポートデータを送信
    grubbs ix:=[%H]%B!col(A) rt:=[<Input>]Result!; 
    //Note: Resultという名前のシートがない場合、上述のnewsheetスクリプトはなくても構いません
    //自動的に作成されます
    

    非線形のカーブフィット(Xファンクションnlbegin/nlfit/nlend)のレポートツリーを取得する場合、Xファンクションgetnlrも使用できます。