For researchers
Assign a force field to a structure
Get MOF-FF parameters for your own structure, and understand what came back.
You have a framework structure and want MOF-FF parameters so you can run a simulation. Assignment is done from a script, not from these pages, because it needs your structure and your atom typing.
What has to happen
- Your structure is fragmented: matched against known fragments, largest and highest priority first, so each atom ends up inside exactly one fragment.
- Each atom gets an atom type from its fragment —
c3_c2h1@ph, meaning "this atom type, in this fragment". - For each bond, angle, dihedral, out-of-plane, charge and van der Waals term, parameters are looked up by the atom types involved.
Steps 1 and 2 are local work done by molsys. Step 3 is what this site serves.
Getting the parameters
from mofplus import api
mfp = api()
mfp.connect(username, password) # or read ~/.mofplusrc
fields = mfp.get_FF() # {"MOF-FF": {...}, ...}
fits = mfp.get_FFfits(FFID=fields["MOF-FF"]["id"])
bonds = mfp.get_params("bnd", fits[0]["id"])
angles = mfp.get_params("ang", fits[0]["id"])
ric — the redundant internal coordinate — is one of bnd, ang, dih,
oop, cha, vdw. Each returned row carries:
| Field | Meaning |
|---|---|
atypes |
The atom types the term applies to, in canonical order |
frags |
The fragment each atom type belongs to, positionally paired |
pot |
The potential form, e.g. mm3 |
type |
The refinement within the family, e.g. bnd5 for a five-ring bond |
params |
The coefficients, in the order that potential expects |
Choosing the right fit
A force field can have several fits — several parameterisations against different reference systems. Two fits will give different numbers for the same atom types, and that is deliberate: a parameter is only meaningful together with the fit it came from.
To see the fits and what each covers, open the force field's page under Force fields. The parameter counts on each fit link straight into the API.
If you are reproducing published work, take the fit named in that publication.
If you are starting fresh, take the most recent fit whose reference systems
cover your chemistry — get_refs_from_frags will tell you which references
touch the fragments your structure produced:
refs = mfp.get_refs_from_frags(["ph", "co2"])
When a term has no parameters
You will get an empty list. That means this fit does not cover that combination of atom types — not that the term does not exist. Options, in order of preference:
- Use a different fit that does cover it.
- Fit the missing terms yourself against a new reference system, and deposit them so the next person does not repeat the work.
- Fall back to a generic force field for those terms, and say so in your methods section.
Silently substituting a similar atom type is the option that produces numbers nobody can reproduce.