あえん、igorのマクロでグラフを描く1

僕は既にigorを触って1ヶ月くらい経つが、初心者に説明するつもりで書こう。といっても、解説は主にコマンド操作についてする。

igorでは、データをwaveと呼ぶ。windows > New Table で新しいテーブルを作り、そこにデータをドラッグ&ドロップすればデータを持ち込める。windows > Nie Graphでグラフを描ける。グラフの描き方はちょっとややこしいので詳細は省く。

まず、簡単にigorの基本的なコマンド操作をまとめよう。暗黒通信団とかいう怪しげな団体のサイト(https://ankokudan.org/d/dl/pdf/pdf-igor.pdf)から情報を引っ張ってきたので信用できない。全部試しながら掲載しよう。

<<windowの管理>>

control  +  E
→ 最前面にあるwindowが最背面に飛ぶ。現在カーソルを合わせているwindowではなく最前面にあるwindowである。


shift  +  control  +  E
→ その逆。最背面にあるwindowが最前面に出てくる。


control  +  J
→ コマンドwindowに飛ぶ。


control  +  I
→ カーサー(カーソル)が出てくる。

全部、確かに動く。

<<文字>>

¥
→エスケープ文字。文字に特別な意味を持たせたいときに、その文字の前に置く文字をエスケープ文字という

¥r
→改行。テキストファイル(mac)だと\n、テキストファイル(win)だと¥n、texだと\\。統一して欲しいわね。

¥s (wavename)
→線の凡例

¥Znumber
→文字サイズ

さっぱり分からん。どこに入力したら動くんや? 少なくともグラフのラベルでは機能しなかった。もちろん、コマンドwindowに入力しても機能しない。

<<パス>>

NewPath dataFolder
→ なんか画面が開く。ここからフォルダーを選んで進めると、そこへのパスがdataFolderっていう名前のパスになる

LoadWave/G/M/D/A=wave/P=dataFolder "data.txt"
→さっき名前をつけたフォルダにある、"data.txt"という名前のファイルを読み込む

ちゃんと動かせるようになるまで結構手こずった。igorはファイル名とそのパスを分けて指定しないといけないらしい。NewPath dataFolderをコマンドwindowに入力すると画面が開くので、そこから色々と指定する。LoadWave/G/M/D/A=wave/P=dataFolder "data.txt"とコマンドwindowに入力するとファイルを読み込める。dataFolder というパスにある、"data.txt"というファイルを読み込むのである。

あと、igorは階層の区切りを"/"ではなく"¥¥"で指定するが、NewPath dataFolderを使った後にdataFolderに格納されているパスは
"User/HogeyamaHogeta/Desktop/TitaniumOxide/DSC"というパスなら
"C:Users:HogeyamaHogeta:Desktop:Titanium Oxide:DSC:"となる。
初めにあるCとか最後の:とかは知らない。なんで"/"が":"になるのかも知らない。完全にキーボード操作で完結させるには、この辺りも知っておかなければいけなそうである。まあ今はいいだろう。

/G/M/D/A=wave/P=dataFolder
という部分は、なんか色々あって複雑である。"/G"とか"/M"とか、"/"から次の"/"までが1つの意味のまとまりを持つ命令である。何かの頭文字かも、とか考えない方がいい。マニュアルを見たらAから順番に乗っている。多分Aから単純に割り振っただけだ。安直な…

"/P=dataFolder" : 読み込みたいデータがあるパスである。さっき、Newpass dataFolderでdataFolderというパスを作成した。そこにあるデータを読み込む。

"/N=wave" : 読み込んだデータの名前をwaveにする。読み込んだデータが複数列にまたがる場合は、wave0、wave1、…のように、左から順に番号が振られる。既にwave0があっても上書きしてしまう。上書きせずにwave2とかから番号を振り始めたかったら、"/N"ではなく"/A"とすれば良い。
"/D" : 読み込むファイルがtxtデータであることを示している。
"/J" : 読み込むファイルがCSVファイルであることを示している。

"/E" : 読み込んだデータをtableで開ける。"/E=1"と入力すれば新しいテーブルに開けるし、"/E=2"なら既にあるテーブルに付け足される。

"/M" : 読み込んだデータを行列にしてくれる。正直、これを付けなかったらwaveの名前がwave0、wave1、…になるが、付けたらwave0[][0]、wave0[][1]、…になる、というくらいの違いしか今の所見つからない。ただ、上記で"/N"ではなく"/A"を使っていた場合、読み込みを繰り返すたびに
 wave0[][0]、wave0[][1]、wave0[][2]、…
 wave1[][0]、wave1[][1]、wave1[][2]、…
 wave2[][0]、wave2[][1]、wave2[][2]、…
となっていて、読み込んだデータの数と読み込んだ回数の両方を別々に管理できている点では便利かもしれない。

"/NAME={name1, name2, name3,…}" : なんかwaveに名前を付けられるっぽいがエラーがでてうまくいかない。

<<グラフを描く>>

Display wave1 vs wave2
→ wave1を縦軸に、wave2を横軸にしたグラフを描く。

AppendToGraph wave2 vs wave0 
→ 既にあるグラフに別のグラフを付け足す

Display theta1,theta2 vs theta0 
→ 二つのグラフを一気に描く

Display /L=LEFTAXIS wave1 vs wave0
AppendToGraph /R=RIGHTAXIS wave2 vs wave0 
→ wave1 とwave0のグラフを左側を軸にして描き、wave2 とwave0のグラフを右側を軸にして描く。

これでグラフを描けるようになった。マクロを使う練習に入ろう

<<マクロでグラフを描いてみる>>

http://howtouseigor.blog.fc2.com/blog-entry-5.htmlこのサイトをお手本にする。

Control  +  M
→ マクロのwindowが開く。ここに色々と書き込んでいく。

Macro test1()
print "Hello macro!"
End

上記のように書いてcompileを押し。メニューのMacrosからtest1を選ぶと、コマンドウィンドウにHello macro!と表示される。

Macro test2()

Make/O/N=200 wave1
SetScale x 0, 2*PI, wave1
wave1 = sin(x)
display wave1

Endmacro

上記のように書いてcompileを押し、メニューのMacrosからtest2を選ぶとグラフwindowが出てきてsin(x)が0 < x < 2πの範囲で描かれる。
新しいwaveを作りたいときは、

Make/O/N=200 wave1
SetScale x 0, 2*PI, wave1
Make/O/N=200 wave2
SetScale x 0, 2*PI, wave2
wave1 = sin(x)
wave1 = cos(x)
wave1 *= 3
wave1 +=20
wave2 = x
wave2 *= wave1

などのように書ける。

<<ファイルを読み込むマクロ>>


修正20221027
この章で使われているIndexFileという関数は、正しくはIndexedFileです。直して動作させてください。

IndexedFile(pathNameHoge, indexHoge, filetypeHoge)という関数がある。3つの引数を取る。1つ目はパスの名前、2つ目はindexの番号、3つ目はファイルの種類である。例えば、

Macro test3()
NewPath/O PN_HogeHoge
String FN_HogeHoge
FN_HogeHoge = IndexFile(PN_HogeHoge, 0, ".txt")
print(FN_HogeHoge)
End

もしくは

Macro test4()
NewPath/O PN_HogeHoge
print(IndexFile(PN_HogeHoge, 0, ".txt"))
End

と書けば、PN_HogeHogeというパス(場所)にある0番目のテキストファイルのファイル名を文字列として取得して表示する。
2つ目の引数、indexHogeを-1にすると、そのパスにある全てのテキストファイルの名前を";"で区切って返してくれる。indexHogeが大きすぎる(例えば、10個しかテキストファイルが入っていない時に20000と入力した場合など)時はPN _HogeHogeが返ってくる。
3つ目の引数は"txt"とした。csvファイルを読み込みたければ、"csv"とすれば良い。ここを"????"とすれば、そのパス(場所)にある全てのファイルのファイル名が返ってくる。

Macro test6()
NewPath PN
LoadWave/G/M/J/A=wx/P=PN "exampledata.csv"
Display wx0[][1] vs wx0[][2]
End

こう書くと、PNというパス(実行するときにPNを選ぶ)にあるexampledata.csvというファイルを読み込むことができる。/Mと書いたので読み込むウェーブは行列である。






この記事が気に入ったらサポートをしてみませんか?