[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バイトのはずです。

  1. Igor Proを起動
  2. データファイルの読み込み
    <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"
    が使われています。

  3. データが読み込まれているかチェックします。
    <Windows> -> <New Graph...>
    Y Wavesの欄で、w0からw9までを選択。
    X Wavesの欄は、_calculated_を選択。
    そしてDo itすると、グラフが現れます。
    使用されたコマンドは、
    Display w0,w1,w2,w3,w4,w5,w6,w7,w8,w9
    です。

  4. 波形のチェック。
    波形はそれらしい形をしています。amplitude(Y軸の大きさ)もよいとしましょう。しかしX軸のスケールがなされていないのがわかります。
  5. 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までに変わっているはずです。 
  6. 解析用にwaveのコピーを作成します。コピーを作成する理由としては、元のデータを保存するという意味と、異なるwaveを同じ名前のwaveで処理できるという利点があります。
    duplicate/o/d w0, wt
    そしてこのトレースを表示します。
    display wt
  7. 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で宣言します。)
  8. 次に刺激応答のピーク値を求めます。1回目の刺激のピークは10と20の間にあります。先ほどと同様にWaveStatsを使用し、
    WaveStats/R=(10,20) wt
    で、最小値はV_minです。応答の大きさは、V_min - baseで、この値をamp1として保存します。
    variable amp1
    amp1 = V_min - base
  9. 同様に2回めの応答の大きさを求めます。
    WaveStats/R=(40,50) wt
    variable amp2
    amp2 = V_min - base
  10. 従って、1回目と2回目の応答の比PPRは、
    variable PPR
    PPR = amp2/amp1
    データの確認には、
    print amp1, amp2, PPR
  11. ここまでで、一つのトレースの応答比が求められました。あとはこれを繰り返せばよい訳です。これまでに解析部分で使用したコマンドを並べてみると、
    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

    となります。
  12. これをひとまとめで使用できるように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ボタンをクリック。問題がなければ、ボタンが消えるはずです。なお、行の始めを字下げしているのは、見易くするためです。
  13. macroを試す。
    <Macro> -> <pprCalculate>
    もしくはコマンドから、pprCalculate()と入力し、Enter。
  14. 次のトレースw1の解析をするには、
    duplicate/o/d w1, wt
    pprCalculate()
  15. あとはこれを繰り返して行けばよいわけですが、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
  16. 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"を加えてコマンドの文字列を作成しています。


  17. 次のステップとしては、上で用いた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.
  18. 折角、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
  19. 結果をグラフとして表示。
    display vPPR
    適当にグラフの表示方法を変更
    Graph02
  20. 練習に200本のトレースのデータfakeEPSC200を用意しました。例題と異なるところは、データの取り込みのarrayの数が10でなく200、function allCalcで、10のところを200に変更。


    Graph03

[Previous] [Up]