データ解析のためのIgorPro活用術

複数のwaveにおける様々な情報を取り出す

このIgorPro (for Windows) のProcedureは複数の waveにかんする情報(例えばあるpixelのデータ、pixelの指定された領域のデータの 平均値や最大値など)を取りだし、ファイルに出力させる作業を行います。系統的に測定した データ処理に役立つものと思います。

Programの内容

使用方法

  1. 関連するwaveをグラフに出力させ、activewindowにする。
  2. GraphのReorderTracesを実行し、グラフの描画の順序を出力させたい順序に並べ替える
  3. マクロを実行する。出力ファイルに同名のものがある場合はそのまま上書きされますので注意してください

カスタマイズ、その他

  1. 同時にwavelistという処理したwaveの名前のlistも出力します。
  2. WaveDep_rangeにおいて、Keyとなるコマンドはwaveの統計処理を行う WaveStatsを用いていることです。ただし、単に平均や積分値をとりたいだけであれば、mean(waveName,x1,x2)やarea(waveName,x1,x2 )といった関数がIgorProには用意されています。
  3. 最小値などを表示させたい場合は最後の方の"StatFunc= V_min"のように変更してください
  4. Cursorで読み込ませているのはxの値であり、pointではありません。xcsr pcsrおよび wave(x)wave[p]の違いに注意してカスタマイズしてください。
ここからProcedureです。
/////////////////////////////////////////////////
// This procedure is for systematical loading
// all files in one directry with two column data.
//    created by M. Nagai on May, 1996,
//    modified on Sep. 16, 2002 
/////////////////////////////////////////////////


/////////////////////////////////////////////////
// the value of each wave at special point 
//  You can change the initial strings; outvalue and outname.
/////////////////////////////////////////////////

Macro WaveDep_point(outvalue)
  String outvalue="Point", outname="Wave_Name"
  Prompt outvalue, "Enter the recorded wave name"
  Variable P=xcsr(A), gotwave,Num=0,datanum=0
  String wavenm
  silent 1
  PauseUpDate

//  if (CmpStr(CsrXWave(A),"") == 0)		
//    Abort ("Set A-Cursor on the top graph.")
//  endif

  do        // count the number of wave on the active graph
    wavenm = WaveName("",datanum, 1)
    gotwave = CmpStr(wavenm, "")
    datanum += 1
  while (gotwave)

  Make/N=(datanum-1)/O/T  $outname    // make wave of file name
  Make/N=(datanum-1)/D/O $outvalue    // make recorded wave

  do
    wavenm = WaveName("",Num, 1)
    gotwave = CmpStr(wavenm, "")
    if (gotwave==1)
      $outvalue[Num]=$wavenm(p)
      $outname[Num]=wavenm
    endif
    Num += 1
  while (gotwave)
  print "x=",pcsr(A),"(",xcsr(A),"Pixel )     Recorded wave = ",outvalue," (N=",datanum-1,")"
  DoUpDate
endmacro

/////////////////////////////////////////////////
//  Max value of each wave at the range 
//  Max location of each wave at the range
//  Intensity average of each wave at the range
//     You can change the initial strings; outvalue and CFunc
/////////////////////////////////////////////////


Macro WaveDep_range(outvalue,CFunc)
  String outvalue="Range"
  String CFunc="_Avg Int_"
  Prompt CFunc, "Select Function",popup "_Max Int_;_Max Loc_;_Avg Int_"
  Prompt outvalue, "Enter the recorded wave name"
  String wname="Wave_Name",xwname
  Variable Pst=xcsr(A),Pfi=xcsr(B),gotwave,Num=0,datanum=0
  Variable/D StatFunc
  String wavenm

  silent 1
  PauseUpDate

//      if (CmpStr(CsrXWave(A),"")* CmpStr(CsrXWave(B),"")== 0)		
//		Abort ("Set A- or B- Cursor on the top graph.")
//	endif

  do              //count the number of wave on the active graph
    wavenm = WaveName("",datanum, 1)
    gotwave = CmpStr(wavenm, "")
    datanum += 1
  while (gotwave)

  Make/N=(datanum-1)/O/T  $wname
  Make/N=(datanum-1)/D/O $outvalue 

  do
    wavenm = WaveName("",Num, 1)
    gotwave = CmpStr(wavenm, "")
    if (gotwave==1)
      WaveStats /Q/R = (Pst, Pfi) $wavenm
      if (CmpStr(CFunc, "_Max Int_") == 0) //Maximum 
        StatFunc= V_max
      endif
      if (CmpStr(CFunc, "_Max Loc_") == 0)//Maximum location
        xwname=XWaveName("",wavenm)
        if (CmpStr(xwname, "") == 0)
          StatFunc= V_maxloc 
        else
          StatFunc= $xwname[x2pnt($wavenm, V_maxloc )]
        endif
      endif
      if (CmpStr(CFunc, "_Avg Int_") == 0) //average 
        StatFunc= V_avg
      endif
		      
      $outvalue[Num]=StatFunc
    endif
    Num += 1
  while (gotwave)
  print "x=[",hcsr(A),",",hcsr(B),"]  ( [",xcsr(A),",",xcsr(B),"] Pixel )     Recorded wave = ",outvalue," (N=",datanum-1,")"

endmacro



ここまで
最終更新日: 2003.1.19
一つ上の項目に戻る