データ解析のためのIgorPro活用術
複数のwaveをまとめて演算させる
このIgorPro (for Windows) のProcedureは複数の
waveをまとめて演算するものです。たとえば、発光の測定を行ったところ、
光を入れていないときのノイズが信号にある値でのっていたりするとします。
このような場合はそれぞれのwaveから
ある値を引いたり、あるいはwaveを引いたりする必要があります。
Programの内容
処理したいwaves をまず1つのグラフ上に全て表示させ、
それらのwaveの名前を全て読み込んで演算を行う。下に示したものは
hikizan(dark)がdarkという文字列の名前の wave を引く、
kakezan(vvv)がvvvという値をかけるというサンプルマクロです。
使用方法
- 関連するwaveをグラフに出力させ、active window にする。
 - プログラムをProcedure WIndowに貼り付け、演算を修正する。
 - マクロを実行する。
 
カスタマイズ、その他
- ここでKeyとなるコマンドはWaveName(windowNameStr, index, type)です。
これはGraphもしくはTableの中で用いられているwaveの名前を返す関数です。ここで
windowNameStr は指定したグラフもしくはTable(空欄ならactiveであるWindowのグラフ)の
名前の文字列、indexは何番目のwaveか、typeは1ならy軸、2ならx軸、3ならx,yのどちらか
という指標です。したがってこのマクロで用いられているWaveName("",Num, 1)はTopのグラフのy軸として
用いられているNum番目のwaveの名前の文字列を返すという設定になっています。
 - それぞれの演算を行うたびにマクロの中の関数を書き換えてください。
 
ここからProcedureです。
/////////////////////////////////////////////////
// This procedure is for systematical operation on
// all waves on displayed graph windows.
//    created by M. Nagai on May, 1996,
//    modified on Jan. 13, 2003 
/////////////////////////////////////////////////
macro hikizan(dark)
  String dark=""
  String hikizan
  Variable Num=0, gotwave
  Silent 1
  PauseUpDate
  if(cmpstr(dark, "")!=0)
  do
    hikizan= WaveName("",Num,1)
    gotwave=cmpstr(hikizan, "")
    if(gotwave!=0)
      $hikizan-= $dark   // change operation  
    endif
    Num+=1
  while (gotwave)
  endif
endmacro
macro kakezan(vvv)
  Variable/D vvv
  String waven
  Variable Num=0, gotwave
  Silent 1
  PauseUpDate
  do
    waven= WaveName("",Num,1)
    gotwave=cmpstr(hikizan, "")
    if(gotwave!=0)
      $waven= vvv*$waven   // change operation  
    endif
    Num+=1
  while (gotwave)
endmacro
ここまで
最終更新日: 2004.4.1 
一つ上の項目に戻る