tsopt¶
pdb2reaction tsopt は、遷移状態(TS)候補を一次鞍点に最適化します。虚振動数チェックを内蔵しています。候補には path-opt / path-search の最高エネルギー像(HEI: highest-energy image)、または自前の構造を使えます。
optimizer は --opt-mode で選びます。ほとんどの系では --opt-mode hess(デフォルトの RS-P-RFO: Restricted-Step Partitioned Rational Function Optimization、Banerjee)を使ってください。完全 Hessian を用いるため、一般的により堅牢です。RS-P-RFO で収束しない場合や完全 Hessian の再計算コストが過大な場合は、--opt-mode grad(Hessian-Guided Dimer)に切り替えます。候補に複数の虚振動数があり余分なモードの除去が必要な場合は、--flatten(デフォルト無効)を有効化します。
tsopt は、YAML 上書き後も RFO 系および Dimer optimizer の
reject_uphill を常に false に固定します。鞍点探索では反応モードに
沿った物理エネルギー上昇を許す必要があるためです。
--reject-uphill/--no-reject-uphill は最小値最適化(opt と all の
IRC 後エンドポイント再最適化)だけに適用されます。
optimizer終了時、tsopt は最終構造を保持します。終端exact PHVAは数値収束後だけ実行し、非収束またはstalledならPHVAを実行せず停止します。PHVAが失敗した場合も構造は破棄せず、振動数を捏造せずに失敗理由を記録します。数値optimizer statusと鞍点次数は独立です。一次TS認定には虚振動がちょうど1本であること、意図した変位、そしてircの正しい端点接続が必要です。別途のfreqは完全な振動解析や熱化学補正が必要な場合だけ実行します。
通常の終端outcomeと致命的errorの境界¶
条件 |
|
|
|---|---|---|
収束条件未達、明示cycle上限到達、またはopt-inのenergy plateau |
最終構造とtrajectoryを保持し、終端PHVAをskip |
TS成果物を登録後、IRC前停止 |
終端PHVA失敗 |
構造を保持し、 |
成果物登録後にIRC前停止 |
不正入力/geometry、または |
structured error envelopeへ進み、それ以前に書かれたfileだけをbest effortで保持 |
通常の数値非収束へ読み替えずstageを中断 |
TS 初期構造がまず必要な場合は、2 端点なら path-opt、2 構造以上なら path-search を実行し、得られた HEI を tsopt → irc の順で最適化・検証してください。mmCIF入力は内部PDBへ変換され、成果物には元IDを復元したCIFも生成されます。XYZ/GJF入力では--ref-pdbにPDBまたはmmCIF topologyを指定できます。
--ref-mode は通常の単独 tsopt に必要なoptionではなく、主に all 内部の MEP→TS handoffです。同じ原子順のCartesian 3N候補を.npz、.npy、または空白区切りtext(単一vectorまたは2次元candidate table)から読み込みます。all はHessian TS optimizerに対してMEP接線候補をCPU/file cache経由で渡し、energyを読めない旧trajectoryでは正規化secantへfallbackします。Dimerは--ref-modeを使用しません。all --no-tsopt-from-mep-tanではcache作成・利用を止め、初期構造Hessianの振動modeからrootを選びます。これは初期Hessianそのものの置換ではなく、root identityとoverlap追跡の参照方向です。終端exact PHVAが鞍点次数を決め、n_imag=0はno_imaginary、n_imag>1はhigher_orderとして数値収束statusとは別に記録されます。
接線は初期Hessian rootを選び、modeが回転した後もoverlapで追跡するために使います。失敗した探索を別の探索へ自動変換する機能ではありません。デフォルトでは一時的なmode-lossによるtrial棄却、quasi-Newton固有値構造gate、自動saddle recovery、自動変位multistartを実行しません。終端exact PHVAは鞍点次数を判定しますが、数値optimizer statusを書き換えません。n_imag = 0はno_imaginary、n_imag > 1はhigher_orderであり、後者は一次TS認定ではないものの、数値収束済みで有効な負rootを選べる場合に限りallが警告付き診断IRCへ進むことがあります。
--flattenは余剰虚振動を除くための独立した明示optionです。余分な負方向は除去できますが、欠けた反応modeは生成できません。
命名規則の注意: CLI は
grad|dimer(= Dimer)、hess|rsprfo(= RS-P-RFO、デフォルト)、およびrsirfo(= RS-I-RFO)/trim(= TRIM)を受け付けます。YAML ではトップレベルのhessian_dimer:(Dimer)ブロック、またはrsirfo:ブロック(RS-P-RFO・RS-I-RFO・TRIM が共用)を直接指定してください。
TS 候補を得る 2 つの経路¶
tsopt は既に手元にある候補を精密化します。その候補を構築するには補完的な 2 つの方法があり、手元の情報に合わせて選びます。
経路 |
サブコマンド |
使う場面 |
動作 |
|---|---|---|---|
(a) MEP / 経路探索 |
両端点(反応物および生成物)があり、TS を自動でブラケットしたい |
再帰的な最小エネルギー経路探索(GSM / DMF)と結合変化検出。多段階経路を自動分割し、各反応区間を精密化し、区間ごとの最高エネルギー像( |
|
(b) 距離拘束スキャン |
反応物のみがある、または特定の反応距離を直接駆動したい |
調和距離拘束 |
opt --restraint フラグはありません。opt は --dist-freeze(調和拘束、強さは --bias-k)で距離を拘束しますが駆動はせず、距離を駆動する積み上げ経路は scan(--preopt / --endopt で駆動経路まわりの端点を緩和できる)です。いずれの経路で得た候補も tsopt → freq → irc に渡して最適化・検証します。
実行例¶
PDB 候補のデフォルト RS-P-RFO 最適化:
pdb2reaction tsopt -i ts_cand.pdb -q 0 -m 1 --out-dir ./result_tsopt
dimer モード + 解析的 Hessian(VRAM に余裕がある場合):
# VRAM に余裕がある場合に dimer モード + 解析的Hessianで実行する
pdb2reaction tsopt -i ts_cand.pdb -q 0 -m 1 \
--opt-mode grad --hessian-calc-mode Analytical --out-dir ./result_tsopt_grad
RS-P-RFO モードを YAML 上書きと併用:
# RS-P-RFO モードを YAML 上書きと併用する
pdb2reaction tsopt -i ts_cand.pdb -q 0 -m 1 \
--opt-mode hess --config tsopt.yaml --out-dir ./result_tsopt_hess
RS-P-RFO モードで flatten を有効化:
# RS-P-RFO モードで flatten を有効化して実行する
pdb2reaction tsopt -i ts_cand.pdb -q 0 -m 1 \
--opt-mode hess --flatten --out-dir ./result_tsopt_flatten
最適化軌跡を保存して確認したい場合は --dump を追加します。
処理の流れ¶
電荷/スピン解決: 電荷は標準の優先順位チェーンで解決されます。詳細は CLI 規約: 電荷の指定 を参照してください。
構造ロードと freeze-links: 構造は
pysisyphus.helpers.geom_loaderで読み込まれます。--freeze-linksが有効な場合、キャップ水素の親原子は自動的に凍結されます(キャップ水素と凍結原子 を参照)。MLIP Hessian(デフォルト: UMA):
--hessian-calc-modeで解析的 Hessian と有限差分 Hessian を切り替えます。いずれも活性(PHVA)部分空間を考慮します。凍結原子が存在する場合、MLIP バックエンドは活性ブロックのみを返すことがあります。Hessian 評価モードの詳細は Hessian 評価モード を参照してください。Dimer モード詳細:
Hessian Guided Dimer 段階は、active部分空間のexact Hessian を周期的に評価してダイマー方向を更新します。剛体モード処理は constrained に固定され、凍結anchorを動かさない全系剛体運動だけを除去します。保存・回転・試行する全方向で凍結Cartesian成分をゼロに保ち、中心外のforce評価でも凍結座標を中心imageと厳密に一致させます。
root == 0のときは最小固有対にtorch.lobpcgを優先し、失敗時はtorch.linalg.eighにフォールバックします。--flattenが有効な場合、フラット化ループはΔx とΔg を用い、Bofill(SR1/MS ↔ PSB ブレンド;hessian_dimer.flatten_loop_bofillで切替)で活性 Hessian を更新します。各ループは虚振動数モード推定 → 1 回フラット化 → ダイマー方向再更新 → dimer+L-BFGS マイクロ区間 → (任意で)Bofill 更新を実行します。虚振動数モードが 1 つになったら最終的な正確な Hessian で振動解析を行います。root != 0の場合は初期ダイマー方向のみその root を使用し、以降の更新は最も負のモード(root = 0)に従います。RS-I-RFO モード: RS-I-RFO を実行し、任意の Hessian 参照や R+S 分割セーフガード、マイクロサイクル制御は
rsirfoセクションで設定します。--flattenが有効で収束後も虚振動数モードが複数残る場合、追加モードをフラット化して RS-I-RFO を再実行し、虚振動数モードが 1 つになるか上限に達するまで繰り返します。モード出力と変換: 絶対値が設定した閾値(デフォルト 5 cm⁻¹)未満の虚振動数モードは無視し、それ以外を
vib/imag_*_trj.xyzに書き出します。変換が有効な場合、PDB入力はPDB companion、mmCIF/oversized-PDB入力はPDBと元IDを復元したCIFを出力します。Gaussian templateでは最終構造のみ.gjfを生成します。
出力¶
実行結果は result.json、final_geometry.* の最終構造、vib/imag_* モード(妥当な TS ではちょうど 1 つ)から検証します。
result_tsopt/final_geometry.pdb(またはfinal_geometry.xyz)result_tsopt/vib/imag_*_trj.xyzresult_tsopt/vib/imag_*.pdb(PDB 入力の場合)
out_dir/ (デフォルト:./result_tsopt/)
├─ final_geometry.xyz # 常に書き込み
├─ final_geometry.pdb # 入力がPDBの場合(変換有効時)
├─ final_geometry.cif # mmCIF/oversized-PDB入力(変換有効時)
├─ final_geometry.gjf # 入力がGaussianの場合(変換有効時)
├─ optimization_all_trj.xyz # --dumpがTrueのときの dimer モードダンプ
├─ optimization_all.pdb # PDB 入力の dimer モードに対応する PDB(変換有効時、--dump)
├─ optimization_all.cif # bridge入力の元ID復元CIF
├─ optimization_trj.xyz # --dump時の RS-P-RFO/RS-I-RFO/TRIM 軌跡
├─ optimization.pdb # rsirfo モードに対応する PDB(変換有効時、--dump)
├─ optimization.cif # bridge入力の元ID復元CIF
├─ vib/
│ ├─ imag_±XXXX.Xcm-1_trj.xyz
│ ├─ imag_±XXXX.Xcm-1.pdb
│ └─ imag_±XXXX.Xcm-1.cif # bridge入力
└─.dimer_mode.dat # dimer モード方向シード
終了コードは CLI 規約の 終了コード を参照。
CLI オプション¶
コマンド形式:
pdb2reaction tsopt -i INPUT.{pdb|xyz|trj|...} [-q CHARGE] [-l, --ligand-charge <number|'RES:Q,...'>] [-m 2S+1] \
[-b/--backend uma|orb|mace|aimnet2] \
[--opt-mode grad|hess|dimer|rsirfo|trim|rsprfo] [--flatten/--no-flatten] \
[--freeze-links/--no-freeze-links] [--max-cycles N] [--thresh PRESET] \
[--hessian-calc-mode Analytical|FiniteDifference] \
[--convert-files/--no-convert-files] [--ref-pdb FILE]
pdb2reaction tsopt --help でコアオプション、pdb2reaction tsopt --help-advanced で全オプションを表示します。入力ファイルの完全な要件(水素、元素列、原子順序の整合性、電荷指定)は CLI 規約 を参照してください。
オプション |
説明 |
デフォルト |
|---|---|---|
入力と電荷 |
||
|
単一geometry( |
必須 |
|
総電荷。 |
テンプレート/導出が適用されない限り必須 |
|
単一の整数(例: |
None |
|
スピン多重度(2S+1) |
|
|
XYZ/GJF入力に使用する参照PDBまたはmmCIF topology |
None |
バックエンドと計算 |
||
|
MLIP バックエンド |
|
|
UMA 予測器の並列度。 |
|
|
ノードあたりのワーカー数。並列予測器に渡されます |
|
|
MLIP Hessian モード( |
|
活性領域の凍結 |
||
|
PDB/mmCIF 入力(または |
|
|
凍結する原子の 1 始まりインデックスをカンマ区切りで明示的に指定(例: |
None |
TS optimizer とモード |
||
|
TS optimizer プリセット(Choice: |
|
|
|
None |
|
Dimer と RS-P-RFO / RS-I-RFO / TRIM Hessian family の余剰虚振動モード flatten を有効化。 |
|
|
最適化座標系( |
|
|
MLIP バックエンド精度。バックエンド固有のキー(UMA |
バックエンドデフォルト (uma |
閾値とサイクル |
||
|
収束プリセットの上書き( |
|
|
|
|
出力と設定 |
||
|
出力ディレクトリ |
|
|
PDB/mmCIF/Gaussian入力用の XYZ/TRJ → PDB/CIF/GJF 出力を切り替え |
|
|
軌跡をダンプ |
|
|
|
|
|
明示 CLI オプションより前に適用するベース YAML 設定ファイル |
None |
|
解決後の設定レイヤーを表示して実行を継続 |
|
|
実行せずに入力/設定を検証し、実行計画を表示 |
|
--flatten 優先順位の注意¶
Note
--flatten はデフォルトで無効です(優先順位の注意)。 defaults.py では flatten_max_iter: 50 が定義されていますが、CLI は YAML 適用前の初期値を 0 にします。実効値は以下のとおりです:
CLI
--flatten未指定 → YAML でhessian_dimer.flatten_max_iterを明示的に指定しない限りflatten_max_iter = 0(余剰モード除去ループ無効)。フラット化のカウンタは Dimer・RS-I-RFO のどちらの経路でもhessian_dimerブロックからのみ読み取られます。defaults.pyの値 50 は無視されます。CLI
--flatten指定 → YAML /defaults.pyの値が有効(デフォルトflatten_max_iter = 50)。引き続き YAML で上書きできます。CLI
--no-flatten指定 → YAML より優先してflatten_max_iter = 0。
TS 候補に複数の虚振動数がある場合は、--flatten を追加して余分なモードの除去ループを有効にしてください。
pathのHEIからTS最適化がなお失敗する場合は、原因に応じて2通りを試します。
余分な虚振動が残る場合は
--flattenを追加します。allworkflowでは--refine-pathで再帰的path-searchを実行し、 TSOPT前のHEIを精密化します。
2番目は意図的にデフォルトOFFです。悪い/ノイズの多いpathを不要な素反応segmentへ 分割し、MEP・TSOPT・IRC・freqの計算量を何倍にもする可能性があります。まず未精密化 MEPを確認し、粗いHEIが原因と判断できる場合に有効化してください。
最適化後に虚振動数の本数が誤っている場合¶
真の一次鞍点は虚振動数をちょうど 1 つだけ持ち、そのモードは反応座標に沿って変位します。tsopt が代わりに偽の 2 本目の小さい虚振動数を報告したり、支配的な反応モードが無い場合は、以下のレバーを段階的に強めます。これらは補完的なので併用できます。
レバー |
フラグ |
効果 |
|---|---|---|
精度を比較する |
|
数値挙動はバックエンド・モデル・対象系に依存します。AIMNet2はfp64を受け付けず、どちらの設定も真の負曲率は除去しません |
内部座標 |
|
最適化の条件付けを変えます。 |
小さいモードのフラット化 |
|
余分な虚振動数モードのフラット化ループを実行( |
モード変位と optimizer の停止理由を確認し、対応する精度・座標設定を選んで再実行します。--flatten は余分なモードにだけ使用します。例:
pdb2reaction tsopt -i ts_candidate.xyz -q -1 -m 1 \
--precision fp64 --coord-type dlc --flatten -o result_tsopt
よくあるエラーのレシピ → 収束・後処理で止まる も参照してください。
生成物側から開始したスキャンの障壁の読み方¶
この TS 候補を生成した scan(または経路)が生成物から始まった場合、報告される生のバリアは逆方向のバリア E(TS) − E(product) です。通常ほしい順方向のバリアは反応物から計算します。
実行内容 |
順方向バリア |
|---|---|
生成物始点のスキャン |
|
これはフラグではなく読み取り時の解釈です。特に結晶構造の生成物複合体から開始した場合は、バリアを引用する前にスキャンがどちらの端点から始まったかを必ず確認してください。scan: スキャン方向とバリアの符号 も参照してください。
条件を揃えた変異体 vs WT 比較¶
MEP の入力契約と系をまたぐ比較を混同しないでください。各 R→IM→P 経路の内部では、すべての構造が同じ原子を同じ順序で持つ必要があります。 一方、実際の WT→変異体置換では残基種や原子数が変わり得るため、WT と 変異体の全エネルギーを直接差し引いてはいけません。各系の内部で求めた 活性化エネルギーまたは自由エネルギーを比較します。
ΔΔG‡ = (G_TS − G_R)_mutant − (G_TS − G_R)_WT
意図した変異以外については、選択する残基位置とクラスター境界・cap の方針を化学的に妥当な範囲で揃えます。半径による独立抽出では境界残基が 一方だけに入ることがあるため、選択結果を監査してください。
protonation、電荷決定方法、backend/model、precision、拘束、熱化学条件を 揃えます。変異が formal charge や protonation を変える場合、検証済み全電荷 は正当に異なり得るので、見かけを対称にするため同じ
-qを強制しません。同じ組成の機構どうしを比較する場合は、共通の原子集合と順序を使います。
# 各経路内では原子を一致させ、2つのclusterでは境界条件を揃える
pdb2reaction all -i wt_cluster.pdb -l 'GPP:-3,SAM:1' --tsopt --thermo -o result_wt
pdb2reaction all -i mutant_cluster.pdb -l 'GPP:-3,SAM:1' --tsopt --thermo -o result_mutant
YAML 設定¶
共通セクションについては YAML リファレンス を参照してください。必要な値だけ変更してください。
共通設定(両モード共通)¶
geom と calc のキーは正規定義から変更ありません。詳細は YAML リファレンスの geom と calc を参照してください。
opt ブロックは opt と同じキーを使用し、以下が tsopt 固有のデフォルトです:
opt:
thresh: baker # tsopt のデフォルト(`opt` は `gau`)
out_dir: ./result_tsopt/ # tsopt のデフォルト(`opt` は `./result_opt/`)
Note
energy plateau stop(opt-in、デフォルト無効)。 Hessian-family TS optimizer(RS-P-RFO、
RS-I-RFO、TRIM、Dimer)は共通の energy_plateau 設定を参照し、--stop-plateau で有効化します。
有効時、直近50 stepの energy rangeが --stop-plateau-thresh(default 1×10⁻⁴ au)を下回ると、
stalled として停止し、未収束のまま max_cycles に到達した場合と同様に終端 PHVA を実行しません。backend/model/system依存のforce floorが選択閾値への
到達を妨げる場合に無駄なcycleを避けられます。デフォルトで無効なのは、平坦なenergyで停止した
TS探索が余分な虚振動を残したままになりやすいためです。
Dimer モード(--opt-mode grad)¶
--opt-mode grad(Hessian Guided Dimer + L-BFGS)で使用します。
hessian_dimer ブロック全体(同じ階層の dimer: と lbfgs: を含む)は hessian_dimer に記載されています。hessian_dimer.lbfgs のキーは lbfgs と共通で、tsopt は値をこの兄弟セクションから読みます:
hessian_dimer:
lbfgs:
out_dir: ./result_tsopt/ # tsopt の上書き(defaults.py の値は ./result_opt/)
RS-P-RFO / RS-I-RFO モード(--opt-mode hess、デフォルト → RS-P-RFO)¶
--opt-mode hess(RS-P-RFO、デフォルト)で使用します(rsirfo は RS-I-RFO、trim は TRIM を選択。3 つともこのブロックを共用します)。
rsirfo ブロック全体は rsirfo に記載されています(trust-region と Hessian-update の各キーは rfo からも継承)。tsopt 固有の上書きは以下のとおりです:
rsirfo:
trust_max: 0.10 # 最大信頼半径 (bohr)
out_dir: ./result_tsopt/ # tsopt の上書き(defaults.py の値は ./result_opt/)
hessian_recalc: 500 # N マクロステップごとに exact Hessian を再計算
saddle_recovery_check_interval: 50 # 自動回復をYAMLで有効化した場合のexact PHVA間隔
saddle_recovery_max_cycles: 0 # n_imag=0 自動回復はデフォルト無効
Tip
最適化中に TS モードが別のルートに切り替わる場合(例: 複数の虚振動数が存在する場合)は rsirfo.track_mode_by_overlap: true を設定してください。
Tip
TS 収束が遅い場合や最適化中に TS モードが失われる場合は、rsirfo セクションの hessian_recalc を小さくしてみてください(例: 50–200)。正確なHessian再計算の頻度を上げることで、追加のHessian評価コストと引き換えに堅牢性が向上します。
注記¶
絶対値が設定した閾値(デフォルト 5 cm⁻¹)未満の虚振動は、最終 TS 判定、モードファイル出力、平坦化のすべてで無視します。Hessian-family optimizer は一次鞍点のrootを1個だけ追跡します。YAMLでは1要素のlist(例:
rsirfo.roots: [0])で設定し、空listまたは複数rootは拒否されます。Dimer は別の単数 keyhessian_dimer.root(default0)を使います。tsoptに--rootCLI flag はありません(ircとは異なります)。--opt-modeはワークフロー選択用です(デフォルト:rsprfo)。YAML のモードマッピングを手動で変更するのではなく、目的のアルゴリズムに合ったモードを選択してください。Dimer方向、回転force、flatten、最終exact PHVA検証は
freqと同じ固定の constrained 処理を使用します。Dimerは中心imageが変わるたびにこの基底を再構築します。全凍結anchorと両立する真の剛体null方向でない限り、active fragmentの並進を差し引きません。Hessian RFO最適化自体は、この射影を行わずactive-DOF Cartesian Hessian を扱います。詳細は凍結原子を参照してください。設定の優先順位は CLI 規約: 設定の優先順位 を参照してください。
関連項目¶
典型エラー別レシピ — 症状起点の切り分け
トラブルシューティング — 詳細な切り分け
path-search — TS 候補(HEI)を特定する MEP 探索
irc — 最適化された TS からの反応経路追跡
freq — 完全な振動解析と熱化学補正(虚振動数チェックは
tsoptが内部で実行済み)all — 抽出 → MEP → tsopt → IRC(→ オプションで freq/DFT)を連鎖する一気通貫ワークフロー
YAML リファレンス —
hessian_dimer(Hessian Guided Dimer)とrsirfoの完全な設定オプション用語集 — TS、Dimer、RS-I-RFO、Hessian の定義