# `analyze_symmetry-V1.py` 解析

## 1) プログラムの動作

このPythonプログラム `analyze_symmetry-V1.py` は、中心金属原子とそれに配位する配位子群の対称性を解析し、特に中心金属のd軌道と配位子軌道間のハイブリダイゼーションの可能性を評価し、配位子の対称適応型線形結合（SALC: Symmetry Adapted Linear Combinations）を生成することを目的としています。

**主要な機能:**

1.  **入力の正規化と中心化**: プログラムは、最初にユーザーが提供する配位子座標 `ligands_pos` の重心を計算し、その重心が原点に位置するようにすべての座標を平行移動します。
2.  **点群の自動検出とアライメント**:
    *   与えられた配位子座標の空間配置から、その構造が主に「Oh」（八面体）または「C4v」（正方錐または伸長八面体）のいずれに近いかを自動的に判定します。
    *   検出された点群の標準的な軸（例: Ohの場合はx,y,z軸、C4vの場合はz軸が主軸）に沿うように配位子群全体を回転させ（アライメント）、内部計算を簡素化します。
    *   点群の判定は、各点群の対称操作に対して配位子集合がどれだけ維持されるか（ヒット率）に基づいて行われます。
3.  **局所フレームと配位子基底の構築**:
    *   各配位子について、中心金属から配位子への方向をz軸とする局所的な直交座標系（フレーム）を構築します。
    *   ユーザーが指定した `mode`（"s", "p", "sigma", "full"）に基づいて、各配位子におけるS軌道、P軌道、またはシグマ/パイ結合軌道に対応する局所的な基底関数を定義します。
4.  **還元可能な表現（Reducible Representation）の構築**:
    *   検出された点群の各対称操作に対し、定義された配位子基底がどのように変換されるかを示す表現行列を計算します。
    *   これらの表現行列のトレース（対角成分の和）を収集し、配位子軌道全体の集合が形成する還元可能な表現 `Gamma` の指標（キャラクター）を構築します。
5.  **還元可能な表現の既約表現（Irreducible Representation）への分解**:
    *   `Gamma` の指標と点群の既約表現の指標（キャラクターテーブル）を用いて、`Gamma` が各既約表現を何回含むか（多重度）を計算します。
6.  **ハイブリダイゼーションの評価**:
    *   ユーザーが指定した中心金属の `d_orbital`（例: "d_xy"）が、検出された点群においてどの既約表現に属するかを内部テーブル（`d_orbital_irreps_Oh`, `d_orbital_irreps_C4v`）で確認します。
    *   そのd軌道が属する既約表現が、配位子軌道の還元可能な表現 `Gamma` に含まれているか（多重度が0より大きいか）をチェックし、対称性の観点からハイブリダイゼーションが可能であるかを判断します。
7.  **SALC（Symmetry Adapted Linear Combinations）の抽出と表示**:
    *   多重度が0より大きい各既約表現に対し、対応する射影演算子を構築します。
    *   この射影演算子の固有ベクトルを計算し、指定された閾値（`salc_eig_tol`）よりも大きい固有値を持つ固有ベクトルをSALCとして抽出します。
    *   抽出されたSALCは、各配位子の局所軌道の線形結合として、その係数と共に標準出力に詳細に表示されます。

**ユーザーが設定可能なパラメータ**:
*   `d_orbital`: 解析対象のd軌道 ("d_z2", "d_x2_y2", "d_xy", "d_xz", "d_yz", "d_zx")。`d_zx` は `d_xz` として扱われます。
*   `ligands_pos`: 配位子の3次元座標のNumPy配列。
*   `mode`: 配位子軌道の種類 ("s", "p", "sigma", "full")。
    *   "s": S軌道のみ
    *   "p": Px, Py, Pz軌道
    *   "sigma": 中心金属への結合軸に沿ったシグマ軌道
    *   "full": シグマ軌道と、それに直交する2つのパイ軌道
*   `tol_match_geom`: 点群検出のための幾何学的な一致許容誤差。
*   `tol_match_D`: 表現行列構築時の位置一致許容誤差。
*   `salc_eig_tol`: SALCを抽出する際の固有値の閾値。
*   `coeff_tol`: 多重度や係数を表示する際の閾値。
*   `print_coeffs`: 分解結果の多重度を表示するかどうかのフラグ。
*   `print_salc_thr`: SALCの係数を表示する際の閾値。この値より小さい係数は表示されません。
*   `max_salc_per_irrep`: 各既約表現から表示するSALCの最大数 (Noneで無制限)。

## 2) 必要な非標準ライブラリとインストール方法

このプログラムは以下の非標準ライブラリを使用します。

*   **`numpy`**: 高度な数値計算、特に配列操作や線形代数演算に使用されます。

**インストール方法:**

`pip` コマンドを使用してインストールできます。
```bash
pip install numpy
```

注: `math` ライブラリはPythonの標準ライブラリに含まれているため、別途インストールは不要です。

## 3) 必要な入力ファイル

このプログラムは、外部のファイルからデータを読み込む機能は持っていません。
必要なすべての入力データは、**スクリプトの先頭にある `user inputs` セクションでPythonコードとして直接定義され、初期化されます。**

ユーザーは、解析したい構造や軌道に応じて、以下の変数の値を直接編集してからプログラムを実行する必要があります。

*   `d_orbital`: 例: `"d_xy"`
*   `ligands_pos`: 例: `np.array([[1.0, 0.0, 0.0], ...], float)`
*   `mode`: 例: `"p"`

## 4) 実行後に生成される出力ファイル

このプログラムは、**外部ファイルは一切生成しません。**
すべての解析結果は、プログラムの実行中に**標準出力（コンソール）**に直接表示されます。

出力される情報には以下のものが含まれます。

*   自動検出された点群の名称
*   中心金属の指定d軌道と、それに対応する既約表現
*   配位子軌道の還元可能な表現を既約表現に分解した結果（各既約表現の多重度）
*   中心金属d軌道と配位子軌道間のハイブリダイゼーションの対称性に関する適合性チェックの結果
*   各既約表現に属するSALCの具体的な線形結合（配位子番号と軌道名、およびその係数）

## 5) コマンドラインでの使用例 (Usage)

このプログラムはコマンドライン引数を受け付けないため、Pythonインタープリタで直接スクリプトを実行するだけです。

**実行前の準備:**

1.  テキストエディタで `analyze_symmetry-V1.py` ファイルを開きます。
2.  ファイルの先頭にある `# user inputs` セクションを見つけます。
3.  以下の変数の値を、解析したい分子の対称性や軌道の種類に合わせて編集・設定します。
    *   `d_orbital = "d_xy"` （または `"d_z2"`, `"d_xz"` など、コメントアウトを解除して設定）
    *   `ligands_pos = np.array([...])` （配位子のXYZ座標を記述）
    *   `mode = "p"` （または `"s"`, `"sigma"`, `"full"` など、コメントアウトを解除して設定）
    *   必要に応じて、`tol_match_geom` や `salc_eig_tol` などの閾値も調整します。

**実行方法:**

設定が完了したら、ファイルを保存し、ターミナルまたはコマンドプロンプトで以下のコマンドを実行します。

```bash
python analyze_symmetry-V1.py
```

実行後、解析結果がコンソールに表示されます。