# vib_irreps.py のドキュメント

以下は vib_irreps.py の動作仕様と実行上の要件をまとめたものです。

---

## 1) プログラムの動作概要

- 入力となる XYZ 分子データと、対応する点群（Schoenflies 表記）から、分子振動の諸元を求めます。
- 点群のキャラクター表を用いて、Γ3N（N 原子分の固定格子座標の総和）を構成し、翻訳・回転の表示を引いた振動表現 Γv を求め、Γv の分解から振動 irreps を決定します。
- 実行モードは二つ:
  - 通常モード（abstract ではない場合）：実行行列を使ってΓ3N、ΓT、ΓR を計算し、それらを用いて Γv を求め、Irreducible Representations に分解します。
  - 抽象モード（abstract=True、主に I, Ih, C3h などの一部の高対称グループ向け）：クラスサイズのみから Γ3N を構成し、翻訳・回転の特性を同一クラスに対して抽象的に適用して振動 irreps を決定します。
- 入力の点群が実運用モードに対応している場合は、実操作行列を使い、そうでなければ抽象モードで計算します。
- 最終的には、各クラスのキャラクター値（Γ3N、ΓT、ΓR、Γv）と、分解された振動 irreps を標準出力に表示します。

Usage の例としては、例えば Td の分子 CH4、Oh の SF6、D6h の C6H6、I の C60 などの例が示されています。

---

## 2) 必要な非標準ライブラリとインストール方法

- 非標準ライブラリ
  - tkpointgroup（包摂的には Hermann–Mauguin 表記とクラス分解を提供する共通ライブラリとして使用）
  - numpy（数値計算のため）

- インストール方法
  - Python 環境が整っている前提で、以下を実行します。
  - pip を用いる場合:
    - pip install tkpointgroup numpy
  - 注意:
    - tkpointgroup は pymatgen などに依存する場合があるため、依存関係を満たす環境を事前に用意してください。
  - 環境別の例:
    - conda 環境を使う場合:
      - conda install numpy
      - pip install tkpointgroup

- 参考
  - 本コードは tkpointgroup というライブラリの提供する API（PG_CHAR_TABLES、normalize_symbol、character_table、group_ops、classify_op_for_table、class_aggregation、gamma_3N_characters、gamma_trans_characters、gamma_rot_characters、reduce_to_classes、decompose_irreps、schoenflies_to_hm、pretty_irreps など）に依存しています。

> 注意: 実行時には tkpointgroup が利用可能であることを前提としています。もし別途の抽象実装が必要となる場合は、ライブラリの実装状況に応じて調整が必要です。

---

## 3) 必要な入力ファイル

- XYZ ファイル
  - 拡張子が .xyz のファイルを想定しています。
  - フォーマット例（標準的な XYZ）:
    - 1 行目: 原子数 n
    - 2 行目: コメント
    - 3 行目以降: 各原子の情報（例: "C 0.000 0.000 0.000"）
  - 本コードの load_coords_from_xyz は以下をサポートします:
    - 標準の XYZ 形式
    - あるいは原子数行が無い場合は、それ以降の各行に対して x, y, z を読み取り座標を抽出
  - 座標は float の NumPy 配列として返され、N 原子分の座標として coords.shape = (N, 3) となります。

- XYZ ファイルのパス
  - コマンドライン引数 --xyz で指定します。

- 点群の指定
  - --pg で Schoenflies-like の点群記号を指定します（例: Td, Oh, D6h, I など）。
  - 正式には tkpointgroup の PG_CHAR_TABLES でサポートされている記号を使用します。

---

## 4) 実行後に生成される出力ファイル

- 本プログラムは標準出力へ結果を出力します。
- 出力内容の概要:
  - Point group: 指定された点群と HM 表記への対応（シューメライン表記から Hermann–Mauguin 表記への変換結果も表示）
  - Classes（対称類の一覧）
  - Γ3N chars（Γ3N のキャラクター値のクラス別表示）
  - ΓT  chars（翻訳のキャラクター値）
  - ΓR  chars（回転のキャラクター値）
  - Γv  chars（振動のキャラクター値： Γ3N - ΓT - ΓR）
  - Vibrational irreps（分解された振動 irreps の一覧）

- 出力ファイルとしての自動生成は行われません。結果は端末/標準出力へ表示され、必要に応じてリダイレクトでファイルへ保存してください。
  - 例: python vib_irreps.py --pg Td --xyz CH4.xyz > CH4_vib.txt

- エラーメッセージ
  - 指定された点群がサポートされていない場合、エラーメッセージを表示して終了します。
  - XYZ ファイルから座標を読み取れなかった場合もエラーメッセージを表示します。

---

## 5) コマンドラインでの使用例 (Usage)

- 基本例
  - python vib_irreps.py --pg Td  --xyz CH4.xyz
  - python vib_irreps.py --pg Oh  --xyz SF6.xyz
  - python vib_irreps.py --pg D6h --xyz C6H6.xyz
  - python vib_irreps.py --pg I   --xyz C60.xyz

- オプションの例
  - 収束判定の公差を指定する場合（デフォルトは 1e-5 Å）:
    - python vib_irreps.py --pg Td --xyz CH4.xyz --tol 1e-6
  - 出力をファイルに保存する場合:
    - python vib_irreps.py --pg Td --xyz CH4.xyz > CH4_vib.txt

- 利用可能な点群の例
  - Td, Oh, D6h, I など、tkpointgroup のサポート対象の Schoenflies-like 記号を使用します。
  - 事前に tkpointgroup の PG_CHAR_TABLES に含まれる記号を確認しておくと良いです。

---

このアプリケーションは、XYZ 座標と点群の情報から振動モードを対称性分解して表示するツールです。実行環境には tkpointgroup（およびその依存ライブラリ）を事前にイン