[Previous] [Up] [Next]
8. 実際的な使用例
この部分からは、電気生理の実験データの解析の例です。専門外の方にはなじみがないでしょうが、波形データの扱い方と受け取ってください。
題材として人工的なデータ(fakeEPSC.dat)を作成しました。30 ms間隔で刺激した場合のシナプス電流の測定を、10回繰り返した、と想定しています。
目的は、1番目の応答と2番目の応答の比率をそれぞれのトレースについて求め、その平均等を調べるというものです。
データは、16bit符号付き整数(2バイト)で、計測値に換算するには、0.0625をかける必要があります。また測定値は、0.05 ms間隔でとられており、一つのトレースには、2000のデータポイントが含まれています。データファイルには他の情報は含まれていないので、ファイルの大きさは、2 x 10 x 2000 = 40,000バイトのはずです。
-
Igor Proを起動
-
データファイルの読み込み
<Data> -> <Load Waves> -> <Load General Binary File...>
Input File
Data Type: 16 bit signed integer
Byte to skip at start of file: 0
Number of arrays in the file: 10
Number of points in array: auto
Byte order: Low byte first
Points in file are interleaved: no check
Path: Fileをクリックするとディアログが開くので、ダウンロードしておいたfakeEPSC.datを選択。
Output Waves
Data Type: Double float
Base name: w
Overwrite existing waves: check
Scaling: check
Scaling Offset: 0
Scaling multiplier: 0.0625
これでDo itすると、データが読み込まれ、w0からw9までのwavesが作成されます。
実際のコマンドとしては、
GBLoadWave/O/B/N=w/T={16,4}/Y={0, 0.0625}/W=10 "(ここはファイルパス):fakeEPSC.dat"
が使われています。
- データが読み込まれているかチェックします。
<Windows> -> <New Graph...>
Y Wavesの欄で、w0からw9までを選択。
X Wavesの欄は、_calculated_を選択。
そしてDo itすると、グラフが現れます。
使用されたコマンドは、
Display w0,w1,w2,w3,w4,w5,w6,w7,w8,w9
です。

- 波形のチェック。
波形はそれらしい形をしています。amplitude(Y軸の大きさ)もよいとしましょう。しかしX軸のスケールがなされていないのがわかります。
- X軸のスケール
<Data> -> <Change Wave Scaling...>
Set X Property: check
Unit Type: Numeric
Unit: ms
Start: 0
Delta: 0.05
SetScale Mode: Start and Delta
Wavesの欄でw0からw9までを選ぶ。
そしてDo Itする。
使用されたコマンドは、
SetScale/P x 0,0.05,"ms", w0,w1,w2,w3,w4,w5,w6,w7,w8,w9
先ほど作成したグラフのX軸の目盛が0 から100 msまでに変わっているはずです。
- 解析用にwaveのコピーを作成します。コピーを作成する理由としては、元のデータを保存するという意味と、異なるwaveを同じ名前のwaveで処理できるという利点があります。
duplicate/o/d w0, wt
そしてこのトレースを表示します。
display wt
- Baselineの値を求める。
Baselineの値として、X軸の0から10までの範囲のデータの平均を使用することにします。
<Analysis> -> <Wave Stats>
Wave: wt
X Range: 0と10
これでDo It。
使用されているコマンドは、
WaveStats/R=(0,10) wt
です。
いろいろ数値が表示されますが、平均値はV_avgです。
この値を変数baseとして保存しておきます。
variable base = V_arg
この部分は、
variable base
base = V_avg
と2行に分けて書くの同じです。(変数は先ず宣言しておくことが必要です。数値の場合はvariable、文字列の場合はstringで宣言します。)
- 次に刺激応答のピーク値を求めます。1回目の刺激のピークは10と20の間にあります。先ほどと同様にWaveStatsを使用し、
WaveStats/R=(10,20) wt
で、最小値はV_minです。応答の大きさは、V_min - baseで、この値をamp1として保存します。
variable amp1
amp1 = V_min - base
- 同様に2回めの応答の大きさを求めます。
WaveStats/R=(40,50) wt
variable amp2
amp2 = V_min - base
- 従って、1回目と2回目の応答の比PPRは、
variable PPR
PPR = amp2/amp1
データの確認には、
print amp1, amp2, PPR
- ここまでで、一つのトレースの応答比が求められました。あとはこれを繰り返せばよい訳です。これまでに解析部分で使用したコマンドを並べてみると、
WaveStats/R=(0,10) wt
base = V_avg
WaveStats/R=(10,20) wt
amp1 = V_min - base
WaveStats/R=(40,50) wt
amp2 = V_min - base
PPR = amp2/amp1
print amp1, amp2, PPR
となります。
- これをひとまとめで使用できるようにmacroを作成します。
<Windows> -> <Procedure Window>
を開いて、次の10行を書き入れる。
macro pprCalculate()
WaveStats/R=(0,10) wt
base = V_avg
WaveStats/R=(10,20) wt
amp1 = V_min - base
WaveStats/R=(40,50) wt
amp2 = V_min - base
PPR = amp2/amp1
print amp1, amp2, PPR
end
書き終わったら、下のcompileボタンをクリック。問題がなければ、ボタンが消えるはずです。なお、行の始めを字下げしているのは、見易くするためです。
- macroを試す。
<Macro> -> <pprCalculate>
もしくはコマンドから、pprCalculate()と入力し、Enter。
- 次のトレースw1の解析をするには、
duplicate/o/d w1, wt
pprCalculate()
- あとはこれを繰り返して行けばよいわけですが、1000本のトレースを解析するのは大変です。楽をするための工夫をします。まずその手始めとして、macroからfunctionに書き換えます。
function pprCalculate()
wave w = $("wt")
variable base, amp1, amp2, PPR
WaveStats/Q/R=(0,10) w
base = V_avg
WaveStats/Q/R=(10,20) w
amp1 = V_min - base
WaveStats/Q/R=(40,50) w
amp2 = V_min - base
PPR = amp2/amp1
print amp1, amp2, PPR
end
少し説明を付け加えると、functionaの中では、これまで使用してきたwaveとvariableをそのまま使用することが出来ません。functionの中では、function固有のvariable、waveを宣言しなくてはなりません。そのためbaseやamp1などの変数を宣言しています。またwave w = $("wt")は、wtという名前のwaveをこのfunctionの中では、wと呼びますという宣言です。
WaveStatsのQオプションはQuietオプションで、結果を表示しないようにします。
入力したらCompileボタンをクリック。問題がなければボタンは消えるはずです。
そしてコマンドからpprCalculate()と入力してEnter
- functionの引数にトレースの番号nを渡し、n番目のトレースをコピーして解析する部分を加えます。
function pprCalculate(n)
variable n
string s
wave w = $("wt")
variable base, amp1, amp2, PPR
s = "duplicate/o/d w" + num2istr(n) + ",wt"
execute s
WaveStats/Q/R=(0,10) w
base = V_avg
WaveStats/Q/R=(10,20) w
amp1 = V_min - base
WaveStats/Q/R=(40,50) w
amp2 = V_min - base
PPR = amp2/amp1
print amp1, amp2, PPR
end
pprCalculate(0)、pprCalculate(3)などを試してみる。
説明が必要なのは、s = ....の部分です。duplicateはfunction内ではそのまま使用できません。しかしexecuteをしようすることにより、コマンド入力に相当することが出来ます。たとえば、w7をコピーしたい場合、duplicate/o/d w7, wtというコマンドが必要です。num2istr()は数値を文字に変換する関数で、num2istr(7)で文字"7"を作れますここでは、duplicate...の部分に"7"を加え、さらに", wt"を加えてコマンドの文字列を作成しています。
- 次のステップとしては、上で用いたnを0から9まで自動的に変化させればよいわけです。方法としてはpprCalculate自体を変える方法と、pprCalculateを他のfunctionから呼ぶ方法とがあります。ここでは後者の方法を試します。
新たなfunctionを作成します。(pprCalculate()の下に書き加える。)
function allCalc()
variable i
for(i=0;i<10;i+=1)
pprCalculate(i)
endfor
end
そしてallCalc()と入力してEnter.
- 折角、amp1, amp2, PPRの値がそれぞれのトレースに対して出てくるのですから、それらをwaveとして保存したいものです。
function pprCalculate(n)
variable n
string s
wave w = $("wt")
wave amp1 = $("vAmp1")
wave amp2 = $("vAmp2")
wave PPR = $("vPPR")
variable base
s = "duplicate/o/d w" + num2istr(n) + ", wt"
execute s
WaveStats/Q/R=(0,10) w
base = V_avg
WaveStats/Q/R=(10,20) w
amp1[n] = V_min - base
WaveStats/Q/R=(40,50) w
amp2[n] = V_min - base
PPR[n] = amp2[n]/amp1[n]
print n, amp1[n], amp2[n], PPR[n]
end
function allCalc()
variable i
make/o/d/n=10 vAmp1
make/o/d/n=10 vAmp2
make/o/d/n=10 vPPR
for(i=0;i<10;i+=1)
pprCalculate(i)
endfor
end
- 結果をグラフとして表示。
display vPPR
適当にグラフの表示方法を変更
- 練習に200本のトレースのデータfakeEPSC200を用意しました。例題と異なるところは、データの取り込みのarrayの数が10でなく200、function allCalcで、10のところを200に変更。

[Previous] [Up]