Skip to content

cole-group/presto

 
 

Repository files navigation

presto

Parameter Refinement Engine for Smirnoff Training / Optimisation

CI license Ruff Checked with mypy


Train bespoke SMIRNOFF force fields quickly using a machine learning potential (MLP). All valence parameters (bonds, angles, proper torsions, and improper torsions) are trained to MLP energies sampled using molecular dynamics. Please see the documentation.

Warning: ⚠️ This code is under active development and the API may change without notice.

Please note that the MACE-OFF models are released under the Academic Software License which does not permit commercial use. However, the default AIMNet-2 model (as well as Egret-1, Orb-v3 OMOL, and others) does.

Installation

Ensuring that you have pixi installed, install and start a shell with the current environment with:

git clone https://github.com/cole-group/presto.git
cd presto
pixi shell

This will create an environment with CUDA 12.9. You'll need to update to CUDA >= 12.9 (check with nvidia-smi) to use presto (older versions are not usable as we require OpenMM 8.5 for the PythonForce class, and this requires CUDA 12.9).

For more information on activating pixi environments, see the documentation.

presto is also available on conda-forge as presto-fit, but note that this comes without the MLP dependencies (install these separately, e.g. pip install aimnet). See the installation docs for details.

Usage

Run with command line arguments:

presto train --param-settings.molecules "CCC(CC)C(=O)Nc2cc(NC(=O)c1c(Cl)cccc1Cl)ccn2"

then see the bespoke force field at training_iteration_2/bespoke_ff.offxml.

Sensible defaults have been set, but all available options can be viewed with:

presto train --help

Run from a yaml file:

presto write-default-yaml default.yaml
# Modify the yaml to set the desired input_type and molecule input(s)
presto train-from-yaml default.yaml

For SDF inputs, set molecule_input_type: sdf and list one or more .sdf files under molecules. Each SDF may contain one or more molecules. For example, with the CLI:

presto train --param-settings.molecule-input-type sdf --param-settings.molecules input_molecule.sdf

For more details on the theory and implementation, please see the documentation.

Citation

If you use presto in your work, please cite:

Clark, F.; Pope, T.; Maier, S.; Boothroyd, S.; Horton, J. T.; Ryczko, K.; Bortolato, A.; Cole, D. J. Fast Training of Bespoke SMIRNOFF-format Molecular Mechanics Force Fields Using Machine Learning Potentials. ChemRxiv 2026. doi:10.26434/chemrxiv.15004169/v2

Because presto builds on the Open Force Field ecosystem, please also cite the relevant OpenFF publications listed at openforcefield.org/science/how-to-cite.

A CITATION.cff file is provided in the repository, and GitHub will generate formatted citations (including BibTeX) from the Cite this repository link on the project page.

Copyright

Copyright (c) 2025-2026, Finlay Clark, Newcastle University, UK

Copyright (c) 2025-2026, Thomas James Pope, Newcastle University, UK

This package includes models from other projects under the MIT license. See presto/models/LICENSES.md for details.

Acknowledgements

Early development was completed by Thomas James Pope. Many ideas taken from Simon Boothroyd's super helpful python-template.

About

Parameter Refinement Engine for Smirnoff Training / Optimisation. Train bespoke SMIRNOFF force fields quickly using a machine learning potential

Resources

License

Stars

22 stars

Watchers

2 watching

Forks

Contributors

Languages

  • Python 100.0%