*目次
*目次 [#o1839988]
#contents
*数値変数
*数値変数 [#l81ebb53]

数値変数としてはアルファベットで始まりピリオドを含まない変数名が使える(大文字と小文字は区別されない)。
ただし以下に挙げるシステム変数はOriginが内部で使っているので、不用意に使うと動作が不安定になる。 その他の数値変数は自由に使用してよい。
|システム変数| 意味 |h
|X, Y, Z|Data Reader や Data Selector での現在の座標 |
|X1, X2, Y1, Y2|現在 active な layer のグラフの表示範囲 |
|Echo|エラーメッセージの表示のしかた |
|I|内部のループ変数。主に行や列を指定する |
|SELC1, SELC2, SELR1, SELR2|現在のワークシートの選択範囲 |
|COUNT|内部で使用する計数変数 |
|MKS1,MKS2|グラフの制限領域(fitting用)|

*文字列変数
*文字列変数 [#gbd2bb59]
先頭に%がついたアルファベット1文字でユーザー変数は%K〜%Tと%Wのみ。残りはシステム変数。各文字列変数は105文字(%Zは8192文字)までの文字列を記憶できる。

|システム変数| 意味 |h
|%A|getfilenameの返り値 |
|%B|getstringの戻り値 |
|%C|現在activeなdatasetの名前(WKS_COL) |
|%D|最後にsetコマンドでactiveにされたdatasetの名前(WKS_COL) |
|%E|最後に選択されたワークシートのwindow名 |
|%F|現在fittingしているdataset(WKS_COL) |
|%G|現在のproject名 |
|%H|現在activeなwindow名 |
|%I|現在のbaselinedataset? |
|%J|現在のDDEアイテム |
|%K〜%T|ユーザー変数 |
|%U|fittingに関するメッセージ |
|%V|現在のfittingのモデル名 |
|%W|ユーザー変数 |
|%X|現在のprojectのパス名 |
|%Y|ORIGINプログラムの実行ファイル名 |
|%Z|内部で使用する一時的な文字変数 |

*データセット
*データセット [#w25ac529]

データセットとはワークシートの一つのcolumnのことであり、1次元配列を持つオブジェクトである。
データセットは通常WKS_COLという形で指定される。ただし、WKSはワークシート名、COLはcolumn名を表す。

*データセットやセルの指定の仕方
*データセットやセルの指定の仕方 [#tf7b367f]

-データセットWKS_COLのi番目のセルはWKS_COL[i]というふうに指定される。
-関数%( )を使ってもデータセットやセルを指定できる。
|%(WKS, i)|ワークシートWKSの i 番目のコラムのデータセット名 |
|%(WKS, i, j)|ワークシートWKSの i 番目の column、j番目の row のセル |
-データセット名を返す関数や文字列に[row]をつけてセルを指定できる。
-データセット名を返す関数や文字列にカギ括弧[ ]をつけてセルを指定することもできる。

(例)
|data1_a|ワークシートdata1のコラムaのデータセット|
|data1_a[10]|ワークシートdata1のコラムaの10番目のセル|
|col(b)|現在のワークシートのコラムbのデータセット|
|col(b)[20]|現在のワークシートのコラムbの20番目のセル|
|%K[30]|文字列変数%Kに格納された名前で表されるデータセットの30番目のセル|
|%(data1,2,5)|ワークシートdata1の2番目のコラムの5番目のセル|
|%(data1,2)[5]|同上|
*代入
*代入 [#d49c555b]

-数値変数への数値の代入&br;
 a=10
 a=10;
-文字列変数への文字列の代入&br;
 %A=''John''
 %A=''John'';
 (double quotationは省略してもよい。)
-セルへの数値の代入&br;
 data1_A[10]=1;
 %(data1,2,3)=2;
 col(C)[20]=3;
-セルへの文字列の代入($に注意)&br;
 data1_A[5]$="John";
 col(A)[5]$="Paul";

-データセットへの代入&br;
WKS_COLというデータセットに他のデータセットまたは配列を代入するときは
 WKS_COL=代入するデータセットまたは配列
とする。代入先のデータセット名が文字列変数に格納されているときはその変数名に括弧をつけて
 (%A)=代入するデータセットまたは配列
としなくてはならない。さもなくば、単に文字列の代入になってしまう。
 %(WKS,i)=data_A
 %(WKS,i)=data_A; col(A)=col(B)
 col(A)=col(B);
のように、データセット名を返す関数の戻り値に対して代入することもできる。この場合は括弧は必要ない。
&br;
(例)
 data1_a = {1,2,3,4,5,6};       ワークシートdata1のコラムaに1,2,3,4,5,6を代入する。
 data1_a[10] = 5;              ワークシートdata1のコラムaの10番目のセルに5を代入する。
 data1_a = data1_b;          ワークシートdata1のコラムbの内容を全てコラムaにコピーする。
 data1_a = data1_b+5;       ワークシートdata1のコラムbのすべてのセルの内容に5を足してコラムaにコピーする。
 data1_a = 0;                   ワークシートdata1のコラムaの全てのセルに0を代入する。|
 data1_c=data1_a*data1_b; ワークシートdata1のコラムaとコラムbの内容の積をコラムcに書き込む。
 col(B)=col(A) * 2;             現在のワークシートのコラムBにコラムAの内容を2倍にして代入する。
*構文
**繰り返し構文
*構文 [#x9e6dd35]
**繰り返し構文 [#fc3440f1]

-loop( variable, start, end ){ script };&br;
整数 variable を start から end まで変えながらscriptを実行する。
-for( exp1; exp2; exp3 ){ script };&br;
使い方はc言語と同じ
-repeat num { script };&br;
num 回 script を実行する。
-break option arg;&br;
optionもargもない場合は現在のループを脱出する。&br;
argに1を指定すると現在のスクリプトを終了する。&br;
optionをつけることによってメッセージの表示や実行の選択が可能。&br;
-continue;&br;
for文やloop文において次の繰り返しに飛ぶ。

**条件分岐構文
**条件分岐構文 [#y7b428b8]
-if ( condition ) { script1 } else { script2 };&br;
使い方はc言語と同じ。else以下は省略できる。
-switch( argument ){ case1: script1;  case2 : script2; ... };&br;
使い方はc言語と同じ。

*ワークシートの情報の取得
*ワークシートの情報の取得 [#t7e52a9e]

-%() 関数&br;
|%(i,@L)|現在のワークシートのi番目のコラムのラベル名|
|%(WKS, i)|ワークシートWKSの i 番目のコラムのデータセット名 |
|%(WKS, i, j)|ワークシートWKSの i 番目の column、j番目の row の値 |
|%(WKS, @option, i)|ワークシートWKSの i 番目のcolumnのoptionに関する情報 |
(オプション)
|@option| 戻り値 |h
|@type|i 列の種類 ( 1: Y列  2: 無属性 3 : エラーバー列  4: X列 ) |
|@colname|i 列の名前 |
|@data|i 列のデータセット名 |
|@Xn|i 列に対応するX列の名前 |
|@X|ワークシート全体のX列の数 |
|@Y-|i 列より左側(i 列を含む)の最初のY列の番号 |
|@Y+|i 列より右側(i 列を含む)の最初のY列の番号 |
|@Y#|i=1の場合、ワークシート全体のY列の数を返し、i=2の場合は選択領域のY列の数を返す。 |
|@#|ワークシート全体の列の数 |

-ワークシートプロパティ&br;
WKS!wks.propertyの形でアクセスする。WKS!を省略すると現在activeなワークシートが対象になる。
|property| 戻り値 |h
|nCols|総column数 |
|nRows|総row数 |
|maxRows|値のある最大のrow番号 |
ワークシートの中のそれぞれのコラムについては、
 wks.col[n].property
の形でアクセスする([n]はコラム番号)。&br;
その他のプロパティについてはマニュアル参照

*データセット情報の取得
*データセット情報の取得 [#p9547852]
-hasx(dataset)&br;
datasetが対応するXデータセットを持てば1、持たなければ0を返す。
-xof(dataset)&br;
datasetに結び付いたXデータセットの名前を返す。
-errof(dataset)&br;
datasetに結び付いたエラーデータのデータセット名を返す。
-xindex(x,dataset)&br;
datasetに結びついたXデータセットのセル値がxと同じか、それより小さい最初のセルのインデックス番号を返す。datasetはY属性をもっていなくてはならない。
-xindex1(x,dataset)&br;
datasetに結びついたXデータセットのセル値がxと同じか、それより大きい最初のセルのインデックス番号を返します。datasetはY属性をもっていなくてはならない。
-list(value,dataset)&br;
valueが最初に存在するdataset中のインデックス番号を返す。相当するものがない場合は0を返す。

*グラフ情報の取得
*グラフ情報の取得 [#y880369e]
-layer -c&br;
現在のレイヤーのグラフに存在するデータセットの数を調べ、システム変数countに格納する。同時に、データセット名を列挙したものをシステム変数%Zに格納する。データセット名は関数%[%Z,i]を使って抜き出すことができる。


*よく使うコマンドと関数
*よく使うコマンドと関数 [#ad68fcf8]

**入力&表示に関するコマンド
**入力&表示に関するコマンド [#k3ef88f0]

-type&br;
スクリプトウインドウに文字列を表示する。数値変数の内容を表示したい場合は、関数 $( ) によって文字列に変換する必要がある。
-getnumber (message) val&br;
messageというダイアログを表示して数値の入力を行い、変数valに格納する。
-getstring (message) initstr&br;
messageというダイアログを表示して文字列の入力を行い、変数%Bに格納する。initstrは初期文字列。
-getyesno (message ) val&br;
YesかNoかを問うダイアログを表示して、結果を変数valに格納する。

**ワークシートの操作に関するコマンド
**ワークシートの操作に関するコマンド [#a263e9c8]

-create name -w n c1 c2 ...;&br;
column名c1,c2,... およびrow数n を持つ名前nameのワークシートを作る
-worksheet -a n;&br;
現在のワークシートにn列のコラムを追加する。
-worksheet -i n name&br;
n番目のコラムの右にnameという名前のコラムを挿入する。
-worksheet -d name;&br;
現在アクティブなワークシートの複製をnameという名前で作成する。
-worksheet -s c1 r1 c2 r2;&br;
アクティブなワークシートのc1 r1 c2 r2で指定される領域を選択する。c1とc2がゼロの場合は全てのcolumnが対象となり、r1とr2がゼロの場合は全てのrowが対象となる。

**データセットの操作に関するコマンドと関数
**データセットの操作に関するコマンドと関数 [#v5f40f3d]

-create WKS_COL -c n&br;
row数nのXYデータセットを作る。値は全て0。Xデータの名前はWKS_Aとなる。
-copy dataset1 dataset2&br;
dataset1の内容をdataset2にコピーする。 
-copy -x dataset1 dataset2&br;
dataset1の内容を別なワークシートにあるdataset2にコピーする。その際、可能ならdtaset1のXデータセットもdataset2のXデータセットにコピーする。(->Xデータセットが複数ある時にはうまく働かない)
-peaks( dataset, width, height )&br;
データのピークを検出する関数。index幅 2width+1の中で最大値を取るもののうち、indexがi-widthおよびi+widthの点よりもheight以上大きい値を持つ点を探し、そのindex値をリストした配列を返す。
**グラフ描画に関するコマンド [#gf45dd41]

**グラフ描画に関するコマンド

-layer -i n dataset&br;
現在のレイヤーにプロットを追加する。プロットタイプはnで指定する。(worksheetコマンドを参照)
-draw {x1,y1,x2,y2}&br;
グラフに直線や点線などを描画する。
-worksheet -p n&br;
アクティブなワークシートの選択領域をプロットする。nはプロットのタイプを指定する。
|n| type |h
|200|line |
|201|scatter |
|202|line+symbol |
-set dataset -c [color]&br;
プロットの色を[color]に変える。
|[color]|色|h
|1|黒|
|2|赤|
|3|緑|
|4|青|
|...|など|
-set dataset -d [style]&br;
プロットの線のスタイルを[style]に変える。
|[style]||h
|0|solid|
|1|dash|
|...|など|
-set dataset -k [type]&br;
プロットのシンボルを[type]に変える。
|[type]|symbol|h
|0|なし|
|1|square|
|2|circle|
|...|など|

**文字列を返す関数

**文字列を返す関数 [#re834ad4]

-col(COL)&br;
現在のワークシートのCOLという名前のコラムのデータセット名をWKS_COLの形で返す。
-wcol(i)&br;
現在のワークシートのi番目のコラムのデータセット名をWKS_COLの形で返す。
-$(num)&br;
数値などを文字列に変換する。フォーマットも指定可能。&br;
(例)
|$(x,*5)|xの値を有効桁5桁で文字列に変換|
|$(x,.3)|xの値を小数点以下3桁で文字列に変換|
|$(x,fmt)|xの値をC言語のフォーマットfmtを用いて文字列に変換|
|$(x,Efmt)|xの値を工業表示文字列に変換|
|$(x,Sfmt)|xの値を科学表示で文字列に変換|
注)コンマと*,E,Sの間にスペースをいれてはいけない

***%[ ] 関数
***%[ ] 関数 [#q867e52e]
%[ ]関数によって文字列の操作ができる。
|%[string, 'ch']|文字列の先頭から最初に現れる文字chの前までを抜き出す。|
|%[string, >'ch']|最初に現れる文字chの次から文字列の最後までを抜き出す。|
|%[string, n]|先頭のn文字を抜き出す。|
|%[string, m:n]|m文字目からn文字目までを抜き出す。|
|%[string, #n]|n番目のトークンを返す。|
|%[string]|文字列の長さを返す。|

**数値を返す関数
**数値を返す関数 [#d5ccc9c8]

-exist(name)&br;
名前nameをもつオブジェクトが存在すればそのオブジェクトの型を番号で返す。
|戻値|意味|h
|      0| 	存在しない|
|      1| 	dataset|
|      2| 	worksheet|
|      3| 	graph window|
|      4| 	variable|
|      5| 	matrix|
|      6| 	macro|
|      7| 	tool|
|      9| 	notes window|
-その他、sin, cos, expなどの数学関数はほとんど使える。

**datasetに代入できる配列を返す関数
**datasetに代入できる配列を返す関数 [#h6e81673]

-data( v1, v2, inc )&br;
v1からv2までincステップの配列を作る。 incを省略するとステップは1になる。
-{v1, v2, ... , vn}&br;
配列を実際の値を使って作る。
-Fit(dataset)&br;
直前のフィッティングの結果を用いて、datasetをX値とした配列を作る。

*データセットを関数として使う。
*データセットを関数として使う。 [#y673df14]
dateset名に関数のように丸括弧をつけて、
 data1_A(x)
のようにすると、data1_Aに結び付いているXデータセットからxを探し、対応するdata1_Aのセルの値を返す。Xデータセットにxが見つからない場合は最も近い2つのセルから直線で内挿したものを返す。
*オブジェクトについて
*オブジェクトについて [#ccd9061f]
Originの内部はすべてオブジェクトによって構築されている。これらのオブジェクトを直接操作することによって、より細かな制御を行うことができる。&br;
オブジェクトの操作にはMethod(操作)、Set(値の設定)、Read(値の読み出し)があり、
Methodを実行する場合は
 objName.Method( param )
とする。ただしobjNameやMethodは実際のオブジェクト名やメソッド名に置き換わる。&br;
オブジェクトのプロパティーに値を設定する場合は
 objName.Property=value  (数値の場合)
 objName.Property$=string (文字列の場合)
とする。値の読み出しも同様である。
 value=objName.Property  (数値の場合)
 %K=objName.Property$    (文字列の場合)
Originで扱っているオブジェクトにはwindowオブジェクト、utilityオブジェクト、外部オブジェクトの3種類がある。
**windowオブジェクト
**windowオブジェクト [#g925cd92]
ワークシートやグラフなどの画面上のwindowを操作するオブジェクト。
winName!objName.propertyの形でアクセスする。winName!を省略すると現在アクティブなwindowについて操作が行われる。

|オブジェクト|役割|h
|layer[n]|[n]番目のレイヤーを操作する|
|page|グラフやワークシートのベースになっているWindowを操作する|
|wks|ワークシートを操作する|

layerオブジェクトはサブオブジェクトとして、[axis]オブジェクトを持ち、wksオブジェクトはサブオブジェクトとしてcol, export, importを持つ。

|layer.[axis]|役割|h
|layer.X|bottom X axisを操作する|
|layer.X2|top X axisを操作する|
|layer.Y|left Y axisを操作する|
|layer.Y2|right Y axisを操作する|

|サブオブジェクト|役割|h
|wks.col[n]|ワークシートの[n]番目のコラムを操作する|
|wks.export|ワークシートをファイルにエクスポートする際の設定|
|wks.import|ファイルからワークシートにインポートする際の設定|

さらにlayer.[axis]オブジェクトはサブオブジェクトとしてbreak, grid, labelを持つ。

**utilityオブジェクト
**utilityオブジェクト [#p2a670f0]
特定のwindowとは結び付かないOriginのプロパティーを操作する。

|オブジェクト|役割|h
|break|ダイアログボックスを操作する|
|copy|copyコマンドと関係している|
|doc|プロジェクト情報を取得する|
|draw|???|
|excel|excelマクロを実行する|
|fdlog|ファイルダイアログを操作する|
|getpts|getptsコマンドを操作する|
|ini|INIファイルを読み書きする|
|integ|integrateコマンドの結果を取得する|
|limit|limitコマンドの結果を取得する|
|lr|lrコマンド(線形回帰分析)の結果を取得する|
|macro|マクロのパラメータの数を取得する|
|menu|メニューを操作する|
|rt|real time data blockを扱う|
|run|スクリプトを実行する|
|sort|コラムやワークシートをソートする|
|sum|統計解析やコマンドの結果を取得する|
|system|OPTION.CNFに書かれているような設定を操作する。多くのサブオブジェクトを持つ。|
|type|スクリプトウインドウを操作する|

**外部オブジェクト
**外部オブジェクト [#tc86e3bb]
外部DLLに存在するオブジェクト

|オブジェクト|役割|h
|curve|データプロットに対して平滑化や微分などの演算を行う|
|fft|フーリエ変換を操作する|
|mat|行列ウインドウを操作する|
|nlsf|非線型最小二乗法を操作する|
|stat|統計解析を操作する|

*スクリプトの例
*スクリプトの例 [#tee140ff]
-[[モーメント解析(スペクトルの強度、重心、分散を求める):http://optphys.sci.hokudai.ac.jp/~sekika/labtalk/example/moments.ogs]]
-[[スペクトルのピークと幅を実測する。:http://optphys.sci.hokudai.ac.jp/~sekika/labtalk/example/getpw7.ogs]]
-[[スペクトルのピークと幅を実測する。:http://optphys.sci.hokudai.ac.jp/~sekika/labtalk/example/getpw9.ogs]]
-[[シフトプロット(複数のデータを適当な間隔で縦に並べて作図):http://optphys.sci.hokudai.ac.jp/~sekika/labtalk/example/shiftplot.ogs]]
-[[カスケードプロット(現在のプロットを上下にずらして再描画する。シフトプロットの改良版):http://optphys.sci.hokudai.ac.jp/~sekika/labtalk/example/cascade.ogs]]
-[[カスケードプロット(対数プロット版):http://optphys.sci.hokudai.ac.jp/~sekika/labtalk/example/logcascade.ogs]]
-[[規格化(現在のプロットを規格化して表示する):http://optphys.sci.hokudai.ac.jp/~sekika/labtalk/example/normalize.ogs]]
*付録 [#kf677a86]
**解析メニューの指数関数フィットでy0を強制的に0にする方法 [#fab6bfba]
Originの解析メニューはlabtalkスクリプトで実現されているので、これに適当な改造を加えることによって、動作を変えることができる。OriginフォルダにあるFIT.OGSは解析メニューのフィッティングの動作を規定している。このファイルを変更することでy0を0に固定することができる。
また、指数関数フィットのメニューでは最初の粗いフィットにおいてデータセット全体を使用しているため、初期パラメータが正しく推測されない。これらの点を改良したものが、[[FIT.OGS:http://optphys.sci.hokudai.ac.jp/~sekika/labtalk/example/FIT.OGS]]である。これをOriginフォルダにあるFIT.OGSと置き換えると上記の改良が適用される。

----
#comment


トップ   一覧 検索 最終更新   ヘルプ   最終更新のRSS