9 #ifndef IMPATOM_CHARMM_PARAMETERS_H
10 #define IMPATOM_CHARMM_PARAMETERS_H
12 #include "internal/charmm_helpers.h"
21 IMPKERNEL_BEGIN_NAMESPACE
23 IMPKERNEL_END_NAMESPACE
26 IMPATOM_BEGIN_NAMESPACE
30 double force_constant;
34 out <<
"force constant: " << force_constant <<
"; ideal value: " << ideal;
42 double force_constant;
47 out <<
"force constant: " << force_constant
48 <<
"; multiplicity: " << multiplicity <<
"; ideal value: " << ideal;
72 std::map<std::string, Element> atom_type_to_element_;
73 std::map<ResidueType, base::Pointer<CHARMMIdealResidueTopology> >
75 std::map<std::string, base::Pointer<CHARMMPatch> > patches_;
76 std::map<internal::CHARMMBondNames, CHARMMBondParameters> bond_parameters_;
77 std::map<internal::CHARMMAngleNames, CHARMMBondParameters> angle_parameters_;
79 typedef base::Vector<std::pair<internal::CHARMMDihedralNames,
84 DihedralParameters::const_iterator find_dihedral(
85 DihedralParameters::const_iterator begin,
86 DihedralParameters::const_iterator end,
87 const internal::CHARMMDihedralNames &dihedral,
88 bool allow_wildcards)
const;
112 bool translate_names_to_pdb =
false);
122 residue_topologies_.insert(
123 std::make_pair(
ResidueType(res->get_type()), res));
129 residue_topologies_.find(type);
130 if (it != residue_topologies_.end()) {
133 IMP_THROW(
"Residue " << type <<
" does not exist", ValueException);
145 patches_.insert(std::make_pair(patch->get_type(), patch));
150 std::map<std::string, CHARMMPatch>::iterator it = patches_.find(name);
151 if (it != patches_.end()) {
154 IMP_THROW(
"Patch " << name <<
" does not exist", ValueException);
160 std::map<std::string, base::Pointer<CHARMMPatch> >::const_iterator it =
162 if (it != patches_.end()) {
165 IMP_THROW(
"Patch " << name <<
" does not exist", ValueException);
178 std::string type2)
const {
179 internal::CHARMMBondNames types = internal::CHARMMBondNames(type1, type2);
180 if (bond_parameters_.find(types) != bond_parameters_.end()) {
181 return bond_parameters_.find(types)->second;
183 IMP_THROW(
"No CHARMM parameters found for bond " << type1 <<
"-" << type2,
194 std::string type3)
const {
195 internal::CHARMMAngleNames types =
196 internal::CHARMMAngleNames(type1, type2, type3);
197 if (angle_parameters_.find(types) != angle_parameters_.end()) {
198 return angle_parameters_.find(types)->second;
200 IMP_THROW(
"No CHARMM parameters found for angle " << type1 <<
"-" << type2
218 std::string type1, std::string type2, std::string type3,
219 std::string type4)
const {
221 internal::CHARMMDihedralNames types =
222 internal::CHARMMDihedralNames(type1, type2, type3, type4);
224 DihedralParameters::const_iterator match = find_dihedral(
225 dihedral_parameters_.begin(), dihedral_parameters_.end(), types,
true);
226 if (match != dihedral_parameters_.end()) {
229 param.push_back(match->second);
230 while ((match = find_dihedral(match + 1, dihedral_parameters_.end(),
231 match->first,
false)) !=
232 dihedral_parameters_.end()) {
233 param.push_back(match->second);
236 if (param.size() == 0) {
237 IMP_THROW(
"No CHARMM parameters found for dihedral "
238 << type1 <<
"-" << type2 <<
"-" << type3 <<
"-" << type4,
254 std::string type1, std::string type2, std::string type3,
255 std::string type4)
const {
256 internal::CHARMMDihedralNames types =
257 internal::CHARMMDihedralNames(type1, type2, type3, type4);
259 DihedralParameters::const_iterator it = find_dihedral(
260 improper_parameters_.begin(), improper_parameters_.end(), types,
true);
261 if (it != improper_parameters_.end()) {
264 IMP_THROW(
"No CHARMM parameters found for improper "
265 << type1 <<
"-" << type2 <<
"-" << type3 <<
"-" << type4,
309 virtual String get_force_field_atom_type(
Atom atom)
const;
314 bool translate_names_to_pdb);
323 bool translate_names_to_pdb);
326 bool translate_names_to_pdb);
329 bool translate_names_to_pdb);
331 void parse_nonbonded_parameters_line(
String line);
332 void parse_bonds_parameters_line(
String line);
333 void parse_angles_parameters_line(
String line);
360 IMPATOM_END_NAMESPACE
The ideal topology of a single residue.
CHARMMParameters * get_heavy_atom_CHARMM_parameters()
Storage and access to force field.
void set_was_used(bool tf) const
The parameters for a CHARMM bond or angle.
The parameters for a CHARMM dihedral or improper.
#define IMP_VALUES(Name, PluralName)
Define the type for storing sets of values.
#define IMP_SHOWABLE_INLINE(Name, how_to_show)
Declare the methods needed by an object that can be printed.
A smart pointer to a reference counted object.
const CHARMMBondParameters & get_angle_parameters(std::string type1, std::string type2, std::string type3) const
Get parameters for the angle between the three given CHARMM atom types.
const CHARMMBondParameters & get_bond_parameters(std::string type1, std::string type2) const
Get bond parameters for the bond between the two given CHARMM atom types.
CHARMM force field parameters.
Classes for handling CHARMM-style topology.
const CHARMMDihedralParameters & get_improper_parameters(std::string type1, std::string type2, std::string type3, std::string type4) const
Get parameters for the improper between the four given CHARMM atom types.
The standard decorator for manipulating molecular structures.
Base class for all CHARMM residue-based topology.
A decorator for a particle representing an atom.
Class to handle individual model particles.
#define IMP_OBJECTS(Name, PluralName)
Define the types for storing sets of objects.
Various important macros for implementing decorators.
#define IMP_FORCE_FIELD_PARAMETERS(Name)
Define the basic things you need for a ForceFieldParameters.
#define IMP_THROW(message, exception_name)
Throw an exception with a message.
Handling of file input/output.
CHARMMDihedralParametersList get_dihedral_parameters(std::string type1, std::string type2, std::string type3, std::string type4) const
Get parameters for the dihedral between the four given CHARMM atom types.
The topology of a complete CHARMM model.
CHARMMParameters * get_all_atom_CHARMM_parameters()
std::string String
Basic string value.