Igorの解説とか

このブログはWavemetrics社が開発および販売しているIgorについて解説するブログです。

Wave参照の方法

今回はMacroやユーザー定義関数(Function)を作成する際に、非常に重要なWave参照の話です。

非常にわかりづらいですが、とても大切なので、まずは見様見真似でやってみましょう。

 

 

①:Macroで直接wave名を書く、非常に簡単な方法

②:MacroでStringと$でwaveを指定する方法

③:Function

 

の三パターンあります。

 

 

例えばwave0というwaveが存在する状況で

 

マクロで直接wave名を指定する場合

Display wave0

wave0+=1    (wave全体への四則演算)

wave0[1]=1   (wave各成分へ代入)

Duplicate/O wave0,wave1

Interpolate2/T=1/N=5000/Y=wave0_L xaxis, wave0

直接入力する場合は何も考えずに、wave名を書けば良い

  

MacroでStringを用いて指定する場合

String Refwavestr="wave0"

Display $Refwavestr

$Refwavestr+=1      (wave全体への四則演算)

$Refwavestr[1]=1     (wave各成分へ代入)

Duplicate/O $Refwavestr,wave1

 

String RefwaveIpstr=Refwavestr+"_L"   (Interpolate後のwave名)

String RefwaveXaxisstr="xaxis" (Interpolateをするx軸名)

Interpolate2/T=1/N=5000/Y=$RefwaveIpstr $RefwaveXaxisstr,$Refwavestr

Stringで指定する場合は、$+(waveのstring) とすれば良い

 

Functionの場合

String Refwavestr="wave0"

Wave Refwave=$Refwavestr

Display Refwave・・・△

Display $Refwavestr・・・◯

Refwave+=1   (wave全体への四則演算)・・・◯

$Refwavestr+=1・・・☓

Refwave[1]=1 (wave各成分へ代入)・・・◯

$Refwavestr[1]=1・・・☓

 

String Duplicate_targetstr="wave1"

Wave Duplicate_target=$Duplicate_targetstr

Duplicate Refwave,Duplicate_target・・・△

Duplicate Refwave,$Duplicate_targetstr・・・◯

 

 

String RefwaveIpstr=Refwavestr+"_L"   (Interpolate後のwave名)

Wave RefwaveIp=$RefwaveIpstr

String RefwaveXaxisstr="xaxis" (Interpolateをするx軸名)

Wave RefwaveXaxis=$RefwaveXaxisstr

 

 

Interpolate2/T=1/N=5000/Y=$RefwaveIpstr RefwaveXaxis,Refwave・・・△

 

Interpolate2/T=1/N=5000/Y=$RefwaveIpstr $RefwaveXaxisstr,Refwave・・・△

Interpolate2/T=1/N=5000/Y=$RefwaveIpstr $RefwaveXaxisstr,$Refwavestr・・・◯

 

 

Interpolate2/T=1/N=5000/Y=RefwaveIp RefwaveXaxis,Refwave・・・☓

(出力が"RefwaveIp"という名前のwaveになる)

基本的には数値代入の場合はWave=$StringでWaveを指定、他の場合は$Stringで指定する。ただし、おそらくYフラグで出力するときに$がない場合は、"Y="以下の名前のwaveを作成し、出力するようになっているので注意が必要。

マクロの組み方Part9(If-else文、比較演算子、論理演算)

今回はプログラミングでよく使うIf文について紹介します。

 

 

条件分岐の時に用いるのがIf文で 

If(条件)
  条件成立の場合に実行する内容
else
  条件不成立の場合に実行する内容
endif

の形で用います。

他のプログラミングで用いるelseifはマクロでは用いることが出来ません。(ユーザー定義関数では用いることができます。)

 

If文の例
Macro example_of_if(a,b,c,d)
  Variable a,b,c,d
  Prompt a,"Enter number freely"
  Prompt b,"Enter number freely"
  Prompt c,"Enter number freely"
  Prompt d,"Enter number freely"
  if(a==b && c==d)
    print "same!!"
  else
    print "Not same!!"
  endif
End
全ての数が同じなら"same!!"ひとつでも違えば"Not same!!"が出力される

 

以下に条件としてよく用いる演算子を載せておきます。

参考にしてください。 

 

比較演算子

a==b     :aとbが等しい
a!=b      :aとbが等しくない
a>b       :aよりbの方が小さい
a<b       :aよりbの方が大きい
a>=b     :aはb以下
a<=b     :aはb以上

論理演算子

a==b || c==d :a=b”または”c=d
a==b && c==d :a=b”かつ”c=d

 

 

目次 サイト目次 - Igorの解説とか

前 マクロの組み方part8(マクロの動作を早くする silent 1) - Igorの解説とか

次 マクロの組み方Part10(データのを連続でロード) - Igorの解説とか