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 »

さんのサイン・インを確認しました。 (サイン・アウト)

(いままで、ここでコメントしたとがないときは、コメントを表示する前にこのウェブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)


情報を登録する?


Polymer Molecular Engineering Laboratory
Department of Polymer Science and Engineering,
Kyoto Institute of Technology,
Matsugasaki, Sakyo-ku, Kyoto 606-8585, JAPAN