以下は、Python プログラム XRD_GUI.py の解析結果を整理した技術ドキュメントです。

---

## 1) プログラムの動作概要

- バージョン: 1.0.9
- 機能:
  - PyQt6 を用いた GUI アプリで、XRD(粉末 X 線回折)データの可視化・操作を行う汎用グラフ表示ソフト。
  - データセットとリファレンスデータを管理し、データとリファレンスそれぞれの表示/非表示、色、太さ、名前変更、ソート変更を GUI 上で可能。
  - XRD データの読み込み、リファレンスデータの読み込み、グラフの保存、セッションの保存・読み込みが可能。
  - データのY軸スケールには線形、対数 (log10)、平方根 (sqrt) を選択でき、リファレンス側にも異なるスケールを適用可能。
  - グラフは Matplotlib と連携して描画され、カスタム縦横比、サイズ、X/Y 軸範囲、目盛、カラー スケールなどを調整可能。
  - マウス移動時にはピークに注釈を表示するインタラクティブ機能を備える。
  - 外部ライブラリ XRD_GUI_lib.py が同一ディレクトリにある場合、それを利用してパース処理を行う（利用できない場合は内蔵のパーサをフォールバック）。
- ファイル入出力の概要:
  - 入力:
    - XRD データファイル (.txt) の読み込み（parse_xrd_file/ load_xrd_data_dialog）。
    - リファレンスデータファイル (.txt) の読み込み（parse_reference_file / load_reference_dialog）。
    - セッションの保存/読み込み (.json)（save_session / load_session）。
  - 出力:
    - グラフ画像の保存（png, jpg, svg, pdf など） via グラフ保存ダイアログ。
    - 現在のデータ・設定のセッションファイル (.json)。
    - GUI 上のリストやグラフの描画更新による表示出力。

- 実行環境:
  - Python 実行環境上で GUI アプリとして動作。`python XRD_GUI.py` により起動。

- 実装上の特徴:
  - 非標準ライブラリの条件付きインポート:
    - 同ディレクトリに XRD_GUI_lib.py があれば import を試み、失敗時は警告を表示してフォールバック。
  - Matplotlib のフォント配置を制御して日本語表示の安定性を図る。
  - 問題発生時にはエラーダイアログでユーザーへ通知する（例：ファイル読み込みエラー、パースエラー、保存エラー）。
  - 辞書型データ構造を使い、データセット・リファレンスの属性を管理（名前、色、オフセット、可視性、データ配列など）。
  - データセットの順序変更に対応した内部データの同期（UI のリストと内部データ構造の整合性を維持）。

---

## 2) 必要な非標準ライブラリとインストール方法

このアプリは PyQt6 を中心に動作します。また、データの処理・描画には NumPy と Matplotlib が必要です。

- 必須ライブラリ
  - Python 3.8 以降（環境によって推奨バージョンは異なる場合があります）
  - PyQt6
  - numpy
  - matplotlib
  - (任意) XRD_GUI_lib.py が同梱されていれば、それを利用

- 推奨環境パッケージのインストール例（pip を使用）
  - Windows / macOS / Linux 共通:
    - pip の最新化
      - pip install --upgrade pip
    - 必須ライブラリのインストール
      - pip install PyQt6 numpy matplotlib
    - (任意) XRD_GUI_lib.py が依存する追加ライブラリがあれば同梱ファイルの仕様に従って追加
- 参考:
  - PyQt6 は従来の PyQt5 と比べて名前空間が異なる場合があるため、公式のインストール手順に従ってインストールしてください。

- 注意点
  - XRD_GUI_lib.py が同じディレクトリに存在して import される場合、parse_xrd/parse_reference の実装により、外部パーサーを優先して使用します。エラー時は内蔵パーサーへフォールバックします。
  - 日本語フォントの扱いは環境依存のため、表示が崩れる場合はフォント設定を調整してください。

---

## 3) 必要な入力ファイル

- XRD データファイル (.txt)
  - load_xrd_data_dialog / parse_xrd_file で読み込み、サンプル名・角度（2θ 等）・強度データを抽出。
  - 内部パーサーは以下の形式を想定:
    - 行頭に "Sample" などのヘッダがあり、その後にデータ行として「角度 強度」の2列以降が並ぶ。
    - なお、XRD_GUI_lib.py が存在し、それに parse_xrd が実装されていれば外部パーサを優先して使用。
- リファレンスデータファイル (.txt)
  - parse_reference_file で読み取り、リファレンス名、2θ の位置、強度、および HKL などを格納。
  - HKLs（hkl）の文字列リストも保存されるよう設計。
  - 外部ライブラリが parse_reference を提供していればそれを優先します。失敗時は内部パーサにフォールバック。

- セッションファイル (.json)（任意）
  - save_session / load_session で現在のデータ・設定を保存・復元します。
  - セッションには datasets, references の他、UI 設定・フォント、カラー設定、カラーマップ、軸設定などが含まれます。

- 注意
  - ファイルのエンコードは utf-8 errors='ignore' で読み込む設計ですが、データ形式が大きく異なる場合は適切なパーサの使用を検討してください。

---

## 4) 実行後に生成される出力ファイル

- グラフ画像ファイル
  - 「グラフ保存」ボタンを通じて PNG/JPEG/SVG/PDF などの形式で保存可能。
  - 高解像度（dpi=300）で保存されるよう設定されている。

- セッションファイル
  - 「セッション保存 (.json)」で現在のデータ・設定を JSON 形式で保存可能。
  - ファイルには以下が含まれる（代表例）:
    - saved_at、ui_settings（Y軸スケール、フォント、カラー設定、軸範囲、カラースケール設定、縦横比、軸テキストなど）
    - datasets（x、original_y、processed_y などの NumPy 配列はリスト化）、references（positions、intensities、hkls、色など）

- GUI 上の更新出力
  - 現在表示中のデータセット・リファレンスのリスト、色、可視性、オフセット、ライン幅などが GUI で反映され、再度開いたときにも復元されるように設計。

- ログ・デバッグ情報
  - 実行時には Python の標準出力へデバッグメッセージが多く出力され、開発時の追跡に有用です（実運用ではレベル調整を検討）。

---

## 5) コマンドラインでの使用例 (Usage)

ただし本プログラムは GUI アプリケーションとして動作するため、基本的にはダブルクリック等の GUI 操作で使用します。以下は実行と基本的な