ECENet-1.7M (SPICE)
ECENet is an O(2)-equivariant line-graph interatomic potential: the edges of the atomic graph carry the features, expressed in a frame aligned with each edge, and messages pass between edges through their shared atoms. This checkpoint is the smaller, faster of the two models trained on the MACE-OFF split of SPICE, with latent Ewald summation (LES) for long-range electrostatics. It predicts energies, forces, and latent atomic charges and bond dipoles. For the most accurate model see ECENet-4.8M.
Paper: ECENet: An Edge Cluster Expansion Line Graph Neural Network, A. LaCour and T. Head-Gordon (in preparation). Code: https://github.com/THGLab/ECEnet
Model
| parameters | 1,671,237 |
| elements | H, C, N, O, F, P, S, Cl, Br, I |
| cutoff | 5.0 Å (edges and atomic bases) |
| angular truncation | ℓ_max = 3, m_max = 2 |
| radial basis | 16 sinc functions, cosine cutoff |
| channels per (ℓ, m) | 24; bottleneck 256; 10 azimuthal grid points |
| message passing | 1 layer, width 64, 8 gating heads |
| read-out | invariant MLP [512, 512] × enveloped radial basis |
| long-range | LES: latent charges + bond dipoles per edge, σ = 1.5 Å, scale 0.1 |
| precision | trained in float32 (TF32, then plain float32) |
| energy units | eV (per-element references stored in the checkpoint) |
Training
MACE-OFF23 split of SPICE v1 (neutral molecules of the ten elements above, ion
pairs removed): 900,000 training and 51,005 validation structures from the
released training file, evaluated on the standard 50,195-structure test set.
Huber loss (δ = 0.0025) on per-atom energies (weight 10) and force components
(weight 0.5); AdamW, learning rate 5×10⁻⁴ halved at six milestones, 200 epochs
with TF32 followed by 20 epochs in full float32; 16 A100 GPUs. The exact driver
is train.py in this repository; the weights are those of the epoch with the
lowest weighted validation error.
Usage
Install ECENet and the optional les package (required for this checkpoint):
git clone https://github.com/THGLab/ECEnet && cd ECEnet
pip install -e ".[les]"
from ase.io import read
from ecenet.calculator import load_calculator
calc = load_calculator("ecenet-1.7m-spice.mdl") # picks the LES calculator automatically
atoms = read("molecule.xyz")
atoms.calc = calc
energy = atoms.get_potential_energy() # eV, short-range + long-range
forces = atoms.get_forces() # eV/Å
charges = atoms.get_charges() # latent charges (e; global sign arbitrary)
dipoles = calc.results["les_dipoles"] # latent bond dipoles per atom (e·Å)
Pass device="cuda" to load_calculator for GPU inference. For molecular
dynamics with charge, dipole and Born-effective-charge output along the
trajectory, see examples/run_md_xyz.py in the code repository
(--dump_charges, --dump_bec). Periodic systems are supported (Ewald
summation for the long-range term).
Intended use and limitations
- Organic and biomolecular systems within the ten SPICE elements; neutral systems only (no charged species in the training data).
- The long-range energy is quadratic in the latent charges, so their overall sign is not determined by training: it is consistent within the checkpoint but not physically pinned.
- Trained on isolated molecules and small clusters; use in the condensed phase was not part of training.
Licensing
The ECENet code and these weights are released under the UC Regents license in
LICENSE.