Technical Documentation for analyze_symmetry.py

このドキュメントは、Pythonプログラム analyze_symmetry.py の技術的な側面を詳細に解説します。

プログラムの動作

analyze_symmetry.py は、与えられた配位子の三次元座標データに基づいて、分子の点群を自動検出し、その対称性に基づいて対称適応線形結合 (Symmetrically Adapted Linear Combinations, SALC) を計算するプログラムです。さらに、中心金属の特定のd軌道と配位子グループとの間に、対称性によるハイブリダイゼーションが可能であるかを評価します。

主な機能は以下の通りです。

  1. 構造データの読み込み: 配位子の座標、中心金属のd軌道タイプ、解析モード、および各種許容誤差をJSONファイルから読み込みます。

  2. 重心合わせ: 配位子の座標を重心が原点に来るように変換します。

  3. 点群の自動検出: tkpg ライブラリのプラグインを利用して、入力された配位子配置に最も適合する点群を自動で識別します。この検出は、対称要素への「ヒット数」、群の位数、および「ヒット率」に基づいて最適化されます。

  4. 還元可能な表現の構築: 選択された点群のもとで、配位子全体で形成される還元可能な表現 \(\Gamma\) を構築します。

  5. 既約表現への分解: 構築された還元可能な表現 \(\Gamma\) を、選択された点群の既約表現 (Irreducible Representation, IR) へと分解し、各IRの多重度を計算します。

  6. ハイブリダイゼーションの評価: 指定された中心金属のd軌道が属する既約表現が、配位子の還元可能な表現の分解結果に含まれているかを確認し、対称性によるハイブリダイゼーションの可能性を評価します。

  7. SALCの抽出と表示: 各既約表現に対応するSALCを抽出し、その基底関数を標準出力に表示します。

このプログラムは、錯体化学や分子軌道理論における分子の対称性を理解し、軌道の相互作用を予測するための基礎的なツールとして活用されます。

原理

analyze_symmetry.py は、群論と量子化学の基本原理に基づいて動作します。

1. 点群の自動検出

プログラムは tkpg ライブラリのプラグインを利用して、複数の点群に対する配位子の配置の対称性を評価します。各点群プラグインは、その点群の対称操作と典型的な配位子配置の情報を含んでいます。 検出プロセスは以下のステップで行われます。

  1. 各点群プラグインが提供する align_guess 関数を用いて、入力された配位子群をその点群の標準的な向きに合わせるための回転行列 \(R\) を推定します。

  2. アラインメントが成功した場合、core.symmetry_hit_rate 関数を使用して、アラインメントされた配位子群が点群の対称操作にどれだけ一致するかを評価し、「ヒット数 (hits)」と「ヒット率 (hit_rate)」を計算します。

  3. 複数の点群の評価結果を比較し、「ヒット数が多い」「群の位数が大きい」「ヒット率が高い」という優先順位で最適な点群を選択します。ユーザーは特定の点群に対して最低ヒット率を設定することで、より厳密な検出を行うことができます。

2. 還元可能な表現 (\(\Gamma\)) の構築

配位子基底(例えば、配位子原子の\(\sigma\)軌道や\(\pi\)軌道)が点群の対称操作によってどのように変換されるかを記述するために、還元可能な表現 \(\Gamma\) が構築されます。core.build_reducible_characters 関数がこれを行います。 還元可能な表現の指標 \(\chi(\hat{R})\) は、各対称操作 \(\hat{R}\) が基底をどのように変換するかを示す変換行列のトレースとして計算されます。

3. 既約表現への分解

構築された還元可能な表現 \(\Gamma\) は、その点群の既約表現の線形結合として一意に分解することができます。各既約表現 \(IR_i\)\(\Gamma\) の中に何回出現するか(多重度 \(a_i\))は、大直交性の定理に基づく以下の式を用いて計算されます。

\[a_i = \frac{1}{|G|} \sum_{\hat{R}} \chi(\hat{R}) \chi_i(\hat{R})^*\]

ここで、

  • \(a_i\): 既約表現 \(IR_i\) の多重度

  • \(|G|\): 点群の位数 (対称操作の総数)

  • \(\hat{R}\): 点群の各対称操作

  • \(\chi(\hat{R})\): 還元可能な表現 \(\Gamma\) の指標

  • \(\chi_i(\hat{R})^*\): 既約表現 \(IR_i\) の指標の複素共役(実数の指標の場合 \(\chi_i(\hat{R})\) と等しい)

core.decompose_generic 関数がこの分解を実行します。

4. ハイブリダイゼーションの評価

中心金属のd軌道は、特定の点群において特定の既約表現に属します。例えば、正八面体錯体 (Oh点群) の場合、\(d_{z^2}\)\(d_{x^2-y^2}\)\(E_g\) 既約表現に属し、\(d_{xy}, d_{yz}, d_{zx}\)\(T_{2g}\) 既約表現に属します。 配位子の還元可能な表現 \(\Gamma\) を既約表現に分解した結果、中心金属のd軌道が属する既約表現 \(IR_{d}\) が、配位子グループのIR分解に含まれていれば、配位子軌道と金属d軌道の間に、対称性に基づいて相互作用(ハイブリダイゼーション)が可能であると判断されます。

5. SALCの抽出

対称適応線形結合 (SALC) は、特定の既約表現の変換特性を持つ、配位子基底の線形結合です。SALCは、Projection Operator Methodを用いて抽出されます。これは、配位子基底に点群のすべての対称操作を適用し、それぞれの操作で変換された基底に既約表現の指標を重み付けして合計することで得られます。

\[P_i = \frac{1}{|G|} \sum_{\hat{R}} \chi_i(\hat{R})^* \hat{R}\]

この投影演算子 \(P_i\) を任意の基底 \(\phi\) に作用させることで、\(IR_i\) に属するSALCが得られます。core.extract_salc 関数がこの計算を行い、core.print_salc 関数が結果を整形して表示します。

必要な非標準ライブラリとインストール方法

analyze_symmetry.py の実行には、以下の非標準ライブラリが必要です。

  • numpy: 数値計算、特に配列操作に使用されます。

  • tkpg: 点群理論に基づいた分子の対称性解析を行うためのツールキット。各種点群の対称操作、指標表、既約表現情報などをプラグイン形式で提供します。

これらのライブラリは、Pythonのパッケージマネージャー pip を使用してインストールできます。

pip install numpy tkpg

必要な入力ファイル

プログラムは、分子の構造情報と解析設定を含むJSONファイルを必要とします。デフォルトのファイル名は structure.json ですが、コマンドライン引数 --infile で変更可能です。

入力JSONファイルの例とその構造は以下の通りです。

{
  "ligands_pos": [
    [1.0, 0.0, 0.0],
    [0.0, 1.0, 0.0],
    [-1.0, 0.0, 0.0],
    [0.0, -1.0, 0.0]
  ],
  "d_orbital": "d_x2-y2",
  "mode": "sigma",
  "tolerances": {
    "tol_match_geom": 1e-2,
    "tol_match_D": 1e-2
  },
  "salc": {
    "salc_eig_tol": 1e-6,
    "coeff_tol": 1e-6,
    "print_coeffs": true,
    "print_salc_thr": 0.1,
    "max_salc_per_irrep": null
  },
  "autodetect": {
    "min_rate_strict": {
      "D4h": 0.95,
      "C4v": 0.8
    }
  }
}

各キーの説明:

  • ligands_pos (必須): 配位子の3次元座標のリスト。各要素は [x, y, z] の形式の配列です。プログラムは重心を原点に移動します。

  • d_orbital (オプション, デフォルト: "d_xy"): 中心金属のd軌道の種類を指定します。例: "d_xy", "d_yz", "d_zx" (または "d_xz"), "d_x2-y2", "d_z2"

  • mode (オプション, デフォルト: "full"): 配位子基底の構築モード。

    • "full": xyz方向の3つのp軌道に相当する基底を考慮します。

    • "sigma": 配位子-金属結合軸に沿った\(\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の最大数。null の場合、すべてのSALCが表示されます。

  • autodetect (オプション): 点群自動検出に関する設定を含むオブジェクト。

    • min_rate_strict (オプション, デフォルト: {}): 特定の点群に対する厳密な最小ヒット率を設定するための辞書。例えば {"Oh": 0.70, "C4v": 0.80} は、Oh点群が選択されるには最低70%のヒット率が、C4v点群には80%のヒット率が必要であることを意味します。

生成される出力ファイル

analyze_symmetry.py は、いかなるファイルも生成しません。すべての解析結果は標準出力 (コンソール) に表示されます。

コマンドラインでの使用例 (Usage)

プログラムは、以下の形式でコマンドラインから実行します。

python analyze_symmetry.py [OPTIONS]

利用可能なオプション:

  • --infile INFILE: 構造情報が記述されたJSONファイルのパスを指定します。デフォルトは structure.json です。

コマンドラインでの具体的な使用例

ここでは、正方形平面錯体を想定した structure.json を使用した具体的な実行例を示します。

1. structure.json ファイルの準備

以下の内容で structure.json ファイルを作成します。これは、xy平面上に4つの配位子が配置されたD4h対称性を持つ構造を表しています。

{
  "ligands_pos": [
    [1.0, 0.0, 0.0],
    [0.0, 1.0, 0.0],
    [-1.0, 0.0, 0.0],
    [0.0, -1.0, 0.0]
  ],
  "d_orbital": "d_x2-y2",
  "mode": "sigma",
  "tolerances": {
    "tol_match_geom": 1e-2,
    "tol_match_D": 1e-2
  },
  "salc": {
    "print_coeffs": true,
    "print_salc_thr": 0.1,
    "salc_eig_tol": 1e-6
  },
  "autodetect": {
    "min_rate_strict": {
      "D4h": 0.95
    }
  }
}

2. プログラムの実行

structure.json が現在のディレクトリに存在する場合、以下のコマンドで実行します。

python analyze_symmetry.py

または、ファイル名を明示的に指定する場合:

python analyze_symmetry.py --infile structure.json

3. 実行結果の例

上記の structure.json を用いた実行では、以下のような出力がコンソールに表示されることが期待されます。(具体的なSALCの係数は、tkpgのバージョンや内部的な浮動小数点計算の僅かな差により変動する可能性があります。)

[Auto-detected point group]  D4h   (hits=16/16, hit_rate=1.000)

[Candidates]
  D4h : hits=16/16  rate=1.000  ok_align=True  STRICT (thr=0.95)
  D4  : hits= 8/ 8  rate=1.000  ok_align=True       (thr=0.00)
  C4h : hits= 8/ 8  rate=1.000  ok_align=True       (thr=0.00)
  ... (その他の点群候補が続く) ...
  C1  : hits= 1/ 1  rate=1.000  ok_align=True       (thr=0.00)

[Central metal d orbital]
  Orbital : d_x2-y2
  Irrep   : B1g

[Ligand reducible rep decomposition (D4h)]
  A1g: 1.000
  B1g: 1.000
  Eu: 1.000

[Hybridization check]
  ✔ Hybridization allowed by symmetry: ligand contains B1g

[All ligand SALCs (D4h)]  mode=sigma

[SALCs for A1g]  (expected mult≈1.000)
  1.000 * L1 + 1.000 * L2 + 1.000 * L3 + 1.000 * L4  (normalized)

[SALCs for B1g]  (expected mult≈1.000)
  1.000 * L1 - 1.000 * L2 + 1.000 * L3 - 1.000 * L4  (normalized)

[SALCs for Eu]  (expected mult≈1.000)
  1.000 * L1 - 1.000 * L3  (normalized)
  1.000 * L2 - 1.000 * L4  (normalized)

出力の解説:

  • [Auto-detected point group]: 最も適合すると判断された点群が表示されます。この例では D4h で、すべての対称要素がヒットし、ヒット率が1.000(100%)です。

  • [Candidates]: 検出された点群候補のリストが、選択基準に従ってソートされて表示されます。「STRICT」フラグは、autodetect.min_rate_strict で設定された閾値を満たした候補を示します。

  • [Central metal d orbital]: 入力JSONで指定されたd軌道とその軌道が属する既約表現が表示されます。d_x2-y2 軌道はD4h点群では B1g 既約表現に属します。

  • [Ligand reducible rep decomposition (D4h)]: 配位子基底の還元可能な表現が、D4h点群の既約表現に分解された結果が表示されます。この例では、A1g, B1g, Eu の各既約表現がそれぞれ1回ずつ出現することが示されています。

  • [Hybridization check]: 中心金属のd軌道 (B1g) が配位子の還元可能な表現 (A1g, B1g, Eu を含む) に含まれているため、ハイブリダイゼーションが可能であると判断されます。

  • [All ligand SALCs (D4h)]: 各既約表現に対応するSALCが具体的な線形結合の形で表示されます。L1, L2, L3, L4 はそれぞれ1番目から4番目の配位子の軌道基底を表します。例えば、A1g のSALCはすべての配位子の軌道が同相で結合することを示し、これは配位子の\(\sigma\)軌道の対称的な組み合わせに対応します。B1g は隣接する配位子間で逆相になる対称性を示し、Eu は二つの直交する組合せを形成します。