anisotropyの解説とゼロ点補正

anisotropyというプログラムは、次のようである(説明のために行番号を付けている)。
     1  #!/usr/local/bin/perl
     2
     3  $usage = "Usage : $0 VVfile VHfile HVfile HHfile\n";
     4
     5  if ($#ARGV < 3 ) {
     6      print $usage;
     7      exit 0;
     8  }
     9
    10  open(VV, $ARGV[0]);
    11  @raw_vv = <VV>;
    12  close(VV);
    13
    14  open(VH, $ARGV[1]);
    15  @raw_vh = <VH>;
    16  close(VH);
    17
    18  open(HV, $ARGV[2]);
    19  @raw_hv = <HV>;
    20  close(HV);
    21
    22  open(HH, $ARGV[3]);
    23  @raw_hh = <HH>;
    24  close(HH);
    25
    26  $num = scalar(@raw_vv);
    27  for ($i=0; $i<$num; $i++) {
    28    ($wavelength, $vv) = split("\t", $raw_vv[$i]);
    29    ($dummy, $vh) = split("\t", $raw_vh[$i]);
    30    ($dummy, $hv) = split("\t", $raw_hv[$i]);
    31    ($dummy, $hh) = split("\t", $raw_hh[$i]);
    32
    33    $g = $hv / $hh;
    34    $r = ($vv - $g * $ vh) / ($vv + 2 * $g * $vh);
    35
    36    print "$wavelength\t$r\n";
    37  }
解説

1: /usr/local/bin/perlのプログラムであるとの宣言(おまじない)
3-8: 引数が4個より少なければ、使用方法を表示して終了する。$#ARGVには、このプログラムが呼び出された時の(引数の数-1)がセットされている。$0は、呼び出された時のこのプログラムの名前である。
11-24: VV,VH,HV,HHの順番にファイルを開き、@raw_vv,@raw_vh,@raw_hv,@raw_hh という配列に代入する。
26: 各データのデータポイントの数を得る(scalar(@配列)で配列の要素の数を返す)。
27-38: 各データポイント(波長と強度の組)について、演算を行い、結果を標準出力に書き出す。
28行目で、@raw_vvの一つの行 $raw_vv[$i] をタブ(\t)で分けて、前半を$wavelengthに、後半を $vvに代入。29-31は他の配列についての繰り返し。
33行目でG因子を計算。34行目で、蛍光異方性を計算。
36行目で、"波長 タブ 蛍光異方性 改行"の順番で標準出力にプリント。
以上の操作を、データ配列のすべての要素について繰り返す。
以上見てきたように、実際にデータの演算を行っているのは、33と34の2行だけである。例えば34行目を、
$r = $vv + 2 * $g * $vh ;
と変えれば、蛍光異方性ではなく、偏光に依存しない全蛍光強度を出力する。

ゼロ点のずれの補正

分光器のゼロ点は、光源の強度の変動や光検出器(光電子増倍管)の温度依存 性などによって、時間とともに変動する。通常、強いシグナルについては無視 できる程度であるが、実験2のように、励起スペクトルの微弱な部分を用いて 演算するような場合には、わずかなゼロ点の変化が大きく結果を変えてしまう。 励起スペクトルの極小値がマイナスになっている場合には、明らかに装置のゼ ロ点がずれていたと考えられる。ゼロ点を再度設定して取り直すのがベストで あるが、種々の要因でそのデータをどうしても使わなければいけない場合も有 り得る(例えば、同じ実験を再度行うのが非常に困難な場合)。プログラム変 更の例として、その様な場合、妥当なゼロ点の値を各スペクトルに足してから、 異方性を計算するように上のプログラムを変更してみよう。

最も原始的な方法は、プログラムのなかに、補正したいゼロ点の値を直接書き込んで しまう方法である。例えば、25行目あたりに、
$b=0.5; #補正したいゼロ点の値を入れる。
を入れて、33と34行目を、
$g = ($hv + $b) / ($hh + $b);
$r = ($vv +$b - $g * ( $vh + $b)) / ($vv +$b + 2 * $g * ( $vh + $b));
と変えればよい。プログラムを変更した場合には、プログラム名を変えて(例えば、correct_anisotropyとか)保存したほうが良い。

補正したいゼロ点の値は、試行錯誤する必要があるので、上のようにその都度、 プログラムを書き換えるのは面倒である。補正したいゼロ点の値をコマンドラ インから引数として入力するためには、25行目あたりの $b=0.5; の代わりに、
$b = $ARGV[4];
として、プログラムを実行する際の5番目の引数として、ゼロ点の値を入れれば良い。 この時、必要とする引数の数が変わったので、3行目と5行目を書き換えるのを忘れないように。

プログラムの解説へ戻る
生物物理実験のトップページへ戻る
一般物理学実験のホームへ