があらんどう

伽藍洞です。

MENU

waveをマクロ上で連番作成して操作する@igor pro

マクロを使って連番の名前を持ったwaveを作って操作する方法について書く。
マクロ上で自動でwaveを作りたいときは時々あるが、少し癖があるように感じるのでメモ。



例としてwave0からwave9までの10個のwaveを作ることを考える。
手動で作ってもそこまで手はかからないかもしれないが、その後操作もすることも考えると意外と利用価値は高いと思う。
一次元waveの基本的な作り方はこちらの記事にまとめた。こちらを参照。
calciummm.hatenablog.com


do while文で繰り返し処理をして連番のwaveをつくることを考える。
そのためにはwave名の変数を定義した方が都合が良い。そこでマクロ上でwave名を扱うためにstring変数を定義する。
例えば以下

macro wavemake()
string wa//wave名用string変数の定義

wa = "wave0"    //""で囲むこと

make/D/N=10/O $wa      //$waとすること

とすればwave0という要素数10個の一次元waveが作られる。

ここで注意する必要があるのはwave0の部分はダブルクオテーションで囲む必要があること。また、makeのときにwaの前に$を書く必要があるということである。


これをdo while文の中で繰り返せばよいがwave0 wave1をどのようにstring変数のwaに代入するかが問題になる。ここでc言語などでも使うnum2str関数を使えばよい。これを使えばvariableで定義した変数などの数値変数をstring変数に変えられる。""で囲むことも必要なので全体としては
wa = "wave" + num2str(i)
と書くことのなる。

macro wavemake()
string wa    //wave名用string変数の定義
variable i =  0   //wave名用の変数の定義
variable num = 100   //waveの要素数用の変数

do
	wa = "wave" + num2str(i)
	make/D/N=(num)/O $wa
	
	i = i+1  //インクリメント

while(i<=9)

endmacro

igorのキャプチャ画像で示すと以下になる。

これを実行すればwave0からwave9までの要素数100の一次元waveが作成される。