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
impl FfParamSet
Sourcepub fn new(paths: &ParamGeneralPaths) -> Result<Self>
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.
Sourcepub fn new_amber() -> Result<Self>
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?
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 ¶m_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, ¶m_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
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 ¶m_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, ¶m_set, &cfg, 100, 0.001);
181}Trait Implementations§
Source§impl Debug for FfParamSet
impl Debug for FfParamSet
Source§impl Default for FfParamSet
impl Default for FfParamSet
Source§fn default() -> FfParamSet
fn default() -> FfParamSet
Auto Trait Implementations§
impl Freeze for FfParamSet
impl RefUnwindSafe for FfParamSet
impl Send for FfParamSet
impl Sync for FfParamSet
impl Unpin for FfParamSet
impl UnsafeUnpin for FfParamSet
impl UnwindSafe for FfParamSet
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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 moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.