read_BRUKER_raw.py 技術ドキュメント
プログラムの動作
read_BRUKER_raw.py は、BRUKER社製のX線回折装置などによって生成された測定データファイルを解析し、その内容を可視化するためのPythonプログラムです。主に以下の機能を提供します。
入力ファイルの読み込み: BRUKERの生データファイル (
.raw) と、それに付随する設定情報を含むテキストファイル (.txt) を読み込みます。メタデータの抽出と表示:
.txtファイルからは装置設定や測定条件などのテキスト情報を、.rawファイルからは特定のオフセットに格納されている数値データ(開始角度、ステップ幅、データ点数など)や文字列(サンプル名、ゴニオメーター名など)を抽出し、コンソールに表示します。データの一貫性確認:
.rawファイルと.txtファイルから読み込まれたメタデータを比較し、対応する情報が存在する場合は並列して表示することで、データの一貫性や正しい読み込みを視覚的に確認できます。測定データのプロット: 抽出されたX軸(2Theta角度)とY軸(強度)のデータをMatplotlibライブラリを使用してグラフとしてプロットし、測定結果を直感的に確認できるようにします。
このプログラムは、BRUKERデータ形式の特定のオフセットに依存しており、測定データの迅速な検証やデバッグ、さらにはデータ解析の前処理として役立ちます。
原理
このプログラムは、BRUKERの測定データファイルが持つ特定の構造を解析することで動作します。
テキストファイルの解析: 付属のテキストファイル (
.txt) は、測定条件や装置の設定、コメントなどの人間が読める形式のメタデータを含んでいます。analyze_BRUKER.pyモジュールは、正規表現などを用いてこのテキストファイルをパースし、キーと値のペアとして情報を抽出します。バイナリファイルの解析: 生データファイル (
.raw) は、測定されたX線強度などの数値データや、その他の重要なメタデータが特定のバイナリオフセットに格納されていることが前提とされています。プログラムはvar_infリストに定義された情報(オフセットアドレス、データ型、変数名)に基づいて、binparser.pyモジュールを通じてバイナリファイルを直接読み込みます。例えば、X線回折データの開始角度 (
Start)、ステップ幅 (Step)、データ点数 (ndata) は、それぞれバイナリファイル内の固定されたオフセットにfloat32やint16などの特定のデータ型で格納されていると仮定されます。Y軸の強度データは、
y[0]から始まる連続したブロックとして格納されており、offset_data(Y軸データの開始オフセット)とoffset_step(各データ点のオフセット間隔)を利用して、ndataの数だけループして読み込まれます。
データ構造の解釈: X線回折データは、一般的にX軸に回折角 (\(2\theta\))、Y軸に強度(カウント数)をとる散乱プロファイルです。このプログラムでは、バイナリファイルから抽出した
Start、Step、ndataを用いてX軸の \(2\theta\) 角度を計算し、抽出したY軸の強度データと組み合わせてプロットします。
本プログラム自体に複雑な数式や物理モデルは含まれておらず、BRUKERフォーマットのバイナリデータ構造を解釈し、可視化することが主な目的です。
必要な非標準ライブラリとインストール方法
このプログラムを実行するためには、以下の非標準Pythonライブラリが必要です。
chardet: ファイルのエンコーディングを自動検出するために使用されます。(直接は呼び出されていないが、依存モジュール内で利用されている可能性があります。)matplotlib: データのプロットと可視化のために使用されます。
これらのライブラリは pip コマンドでインストールできます。
pip install chardet matplotlib
また、このプログラムは以下のカスタムモジュールに依存しています。
binparser.py: バイナリファイルの読み込みと特定のオフセットからのデータ抽出を担うモジュール。analyze_BRUKER.py: テキストファイルの解析とメタデータの抽出を担うモジュール。
これらのカスタムモジュールは、read_BRUKER_raw.py と同じディレクトリ、またはPythonのモジュール検索パス上に配置されている必要があります。pip でインストールするようなパッケージではありません。
必要な入力ファイル
プログラムは以下の2種類のファイルを期待します。両方のファイルが同じベース名を持ち、拡張子だけが異なることが一般的です。
テキストファイル (
.txt):形式: BRUKER装置が出力する測定条件やメタデータを含むプレーンテキストファイル。
内容: 装置名、サンプル名、測定の種類、スリット幅、ゴニオメーターの設定、日付、コメントなどが記載されています。
analyze_BRUKER.pyモジュールがこのテキストを解析し、プログラムが読み取れる形式に変換します。
バイナリファイル (
.raw):形式: BRUKER装置が出力する生データを含むバイナリファイル。
内容: X線回折の強度データ本体(Y軸データ)、測定開始角度、終了角度、ステップ幅、データ点数などの数値情報、および一部の文字列情報が特定のオフセットに格納されています。プログラム内の
var_infリストが、これらの情報のオフセット、データ型、変数名を定義しています。
例:
sk250606-2-Eagle-Bi5w-S150c50w-Sub200c-25min-oradw.txt
sk250606-2-Eagle-Bi5w-S150c50w-Sub200c-25min-oradw.raw
生成される出力ファイル
read_BRUKER_raw.py は、いかなるファイルも生成しません。
プログラムの出力は以下の通りです。
標準出力 (コンソール):
読み込まれたテキストファイルとバイナリファイルのパスが表示されます。
バイナリファイルから抽出されたX軸データのパラメーター(開始角度、ステップ幅、データ点数)が表示されます。
テキストファイルとバイナリファイルから抽出されたメタデータが、対応する項目ごとに比較形式で表示されます。
グラフィカルウィンドウ:
Matplotlibによって生成されたグラフが表示されます。X軸は"2Theta"、Y軸は"Intensity"、タイトルはバイナリファイル名です。このグラフは、測定されたX線回折パターンを示します。
コマンドラインでの使用例 (Usage)
read_BRUKER_raw.py は、コマンドライン引数として入力ファイルのパスを受け取ります。
基本形式:
python read_BRUKER_raw.py [text_file_path] [bin_file_path]
[text_file_path]: 解析するテキストファイル (.txt) のパス。省略された場合は、プログラム内にハードコードされたデフォルト値が使用されます。[bin_file_path]: 解析するバイナリファイル (.raw) のパス。省略された場合は、プログラム内にハードコードされたデフォルト値が使用されます。
引数を指定しない場合、プログラムはスクリプト内のデフォルトファイル名 (sk250606-2-Eagle-Bi5w-S150c50w-Sub200c-25min-oradw.txt と sk250606-2-Eagle-Bi5w-S150c50w-Sub200c-25min-oradw.raw) を使用します。
コマンドラインでの具体的な使用例
以下の例では、プログラムにデフォルトとして設定されているファイル名を使用します。これらのファイルがスクリプトと同じディレクトリに存在することを前提とします。
実行コマンド:
python read_BRUKER_raw.py sk250606-2-Eagle-Bi5w-S150c50w-Sub200c-25min-oradw.txt sk250606-2-Eagle-Bi5w-S150c50w-Sub200c-25min-oradw.raw
実行結果の説明:
プログラムを実行すると、まずコンソールに以下のような情報が出力されます(具体的な値は入力ファイルに依存します)。
text_file='sk250606-2-Eagle-Bi5w-S150c50w-Sub200c-25min-oradw.txt'
bin_file='sk250606-2-Eagle-Bi5w-S150c50w-Sub200c-25min-oradw.raw'
endian='little'
Read text file [sk250606-2-Eagle-Bi5w-S150c50w-Sub200c-25min-oradw.txt]
Read raw file [sk250606-2-Eagle-Bi5w-S150c50w-Sub200c-25min-oradw.raw]
offset data: 3158
offset step: 4
X data parameters: 10.0 0.01 8001
User1 User1 None
Sample sk250606-1-Eagle-Bi5PB sk250606-2-Eagle-Bi5w-S150c50w-Sub200c-25min-oradw
Goniometer SmartLab(In-plane) SmartLab(In-plane)
Condition SmartLab(In-plane) SmartLab(In-plane)
Cu_K-beta Cu_K-beta Cu_K-beta
Soller_slit_5.0deg Soller_slit_5.0deg Soller_slit_5.0deg
Monochromater None None
Condition2 SC-70 SC-70
Condition3 IhOut of Plane IhOut of Plane
Comments Out of Plane (Scan)IhOut of Plane
入射スリット 1.000mm 1.000mm
受光スリット1 1.000mm 1.000mm
受光スリット2 1.000mm 1.000mm
Start 10.0 10.0
Stop 90.0 90.0
Step 0.01 0.01
ndata 8001 8001
上記出力では、最初に読み込むファイル名とエンディアン情報が表示されます。次に、read_bin_file 関数が特定したX軸データのパラメーター(開始角度、ステップ幅、データ点数)が出力されます。
その下には、バイナリファイル (vars_bin) とテキストファイル (vars_text) からそれぞれ抽出されたメタデータが、対応する変数名ごとに3列で表示されます。
左から順に「変数名」、「バイナリファイルからの値」、「テキストファイルからの値」です。None と表示される箇所は、対応する情報が一方のファイルから読み込まれなかったことを示します。
コンソール出力に続いて、Matplotlibによって新しいウィンドウが開かれ、X線回折データがグラフとして表示されます。
グラフのタイトルは sk250606-2-Eagle-Bi5w-S150c50w-Sub200c-25min-oradw.raw となり、横軸は 2Theta、縦軸は Intensity とラベル付けされます。このグラフには、開始角度 \(10.0^\circ\) から終了角度 \(90.0^\circ\) まで、\(0.01^\circ\) ステップで測定された8001点の強度データが青い線で描画されます。