解析用のプログラムは、stex の /home/ohba/gnuplot 以下にあります。 そこから、解析用プログラムを、自分の directory にコピーしてくれる プログラムが、その directory にある setup.sh プログラムです。まず、 コマンドラインから、setup.sh を実行してみましょう。
% /home/ohba/gnuplot/setup.sh (%はシェルのプロンプトを表す。入力する必要はない。) % rehashrehash は、解析用プログラムが自分の ~/bin/ directory (実行形式のファイ ルを置く directory ) にコピーされたことを、現在のシェルに覚えさせるコマ ンドです。シェルは立ち上がった時に、どのような実行形式のプログラムがあ るかを覚えるので、rehash を実行するのは、setup.sh を実行した時だけに 必要で、再度、ログインした場合には必要ありません。
それでは、スペクトルのデータがある directory に移動して、gnuplot を立ち 上げましょう。
% cd jikken_data_no_directory % gnuplot gnuplot>
gnupotには、作業効率を上げるための便利な機能がいくつか内蔵されています。 それらを知っていると、作業効率が随分と違うので、最初に説明します。
上カーソルキーで、前に入力したコマンドが呼び出せ、左右のカーソルで、 その行を編集して、再利用できます。これは、ほとんどの人が知っていると思い ます。一旦、gnuplot を終了して、再度、gnuplot を立ち上げてからでも、前の コマンドが呼び出せるのは、~/.gp_history というファイルに、記録されている からです。
plot するファイル名などに対して、TAB キーで補完ができます。また、cd コマンドに対しても、補完ができます。上で、データのある directory に移動 してから、gnuplot を立ち上げましょう、と書きましたが、gnuplot を立ち上げ てからでも、working directory を移動することができます。それを例にして、 補完機能を説明します。
gnuplot> pwd (現在居る directory を表示する Print Working Directory) /net/s1/home/ohba gnuplot> cd " (ダブルコートを入力してから、TAB を2回押す) Display all 177 possibilities? (y or n) gnuplot> cd "g (g を入力してから、TAB を1回押す) gnuplot> cd "gnuplot (gnuplot までが、自動的に補完される) (更に、TAB を2回押すと、候補が表示される) gnuplot/ gnuplot-old/ gnuplot-tmp/ gnuplot.tar gnuplot> cd "gnuplot/" gnuplot> pwd (directory が移動したことを確認する) /net/s1/home/ohba/gnuplotこのように、" の後で TAB キーを押すと、候補がひとつしかない場合は 最後まで(または、途中まで)補完、候補が複数ある場合には、1回の TAB では 何も起きませんが、再度、TABキーを押すと、その複数の候補を表示してくれま す。候補の数が非常に多い場合には、上の例にあるように、本当に表示するかを 確認してきます。plot するファイル名をうろ覚えの場合など、確実に候補を表示して、 自動的に補完してくれるので、是非、マスターしましょう。
X のマウスを使った「コピー&ペースト」(左ボタンを押しながら、領域を選ん で、ペーストしたい場所で、中ボタンクリック)でもできますが、マウスで正確 に領域を選ぶのと、ペースト先に正確にマウスを置くのに、結構ストレスがたま ります。gnuplot のラインエディティングでは、左右のカーソルキーで、確実に、 カーソルの位置を制御できますので、慣れると、こちらの方が便利です。 gnuplot では、Ctrl-k (コントロールキーを押しながら、kを押す) で、カーソ ルの位置以降がカットされ、Ctrl-y でペーストされます。
gnuplot> plot "< raw rf1500.txt" (前にプロットしたコマンドを呼び出し、最初のダブルコートの位置にカーソルを移動し、Ctrl-k を押す) gnuplot> plot (カーソルの位置以降が消える。ここで、Ctrl-y を押すと、ペーストされる) gnuplot> plot "< raw rf1500.txt" gnuplot> plot "< raw rf1500.txt","< raw rf1500.txt" (コンマを入力してから、再度、Ctrl-y を押す) gnuplot> plot "< raw rf1500.txt","< raw fp6300.txt" (ラインエディットで、ファイル名を書き換える)
! の後に、シェルのコマンドを実行させることができます。
gnuplot> !ls -l total 868 -rw-r--r-- 1 ohba wheel 2545 11 17 2005 README -rwxr-xr-x 1 ohba wheel 1394 10 6 2005 aniso_vs_temp -rwxr-xr-x 1 ohba wheel 1952 10 6 2005 anisotropy -rwxr-xr-x 1 ohba wheel 1332 12 7 10:10 area ...もちろん、別のターミナル窓を立ち上げて、そちらでやっても構いませんが...
保存されたスペクトルデータには、(gnuplot にとっては不要な) 実験条件等の ヘッダーが付属しています。そのヘッダーを取り除くのが、raw という プログラムです。
gnuplot> plot "< raw data1.txt"ダブルコート("")で囲まれた部分は、普通は、ファイル名そのものが入ります。 上のように、< で始まる場合は、それ以下のコマンドを実行した結果の標準 出力を、gnuplot のデータの入力として用いることを意味します。
実験条件や試料を変えた異なるスペクトルの変化を見るために、 複数のスペクトルを重ねてプロットするためには、"" を コンマ(,)で つなぎます、
gnuplot> plot "< raw data1.txt","< raw data2.txt","< raw data3.txt"何個でも、重ねることができます。
発光強度が異なるスペクトルの、形が同じかどうかを調べるためには、 normal というプログラムを通します。normal は、データのY座標中の 最大値を捜し、その値で、Yデータを割ったデータを出力します。最大値を捜す 範囲は、何も指定しないと全範囲、-s start_X -e end_X オプションを与える と、start_X と end_X の範囲で捜します。散乱が強く出ているスペクトルで、 散乱ではなく蛍光のピークで規格化したい場合には、-s -e オプションを付けま しょう。
gnuplot> plot "< normal data1.txt","< normal data2.txt" (全範囲の最大値で規格化します。) gnuplot> plot "< normal -s 500 -e 600 data1.txt","< normal -s 400 -e 600 data2.txt" (X座標が400〜600の範囲の最大値で規格化します。)なお、normal や (後に出てくる) area 等は、raw の機能(余分なヘッダーを 除く) は内蔵しているので、raw を通した後に、normal を通すというような 必要はありません。
強度や形が異なるスペクトルを比較するために、ピーク値で規格化するよりも、 全体の発光強度が同じであることを仮定して比較すると、有意義な場合がありま す。その場合には、 area というプログラムを通します。area は、スペクトルの面積(積分 強度)で、Yデータを割ったデータを出力します。面積を計算する範囲は、 何も指定しないと全範囲、-s start_X -e end_X オプションを与える と、start_X と end_X の範囲で計算します。散乱が強く出ているスペクトルで、 散乱を含まず、蛍光の部分だけの面積で規格化したい場合には、 -s -e オプションを付けましょう。
gnuplot> plot "< area data1.txt","< area data2.txt" (全範囲の面積で規格化します。) gnuplot> plot "< area -s 500 -e 600 data1.txt","< area -s 400 -e 600 data2.txt" (X座標が400〜600の範囲の面積で規格化します。)
その他にも、いくつかのプログラムが準備されています。 詳しくは、 README ファイル を見て下さい。 使い方は、プログラムの本体に簡単に書かれていますので、シェルのコマンドラ インから表示させてみましょう。
% less bin/baseline (%はシェルのプロンプトを表す。入力する必要はない。) #!/usr/local/bin/perl # 目的 # X Y 形式のデータから、ベースラインを除く # default では、Yの最小値を、各データから除く # -Y value で、value を除く # -1 X で、そのX座標に対応するY座標の値を除く # -1 X1 -2 X2 で、2点を通る直線を除く .... ( less から抜けるのは、q です。)また、-h オプションを付けると、使い方を表示してくれます(すべてではない)。
% spec_calc -h Usage: /home/ohba/bin/spec_calc |-a|-s|-m|-d| const [ file ] -a: add -s: subtract -m: multiply -d: divideここで、|-a|-s|-m|-d| の部分は、これらのどれかを選択する意味、[ file ] の部分は、file 名を与えれば、それについて処理することを表し、[ ] は省略 可能であることを表します。実は、上で説明した normal や area なども、 ファイル名は省略可能になっています。では、省略すればどうなるのでしょうか? ファイル名が省略された場合は、標準入力からの入力を待ちます。シェルのコマ ンドラインで実行すると、キーボードからの入力を待ち受ける状態になります。 何故その様にしてあるかは、次に説明する「パイプ」を理解すると、わかると 思います。
多くの解析用プログラムは、ファイル名を省略すると、標準入力からのデータに 対して処理をして、出力します。Unix のシェルでは、 標準出力を次にコマンドの標準入力に割り当てる機能を パイプ と言い、"|" でふたつのコマンドを結びます。 パイプを使うと、データに対してある処理をした結果に対して、また、 別な処理をし、更に別な処理をする、と言うような操作が、1回で実行できます。 いくつかの例を示します。
gnuplot> plot "< normal data1.txt | xshift -s 30" (ピークで規格化した後、X座標を30ずらしたものをプロット。) gnuplot> plot "< baseline data1.txt | area " (ゼロ点がずれて、マイナスのデータ点があるものをベースライン補正して、面積で規格化)パイプは、いくつでもつなぐことができます。
自分自身がスペクトルを比較して、結果について考えるだけなら、体裁は 気にする必要はありませんが、人に結果を見せて説明したり、レポートに 添付する場合には、他の人が見てわかり易いように、体裁を整える必要が あります。いくつかの例を示します。
gnuplot> set title "Excitation wavelength dependence" (グラフのタイトルの定義) gnuplot> set xlabel "Wavelength (nm)" (X軸のラベルの定義) gnuplot> set ylabel "Normalized Fluorescence" (Y軸のラベルの定義) gnuplot> set xrange [ 390 : 600 ] (X軸の範囲指定) gnuplot> set xrange [ * : * ] (X軸の範囲指定を自動的に = 全範囲) gnuplot> set yrange [ 0 : 1.05 ] (Y軸の範囲指定) gnuplot> set key left (凡例を左側に) gnuplot> plot "< normal ..." title "Ex=300nm" with lines , "< normal ..." ... (line でプロットし、凡例を Ex=300nm に) gnuplot>
プロットしたグラフを印刷するためには、一旦、印刷形式のファイル (postscript file) を作成し、それを、プリンターに送ります。
gnuplot> set terminal postscript color 18 (カラーで、字は18ポイントで) gnuplot> set output "exp1.ps" (ps ファイル名の指定) gnuplot> plot "........" または replot (replot で、直前の plot コマンドが、再度、実行される) gnuplot> !gv exp1.ps (画面で、印刷イメージを確認する)実際に、プリンターに送る前に、画面に表示して確認しましょう。 実際の印刷は、gvからでもできますが、lpr コマンドの後に、プリンター名 を忘れずに指定します。プリンター名は、各プリンターの前面パネルに書いてあ ります。プリンター名を指定しないと、モノクロのレーザープリンターに送られ ます。
gnuplot> !lpr -Pps3 exp1.ps (ps3 プリンターに送る)plot の出力を、ファイルではなく、画面に戻すためには、
gnuplot> set terminal x11とします。
レポートの書き方のページ も 参考にして下さい。
上のように、ひとつのプロットを A4 1枚に印刷すると、グラフは大きすぎて、 紙が無駄になります。レポートに添付する場合にも、無意味にレポートが 厚くなります。上で書いたように、
gnuplot> set terminal postscript color 18 gnuplot> set output "exp1.ps"した後に、複数の plot コマンドを実行すると、ひとつのファイル (exp1.ps) の中で、印刷ページが増えて行きます。
gnuplot> plot "< raw ........", "< raw ........",... gnuplot> plot "< normal ........", "< normal ........",... gnuplot> plot "< area ........", "< area ........",... .......このように、複数のページを含むPSファイルを、縮小してまとめるコマンドが、 psnup (psutilsというパッケージに入っているひとつのプログラム) です。
gnuplot> !psnup -2 exp1.ps > exp1-2.ps (2頁を1頁に) gnuplot> !psnup -4 exp1.ps > exp1-4.ps (4頁を1頁に) gnuplot> !gv exp1-2.psここで、> は、psnup の標準出力を > 以下のファイルに出力する意味で す。psnup は psnup -2 | lpr というように、直接プリンターに送る使い方を 想定しているので、出力のPSファイルを標準出力に出すようになっています。
既にできている複数の PSファイルを縮小して印刷するためには、まず、複数の PSファイルをひとつにまとめる必要があります。そのためのプログラムが、 psjoin です(setup.sh を実行した時に、自分の ~/bin/ にコピーされています)。
gnuplot> !psjoin exp1.ps exp2.ps exp3.ps ... > exp-all.ps (exp-all.psにまとめる) gnuplot> !psnup -2 exp-all.ps > exp-all2.ps gnuplot> !gv exp-all2.psこれだけ、!をつけて行なうコマンドが続く場合は、別のターミナル窓を立ち上 げて、シェルのコマンドラインから実行した方が簡単ですね。
実は、psutils のパッケージの中に、psmerge という psjoin と同じ目的の プログラムがありますが、残念ながら、まともに動かないようです。
ある程度、実験結果の解釈が定まって、慣れて来ると、上で述べたように、 gnuplot を立ち上げて、対話的にプロットして、PSファイルを作成するのが、 面倒になります。その場合には、あらかじめ、gnuplot のコマンドを書き並べた テキストファイルを作成して、それをシェルのコマンドラインから実行した方が、 効率的です。emacs などのテキストエディターで、
set terminal postscript color 18 # set terminal postscript eps color 18 set output "exp1.ps" # set key right # set key left set title "Raw spectra" set xlabel "Wavelength (nm)" # set ylabel "Normalized Fluorescences" set ylabel "Fluorescence Intensity" # set xrange [ 390 : 600 ] set xrange [ * : * ] # set yrange [ 0 : 1.05 ] set yrange [ * : * ] plot "< raw rf1500.txt" t "Ex=330nm" with lines ,\ "< raw rf5000.txt" t "Ex=350nm" with lines ,\ "< raw fp6300.txt" t "Ex=400nm" with lines set title "Normalized spectra" set ylabel "Normalized Fluorescences" plot "< normal rf1500.txt" t "Ex=330nm" with lines ,\ "< normal rf5000.txt" t "Ex=350nm" with lines ,\ "< normal fp6300.txt" t "Ex=400nm" with lines ! psnup -2 exp1.ps > exp1-2.psという内容のファイル(exp1.gp)を作成します。ここで、# から始まる行は、 コメント行で実行に無関係です。また、行末の \ は、次の行と続いていること を表しています。 シェルのコマンドラインから、
% gnuplot exp1.gp % gv exp1-2.psとすると、gnuplot を立ち上げることなく、印刷用のファイルが作成され、 gv で確認できます。plotコマンドのファイル名や titleを変えれば、使いまわしができます。
上で述べたPSファイルは、印刷用のファイル形式です。図を印刷するのではなく、 他のソフトウェアの張り込んで、レポートを作成するためには、他のファイル形 式を指定した方が良い場合があります。
TeX や UNIX 上のソフトウェアは、EPS (Encapsulated Post Script) 形式を 張り込むことができます。EPSファイルを出力するには、
gnuplot> set terminal postscript eps color 18 gnuplot> set output "exp1.eps"とします。EPSファイルも、gv で見ることができます。
Windows上のワープロソフトには、EPSファイルを張り込むことが できないものもあるようです。gnuplot は、非常に多くの出力形式を サポートしていて(help set terminal で見ることができます)、自分の ワープロソフトがサポートしている画像形式を見つければよいのですが、 良くわからない場合には、png形式で出力してしまうのが簡単でしょう。 png形式は、ビットマップ画像の形式で、WEBでの画像表示などにも良く用いられ ている形式です。png形式で出力するには、
gnuplot> set terminal png medium gnuplot> set output "exp1.png"とします。png画像は、gimp や display で見ることができます。