Sun, July 18, 2004
Igor Pro lecture No. 10
ドル記号を使ったwave 制御 (重要)
string/G NameOfMyWave
という文字列があって、
NameOfMyWave="abc"
であるとする。ここで、abcという名のwaveを新たに作成したい場合どうしたらいいだろうか?
abcという文字を使用してプログラムを記述できるのなら、答えは簡単で、
Make/O/D abc
である。
しかし、NameOfMyWaveの文字列の中身をプログラムに組み込みたい場合、
Make/O/D NameOfMyWaveでは駄目だ。このままでは、abcではなく、NameOfMyWaveというwaveが作成されてしまう。
ここで登場するのがドルマークだ。
string/G NameOfMyWave="abc"; Make/O/D $(NameOfMyWave)
とすれば文字列の中身であるabcというwaveが作成される。
プログラミングでは非常に重宝する。
特にファイル番号や、特定の条件、接頭語・接尾語をつけてwaveを区別したい時に威力を発揮する。
■以下のようなプログラムで、ドルマークに慣れ親しんでみよう。
Macro dollarOperation(NameOfWave, NumberOfWave)
string NameOfWave="DefaultName"
variable NumberOfWave=128
Make/O/D/N=(NumberOfWave) $(NameOfWave)
$(NameOfWave)=exp(-((p-NumberOfWave/2)/(NumberOfWave/10))^2
DoWindow/K TestGraph
Display/K=0 $(NameOfWave)
DoWindow/C/T TestGraph,"TestGraph"
End
(1)このマクロは、文字列 NameOfWave と変数 NumberOfWave の関数となっており、Igorではマクロを実行するとユーザーにこれらの内容と値を尋ねてくるようになっている。もちろん、文字列にはダブルクォーテーションが必要だ。
(2)Makeは、wave作成でおなじみの命令だが、/N=(NumberOfWave) によって、変数NumberOfWaveの長さのwaveを作成できる。ここで ( ) をお忘れなく。また、ここで登場した$(NameOfWave)が、waveの名前を指定している。ユーザーがマクロ起動時に、wave名を入力しているので、それを文字列 NameOfWave に格納した。NameOfWave中に格納されている文字をwave名として、wave をmakeするのだ。
(3)せっかくwaveを作成したので、ガウス関数でテストデータを作成してみた。
(4)DoWindowは、ウインドウ操作に関する命令で、様々なオプションを持っている。/Kは、既存のウインドウがあれば消すという意味だ。後に、描いたグラフのタイトルは"TestGraph"にするため、TestGraph があれば重複して描かれないようにその都度消す事にした。
(5)Displayは、WindowsのNew Graphと同じグラフを描く命令だ。通常 Display ywave vs xwave のように使う。ここでは、y軸の値のみプロットして、x軸は0, 1, 2, ...と単純にデータ番号に対してプロットした。ちなみに/K=1というオプションを付けると、ウインドウの左上のボタンを1度クリックすると確認無しにグラフが消えるようになる。
(6)デフォルトでは、ウインドウの名前はGraph0となる。このままではよいが、通常プログラミングした場合に、ウインドウの名前が決まっていないと不便が多いし、すでにGraph0が存在する場合にGraph1と変更され、目的のウインドウを見失う可能性もあるため、DoWindow/C/T によって固有の名前に変えておいた方がよい事もある。ここでは「グラフ名(ID), /C」と「グラフのタイトルバーに表示されるグラフ名(任意の名前), /T」の両方をTestGraphに変えた。
グラフのデータ上をクリックすると、自分の入力した名前のwaveが作成されているのが理解できよう。
posted at July 18, 2004 05:25 PM
« Igor Pro lecture No. 9 | ホームに戻る | Igor Pro lecture No. 11 »
さんのサイン・インを確認しました。 (サイン・アウト)
(いままで、ここでコメントしたとがないときは、コメントを表示する前にこのウェブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)