データ解析のためのIgorPro活用術
複数のwaveにおける様々な情報を取り出す
このIgorPro (for Windows) のProcedureは複数の
waveにかんする情報(例えばあるpixelのデータ、pixelの指定された領域のデータの
平均値や最大値など)を取りだし、ファイルに出力させる作業を行います。系統的に測定した
データ処理に役立つものと思います。
Programの内容
WaveDep_point: 処理したいwaves をまず1つのグラフ上に全て表示させ、
カーソルA(○の方)でpoint(正確にはxの値)を指定し、全てのwaveのこのxでの値を読みとって
別のwaveに出力させる。
WaveDep_range:2つのカーソルで指定した領域内で
統計処理をし、平均値、最大値、最大値のx軸の位置を
別のwaveに出力させる
使用方法
- 関連するwaveをグラフに出力させ、activewindowにする。
- GraphのReorderTracesを実行し、グラフの描画の順序を出力させたい順序に並べ替える
- マクロを実行する。出力ファイルに同名のものがある場合はそのまま上書きされますので注意してください
カスタマイズ、その他
- 同時にwavelistという処理したwaveの名前のlistも出力します。
- WaveDep_rangeにおいて、Keyとなるコマンドはwaveの統計処理を行う
WaveStatsを用いていることです。ただし、単に平均や積分値をとりたいだけであれば、mean(waveName,x1,x2)やarea(waveName,x1,x2 )といった関数がIgorProには用意されています。
- 最小値などを表示させたい場合は最後の方の"StatFunc= V_min"のように変更してください
- 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
一つ上の項目に戻る