Skip to main content

FfParamSet

Struct FfParamSet 

Source
pub struct FfParamSet {
    pub peptide: Option<ForceFieldParams>,
    pub small_mol: Option<ForceFieldParams>,
    pub dna: Option<ForceFieldParams>,
    pub rna: Option<ForceFieldParams>,
    pub lipids: Option<ForceFieldParams>,
    pub carbohydrates: Option<ForceFieldParams>,
    pub peptide_ff_q_map: Option<ProtFfChargeMapSet>,
    pub lipid_ff_q_map: Option<LipidFfChargeMap>,
    pub dna_ff_q_map: Option<NucleicAcidFfChargeMap>,
    pub rna_ff_q_map: Option<NucleicAcidFfChargeMap>,
}
Expand description

A set of general parameters that aren’t molecule-specific. E.g. from GAFF2, OL3, RNA, or amino19. These are used as a baseline, and in some cases, overridden by molecule-specific parameters.

Fields§

§peptide: Option<ForceFieldParams>§small_mol: Option<ForceFieldParams>§dna: Option<ForceFieldParams>§rna: Option<ForceFieldParams>§lipids: Option<ForceFieldParams>§carbohydrates: Option<ForceFieldParams>§peptide_ff_q_map: Option<ProtFfChargeMapSet>

In addition to charge, this also contains the mapping of res type to FF type; required to map other parameters to protein atoms. E.g. from amino19.lib, and its N and C-terminus variants.

§lipid_ff_q_map: Option<LipidFfChargeMap>§dna_ff_q_map: Option<NucleicAcidFfChargeMap>§rna_ff_q_map: Option<NucleicAcidFfChargeMap>

Implementations§

Source§

impl FfParamSet

Source

pub fn new(paths: &ParamGeneralPaths) -> Result<Self>

Load general parameter files for the most common classes of organic molecules. This also populates ff type and charge for protein atoms; these are provided by molecule-specific formats for small molecules.

Source

pub fn new_amber() -> Result<Self>

Create a parameter set using Amber parameters included with this library. This uses the param sets recommended by Amber, CAO Sept 2025: ff19SB, OL24, OL3, GLYCAM_06j, lipids21, and gaff2.

Examples found in repository?
examples/minimal.rs (line 13)
11fn main() {
12    let dev = ComputationDevice::Cpu;
13    let param_set = FfParamSet::new_amber().unwrap();
14
15    let mut protein = MmCif::load(Path::new("1c8k.cif")).unwrap();
16    let mol = Mol2::load(Path::new("CPB.mol2")).unwrap();
17
18    // Add Hydrogens, force field type, and partial charge to atoms in the protein; these usually aren't
19    // included from RSCB PDB. You can also call `populate_hydrogens_dihedrals()`, and
20    // `populate_peptide_ff_and_q() separately. Add bonds.
21    let (_bonds, _dihedrals) = prepare_peptide_mmcif(
22        &mut protein,
23        &param_set.peptide_ff_q_map.as_ref().unwrap(),
24        7.0,
25    )
26    .unwrap();
27
28    let mols = vec![
29        MolDynamics::from_mol2(&mol, None),
30        MolDynamics {
31            ff_mol_type: FfMolType::Peptide,
32            atoms: protein.atoms.clone(),
33            static_: true,
34            ..Default::default()
35        },
36    ];
37
38    let (mut md, _) = MdState::new(&dev, &MdConfig::default(), &mols, &param_set).unwrap();
39
40    let n_steps = 100;
41    let dt = 0.002; // picoseconds.
42
43    for _ in 0..n_steps {
44        md.step(&dev, dt, None);
45    }
46
47    let snap = &md.snapshots[md.snapshots.len() - 1]; // A/R.
48    let energy = snap.energy_data.as_ref().unwrap();
49    println!(
50        "KE: {}, PE: {}, Atom posits:",
51        energy.energy_kinetic, energy.energy_potential
52    );
53    for posit in &snap.atom_posits {
54        println!("Posit: {posit}");
55        // Also keeps track of velocities, and solvent molecule positions/velocity
56    }
57
58    // Do something with snapshot data, like displaying atom positions in your UI.
59    // You can save to DCD file, and adjust the ratio they're saved at using the `MdConfig.snapshot_setup`
60    // field: See the example below.
61    for _snap in &md.snapshots {}
62}
More examples
Hide additional examples
examples/lig_and_protein.rs (line 130)
128fn main() {
129    let dev = ComputationDevice::Cpu;
130    let param_set = FfParamSet::new_amber().unwrap();
131
132    let mut protein = MmCif::load(Path::new("1c8k.cif")).unwrap();
133    // let mut mol = Mol2::load(Path::new("CPB.mol2")).unwrap();
134    let mut mol = Sdf::load(Path::new("123.sdf")).unwrap();
135    // Optional; the library infers FRCMOD overrides on its own.
136    let _mol_specific = ForceFieldParams::load_frcmod(Path::new("CPB.frcmod")).unwrap();
137
138    // Or, instead of loading atoms and mol-specific params separately:
139    // let (mol, lig_specific) = load_prmtop("my_mol.prmtop");
140
141    // Add Hydrogens, force field type, and partial charge to atoms in the protein; these usually aren't
142    // included from RSCB PDB. You can also call `populate_hydrogens_dihedrals()`, and
143    // `populate_peptide_ff_and_q() separately. Add bonds.
144    let (_bonds, _dihedrals) = prepare_peptide_mmcif(
145        &mut protein,
146        &param_set.peptide_ff_q_map.as_ref().unwrap(),
147        7.0,
148    )
149    .unwrap();
150
151    // A variant of that function called `prepare_peptide` takes separate atom, residue, and chain
152    // lists, for flexibility.
153
154    let cfg = MdConfig {
155        // Defaults to Langevin middle.
156        integrator: Integrator::VerletVelocity { thermostat: None },
157        // If enabled, zero the drift in center of mass of the system.
158        zero_com_drift: true,
159        // Kelvin. Defaults to 310 K.
160        temp_target: 310.,
161        // Bar (Pa/100). Defaults to 1 bar.
162        barostat_cfg: Some(BarostatCfg {
163            pressure_target: 1.,
164            ..Default::default()
165        }),
166        // Allows constraining Hydrogens to be rigid with their bonded atom, using SHAKE and RATTLE
167        // algorithms. This allows for higher time steps.
168        hydrogen_constraint: HydrogenConstraint::Linear { order: 4, iter: 1 },
169        // Deafults to in-memory, every step
170        snapshot_handlers: SnapshotHandlers {
171            memory: Some(1),
172            dcd: Some(10),
173            ..Default::default()
174        },
175        // Or sim_box: SimBoxInit::Fixed((Vec3::new(-10., -10., -10.), Vec3::new(10., 10., 10.)),
176        sim_box: SimBoxInit::Pad(10.),
177        ..Default::default()
178    };
179
180    let _md = build_dynamics(&dev, vec![&mut mol], &protein, &param_set, &cfg, 100, 0.001);
181}

Trait Implementations§

Source§

impl Debug for FfParamSet

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for FfParamSet

Source§

fn default() -> FfParamSet

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V