XAFSデータフォーマット
1. 概要
あいちSRの硬X線XAFSビームラインBL5S1, BL11S2 と、軟X線XAFSビームライン BL6N1 では、 XAFS測定に XafsM2 と呼ばれる計測プログラムを使用しています。 XafsM2 が記録するXAFS測定データのフォーマットは、9809フォーマットと呼ばれるフォーマットに準じています。
この文章では9809フォーマットを変更、拡張した部分を含めて XafsM2 の XAFS測定データフォマットを説明します。
2. 9809フォーマット
-
9809フォーマットとは
XafsM2 の XAFS測定データフォーマットは日本のXAFS関係者の間で俗に「9809フォーマット」と呼ばれるフォーマットに準じています。 9809フォーマットは KEK PF の XAFS ビームラインを統括しておられた野村先生が PF の XAFSビームライン用に開発された XAFS 測定プログラムが出力する測定データフォーマットの一つです。 1998年9月にできたフォーマットであることと「9809」というファイル ID が書き込まれているため この名前で呼ばれています。 -
9809フォーマットはテキストファイルです
内容を確認したり何かの理由で修正する必要がある場合には「テキストエディタ」 で開いて操作することができます1)。 -
9809フォーマットの定義
原典にかえって野村先生が9809フォーマットについて説明された文章を転載します 「9809フォーマットの定義」。 大事な部分は Fortran で 9809フォーマットのデータを出力するプログラムの形で定義してあって、 慣れてないと読むのは少し大変ですが、これで非常に厳密に決まっています。
この他にも野村先生が書かれた 「XAFSステーション利用の手引き」にも 記述がありますので興味のある方はご一読下さい。
3. XafsM2 の XAFS測定データフォーマット
-
XafsM2 が出力する測定データは基本は9809フォーマットに準じます。 しかし厳密には全く同じにできない部分があって変更されている部分もあります。 ここではその様な部分を含めて XafsM2 が出力する XAFS データフォーマットを説明します。
-
9809フォーマットから変更する場合は、Athena/Artemis, Rex2000 で読み込み可能なことを 確認しています。
3.1 データファイルのヘッダ部分
データファイルの先頭の数行には、
測定日時やファイル名、コメント、幾つかの測定条件等付随的な情報が 9809 フォーマットの規定に準じて記録されています。
ここに、 データファイルのヘッダの部分の例 を一つ挙げました。
ヘッダ部分の記録にあたっては、ファイルの形式を 9809 フォーマットに揃えることを優先に考えています。
これは、9809フォーマットを読み込む様にできている従来の解析プログラム等がそのまま使えるようにするためです。
そのため「測定条件等の付随的な情報」の記録としてみたときには情報が不完全だったり、
9809フォーマットの範囲では表現しきれず便宜的な記録になっている部分があります。
測定条件等に関するより正確/詳細な情報が必要な場合には、
XafsM2 で “data-file-name.dat” という測定データと共に作られる “data-file-name.info” ファイルを参照して下さい
2)。
以下、このファイルの先頭の行から順番に 1行ずつ、記録されている内容を説明します。
先頭の1行に記録されるのは「ファイルID(9809)」、「測定施設名(AichiSR)」、「測定ビームライン名(BL5S1)」です。
9809 AichiSR BL5S1
9809原典では、「ビームライン名」は 5文字となっています。 このため、BL11S2 で測定を行った場合、“BL11S2” とは記録できず “BL11S” になっているはずです。 過去にはこれを避けるために、ビームライン名は常に “BL5S1” にしていたこともあります。
2行目に記録されるのは「ファイル名」、「測定開始日時」、「測定終了日時」です。
201203-test-tr 20.12.03 15:49 - 20.12.03 16:11
「ファイル名」として記録できる文字数にも制限(14文字)があるのでファイル名は途中で切れています
(例として上げたファイルの元のファイル名は “201203-test-trans.dat” でした)。
「日時」の「時間」は「分」の桁まで記録されています。
現在の XAFS 測定の時間は短縮されていて、秒の桁が無いと不便な場合があります。
その場合には別途情報を記録している「*.info」ファイルを参照して下さい。
XafsM2 は、何かの理由で測定が途中で中断した場合でもそこまでのデータを残すために、
測定の進行にあわせて順次ファイルの各行を書き出します。
そのため、この行に「測定終了日時」を書き込むことは本当はできません(この行を書くのは測定開始時点なので)。
そこで XafsM2 は、測定開始時には「測定終了日時」の位置に仮に “%001%” と書いておいて、
測定終了時に改めてこの行を書き換えて終了日時を記録しています。
測定中にXafsM2を強制終了した場合などは、書き換えが行われないので “%001%” がそのまま残ります。
次の行はコメントです。
Sample Name:Cu foil Meas. No. 12
XafsM2 の画面上で「コメント」として入力した文字列がここに記録されます。
次の行は蓄積リングの「加速電圧」と「電流値」です。
Ring : 1.2 GeV 300.0 mA - 301.0 mA
「電流値」は測定開始時の値と終了時の値が記録されます。
「終了日時」と同じで「終了時の電流値」も測定開始時には書き込めないので、
代わりに一旦 “%002% と書き込まれ、終了時に書き直されます。
「加速電圧」は計測値ではなく固定で書き込まれていますので、
将来あいちSRがアップグレードして加速電圧が変わることがあれば、ここの数字が違っているというバグが発生するかもしれません。
次の行は、測定時の分光器と分光結晶に関する情報の記録です。
Mono : Si(111) D= 3.13553 A Initial angle= 12.50000 deg
この例では
-
分光結晶(monochromator crystal)として Si を使い、その (111) 面回折で分光を行ったこと
-
(111)回折面の面間隔を 3.13553 Åだと考えていること3)
-
測定開始前には分光器の角度は 12.5 度だったこと
がわかります。
測定結果のファイルに記載されている「分光器の角度」をその測定点のエネルギーに直す際にも重要です。どの様に変換するかは注2を読んでみて下さい。
次の行に記録されているのは、「ビームライン名」、「測定モード」、「繰返し数」、「測定点数」です。
BL5S1 Transmission ( 2) Repetition= 0 Points= 620
-
「ビームライン名」は1行目に記録されているものと同じです。 5文字という文字数制限も同じなので、ここでもBL11S2での測定結果は”BL11S“になります。
-
“Transmission( 2)” は「測定モード」の記録です。
“2” という数字は「透過法」を表すもので、”Transmission“という記述と同じことを記号で繰返しているだけです。
あいちSRでのXAFS測定(XafsM2 を使った XAFS測定)では、測定時の検出器の組み合わせを自由に選べるので、 例えば、蛍光と透過の同時測定も可能です。 このため、一つの測定(測定ファイル)を「これは〇〇モードの測定」と 分類することはあまり意味がありません。 この点に関してはヘッダ部分の後半に「モード行」というより良い記録がありますので、必要なら「モード行」を参照して下さい。
XafsM2 では、”透過用の検出器と分かっている検出器だけを使った“、”蛍光用の検出器と分かっている検出器を使った“、など モードが判断できる場合には 9809フォーマットに従って “Transmission( 2)“、”Fluorescence( 3)” などと記録しますが、 それ以外の場合には “Extra mode ( 5)” になります4)。 -
“Repetion= 0” は「繰り返し数」の記録です。一回だけの測定では “0” ですが、繰り返し測定の場合は何番目の測定結果かを表します。1回目が “0”、2回目が “1”、… です。
-
“Points= 620” は測定点数です。 測定ブロックパラメータを決めた段階で決まる数字で測定開始時に記録されます。 このため測定を途中で止めたりプログラムが停止した場合は、 実際に測定した点数(データファイル本体の行数)とは違う数字になります。
例外として、Quick XAFS 測定の場合、指定した点数と実際に測定された点数が 1 点異なる場合があります。 その時は、測定後に”Points=“の数字を書き換え、実際の点数に修正します。
次の行は、「ブロックパラメータ記録ファイル名」、「エネルギー軸の決め方」、「ブロック数」を記録することになっています。
Param file : DUMMYNAME.prm energy axis (2) Block = 4
しかし、XafsM2 は「ブロックパラメータ記録ファイル名」として常に「DUMMYNAME.prm」と記録します5)。
ブロックパラメータをファイルから読み込んだ場合もその名前にはなりません。
「エネルギー軸の決め方」は、測定開始時にブロックパラメータの表示単位として角度(“deg”)を選択していた場合 “1” に、
それ以外を選んでいると “2” になります。これは測定時の各点が「角度で等間隔」かどうかを表します。
しかしやや特殊ですが XafsM2 は、表示単位を角度以外にしている時でも測定を「角度で等間隔」にすることも可能です。
その場合も、ここでの表示は “2” になるので注意が必要です6)。
次は「ブロック数」の記録です。ここでは、”Block = 4“ なので、XAFS測定を4つのブロックに分けて測定したことがわかります。
この後には1行の空白行に続いてブロックパラメータが記録されます。
Block Init-Eng final-Eng Step/eV Time/s Num 1 8684.36 8944.36 6.50 1.00 40 2 8944.36 9034.36 0.30 1.00 300 3 9034.36 9484.36 2.50 1.00 180 4 9484.36 10084.36 6.00 1.00 100
最初の行は、続く行の行内の各項目の説明で、その後に「ブロック数」分の行が並びます7)。
”Block“ は何番目のブロックかを表す番号、”Init-Eng“ はブロックの始点のエネルギー、”final-Eng“ はブロックの終点のエネルギー、”Step/eV“ はそのブロック内を何eVステップで刻んで測定を行うか、”Time/s“ は1点の計測時間、”Num“ はそのブロックの測定点数(終点を含まない)を示します。
XafsM2 の画面上の表示単位が [keV] の場合でも、ここの記録は [eV] 単位になります。
ブロックパラメータの定義に続く次の1行は、計測に使われた機器やチャンネルの記録です。この行はファイルの見かけを 9809フォーマットに揃えるためだけのあまり意味のない内容の行です。
ORTEC( 0) NDCH = 3
最初に記録されている”ORTEC( 0)“ というのは、測定に使われた機器の種類を表すことになっています。
しかし、あいちSRの硬X線XAFSビームラインでは 9809フォーマットで想定されている機器(ORTEC や CAMAC)は使われていませんし、
仮に使われていたとしても、前述したように XafsM2 では複数の検出器を用いた複雑な構成での計測ができるため、
9809フォーマットで想定しているようなシンプルな表現ができません。
そこで、XafsM2 では、使用機器欄を常に “ORTEC( 0)” とします。言い換えるとこの記述に意味はありません。
単にファイルフォーマットの外見を揃えるためだけのモノです。
測定チャンネル数 “NDCH” の記述にもあまり意味はありません。9809フォーマットの定義では「測定チャンネルの数」となっています。
しかし XafsM2 開発当初(2010年前後) PF での測定データを見ると、例えば二つのイオンチャンバで I0 と I1 を計測したような場合でも
“NDCH = 2” ではなく “3” になる場合があるなど
(ORTEC では、カウンタと同様にタイマーにもアクセスできたので、おそらくタイマーを一つのチャンネルとして数えられていた)、
厳密な定義が不明だったからです。
XafsM2 では PF と同様のパタンで測定した時の “NDCH” がなるべく PF で記録したファイルの “NDCH” と同じになるように努力しましたが、
あいちSR、PF 共に検出器/計測系、計測プログラムの更新が続いていますので現在も同じである保証はありません。
XafsM2 での “NDCH” の値は、透過法の場合には “計測チャンネル数(I0, I1, I2,…)+1” です(検出器の数+1になります)。
SSD/SDD を用いた蛍光法では “NDCH” は蛍光検出器のチャンネル数(7とか19とか)に I0 を足した数(8 とか 20)になります(検出器の数と同じです)。
蛍光測定で I2 を追加したり、その他様々な検出器の組み合わせを使う場合、”NDCH“ が幾らになるかをここで説明するのは複雑ですし、
特に意味も無いと思いますので割愛します。
続く3行は、データ本体部分の各行に記録されるデータと密接に関連しています。
Angle(c) Angle(o) time/s 1 2 Mode 0 0 1 2 Offset 0 0 0.000 0.000
最初の行は、データ本体部分に並ぶ数値が何かを示している行です。ここでは「ラベル行」と呼びます。
データ本体を見る時に意味が分かりやすくなるので便利ですがさほど重要ではありません。
“Angle(c)” は各行に対応する点を計測する際のプログラム上での分光器の角度(プログラムが分光器のパルスモーターコントローラに指示した角度)で、
“Angle(o)” は計測を行った時の実際の角度をエンコーダで計測した数値を意味します8)。
“time/s” は、その点の計測時間[s]を表します。続く 1, 2, 3,… は順に振られた計測器の番号です。
続く2行は重要です。”Mode“ で始まる行は、検出器の「モード」を表しています。ここでは「モード行」と呼びます。 先頭から 3つのカラム(Angle(c), Angle(o), time/s) は検出器に対応していないのでモードはありません。 “Mode”, “0”, “0” という3つの記述でカラム数を合わせています。
XafsM2 が「モード」として記録する数字は 0, 1, 2, 3, 101, 103 です9)。
-
0: モードではない(カラムの数を揃えるためのダミー)
-
1: $I_0$ を示す。行内に 1つしか無い。
-
2: このカラムの数値を $I$ とすると、$モード=1$ の $I_0$ の数値と組み合わせて $\log(I_0/I)$ とすると $\mu t$ とみなせる数値が得られることを意味する。
実質的には、透過法(モード)の検出器だということになる。 -
3: このカラムの数値を $I$ とすると、$モード=1$ の $I_0$ の数値と組み合わせて $I/I_0$ とすると、$\mu t$(あるいは$\mu$) とみなせる数値が得られることを意味する。
蛍光法用または電子収量法用の検出器/検出計で測定された数値だということを意味する10)。 -
101: 9809フォーマットでは、 フォトンカウント型の検出器/計測系 のリセット回数を記録することになっている。
リセット回数の記録は測定時の状況に関するヒントになるので有用ではあるが、 計測値の計算等に直接使われるものではないことや、 あいちSRの BL5S1 や BL11S2 に導入した機器ではリセット回数を計測/記録していないことから XafsM2 の出力では常に 0 になっている。 -
103: フォトンカウント型の蛍光検出器の ICR (input count rate)。
数え落とし補正を行う際に必要になる。あいちSRでは、多素子のフォトンカウント型蛍光検出器を用いることが多いが、 その場合、モードが 3 のカラム、103 のカラムはそれぞれ素子数分あって、前から順に対応している。
ヘッダ部分の最後の一行は “Offset” から始まる行です。ここでは「オフセット行」と呼びます。
測定に用いた検出器の「オフセット」(入力信号がないはずの時の出力値)を記録しています。
先頭から3カラムは検出器に対応していないのでオフセットもありません。”Offset“, “0”, “0” という3つの記述でカラム数を合わせています。
データ本体に記録される計測値はこの「オフセットを引いた後の数字」です。
もし生データが必要な場合には記録されている計測値にこのオフセットを加算して下さい。
但し、計測値は、積分型の検出器/検出系の場合、計測時間分の積分値ですが、オフセットは 1秒の計測値になっていることに注意して下さい。
ヘッダを構成する情報は以上です。
最後に、9809 フォーマットには「ヘッダ」と「データ本体」を区別する記号はありません。 ですが、ヘッダの最後には必ずオフセット行が来ます(少なくとも XafsM2 のデータファイルはそうです)。 従って、もし何かのプログラム等で測定データを読んで処理する必要がある場合、オフセット行をヘッダ終端記号の代わりに使えます。
3.2 データファイルの本体部分
ヘッダ部分の最後の 3行(ラベル行、モード行、オフセット行)の意味を知っていると
データ本体部分はほとんど理解できるので、ここで説明することはあまりありません。
データファイルの本体部分の例として、ヘッダ部分と本体部分の最初の3行を切り出した例を3例あげます
( 透過法での測定データ例 、
蛍光法での測定データ例 1 、
蛍光法での測定データ例 2 )。
3.2.1 透過法での測定データ例
透過法での測定データ例としてあげたファイルのラベル行以下は次のようになっています。
Angle(c) Angle(o) time/s 1 2 Mode 0 0 1 2 Offset 0 0 6335.000 228.000 13.159369 13.159360 1.00 1.71017e+06 1.71122e+06 13.149350 13.149344 1.00 1.71227e+06 1.71333e+06 13.139347 13.139340 1.00 1.7144e+06 1.71547e+06
データ本体に関して「説明することはあまりない」と書きましたが、それでも多少説明すべき点があります。
-
第一に、原典の9809フォーマットでは、各カラムが固定長で定義されていますが、 XafsM2 の測定データではスペース区切りの可変長のフォーマットになっています。 上にあげた例では4カラム目の長さが変動しています。
-
先頭から2つのカラムは、分光器の指示角度(設定角度)と実際に到達した角度を実測した角度です。
自分で解析プログラムを作成するときなど、角度からエネルギーを計算する場合は 2番目の角度を使うようにして下さい。 -
3番目のカラムは計測時間を表します。XafsM2では 積分で計測するタイプの検出器/計測系 11)では、 計測値が時間に比例して大きくなります。全部のブロックの計測時間が同じなら問題になりませんが、 例えば、あるブロックは 1秒計測で、次のブロックは 2秒計測だとすると、ブロックをまたいだところで見かけの計測値が2倍変化します。 このデータをそのまま表示するような場合には計測時間で割って「1秒あたり」の値にするなどした方が良いかもしれません12)。
-
4カラム目以降をモード行と見比べると、4カラム目のモードが 1 なので、このカラムの値が $I_0$ だということがわかります。
-
さらに、5カラム目はモードが 2 なので、その値を$I$だとすると$\log(I_0/I)$ が $\mu t$ 相当の値になる数字だということがわかります。
-
先に述べたように、4カラム目以降に記録されている値はオフセットを引いた後の数字ですので、 もし、$I_0$、$I$の生の計測値が必要なら、それぞれの値に「オフセット」である 6335 と 228 を加える必要があります。
3.2.2 蛍光法での測定データ例(1)
次に、蛍光法での測定データ例1としてあげたファイルを見てみます。
Angle(c) Angle(o) time/s 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 Mode 0 0 3 3 3 3 3 3 3 1 103 103 103 103 103 103 103 101 Offset 0 0 0.000 0.000 0.000 0.000 0.000 0.100 0.000 6369.500 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 13.159369 13.159770 1.00 74 76 211 212 255 82 63 1.26984e+07 692 752 1782 1874 1962 1011 844 0 13.149350 13.149320 1.00 70 94 221 213 216 75 78 1.28284e+07 656 793 1828 1850 1907 1007 816 0 13.139347 13.139370 1.00 80 100 214 199 242 70 75 1.27539e+07 711 714 1745 1824 1918 1005 882 0
モード行を見ると、測定結果の各行には、7素子の蛍光検出器の各素子の測定値が先に並んでいて、
その後に $I_0$ の数字が記録されていることがわかります。
先に述べたように、固定長ではないのでカラムの位置が多少ズレていて見にくいですが、$I_0$の後に、
蛍光検出器の各素子のICRの値が並び、最後にモード101(リセット回数)が来ます。先に述べたように XafsM2 はモード101のカラムは常に 0 にします。
また、複数あるモード3のカラムとモード103のカラムの対応関係はラベル行の番号を見るとわかります。
この関係を敷衍するとモード1のカラムとモード101のカラムに対応関係がありそうに思えますが、先に述べたように対応関係はありません。
3.2.3 蛍光法での測定データ例(2)
蛍光法での測定データ例1は、 フォトンカウント型の検出器/計測系 で測定を行っていましたが、 一般的な積分型の検出器/検出系で蛍光や電子終了の測定を行った場合、ICR に相当する数字が無いことがあります。 蛍光法での測定のデータ例(2)としてあげたファイルはその様な例です。 このファイルのラベル行以下を見ると、次のようになっています。
Angle(c) Angle(o) time/s 1 2 Mode 0 0 1 3 Offset 0 0 0.000 0.000 42.783521 42.783510 0.50 85549 1993 42.761802 42.761850 0.50 85606 1992 42.740108 42.740220 0.50 85641 1992
モード行を見れば、4カラム目が $I_0$ で、 5カラム目が蛍光/電子収量の様に $I/I_0$ で吸収係数に比例した値が得られる計測値だということがわかります。 ですが先の例と異なり、モード 103 のカラムはありません13)。 これは、使用している 積分型の検出器/計測系 が原理的に数え落とさないからです。 その代わりにエネルギー分解能がないので、自分が測定したい蛍光X線以外の光が強いと良い測定ができなくなります。
3.2.4 数え落とし補正
「蛍光法での測定データ例(1)」にあげたデータファイルにはモード 103 のカラムがありました。 これは、対応するモード 3 の検出器の ICR の記録になっていて、この値を使うと「数え落とし補正」が可能です14)。 XafsM2 は、数え落とし補正可能と分かっている検出器を使って測定を行った場合、自動的に数え落とし補正を行ったデータを生成し、 測定結果と同時に出力します。その時数え落とし補正を行ったデータファイルは元の測定データのファイル名に ”-dtc数字“ を付加したものになります。 ここで “dtc” は “dead time correction” の略で、数字は数え落とし補正の計算式のタイプを示しています(上記「数え落とし補正」参照)。
次のファイル 「数え落とし補正結果の例」 は、「蛍光法での測定データ例1」と同時に XafsM2 が出力したものです。ファイル名に ”-dtc2“ が付いているのは、タイプ2の補正を行ったファイルだということを示しています。 このファイルのラベル行以下は次のように鳴っています。
Angle(c) Angle(o) time/s 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 Mode 0 0 3 3 3 3 3 3 3 1 103 103 103 103 103 103 103 101 Offset 0 0 0.000 0.000 0.000 0.000 0.000 0.100 0.000 6369.500 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 13.159369 13.159770 1.00 74.0546 76.0673 211.366 212.383 255.486 82.0805 63.0475 1.26984e+07 692 752 1782 1874 1962 1011 844 0 13.149350 13.149320 1.00 70.049 94.0878 221.394 213.38 216.4 75.0733 78.0568 1.28284e+07 656 793 1828 1850 1907 1007 816 0 13.139347 13.139370 1.00 80.0607 100.084 214.364 199.35 242.451 70.0683 75.0591 1.27539e+07 711 714 1745 1824 1918 1005 882 0
「蛍光法での測定データ例1」と見比べると、計測値が実数になっているのが大きな違いです。 細かく見ると、ここの数値は「蛍光法での測定データ例1」より少しずつですが大きくなっています。 これは、測定時の「数え落とし」を補正して正しい計測値を推測した結果だからです。
ここに示したデータは、XAFS測定全体の先頭部分です。 このため入射エネルギーは、測定対象元素の吸収端エネルギーを越えておらず、蛍光がほとんど発生していません。 このことは モード 103 の列に記録された ICR の値があまり大きくないことからも確認できます。 この様に、ICR の値が小さいため、数え落としの度合いも小さく、補正を行ってもほんの少ししか値が変化しません。 対象元素の濃度が高い場合など、吸収端を越えると強い蛍光X線が発生し、ICR も大きくなりますので 補正を行うと数%から10%近く値が変わることもあり得ます。
数え落としによって(あるいは逆に数え落とし補正によって)計測値が一律に変化するなら、 それほど数え落としを気にしなくてもよいのですが、実際にはその効果は一律ではなく、 蛍光X線が強いほど数え落としの影響が強くなります。 このため、吸収の強い部分(XAFSスペクトルの振動のピーク部分)が影響を受けて抑圧され、見かけ上吸収強度が下がります。
このため数え落とし補正を行っていないデータを使うと、 指紋照合的に XANES スペクトルを見ている場合には、スペクトルの形が違って見えることで判断を誤る原因になります。 また、EXAFS 解析を行う場合には、EXAFS振動の振幅が小さくなったかのような効果を及ぼすので、 解析結果の配位数が小さく出てくる等の影響が出ます。 できれば補正後のデータ ”-dtc“ ファイルを使用して下さい。
当 web ページとその下のページに関するお問い合わせ等ございましたら、連絡先にご連絡をお願いします。
田渕のページのルート