以下は `analyze_symmetry.py` プログラムの解析結果です。

---

### `analyze_symmetry.py` プログラム解析

#### 1) プログラムの動作

このプログラムは、中心金属に配位するリガンドの3次元構造情報（配位子の位置）を解析し、以下の機能を提供します。

*   **点群の自動検出**: 与えられたリガンドの配置に最も合致する分子の点群を自動で特定します。複数の候補点群について、幾何学的な一致度（ヒット数とヒット率）を評価し、最も適切な点群を選定します。
*   **d軌道の対称性判定**: 指定された中心金属のd軌道が、検出された点群においてどの既約表現（Irreducible Representation; Irrep）に属するかを特定します。
*   **配位子可約表現の分解**: リガンドの基底（通常はσ結合方向）から可約表現を構築し、それを検出された点群の既約表現に分解します。これにより、リガンドがどの対称性を持つ軌道を提供できるかがわかります。
*   **ハイブリダイゼーションの可能性判定**: 中心金属のd軌道に対応する既約表現が、リガンドの可約表現の分解結果に含まれているか（すなわち、リガンド側がその対称性を持つ軌道を提供できるか）をチェックし、対称性に基づいてハイブリダイゼーションが可能であるかを判定します。
*   **対称適応線形結合 (SALC) の抽出と表示**: 各既約表現について、リガンドの基底から対称適応線形結合（SALC）を抽出し、その係数を表示します。これは、各リガンド基底が特定の対称軌道にどのように寄与しているかを示します。

プログラムはコマンドライン引数としてJSON形式の入力ファイルを指定し、解析結果を標準出力に表示します。

#### 2) 必要な非標準ライブラリとインストール方法

このプログラムは以下の非標準ライブラリに依存しています。

*   **`numpy`**: 数値計算、特に配列操作に使用されます。
    *   **インストール方法**:
        ```bash
        pip install numpy
        ```
*   **`tkpg`**: このプログラムの核心機能を提供するカスタムライブラリです。`tkpg.core` モジュールや、点群ごとのプラグイン（例: `tkpg/Oh.py`, `tkpg/C4v.py`）を含みます。
    *   **インストール方法**: `tkpg` はPyPI（Python Package Index）で公開されている標準的なライブラリではない可能性があります。そのため、通常は以下のいずれかの方法で利用可能にする必要があります。
        1.  **プログラムと同じディレクトリに配置**: `analyze_symmetry.py` スクリプトと同じディレクトリに `tkpg` という名前のパッケージディレクトリ（`tkpg/__init__.py`, `tkpg/core.py` などのファイルを含む）が存在するように配置します。
        2.  **`PYTHONPATH` を通す**: `tkpg` パッケージの親ディレクトリのパスを環境変数 `PYTHONPATH` に追加します。
        3.  **開発者からの指示に従う**: `tkpg` を提供する開発者から別途インストール方法（例: `git clone` して `pip install -e .` など）が指示されている場合はそれに従います。

#### 3) 必要な入力ファイル

プログラムは、リガンドの構造情報や解析設定を記述したJSONファイルを必要とします。コマンドライン引数 `--infile` で指定され、デフォルトは `structure.json` です。

*   **ファイル形式**: JSON
*   **内容**:
    *   `"ligands_pos"` (必須): リガンドの3次元座標のリスト。例: `[[x1, y1, z1], [x2, y2, z2], ...]`
    *   `"d_orbital"` (任意, デフォルト: `"d_xy"`): 解析対象の中心金属d軌道の種類。`"d_xy"`, `"d_yz"`, `"d_zx"` (または `"d_xz"`), `"d_x2-y2"`, `"d_z2"` のいずれか。
    *   `"mode"` (任意, デフォルト: `"full"`): リガンドの基底構築モード。`"full"` (p/d軌道まで考慮) または `"sigma"` (主にσ結合方向を考慮)。
    *   `"tolerances"` (任意): 許容誤差に関する設定。
        *   `"tol_match_geom"` (任意, デフォルト: `5e-3`): 幾何学的なマッチングの許容誤差。
        *   `"tol_match_D"` (任意, デフォルト: `5e-3`): 表現の指標計算における許容誤差。
    *   `"salc"` (任意): SALC抽出に関する設定。
        *   `"salc_eig_tol"` (任意, デフォルト: `1e-6`): SALC抽出時の固有値の許容誤差。
        *   `"coeff_tol"` (任意, デフォルト: `1e-6`): 可約表現の分解係数表示の最小しきい値。
        *   `"print_coeffs"` (任意, デフォルト: `true`): 可約表現の分解係数を表示するかどうか。
        *   `"print_salc_thr"` (任意, デフォルト: `1e-3`): SALCの係数表示の最小しきい値。
        *   `"max_salc_per_irrep"` (任意, デフォルト: `null`): 各既約表現で表示するSALCの最大数。
    *   `"autodetect"` (任意): 点群自動検出に関する設定。
        *   `"min_rate_strict"` (任意): 特定の点群に対する厳密なヒット率しきい値を設定する辞書。例: `{"Oh": 0.70, "C4v": 0.80}`。

*   **`structure.json` の例**:
    ```json
    {
        "ligands_pos": [
            [1.0, 0.0, 0.0],
            [-1.0, 0.0, 0.0],
            [0.0, 1.0, 0.0],
            [0.0, -1.0, 0.0],
            [0.0, 0.0, 1.5],
            [0.0, 0.0, -1.5]
        ],
        "d_orbital": "d_z2",
        "mode": "sigma",
        "tolerances": {
            "tol_match_geom": 0.005,
            "tol_match_D": 0.005
        },
        "salc": {
            "salc_eig_tol": 1e-6,
            "coeff_tol": 1e-6,
            "print_coeffs": true,
            "print_salc_thr": 0.001,
            "max_salc_per_irrep": 3
        },
        "autodetect": {
            "min_rate_strict": {
                "Oh": 0.70,
                "C4v": 0.80
            }
        }
    }
    ```

#### 4) 実行後に生成される出力ファイル

このプログラムは、明示的にファイルを生成または保存しません。すべての解析結果は**標準出力 (stdout)** にテキスト形式で表示されます。

#### 5) コマンドラインでの使用例 (Usage)

入力ファイル `structure.json` を使用してプログラムを実行する例です。

```bash
python analyze_symmetry.py --infile structure.json
```

入力ファイル名を省略した場合、デフォルトの `structure.json` が使用されます。

```bash
python analyze_symmetry.py
```