Igor Pro上でのプログラミング入門(一体どこから始めれば良いのか?)

Igor Proは単純なデータ処理、グラフ描画だけではなく、自分でスクリプトを書く事によってデータの入出力、様々な加工・統計処理、グラフ処理までを自動で行うことが可能である(実際Igor Proのメニューのコマンドもスクリプトで行われている)。

また、スクリプトを駆使すれば測定装置(USB, GP-IBを用いて)を制御可能で、Igor Proで測定装置の構築が可能となる。このことから、Igorに精通していれば、研究開発においてかなりデータ処理が楽になる事は間違いは無い。

一方、Igor ProはExcelなどのグラフ描画アプリと比べると敷居が高いことは事実で*、Igor Proの使用経験が無い学生が最初戸惑う事も多い。ということで、うちの研究室で用いているIgor Proの基本操作、簡単なスクリプト作成までを短時間でマスターするためのマニュアルを以下に公開しておく。
ーーー

基本操作

Igor Proのgetting startedに書かれている事柄を全て行う。(冊子でも良いし、Helpメニューから辿っても良い)
これで、waveの概念の理解、データの入力、グラフ作成、データ処理、fittingなど基本的作業をマスター出来る。

特にExcelなどとは異なり、グラフの細部までカスタマイズ可能で、仕上がりが美しくなることを実感して欲しい。
また、コマンドウィンドウ(Ctrl +J, command + Jで現れる)に現れるをチェック。例えばグラフのデザインに関しては個々に現れたコマンドをスクリプトに貼り付ければ、そのデザインを再現できる。

プログラミングの基礎

どのプログラミング言語(あるいは技術)でも当てはまると思うのだが、初心者が新しい言語を学ぶときは
1. “入手しうる最も簡単な入門書”に基づいて基本的な操作を理解
2. インターネットなどで”最も自分の目的に近い”ソースコードを入手し、動作確認の後、各コマンドの意味の理解
3. 1.2を繰り返す
4. その他のソースを当たる(2のソースコードで足りない部分を探すため)
5. 4のソースの解析
と繰り返していくといつの間にかある程度のことは出来るようになっている。

肝心の”最も簡単な入門書なのであるが、私の研究室では以下を最初に奨めている。
HelpにあるChapter IVのprogrammingを読めば良いのであるが、結構な分量があるので、以下を参照されたし。
これに沿って、作業していくことでwave間のデータの受け渡しなどの基本的なルールを習得できる。

また、コマンドの用法などは
で随時チェックしながら進めると、スムーズだろう。

さらに、 親切にもIgor Proのマクロ、functionについて書いてくれた個人ページが多数存在するので以下に紹介する。
http://www.nips.ac.jp/huinfo/documents/IGOR/igor01.html
また、私はGP-IB接続の測定機器をIgor Proで制御する際(Asylum AFMはその典型だが)、以下のsiteを参考にさせてもらった。

*ちなみにこんな事を書いているが、私はExcelでグラフを描いたことは人生で数回しかない。

夏休み

Labのクリーニングを終えて、大学による強制的な休暇(笑)に入りました。

最近はLabの研究の基礎的な部分をサポートする作業に明け暮れていたので、休み中、子供が寝ている時間にひたすら残務処理を進めるわけです。論文、メールの返信、その他の仕事の順番に少しずつ片付けています。こんな作業の中にも色々と、研究のアイデアなどとりとめも無く頭に浮かび、一人でニヤニヤしているわけですが、これも研究者人生の醍醐味と思い、楽しんでおります。

昨日は千葉の妻の実家に家族4人で、車で行ってきました。後部座席にチャイルドシート2つを載せて、真ん中に妻が座るフォーマットはかなりきつそうで・・・。まあ、あと2年くらいはこういう状態が続くのでしょう。

まだ3ヶ月になっていないにもかかわらず、周りに反応して笑顔を振りまいている次女は長時間のドライブでもぐずることなく、同じ姿勢で寝たり起きたり。一方、頑固者の2歳の長女はiPadでYouTubeで幼児番組を見たり、寝たりとしてくれていたので、スムーズに移動することが出来ました。(移動中の子供の世話が一番の心配事)

以下備忘録:

横浜ではガソリン147円/lが千葉北インター付近では140円。結構な差が有る。

 

Mac OS X Lion Recovery Disk Assistant

つい昨日まで研究室の学生とも話題になっていたMac OS X Lionのリカバリーディスクに関してであるが、ついに復旧のための物理メディアの作成方法が提供されました。

http://support.apple.com/kb/DL1433?viewlocale=ja_JP

何が問題かというと、如何に現在のシステムが壊れてしまってリカバリー領域から復旧出来るとしても、そのドライブが物理的に故障してしまったら、全く手が出ないと言うこと。つまり手元にTime Machineのバックアップが残っていて、マシンのメインドライブを交換したとしても、リカバリーのためのシステムが無い、という点で不安であったユーザは多いと思う。これでこの問題は解決。

1GBの容量のUSBメモリ、SDカードがあれば良いとのことなので、少し古いデジカメのメディアの再利用方法として最適だと思う。早速私も古いUSBメモリをこいつに当てることにした。

そこで疑問なのだが、このリカバリーメディアを使用すれば無制限にLionをインストールできてしまうのでしょうか?それともApple IDなどでLionのライセンスの有無を確認しているのでしょうか?興味がある。明日研究室のMacで試してみることにする(笑)。

追記: Lionインストール時にディスクイメージを取り出す技があったので、私もそれでディスクイメージをいざというときのために保存しておいたのですが、これを基にSDカードをリカバリーメディアにしてみたのだが、あるところから進まなかったので、実はハードウェアのクラッシュを今日まで恐れていました・・・。

About Lion Recovery Disk Assistant

Built right into OS X Lion, Lion Recovery lets you repair disks or reinstall OS X Lion without the need for a physical disc.

The Lion Recovery Disk Assistant lets you create Lion Recovery on an external drive that has all of the same capabilities as the built-in Lion Recovery: reinstall Lion, repair the disk using Disk Utility, restore from a Time Machine backup, or browse the web with Safari.

Note: In order to create an external Lion Recovery using the Lion Recovery Assistant, the Mac must have an existing Recovery HD.

To create an external Lion Recovery, download the Lion Recovery Disk Assistant application. Insert an external drive, launch the Lion Recovery Disk Assistant,  select the drive where you would like to install, and follow the on screen instructions.

When the Lion Recovery Disk Assistant completes, the new partition will not be visible in the Finder or Disk Utility. To access Lion Recovery, reboot the computer while holding the Option key. Select Recovery HD from the Startup Manager.

 

雑記

今週末はShadeを使って3D CG作成の練習。これができると申請書、プレゼンの図が格段ときれいになる。

過去に所属していた研究所ではきれいで見栄えが良い画像を作る専門の方がいたのだが、大学の研究室では基本的にメンバーで何もかもやらなければいけない。しかし完全に”町工場”となっている我が研究室にはその方が合っている。

また、今週末は長女が高熱を出しました。保育園で様々な病原菌に曝されているにもかかわらず、熱を出すのは4ヶ月ぶり。丈夫な方だと思います。

スペクトル描画スクリプト

先程のスクリプトにグラフの描画機能を加えたもの

スペース、tab, commaなどで区切られた2つのデータファイルを基にスペクトル、差スペクトルの描画を行います。

 

#pragma rtGlobals=1		// Use modern global access method.
// simple macros for unit conversion 1st Aug 2011 by T.Hayashi
// A Macro for Data analysis implemented on 1st Aug 2011 by T. Hayashi

Menu  "Raman"
	Submenu "Calc"
			"WL2WN"
			"WN2WL"
	end
	Submenu "Analysis"
			"Draw"
			"Add"
			"Dif"
			"BGsub"
	end
End

function  WL2WN()
	variable laser=488,wl=500
	Prompt laser, "Laser(nm)"
	Prompt wl, "wavelength(nm)"
	DoPrompt "Wave length to Wave number",laser ,wl
	Print  wl, "nm  corresponds to Raman shift of",(1e7/laser)-(1e7/wl)," cm-1","(LASER:", laser,"nm)"
End

function  WN2WL()
	variable laser=488,wn=1400
	Prompt laser, "Laser(nm)"
	Prompt wn, "wavenumber(cm-1)"
	DoPrompt "Wave length to  Wave number",laser ,wn
	Print " Raman shift of",wn,"cm-1 appears at",1/((1e7/laser)-wn)*1e7," nm","(LASER:", laser,"nm)"
End

Function Draw()
	LoadWave/g/n/a=data
	spec1()
// Use "spec1" as a test script
end

Function Add()
	LoadWave/g/n/a=data
	spec2()
// Use "spec2" as a test script to append new data to the existing grapha
end

Function Dif()
	LoadWave/g/n/a=data, "signal + BG"
	LoadWave/g/n/a=bg, "BG"
	spec3()
End

Function BGsub()
	LoadWave/g/n/a=data, "signal + BG"
	LoadWave/g/n/a=bg, "BG"
	spec4()
End

//
// spec1 draws an initial graph
Function spec1()
	string  name
	variable laser=488
	Prompt name, "Data name"
	Prompt laser, "Excitation Laser"
	DoPrompt "Enter the data name",name,laser
//
	string int="_int",cm="_cm"
	Duplicate data0,wn_temp; duplicate data1,int_temp
	wn_temp=(1e7/laser)-(1e7/wn_temp)
	Duplicate wn_temp,$(name+cm); duplicate int_temp,$(name+int)
	killwaves data0,data1,wn_temp,int_temp
	AppendToTable  $(name+int),$(name+cm)
//Draw Graph
	display $(name+int) vs $(name+cm)
	Label bottom "Wavenumber (cm-1)"
	Label left "Intensity (total counts)"
	Legend/C/N=text0/F=0/A=MC
	ModifyGraph width=400,height=300
End

Function spec2()
//
	string  name
	variable laser=488
	Prompt name, "Data name"
	Prompt laser, "Excitation Laser"
	DoPrompt "Enter the data name",name,laser
//
	string int="_int",cm="_cm"
	Duplicate data0,wn_temp; duplicate data1,int_temp
	wn_temp=(1e7/laser)-(1e7/wn_temp)
	Duplicate wn_temp,$(name+cm); duplicate int_temp,$(name+int)
	killwaves data0,data1,wn_temp,int_temp
	AppendToTable  $(name+int),$(name+cm)
	AppendToGraph $(name+int) vs $(name+cm)
	Legend/C/N=text0/F=0/A=MC
End

Function spec3()
//
	string  name
	variable laser=488
	Prompt name, "Data name"
	Prompt laser, "Excitation Laser"
	DoPrompt "Enter the data name",name,laser
//
	string int="_int",cm="_cm"
	Duplicate data0,wn_temp; duplicate data1,int_temp
	Duplicate bg0,wnbg_temp; duplicate bg1,intbg_temp
	wn_temp=(1e7/laser)-(1e7/wn_temp)
	wnbg_temp=(1e7/laser)-(1e7/wnbg_temp)
	int_temp=int_temp-intbg_temp
	Duplicate wn_temp,$(name+cm); duplicate int_temp,$(name+int)
	killwaves data0,data1,bg0,bg1,wn_temp,int_temp,wnbg_temp,intbg_temp
//
	display $(name+int) vs $(name+cm)
	Label bottom "Wavenumber (cm-1)"
	Label left "difference in spectra (counts)]"
	Legend/C/N=text0/F=0/A=MC
	ModifyGraph width=400,height=300
End

Function spec4()
//
	string  name
	variable laser=488
	Prompt name, "Data name"
	Prompt laser, "Excitation Laser"
	DoPrompt "Enter the data name",name,laser
//
	string int="_int",cm="_cm"
	Duplicate data0,wn_temp; duplicate data1,int_temp
	Duplicate bg0,wnbg_temp; duplicate bg1,intbg_temp
	wn_temp=(1e7/laser)-(1e7/wn_temp)
	wnbg_temp=(1e7/laser)-(1e7/wnbg_temp)
	int_temp=int_temp-intbg_temp
	Duplicate wn_temp,$(name+cm); duplicate int_temp,$(name+int)
	killwaves data0,data1,bg0,bg1,wn_temp,int_temp,wnbg_temp,intbg_temp
//
	display $(name+int) vs $(name+cm)
	Label bottom "Wavenumber (cm-1)"
	Label left "Intensity (BG subtracted ) counts"
	Legend/C/N=text0/F=0/A=MC
	ModifyGraph width=400,height=300
End

wave numberをwave lengthに変換するプログラム

Igor Proで動作する波長(wave length)と波数を相互に変換する単純なマクロです。

Raman shiftをnm(またはその逆)に変換するために作りました。

プロシージャファイルにコピーしてコンパイルして使ってください。

#pragma rtGlobals=1		// Use modern global access method.
// simple macros for unit conversion 1st Aug 2011 by T.Hayashi

Menu  "Raman"
             Submenu "Calc"
                                     "WL2WN"
                                     "WN2WL"
             end
End

function  WL2WN()
	variable laser=488,wl=500
	Prompt laser, "Laser(nm)"
	Prompt wl, "wavelength(nm)"
	DoPrompt "Wave length to Wave number",laser ,wl
	Print  wl, "nm  corresponds to Raman shift of",(1e7/laser)-(1e7/wl)," cm-1","(LASER:", laser,"nm)"
End

function  WN2WL()
	variable laser=488,wn=1400
	Prompt laser, "Laser(nm)"
	Prompt wn, "wavenumber(cm-1)"
	DoPrompt "Wave length to  Wave number",laser ,wn
	Print " Raman shift of",wn,"cm-1 appears at",1/((1e7/laser)-wn)*1e7," nm","(LASER:", laser,"nm)"
End

 

雑記

なぜ日曜のこの時間に幼稚園バスが駐車場に戻ってくるのだろう?(笑)

今日は地震で目が覚めて、それに便乗して作業開始。

実験結果を楽に解析するためのIgor Proのスクリプトを書いている。

しかし、単純作業を自動化するための道具作りににかける情熱は自分でもあきれるくらいだ・・・。

9/10 聖光30期 同窓会

聖光30期の同窓会ですが、9/10 18:00~ 品川で開催される予定です。I本が幹事を引き受けてくれました。

詳細は私までFacebookかTwitterででも連絡下さい。

ちなみに6月中旬に行われるテニス部のお墓参り、1/2-4で行われている、同期の新年会も途切れることなく続いています。

新しい測定装置

昨日、新しい光学測定系を作っている学生から、一つ技術的な山を越えたとの連絡を受けた。

いやあ、私もうれしいです。誇りに思います。

スイッチ、ポンでデータがとれる様な実験とは違うレベルのことをしている、という自信を持ってもらいたいと思う。これが完成したら、それはそれで忙しくなりそうですな。でもそれが楽しみだ。常に本丸を攻めよう。

ついに地デジに移行

昨日、重い腰を上げついに地デジ対応テレビを購入。

今まではSamsung製の液晶テレビ(かつては父親のPCのディスプレイだった)をドイツから帰国して7年間使用していて、全く問題無く使えているのであるが、現在は駆け込み需要で価格が上昇していると聞いたが、我々が購入した機種はそうでもなかった。

家にストレージが余っているので、迷わすREGZAシリーズ(42Z2)となりました。

http://kakaku.com/item/K0000232993/

 

また、私は単発の音楽番組、テニスしか見ないだろうと言うことで、wavecastを使うことに決めた。2004-2007までSHARPのガリレオを利用していたが、これはLINUXベースのなかなかマニアックな一品で、Slingbox、Wavecastで一般的になってきていた遠隔操作を2003年の時点で実現していたな。やはりルータのポートマッピングなどは必要であったけれど。動作が遅く、レスポンスはかなり悪かった。

WavecastもUbuntuベースと言うことで、私はなぜかこういう手こずりそうなデバイスに惹かれる傾向にある(笑)。また懸案だったApple TVもようやく導入できます。

P.S. しかし今使っているHDDレコーダ(東芝 RD-H2)とテレビ(Samsung sync Master 150MP)はあと2週間でお役ご免になる事を考えると、少々もったいない気がする。