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

  1. Your structure is fragmented: matched against known fragments, largest and highest priority first, so each atom ends up inside exactly one fragment.
  2. Each atom gets an atom type from its fragment — c3_c2h1@ph, meaning "this atom type, in this fragment".
  3. 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:

  1. Use a different fit that does cover it.
  2. Fit the missing terms yourself against a new reference system, and deposit them so the next person does not repeat the work.
  3. 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.

Related