force-fields — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited force-fields (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Classical force fields define the potential energy of a molecular system as a sum of bonded and non-bonded terms. The parameters (k, r0, θ0, ε, σ, q) define how molecules move and interact. Python-first stack: OpenMM (engine) + OpenFF toolkit (SMIRNOFF small molecule parameterization).
# Protein-ligand simulation with OpenMM + OpenFF (SMIRNOFF Sage)
from openff.toolkit import Molecule, ForceField
from openff.toolkit.utils.exceptions import ParameterLookupError
from openmmforcefields.generators import SystemGenerator
import openmm.app as app
import openmm as mm
import openmm.unit as unit
# 1. Load protein topology
pdb = app.PDBFile('protein.pdb')
# 2. Parameterize ligand with OpenFF Sage
ligand = Molecule.from_smiles('c1ccc(cc1)CN')
ligand.generate_conformers(n_conformers=1)
# 3. Build system
system_generator = SystemGenerator(
forcefields=['amber/ff14SB.xml', 'amber/tip3p_standard.xml'],
small_molecule_forcefield='openff-2.2.0',
molecules=[ligand],
forcefield_kwargs={'nonbondedMethod': app.PME, 'constraints': app.HBonds},
)
system = system_generator.create_system(pdb.topology, molecules=[ligand])
# 4. Run with Langevin integrator
integrator = mm.LangevinMiddleIntegrator(
300 * unit.kelvin, 1.0 / unit.picosecond, 2.0 * unit.femtoseconds
)
simulation = app.Simulation(pdb.topology, system, integrator)
simulation.context.setPositions(pdb.positions)
simulation.minimizeEnergy(maxIterations=500)
simulation.reporters.append(app.DCDReporter('traj.dcd', 1000))
simulation.step(50000) # 100 ps| Task | Reference |
|---|---|
| Force field theory: energy terms, AMBER/CHARMM/OPLS/GROMOS families | references/ff-fundamentals.md |
| OpenMM: System, Simulation, integrators, reporters, NPT, restart | references/openmm-basics.md |
| OpenFF SMIRNOFF toolkit: Molecule, parameterization, Sage 2.2 | references/openff-smirnoff.md |
| GAFF2/antechamber, acpype, CGenFF, AM1-BCC, RESP charges | references/parameterization.md |
| Energy decomposition, PME, cutoffs, water models, troubleshooting | references/energy-analysis.md |
| Family | Protein FF | Small Molecule FF | Engine |
|---|---|---|---|
| AMBER | ff14SB, ff19SB | GAFF2 | OpenMM, AMBER |
| CHARMM | CHARMM36m | CGenFF | OpenMM, NAMD, GROMACS |
| OPLS | OPLS-AA/M | OPLS3e | GROMACS, Schrödinger |
| OpenFF | — | Sage 2.2, Parsley | OpenMM |
| GROMOS | 54A7 | GROMOS-compat | GROMACS (united-atom) |
# OpenMM (engine)
conda install -c conda-forge openmm
# OpenFF toolkit + Sage FF
pip install openff-toolkit
pip install openmmforcefields # bridges OpenFF → OpenMM + GAFF2
# AMBER Tools (antechamber / tleap)
conda install -c conda-forge ambertools
# acpype (antechamber wrapper → GROMACS/AMBER topology)
conda install -c conda-forge acpype
# ParmEd (topology manipulation)
pip install parmed
# Verify
python -c "import openmm; print(openmm.__version__)"
python -c "from openff.toolkit import Molecule; print('OpenFF OK')"ase — geometry optimization with QM calculators (ORCA, xTB, GPAW)mdanalysis — trajectory analysis after MD runsdocking — pre-docking protein prep; post-MD ensemble dockingscientific-skills:pymatgen — periodic materials, materials force fields (ReaxFF)chem_3d.py — RDKit 3D conformer generation (pre-MD structure)~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.