opt¶
Relaxes a single structure toward a local minimum, optionally with distance restraints or imaginary-mode flattening. Use --opt-mode grad (alias lbfgs, default) for L-BFGS minimization or --opt-mode hess (alias rfo) for RFOptimizer. The optimizer comes from pysisyphus, while an MLIP backend (UMA by default; ORB, MACE, and AIMNet2 also available via -b/--backend) provides energies, gradients, and Hessians. Input structures can be .pdb, .xyz, _trj.xyz, or any format supported by geom_loader.
Examples¶
Command form:
pdb2reaction opt -i INPUT.{pdb|xyz|trj|...} [-q CHARGE] [-l, --ligand-charge <number|'RES:Q,...'>] [-m MULT] \
[-b/--backend uma|orb|mace|aimnet2] [--solvent SOLVENT] [--solvent-model alpb|cpcmx] \
[--opt-mode grad|hess|lbfgs|rfo] [--flatten/--no-flatten] [--freeze-links/--no-freeze-links] \
[--dist-freeze '[(i,j,target_Å),...]'] [--one-based|--zero-based] \
[--bias-k K_eV_per_Ų] [--dump/--no-dump] [-o/--out-dir DIR] \
[--convert-files/--no-convert-files] [--ref-pdb FILE]
Basic minimization:
pdb2reaction opt -i input.pdb -q 0 -m 1 --out-dir ./result_opt
Tighter threshold and keep trajectory dumps:
pdb2reaction opt -i input.pdb -q 0 -m 1 --thresh gau_tight --dump \
--out-dir ./result_opt_tight
Add a harmonic distance restraint. The example uses --bias-k 20.0 (a loose restraint suitable for gently guiding the structure toward the target distance); the default bias.k is 300 eV·Å⁻² and is better when you want the restraint to dominate during optimization:
pdb2reaction opt -i input.pdb -q 0 -m 1 \
--dist-freeze '[(1,5,2.0)]' --bias-k 20.0 --out-dir ./result_opt_rest
# 2-tuple form restrains atoms 1 and 5 to their current distance: --dist-freeze '[(1,5)]'
Switch explicitly to RFO mode:
pdb2reaction opt -i input.pdb -q 0 -m 1 --opt-mode hess \
--out-dir ./result_opt_hess
Workflow¶
Optimizer naming: the CLI accepts
grad|lbfgsandhess|rfo; in the YAMLopt_modekey, uselbfgsorrfodirectly. See --opt-mode (subcommand-dependent) for the per-subcommand token→algorithm mapping.Flatten loop:
--flattenenables post-optimization flattening of imaginary vibrational modes. Inopt, all detected imaginary modes are flattened each iteration until none remain or the internal loop cap is reached.Restraints:
--dist-freezeconsumes Python-literal tuples(i, j, target_Å)wheretarget_Åis the target distance in Å; omitting the third element restrains the starting distance.--bias-ksets a global harmonic strength (eV·Å⁻²). Indices default to 1-based but can be flipped to 0-based with--zero-based.Charge/spin resolution: Charge is resolved via the standard priority chain (see CLI Conventions: Charge specification for details).
Freeze atoms: When
--freeze-linksis active, cap-hydrogen parent atoms are automatically frozen (see Cap hydrogen and frozen atoms).Dumping & conversion:
--dumpmirrorsopt.dump=Trueand writesoptimization_trj.xyz; when conversion is enabled, trajectories are mirrored to.pdbfor PDB inputs.opt.dump_restartcan emit restart YAML snapshots.Exit codes: See Exit codes in CLI Conventions.
Outputs¶
out_dir/
├─ final_geometry.xyz # Always written
├─ final_geometry.pdb # Only when the input was a PDB and conversion is enabled
├─ final_geometry.gjf # When a Gaussian template was detected and conversion is enabled
├─ optimization_trj.xyz # Only if dumping is enabled
├─ optimization.pdb # PDB conversion of the trajectory (PDB inputs, conversion enabled)
└─ restart*.yml # Optional restarts when opt.dump_restart is set
The console prints the resolved geom, calc, opt, and lbfgs/rfo blocks, along with cycle-by-cycle progress and total runtime.
See CLI Conventions: Configuration precedence for the full resolution order.
CLI options¶
The full flag list is in the generated command reference; the table below covers the options that need explanation, and the exhaustive list is not hand-duplicated here.
Option |
Description |
Default |
|---|---|---|
|
Input structure accepted by |
Required |
|
Net charge. Required unless a |
Required unless template/derivation applies |
|
Either a scalar integer (e.g., |
None |
|
MLIP predictor parallelism (workers > 1 disables analytic Hessians). See workers > 1 disables analytical Hessians (UMA backend) for diagnostic notes. |
|
|
Workers per node, forwarded to the parallel predictor. |
|
|
Spin multiplicity (2S+1). Falls back to |
Template/ |
|
Repeatable string parsed as Python literal describing |
None |
|
Interpret |
|
|
Harmonic bias strength applied to every |
|
|
Toggle cap-hydrogen parent freezing (PDB input or XYZ/GJF with |
|
|
Comma-separated 1-based atom indices to freeze explicitly (e.g., |
None |
|
Hard limit on optimization iterations ( |
|
|
Optimizer preset: |
|
|
Enable/disable the post-optimization imaginary-mode flattening loop. |
|
|
Emit trajectory dumps ( |
|
|
Enable or disable XYZ/TRJ → PDB companions for PDB inputs and XYZ → GJF companions for Gaussian templates. |
|
|
Reference PDB topology to use when the input is XYZ/GJF (keeps XYZ coordinates). |
None |
|
Output directory for all files. |
|
|
Override convergence preset ( |
|
|
Base YAML configuration file. |
None |
|
Print resolved YAML layer information before execution. |
|
|
Write a machine-readable |
|
|
Validate options and print execution plan without running optimization. |
|
|
MLIP backend. |
|
|
Implicit solvent name for xTB correction (e.g. |
|
|
xTB solvent model. |
|
YAML configuration¶
Shared sections reuse YAML Reference; adjust only the values you need to change. geom, calc, opt, and the optimizer-specific lbfgs/rfo blocks use the canonical keys and defaults — see geom, calc, opt, lbfgs, rfo. A minimal representative configuration:
geom:
coord_type: cart # or `dlc` for delocalized internal coordinates
freeze_atoms: [] # 1-based frozen indices; merged with CLI cap detection
calc:
charge: 0 # mirrors the CLI option; defaults from `.gjf` when present
spin: 1
opt:
thresh: gau
max_cycles: 10000
out_dir: ./result_opt/ # opt-specific default
The only opt-specific default is out_dir: ./result_opt/ (also applied to lbfgs.out_dir/rfo.out_dir).
Full schema (every key and default): YAML Reference.
Notes¶
Note
Energy plateau fallback. When energy_plateau: true, the optimizer
is declared converged if the energy range (max − min) over the last
energy_plateau_window steps falls below energy_plateau_thresh
(default 1×10⁻⁴ au ≈ 0.06 kcal/mol over 50 steps). This prevents wasted cycles when
the MLIP force noise floor (~4×10⁻⁴ au) exceeds the force-based convergence threshold
(e.g. baker max_force = 3×10⁻⁴ au). The fallback is skipped for chain-of-states
optimizers, which store per-image energy arrays.
See Also¶
Common Error Recipes – Symptom-first failure routing
Troubleshooting – Detailed troubleshooting guide
tsopt — Optimize transition states (saddle points) instead of minima
freq — Vibrational analysis to confirm optimization reached a minimum
extract — Generate active site model (binding pocket) PDBs before optimization
all — End-to-end workflow that pre-optimizes endpoints
YAML Reference — Full
opt,lbfgs,rfoconfiguration optionsGlossary — Definitions of L-BFGS, RFO