Athena プラグインの微修正
Demeter に含まれる Athena には、日本国内で多用される 9809フォーマットの XAFS 測定データが読めるプラグイン(PFBL12C.pm)が同梱されています。 あいちSRの BL5S1, 7N1, 11S2 で測定を行ったときのデータも 9809 フォーマットで、基本的にはこのプラグインで読めます。 ところが、ピコアンメータ(Keythley 6485等)を検出器に使って測定を行うと結果が正常に読めないという報告がありました。
この現象は、あいちSRの測定プログラムは、9809フォーマットを拡張していてピコアンメータ(Keythley 6485等)の測定結果を 整数でなく実数で記録することと、既存の Athena のプラグインでは、$1\times10^{-3}$ より小さい数値は $0$ になることに依っていました。
この現象は、測定プログラム側で数値を定数倍(例えば $1,000$倍)することでも解決できますが、 生の測定値を変更して記録するのはあまり良くないように思われたので(また、すでに測定されてしまったデータには対応できないので)、 Athena のプラグイン側で対応することにしました。
変更箇所
Windows で、Web から入手した Demeter パッケージを普通にインストールした場合、
修正すべきファイルは次の場所にあります。
ただし、[ユーザー名]は適宜本当のユーザー名に置き換えて読んでください。
C:\Users\[ユーザー名]\AppData\Roaming\DemeterPerl\perl\site\lib\Demeter\Plugins
ここにある PFBL12C.pm というファイルが目的のファイルです。 このファイルの 63行目、もしくはその前後に、次に示すように
my $pattern = " %9.3f %9.3f %6.2f" . " %12.3f" x $ndet . $/; printf $N $pattern, @list;
と書かれているはずです。ここにある '%12.3f' を修正してください。 例えばですが、'%12.9g' にするのが一案です。
何をした?
当該箇所に現れている '%9.3f' とか '%12.3f' とかは、数字をどんなフォーマットで書くか/読むかを指定する記法です 1)。
分解してみると
-
% : 一個の数字に対応するフォーマットの開始
-
12 : 全体として 12桁の数字
-
.3 : その内小数点以下は 3桁
-
f : e/f/g のどれか
-
f : 固定小数点表記($1200000$も、$0.000055$も、$2.45$もそのまま表記する)の指示
-
e : 指数表示($1200000$は 1.2e5 ($1.2\times10-5$の意)、$0.000055$は 5.5e-5 、$2.45$は 2.45e0 と表記する)の指示
-
g : いい感じになるように、数字に合わせて f か e を適宜選ぶ
という意味があります。
12.3 を 12.9 にしたので小数点以下 9 桁までの数字が扱えるようになって、小さな数字が 0 になってしまうことを防げます。 この時、12.9f だと、例えば 0.000000009876 は 0.000000009 となりますが、12.9g だと 9.876e-9 になるので、有効桁数を残せます。
もう少し細かく考えるべきこともあるのですが、まず問題は出ないと思われます。
1)恐らくはc言語由来の記法です。プラグインはperlで書かれていますがperlはcの影響を強く受けていますし、c言語の系列かどうかとは別に、この記法だけ採用されていることも多いです -