解析用プログラムの使い方

初版作成: 2006/05/22
最終更新: 2006/05/24
  1. 解析用プログラムの準備

    解析用のプログラムは、stex の /home/ohba/gnuplot 以下にあります。 そこから、解析用プログラムを、自分の directory にコピーしてくれる プログラムが、その directory にある setup.sh プログラムです。まず、 コマンドラインから、setup.sh を実行してみましょう。

       % /home/ohba/gnuplot/setup.sh 
       (%はシェルのプロンプトを表す。入力する必要はない。)
       % rehash
    
    rehash は、解析用プログラムが自分の ~/bin/ directory (実行形式のファイ ルを置く directory ) にコピーされたことを、現在のシェルに覚えさせるコマ ンドです。シェルは立ち上がった時に、どのような実行形式のプログラムがあ るかを覚えるので、rehash を実行するのは、setup.sh を実行した時だけに 必要で、再度、ログインした場合には必要ありません。

    それでは、スペクトルのデータがある directory に移動して、gnuplot を立ち 上げましょう。

       % cd jikken_data_no_directory
       % gnuplot
       gnuplot> 
    
  2. gnuplot コマンドラインインターフェースの便利な機能

    gnupotには、作業効率を上げるための便利な機能がいくつか内蔵されています。 それらを知っていると、作業効率が随分と違うので、最初に説明します。

  3. 取ったスペクトルをそのままプロットする

    保存されたスペクトルデータには、(gnuplot にとっては不要な) 実験条件等の ヘッダーが付属しています。そのヘッダーを取り除くのが、raw という プログラムです。

     gnuplot> plot "< raw data1.txt" 
    
    ダブルコート("")で囲まれた部分は、普通は、ファイル名そのものが入ります。 上のように、< で始まる場合は、それ以下のコマンドを実行した結果の標準 出力を、gnuplot のデータの入力として用いることを意味します。

  4. 複数のスペクトルを重ねてプロットする

    実験条件や試料を変えた異なるスペクトルの変化を見るために、 複数のスペクトルを重ねてプロットするためには、"" を コンマ(,)で つなぎます、

    gnuplot> plot "< raw data1.txt","< raw data2.txt","< raw data3.txt" 
    
    何個でも、重ねることができます。

  5. 最大値で規格化したスペクトルを重ねてプロットする

    発光強度が異なるスペクトルの、形が同じかどうかを調べるためには、 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 を通すというような 必要はありません。

  6. 面積で規格化したスペクトルを重ねてプロットする

    強度や形が異なるスペクトルを比較するために、ピーク値で規格化するよりも、 全体の発光強度が同じであることを仮定して比較すると、有意義な場合がありま す。その場合には、 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の範囲の面積で規格化します。)
    

  7. その他のプログラムの使い方

    その他にも、いくつかのプログラムが準備されています。 詳しくは、 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 なども、 ファイル名は省略可能になっています。では、省略すればどうなるのでしょうか? ファイル名が省略された場合は、標準入力からの入力を待ちます。シェルのコマ ンドラインで実行すると、キーボードからの入力を待ち受ける状態になります。 何故その様にしてあるかは、次に説明する「パイプ」を理解すると、わかると 思います。

  8. ふたつ以上のプログラムを通した結果をプロットする

    多くの解析用プログラムは、ファイル名を省略すると、標準入力からのデータに 対して処理をして、出力します。Unix のシェルでは、 標準出力を次にコマンドの標準入力に割り当てる機能を パイプ と言い、"|" でふたつのコマンドを結びます。 パイプを使うと、データに対してある処理をした結果に対して、また、 別な処理をし、更に別な処理をする、と言うような操作が、1回で実行できます。 いくつかの例を示します。

    gnuplot> plot "< normal data1.txt | xshift -s 30"
              (ピークで規格化した後、X座標を30ずらしたものをプロット。)
    gnuplot> plot "< baseline data1.txt | area "
              (ゼロ点がずれて、マイナスのデータ点があるものをベースライン補正して、面積で規格化)
    
    パイプは、いくつでもつなぐことができます。

  9. グラフの体裁を整える

    自分自身がスペクトルを比較して、結果について考えるだけなら、体裁は 気にする必要はありませんが、人に結果を見せて説明したり、レポートに 添付する場合には、他の人が見てわかり易いように、体裁を整える必要が あります。いくつかの例を示します。

    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> 
    

  10. グラフを印刷する

    プロットしたグラフを印刷するためには、一旦、印刷形式のファイル (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
    
    とします。

  11. 複数のグラフを縮小して印刷する

    レポートの書き方のページ も 参考にして下さい。

    上のように、ひとつのプロットを 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 と同じ目的の プログラムがありますが、残念ながら、まともに動かないようです。

  12. gnuplot のコマンドを別ファイルで作成して、非対話的に実行する

    ある程度、実験結果の解釈が定まって、慣れて来ると、上で述べたように、 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を変えれば、使いまわしができます。

  13. 他のソフトウェアに取り込むための図を作成する

    上で述べた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 で見ることができます。


生物物理実験のトップページへ戻る