Binding energies¶
You can calculate binding energies with SO3LR as reported in the JACS paper (Fig. 2B).
The method¶
The binding energy is computed as the difference between the energies of the bound dimer and the same dimer with the two monomers translated far apart (beyond the long-range cutoff), with charges assigned to each monomer separately to prevent spurious charge transfer:
Only the charge equilibration is done per monomer; the charge embedding sees the dimer's total charge in both frames.
Preparing structures¶
For XYZ files with dimer metadata (charge_a, charge_b, selection_a,
selection_b, like the
NCIAtlas
format), generate the original and translated structures:
This writes sapt10k_prepared.xyz with alternating frames: dimer, separated,
dimer, separated, … Structures with elements the chosen model does not support
are skipped and written to <input>_unsupported.xyz.
| Option | Default | Meaning |
|---|---|---|
--datafile |
required | Input dimers, any file ase.io reads |
--output |
<input>_prepared.xyz |
Output file (extxyz) |
--model |
so3lr-tauri-m-2606 |
Model whose element coverage is checked (so3lr for the legacy model) |
The selections are 1-based inclusive ranges (selection_a=1-12). Monomer A
must be the first atoms and monomer B the rest, and the two selections together
must cover every atom. If they do not, the per-monomer charges are silently not
applied.
Evaluating¶
so3lr eval --datafile sapt10k_prepared.xyz --targets energy \
--save-to sapt10k_eval.xyz --lr-cutoff 100
Use --lr-cutoff 100 for these gas-phase dimers, and keep the default
--batch-size 1.
Computing the binding energies¶
from ase.io import read
mols = read("sapt10k_eval.xyz", index=":")
energy = [a.info["energy_so3lr"] for a in mols]
# frames alternate dimer / separated
bind_energy = [energy[i] - energy[i + 1] for i in range(0, len(energy), 2)]
The binding energies are in eV, and negative values indicate binding.
Precision of the saved energies
so3lr eval writes energy_so3lr rounded to 6 significant figures, which
for a large dimer can reach 0.01 eV (0.23 kcal/mol) per frame. When that
matters, evaluate the frames with the ASE calculator
and take the difference at full precision.
The energy metrics that so3lr eval prints for these files are not
binding-energy errors: both frames carry the reference interaction energy
(benchmark_Eint) as their energy label. Compare bind_energy against
benchmark_Eint yourself, and check which units it is in.
Data¶
The SAPT10k dataset is bundled under
examples/data/sapt10k.zip.