マクロを使って連番の名前を持った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が作成される。