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行目を書き換えるのを忘れないように。
プログラムの解説へ戻る
生物物理実験のトップページへ戻る
一般物理学実験のホームへ