更新日: 17/09/13

プログラミング

Igor Pro 7 では、プログラミング環境にも便利な変更と機能追加があります。

 

プロシージャウィンドウとコマンドライン

行番号表示

最初に目を引くのは、行番号の表示でしょう。バージョン7 では、プロシージャウィンドウにもコマンドウィンドウにも行番号が表示されます。ベーシックな機能ですが、長いプロシージャや履歴を行ったり来たりするときには、助かる機能です。

プロシージャウィンドウの行番号の表示


もし、行番号が表示されないときは、その他メニュー>その他の設定 を選択し、「その他の設定」ダイアログを開きます。左側のリストで「テキスト編集」を選択し、「エディタ操作」のタブの「行番号を表示」をオンにしてください。

行番号の表示設定は、その他の設定ダイアログのテキスト編集にあります。

 

ナビゲーションバーと検索バー

プロシージャウィンドウ上部に新たに配置されたナビゲーションバーでは、プロシージャ中で宣言されたオブジェクト (関数、マクロ、メニュー、定数や構造体など) のリストが表示されるようになりました。確認したいタイミングで宣言されている場所までジャンプすることが可能です。

プロシージャウィンドウのナビゲーションバー

 

また、プロシージャウィンドウ、ヘルプウィンドウ、ノートブックウィンドウで検索 (編集メニュー>検索) を実行すると、ナビゲーションバーの下に検索バーが表示されます。検索ボックスに文字列を入力するとリアルタムでヒットする部分がハイライトされます。

検索バーで検索したキーワードはリアルタイムでハイライト表示されます。

 

シンタックスカラー

シンタックスカラーは、コマンドウィンドウ (履歴エリアとコマンドラインの両方) にも適用されます。コマンドラインへの入力時にもリアルタイムでカラーが反映されますので、関数などの入力ミスを防ぐことができます。

コマンドウィンドウのシンタックスカラー表示は非常に便利

 

シンタックスカラーの詳細は、その他メニュー>その他の設定 を選択して、「その他の設定」ダイアログを開き、「テキスト編集」の「カラー」のタブで詳細に設定することもできます。

シンタックスカラーはカスタマイズできます。

 

その他の拡張

プログラミング環境に対して、これまで要望が多かった

の 2点はこのバージョンで対応されました。これまで 400文字が上限だった1行当たりの入力文字列は、1000文字まで拡大されています。また、円記号/バックスラッシュ (¥) が行継続文字として利用できるようになりました。次のユーザ関数では、出力する文字列を2行に分けて文字列変数str に割り当てています。

Function/T LineContinuation()
	String str = "The Alphabet: " ¥
	+ "ABCDE FGHIJ KLMNO PQRST UVWXY Z"
	
	Print str
	
End

 

コマンドラインで LineContinuation() と入力して実行すると、2行に分かれた割り当てが実行されて、1行のテキストとして値が返されます。

 

 

デバッガ

Igor Pro のデバッガでは、構造体や多次元ウェーブの表示が可能になりました。

デバッガで構造体を表示

デバッガで2次元マトリクスとイメージプロットを表示出来るようになりました。

 

 

操作関数と関数

多くの操作関数と関数が追加あるいは改良されています。そのリスト詳細は別記に譲りますが、ここでは新規に追加された操作関数・関数をいくつかピックアップしてご紹介します。

 

ListToTextWave操作関数

リストをテキストウェーブに変換する関数です。リストとは jack;fred;mike; のようにデータ要素 (jack, fred, mike) を区切り文字 (ここではセミコロン ; ) で結合した形式のデータで、ウェーブリスト、ウィンドウリストといった形で、Igor Pro 内部では登場します。Igor Pro にはたくさんのカラーテーブルが利用できますが、その一覧をテキストリストとして出力する CTabList() という関数を実行してみます。

Print CTabList()

Grays;Rainbow;YellowHot;BlueHot;BlueRedGreen;RedWhiteBlue;PlanetEarth;Terrain;Grays256;Rainbow256;YellowHot256;BlueHot256;BlueRedGreen256;RedWhiteBlue256;PlanetEarth256;Terrain256;Grays16;Rainbow16;
Red;Green;Blue;Cyan;Magenta;Yellow;Copper;Gold;CyanMagenta;RedWhiteGreen;BlueBlackRed;Geo;Geo32;LandAndSea;LandAndSea8;Relief;Relief19;PastelsMap;PastelsMap20;Bathymetry9;BlackBody;Spectrum;
SpectrumBlack;Cycles;Fiddle;Pastels;RainbowCycle;Rainbow4Cycles;BlueGreenOrange;BrownViolet;ColdWarm;Mocha;VioletOrangeYellow;SeaLandAndFire;GreenMagenta16;EOSOrangeBlue11;EOSSpectral11;dBZ14;dBZ21;
Web216;Mud;Classification;

カラーテーブルの名称がリストの形式で出力されます。これをウェーブとして扱うには、このリストを1つずつ区切り文字 (セミコロン ; ) ごとに取得するループを回す必要がありましたが、ListToTextWave 操作関数を使った関数を作成すると、簡単に取得することができます。

Function GetColorTableList()
	Wave/T tw = ListToTextWave(CTabList(), ";")
	Duplicate/O tw, ColorTableList
	Edit ColorTableList
End

なお、Dulicate操作関数で tw というウェーブを ColorTableListウェーブに複製しているのは、ListToTextWave操作関数がフリーウェーブを返す仕様になっているためです。

 

FindDuplicates操作関数

ウェーブの中に重複する値があるときに、それを取り除く方法あるいは重複する値だけを取り出すには、やはり、愚直にループを回す必要がありました。バージョン7 で追加された FindDuplicates操作関数を使うと、重複する値だけ取り出したり (/DNフラグ) 、重複する値を取り除いたり (/RNフラグ) など、簡単に実現できます。

Make/O/N=7 OrgWave={1,1,2,3,4,5,5}
FindDuplicates/DN=DuplicatedNumber OrgWave
FindDuplicates/RN=DuplicateRemoved OrgWave
Edit OrgWave, DuplicatedNumber, DuplicateRemoved

 

重複データだけを抽出した DuplicatedNumber ウェーブと、
重複を除いた DuplicateRemoved ウェーブ

上記の例は整数値だけを扱っていますが、小数の場合には、一致の許容度を指定すること (/TOLフラグ) も利用できます。

Make/O/N=6 OrgWave2={1.0, 1.1, 2.0, 2.2, 3.0, 4.0}
FindDuplicates/RN=DuplicateRemoved2/TOL=0.2 OrgWave2
Edit OrgWave2, DuplicateRemoved2

 

条件 (/TOL=0.2) を考慮した重複データの抽出結果

2つの値の差の絶対値と /TOL フラグで指定した許容度を比較して、差の絶対値が許容度以下であれば、その2つの値は重複していると判断されます。

上記の例では、1.0 と 1.1 の差の絶対値は 0.1 ですので 0.1 は重複とみなされ削除されていますが、2.0 と 2.2 の差の絶対値は 0.2 ですので、値は削除されていません。

数値ウェーブだけでなく、テキストウェーブの処理も可能ですし、重複する値を特定の値で置き換える処理も可能です。データの前処理に非常に便利な関数だと言えます。

 

JointHistogram操作関数

2次元のヒストグラムを描くには、これまで Bivariate Histogram 2 パッケージを別途ロードしてデータを処理する必要がありましたが、バージョン7 では、2次元、3次元、4次元のヒストグラムデータを作成する JointHistogram操作関数が追加されました。JointHistogram操作関数の出力は M_JointHistogram というウェーブになりますので、イメージプロットするだけで、2次元のヒストグラムを簡単に描くことが可能です。

Make/O/N=(1000) xwave=gnoise(10), ywave=gnoise(5)
JointHistogram/BINS={20,30} xwave,ywave
NewImage M_JointHistogram
ModifyImage M_JointHistogram ctab= {*,*,Rainbow,0}

2次元のヒストグラム

 

GetEnvironmentVariable関数

Igor Pro 7 では OS の環境変数の値も取得できるようになりました。ログインしているユーザ名や一時フォルダの名称を参照したい場合には便利です。

Print GetEnvironmentVariable("TEMP")
  C:\Users\support\AppData\Local\Temp
Print GetEnvironmentVariable("USERNAME")
  Support
Print GetEnvironmentVariable("WINDIR")
  C:\WINDOWS

環境変数を作成する SetEnvironmentVariable関数、削除する UnsetEnvironmentVariable関数も追加されています。

 

FindContour操作関数

最後に紹介するのは FindContour操作関数です。2次元マトリクスウェーブから、指定したレベルの等値線を描く Xウェーブ (デフォルトではW_XContour) と Yウェーブ (デフォルトではW_YContour) を抽出します。

次のコマンドを実行して、サンプルデータを作成して、イメージプロットで描画します。

Make/O/N=(100,200) dataWave = 2e4*gauss(x,35,20,y,80,30)+1e4*gauss(x,60,15,y,140,25)
NewImage dataWave
ModifyGraph width=200,height=200
ModifyImage dataWave ctab= {*,*,Rainbow,1}

 

 

Gauss分布を2つ重ね合わせたプロットが表示されます。このプロットでレベルが4 に等しい点を抽出するには、

FindContour dataWave,4

と実行します。W_YContour ウェーブと W_XContour ウェーブが保存されるので、これをプロットに追加します。

AppendToGraph/T W_YContour vs W_XContour

イメージプロットは通常の XYプロットとXとYが逆になりますので、AppendToGraph 操作関数も X と Y を入れ替える、/T フラグを指定しています。

レベルが4の等値線が追加されたプロット