diff --git a/modules/mol/mm/pymod/export_forcefield.cc b/modules/mol/mm/pymod/export_forcefield.cc index 750159c6f4478575324a8a7bf7348f18c735fb9c..db80c3b1990bfb188bf8cd940a0b63d8a69473e3 100644 --- a/modules/mol/mm/pymod/export_forcefield.cc +++ b/modules/mol/mm/pymod/export_forcefield.cc @@ -78,6 +78,11 @@ void export_Forcefield() .def("SetFudgeLJ",&ost::mol::mm::Forcefield::SetFudgeLJ) .def("SetFudgeQQ",&ost::mol::mm::Forcefield::SetFudgeQQ) .def("SetGenPairs",&ost::mol::mm::Forcefield::SetGenPairs) + .def("GetResidueRenamingMain",&ost::mol::mm::Forcefield::GetResidueRenamingMain,(arg("res_name"))) + .def("GetResidueRenamingNTer",&ost::mol::mm::Forcefield::GetResidueRenamingNTer,(arg("res_name"))) + .def("GetResidueRenamingCTer",&ost::mol::mm::Forcefield::GetResidueRenamingCTer,(arg("res_name"))) + .def("GetResidueRenamingTwoTer",&ost::mol::mm::Forcefield::GetResidueRenamingTwoTer,(arg("res_name"))) + .def("GetAtomRenaming",&ost::mol::mm::Forcefield::GetAtomRenaming,(arg("res_name"),arg("atom_name"))) .def("AssignFFSpecificNames",&ost::mol::mm::Forcefield::AssignFFSpecificNames,(arg("ent"),arg("reverse")=true)) ; diff --git a/modules/mol/mm/src/forcefield.cc b/modules/mol/mm/src/forcefield.cc index 93f1c882746f3e33b063657b3bcec8c94fef5a5c..b1e18b776e4a201db3c981fa34b1583cbe5b2048 100644 --- a/modules/mol/mm/src/forcefield.cc +++ b/modules/mol/mm/src/forcefield.cc @@ -781,6 +781,49 @@ void Forcefield::AddAtomRenamingRule(const String& res_name, atom_renaming_ff_specific_[res_name].push_back(std::make_pair(old_atom_name,new_atom_name)); } +String Forcefield::GetResidueRenamingMain(const String& name) const{ + boost::unordered_map<String, ResidueNamesPtr>::const_iterator i = res_renaming_ff_specific_.find(name); + if(i == res_renaming_ff_specific_.end()){ + return name; + } + return i->second->main; +} + +String Forcefield::GetResidueRenamingNTer(const String& name) const{ + boost::unordered_map<String, ResidueNamesPtr>::const_iterator i = res_renaming_ff_specific_.find(name); + if(i == res_renaming_ff_specific_.end()){ + return name; + } + return i->second->nter; +} + + +String Forcefield::GetResidueRenamingCTer(const String& name) const{ + boost::unordered_map<String, ResidueNamesPtr>::const_iterator i = res_renaming_ff_specific_.find(name); + if(i == res_renaming_ff_specific_.end()){ + return name; + } + return i->second->cter; +} + +String Forcefield::GetResidueRenamingTwoTer(const String& name) const{ + boost::unordered_map<String, ResidueNamesPtr>::const_iterator i = res_renaming_ff_specific_.find(name); + if(i == res_renaming_ff_specific_.end()){ + return name; + } + return i->second->twoter; +} + +String Forcefield::GetAtomRenaming(const String& res_name, const String& atom_name) const{ + boost::unordered_map<String,std::vector<std::pair<String,String> > >::const_iterator i = atom_renaming_ff_specific_.find(res_name); + if(i == atom_renaming_ff_specific_.end()) return atom_name; + for(std::vector<std::pair<String,String> >::const_iterator j = i->second.begin(), e = i->second.end(); + j != e; ++j){ + if(atom_name == j->first) return j->second; + } + return atom_name; +} + void Forcefield::AssignFFSpecificNames(ost::mol::EntityHandle& handle, bool reverse) const{ //the whole FF specific renaming procedure assumes a standard naming, diff --git a/modules/mol/mm/src/forcefield.hh b/modules/mol/mm/src/forcefield.hh index e5d39ad321e8774a91388618481396241762a70b..aba6447676e34319030bda1402d40751c2d3d881 100644 --- a/modules/mol/mm/src/forcefield.hh +++ b/modules/mol/mm/src/forcefield.hh @@ -151,6 +151,16 @@ public: const String& old_atom_name, const String& new_atom_name); + String GetResidueRenamingMain(const String& name) const; + + String GetResidueRenamingNTer(const String& name) const; + + String GetResidueRenamingCTer(const String& name) const; + + String GetResidueRenamingTwoTer(const String& name) const; + + String GetAtomRenaming(const String& res_name, const String& atom_name) const; + void AddHydrogenConstructor(const String& residue_name, HydrogenConstructorPtr p){ hydrogen_constructors_[residue_name] = p; }