diff --git a/modules/mol/mm/pymod/export_settings.cc b/modules/mol/mm/pymod/export_settings.cc index 9d65cacd869e955fa5bb9235853ae69cc5907ce3..a5dfc2811936245ed4347f479af9b456c39c7749 100644 --- a/modules/mol/mm/pymod/export_settings.cc +++ b/modules/mol/mm/pymod/export_settings.cc @@ -52,7 +52,6 @@ void export_MMSettings() .def_readwrite("add_nonbonded",&ost::mol::mm::MMSettings::add_nonbonded) .def_readwrite("add_gbsa",&ost::mol::mm::MMSettings::add_gbsa) .def_readwrite("constrain_hbonds",&ost::mol::mm::MMSettings::constrain_hbonds) - .def_readwrite("constrain_hangles",&ost::mol::mm::MMSettings::constrain_hangles) .def_readwrite("constrain_bonds",&ost::mol::mm::MMSettings::constrain_bonds) .def_readwrite("rigid_water",&ost::mol::mm::MMSettings::rigid_water) .def_readwrite("strict_interactions",&ost::mol::mm::MMSettings::strict_interactions) diff --git a/modules/mol/mm/src/mm_settings.hh b/modules/mol/mm/src/mm_settings.hh index 45fac0b7205cdf17f0895dff1e611f60deb90709..a4db474c9cba97def669dab03a90257d317b9ef5 100644 --- a/modules/mol/mm/src/mm_settings.hh +++ b/modules/mol/mm/src/mm_settings.hh @@ -64,7 +64,6 @@ struct MMSettings{ add_nonbonded(true), add_gbsa(false), constrain_hbonds(false), - constrain_hangles(false), constrain_bonds(false), rigid_water(false), strict_interactions(true), @@ -109,7 +108,6 @@ struct MMSettings{ bool add_nonbonded; bool add_gbsa; bool constrain_hbonds; - bool constrain_hangles; bool constrain_bonds; bool rigid_water; bool strict_interactions; diff --git a/modules/mol/mm/src/topology_creator.cc b/modules/mol/mm/src/topology_creator.cc index 0c8742d9cf3022c088a3ee99910c7c36ceb9e4f3..a278b05812291955e18a0700aee60cb60b3855d0 100644 --- a/modules/mol/mm/src/topology_creator.cc +++ b/modules/mol/mm/src/topology_creator.cc @@ -55,9 +55,6 @@ namespace ost{ namespace mol{ namespace mm{ TopologyPtr TopologyCreator::Create(ost::mol::EntityHandle& ent, const MMSettingsPtr settings){ - if(settings->constrain_hangles == true && settings->constrain_hbonds == false){ - throw ost::Error("If hangles is true, hbonds must also be true in settings object!"); - } ost::mol::ResidueHandleList res_list = ent.GetResidueList(); ost::mol::XCSEditor ed = ent.EditXCS(ost::mol::BUFFERED_EDIT); @@ -481,7 +478,7 @@ TopologyPtr TopologyCreator::Create(ost::mol::EntityHandle& ent, } } if(settings->rigid_water){ - if(residue_names_of_atoms[(*i)[0]] == "SOL" || residue_names_of_atoms[(*i)[1]] == "SOL"){ + if(residue_names_of_atoms[(*i)[0]] == "SOL" && residue_names_of_atoms[(*i)[1]] == "SOL"){ if(distance_constraints.find(*i) != distance_constraints.end()) continue; distance_constraints.insert(*i); Real distance; @@ -499,10 +496,10 @@ TopologyPtr TopologyCreator::Create(ost::mol::EntityHandle& ent, if(settings->rigid_water){ for(std::set<Index<3> >::iterator i = angles.begin(); i != angles.end(); ++i){ - if(residue_names_of_atoms[(*i)[0]] == "SOL" || residue_names_of_atoms[(*i)[0]] == "SOL" || + if(residue_names_of_atoms[(*i)[0]] == "SOL" && residue_names_of_atoms[(*i)[0]] == "SOL" && residue_names_of_atoms[(*i)[2]] == "SOL"){ - //even for ideal_bond_length_constraints, we calculate the ideal angle every time... - //could be replaced... + //we only have to add the H-H distance constant, the O-H distance is already + //constrained above Real distance; if(settings->ideal_bond_length_constraints) distance = 0.15139; //HH distance taken from CHARMM else distance = geom::Distance(atom_list[(*i)[0]].GetPos(),atom_list[(*i)[2]].GetPos())/10; @@ -511,62 +508,6 @@ TopologyPtr TopologyCreator::Create(ost::mol::EntityHandle& ent, } } } - - if(settings->constrain_hangles){ - for(std::set<Index<3> >::iterator i = angles.begin(); - i != angles.end(); ++i){ - if(atom_masses[(*i)[0]] < 1.1 && atom_masses[(*i)[2]] < 1.1){ - //two hydrogens... - if(constrained_angles.find(*i) != constrained_angles.end()) continue; - Real distance; - if(settings->ideal_bond_length_constraints){ - MMInteractionPtr bond_one = ff->GetBond(atom_types[(*i)[0]],atom_types[(*i)[1]]); - MMInteractionPtr bond_two = ff->GetBond(atom_types[(*i)[1]],atom_types[(*i)[2]]); - MMInteractionPtr angle = ff->GetAngle(atom_types[(*i)[0]],atom_types[(*i)[1]],atom_types[(*i)[2]]); - std::vector<Real> parameters; - Real l1,l2,a; - parameters = bond_one->GetParam(); - l1 = parameters[0]; - parameters = bond_two->GetParam(); - l2 = parameters[0]; - parameters = angle->GetParam(); - a = parameters[0]; - distance = sqrt(l1*l1+l2*l2-2*l1*l2*cos(a)); - } - else distance = geom::Distance(atom_list[(*i)[0]].GetPos(),atom_list[(*i)[2]].GetPos())/10; - top->AddDistanceConstraint((*i)[0],(*i)[2],distance); - constrained_angles.insert(*i); - continue; - } - - if(atom_masses[(*i)[1]] > 15.0 && atom_masses[(*i)[1]] < 17.0){ - //central atom is an oxygen - if(atom_masses[(*i)[0]] < 1.1 || atom_masses[(*i)[2]] < 1.1){ - //a hydrogen is attached to the oxygen... - if(constrained_angles.find(*i) != constrained_angles.end()) continue; - Real distance; - if(settings->ideal_bond_length_constraints){ - MMInteractionPtr bond_one = ff->GetBond(atom_types[(*i)[0]],atom_types[(*i)[1]]); - MMInteractionPtr bond_two = ff->GetBond(atom_types[(*i)[1]],atom_types[(*i)[2]]); - MMInteractionPtr angle = ff->GetAngle(atom_types[(*i)[0]],atom_types[(*i)[1]],atom_types[(*i)[2]]); - std::vector<Real> parameters; - Real l1,l2,a; - parameters = bond_one->GetParam(); - l1 = parameters[0]; - parameters = bond_two->GetParam(); - l2 = parameters[0]; - parameters = angle->GetParam(); - a = parameters[0]; - distance = sqrt(l1*l1+l2*l2-2*l1*l2*cos(a)); - } - else distance = geom::Distance(atom_list[(*i)[0]].GetPos(),atom_list[(*i)[2]].GetPos())/10; - top->AddDistanceConstraint((*i)[0],(*i)[2],distance); - constrained_angles.insert(*i); - continue; - } - } - } - } //remove all constraints from the bonds and angles for(std::set<Index<2> >::iterator i = distance_constraints.begin();