以下は、Python プログラム XRD_GUI_lib.py の解析結果をまとめたドキュメントです。

---

## 1) プログラムの動作

- 起動時の処理
  - 標準出力へ空行と「XRD_GUI_lib loaded」を表示します。
  - error_message 関数を用意して、エラー時にフォーマット付きのメッセージを表示します。
  - 環境変数 `tkprog_X_path` が設定されていることを要求します。未設定の場合、エラーメッセージを表示して終了します。
  - `root_dir` 配下の `xrd/filter` ディレクトリを `filter_dir` として設定します。

- アプリケーション設定
  - tkApplication（非標準ライブラリ）を使い、デバッグレベル等のパラメータを設定します（例：mode='plot', infile='*.txt', beam='X-ray', wavelength='CuKa', x-range 20–120 など）。
  - `filter_dir` のモジュールを読み込み、`read_data` をターゲットとするモジュールをロードします。
  - 各モジュールについて、`get_input_type`, `get_output_type` を呼んで、モジュールの入出力タイプを表示します。

- データ読み込みと変換
  - `parse_xrd(path)`:
    - 指定パスに対して、読み込み可能なモジュールを順に試し、適合するモジュールを選択します（`check_file_type` を使用）。
    - 選択したモジュールの `read_data(path)` でデータを取得し、`convert` を介して標準フォーマットへ変換します。
    - 返されるデータは `sample_name`, `xQ2_infile`, `yobs_infile` の3つ。`xQ2_infile` と `yobs_infile` は NumPy 配列として返されます。
  - `parse_reference(path)`:
    - 指定パスに対しても同様にモジュールを特定・データを読み込み、`diffractions` の情報（Q2、intensity、hkl など）を正規化して返します。返却値は `reference_name`, `positions`, `intensities`, `hkls` の4つ。
  - `main()` は例として固定パスのファイルを呼び出して `parse_xrd()` を実行し、終了します。

- 実行の終了
  - 直接の終了は `exit()` 呼び出しにより行われます。

- 重要な点
  - 実際のデータ入出力は、環境変数で参照される `root_dir/xrd/filter` に配置されたモジュールに強く依存します。これらのモジュールがファイル形式の判定・読取・変換を実装しています。
  - 現状の `main()` はハードコードされたファイルパスを読み込むだけで、標準的な実行時には実データファイルを自動的に探して処理するロジックは含まれていません。

---

## 2) 必要な非標準ライブラリとインストール方法

このスクリプトは以下の非標準ライブラリ/モジュールに依存しています。

- tklib.tkapplication.tKApplication（およびその関連クラス）
  - ソース: tklib パッケージ内の tkapplication.py など
  - 目的: モジュールの動的ロード、データの読取り・変換のための共通インターフェースを提供

- root_dir/xrd/filter に配置されるカスタムモジュール群
  - これらはファイル形式判定 (`check_file_type`)、データ読取 (`read_data`)、データ変換 (`convert`) を実装しています。

インストール方法の目安
- Python 3.x を準備
- NumPy が必須: `pip install numpy`
- tklib が公開パッケージとして入手可能であればインストール（例: `pip install tklib`）。公開パッケージでない場合は、リポジトリをクローンしてパスを通すなど、ソースコードを直接利用します。
  - 例: `pip install git+https://github.com/your-org/tklib.git`（実際のリポジトリURLに置き換えてください）
- 非標準モジュールは、`tkApplication` を提供する同梱リポジトリ/ディレクトリをプロジェクトのパスに含めておく必要があります。

重要
- 本コードは環境変数 `tkprog_X_path` に依存します。適切なディレクトリ構造（例: {tkprog_X_path}/xrd/filter 等）が用意されていることを確認してください。

参考コマンド例
- Python と NumPy の最低限
  - python3 -m pip install --upgrade pip
  - python3 -m pip install numpy
- tklib の入手（実際の入手元に応じて調整）
  - git clone https://github.com/your-org/tklib.git
  - cd tklib
  - python3 -m pip install .

---

## 3) 必要な入力ファイル

- 環境変数 tkprog_X_path が指すルート配下の構成
  - {tkprog_X_path}/xrd/filter/ 以下に、データファイルを読むためのモジュール（*.py）が配置されている必要があります。
  - これらのモジュールは以下をサポートします:
    - check_file_type(path, app, cparams) によるファイル種別の判定
    - read_data(path, app, cparams) によるデータ読み込み
    - convert(inf, cparams) によるデータの正規化・再フォーマット
- 入力ファイルの例（読み込み対象となるデータファイル）
  - 輸入データの形式はモジュールによって異なります。コード内では infile の例として以下のようなファイルが示唆されています
    - *.txt（`infile` のデフォルト設定）
    - cif ファイルや他の拡張子を含むファイル（`cif_files = 'data/*.*'` の設定から推測）
  - 実際には、`x