FFprime is a Python-based toolkit designed to derive bonded and nonbonded parameters for molecular systems based on Atoms-in-Molecules (AIM) partitioning schemes. It provides an automated framework to extract interaction parameters directly from electronic structure data, analyze atomic and interatomic properties, and validate potential energy models through comparison with reference quantum-mechanical energies.
The code also includes tools to:
Evaluate molecular interaction energies and force-field potentials.
Generate parameter sets consistent with AIM density partitioning (e.g., from Denspart tools).
Benchmark derived models against ab initio reference data.
You need to make conda environment and install these libraries on your computer only once.
Afterwards, you just conda activate env_qcdevs_py310 to restore the environment.
# create a Python 3 conda environment
conda create -n env_qcdevs python=3.10
conda activate env_qcdevs_py310
# install IOData, Grid, GBasis, DensPart, AtomDB
pip install git+https://github.com/theochem/iodata.git
pip install git+https://github.com/theochem/grid.git
pip install git+https://github.com/theochem/gbasis.git
pip install git+https://github.com/theochem/denspart.git
pip install git+https://github.com/theochem/AtomDB.git
# install FFprime
git clone git@github.com:ccastilloo/FFprime.git
cd FFprime
pip install -e .Deriving Nonbonded Parameters from an Electronic Structure File
Below is a minimal example showing how to derive nonbonded parameters (atomic charges, Lennard-Jones σ and ε) directly from an electronic structure calculation (e.g., Gaussian .fchk file) using FFprime.
from ffprime.nb import Nonbonded
# Derive nonbonded parameters from a Gaussian-formatted checkpoint file
mol = Nonbonded.from_file(
fname="ffprime/examples/lig.fchk",
schemes=["mbis"], # AIM partitioning scheme
args="insane", # calculation control argument
pro_level="ub3lyp_def2tzvpd" # level of theory and basis set
)
# Display derived atomic parameters
print("Atomic charges (MBIS):")
print(mol.atcharges)
print("\nLennard-Jones σ parameters (Å):")
print(mol.sigma)
print("\nLennard-Jones ε parameters (kcal/mol):")
print(mol.epsilon)