read_BRUKER_raw.py 技術ドキュメント

プログラムの動作

read_BRUKER_raw.py は、BRUKER社製のX線回折装置などによって生成された測定データファイルを解析し、その内容を可視化するためのPythonプログラムです。主に以下の機能を提供します。

  • 入力ファイルの読み込み: BRUKERの生データファイル (.raw) と、それに付随する設定情報を含むテキストファイル (.txt) を読み込みます。

  • メタデータの抽出と表示: .txt ファイルからは装置設定や測定条件などのテキスト情報を、.raw ファイルからは特定のオフセットに格納されている数値データ(開始角度、ステップ幅、データ点数など)や文字列(サンプル名、ゴニオメーター名など)を抽出し、コンソールに表示します。

  • データの一貫性確認: .raw ファイルと .txt ファイルから読み込まれたメタデータを比較し、対応する情報が存在する場合は並列して表示することで、データの一貫性や正しい読み込みを視覚的に確認できます。

  • 測定データのプロット: 抽出されたX軸(2Theta角度)とY軸(強度)のデータをMatplotlibライブラリを使用してグラフとしてプロットし、測定結果を直感的に確認できるようにします。

このプログラムは、BRUKERデータ形式の特定のオフセットに依存しており、測定データの迅速な検証やデバッグ、さらにはデータ解析の前処理として役立ちます。

原理

このプログラムは、BRUKERの測定データファイルが持つ特定の構造を解析することで動作します。

  1. テキストファイルの解析: 付属のテキストファイル (.txt) は、測定条件や装置の設定、コメントなどの人間が読める形式のメタデータを含んでいます。analyze_BRUKER.py モジュールは、正規表現などを用いてこのテキストファイルをパースし、キーと値のペアとして情報を抽出します。

  2. バイナリファイルの解析: 生データファイル (.raw) は、測定されたX線強度などの数値データや、その他の重要なメタデータが特定のバイナリオフセットに格納されていることが前提とされています。プログラムは var_inf リストに定義された情報(オフセットアドレス、データ型、変数名)に基づいて、binparser.py モジュールを通じてバイナリファイルを直接読み込みます。

    • 例えば、X線回折データの開始角度 (Start)、ステップ幅 (Step)、データ点数 (ndata) は、それぞれバイナリファイル内の固定されたオフセットに float32int16 などの特定のデータ型で格納されていると仮定されます。

    • Y軸の強度データは、y[0] から始まる連続したブロックとして格納されており、offset_data(Y軸データの開始オフセット)と offset_step(各データ点のオフセット間隔)を利用して、ndata の数だけループして読み込まれます。

  3. データ構造の解釈: X線回折データは、一般的にX軸に回折角 (\(2\theta\))、Y軸に強度(カウント数)をとる散乱プロファイルです。このプログラムでは、バイナリファイルから抽出した StartStepndata を用いて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種類のファイルを期待します。両方のファイルが同じベース名を持ち、拡張子だけが異なることが一般的です。

  1. テキストファイル (.txt):

    • 形式: BRUKER装置が出力する測定条件やメタデータを含むプレーンテキストファイル。

    • 内容: 装置名、サンプル名、測定の種類、スリット幅、ゴニオメーターの設定、日付、コメントなどが記載されています。analyze_BRUKER.py モジュールがこのテキストを解析し、プログラムが読み取れる形式に変換します。

  2. バイナリファイル (.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 は、いかなるファイルも生成しません

プログラムの出力は以下の通りです。

  1. 標準出力 (コンソール):

    • 読み込まれたテキストファイルとバイナリファイルのパスが表示されます。

    • バイナリファイルから抽出されたX軸データのパラメーター(開始角度、ステップ幅、データ点数)が表示されます。

    • テキストファイルとバイナリファイルから抽出されたメタデータが、対応する項目ごとに比較形式で表示されます。

  2. グラフィカルウィンドウ:

    • 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.txtsk250606-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点の強度データが青い線で描画されます。