diff --git a/modules/mol/base/src/impl/atom_impl.cc b/modules/mol/base/src/impl/atom_impl.cc index 3a2b4d013f2c14e82f345e55241aa911d0809ffe..7bc585b14662360f400d241ca77e4a48ee8b1184 100644 --- a/modules/mol/base/src/impl/atom_impl.cc +++ b/modules/mol/base/src/impl/atom_impl.cc @@ -355,20 +355,29 @@ void AtomImpl::DeleteAllTorsions() { EntityImplPtr e=this->GetEntity(); TorsionImplMap::iterator i; std::vector<TorsionImplMap::iterator> t_rm_vec; + std::set<ResidueImpl*> involved_residues; for (i=e->GetTorsionMap().begin(); i!=e->GetTorsionMap().end(); ++i) { if (i->second->IsAtomInvolved(shared_from_this())) { t_rm_vec.push_back(i); + involved_residues.insert(i->second->GetFirst()->GetResidue().get()); + involved_residues.insert(i->second->GetSecond()->GetResidue().get()); + involved_residues.insert(i->second->GetThird()->GetResidue().get()); + involved_residues.insert(i->second->GetFourth()->GetResidue().get()); } } std::vector<TorsionImplMap::iterator>::iterator it_rm; for (it_rm=t_rm_vec.begin(); it_rm!=t_rm_vec.end(); ++it_rm) { e->GetTorsionMap().erase(*it_rm); } - TorsionImplList& l=this->GetResidue()->GetTorsionList(); - TorsionImplList::iterator j; - j=std::remove_if(l.begin(), l.end(), - bind(&TorsionImpl::IsAtomInvolved, _1, shared_from_this())); - l.erase(j, l.end()); + + for(std::set<ResidueImpl*>::iterator i = involved_residues.begin(); + i != involved_residues.end(); ++i){ + TorsionImplList& l = (*i)->GetTorsionList(); + TorsionImplList::iterator j; + j=std::remove_if(l.begin(), l.end(), + bind(&TorsionImpl::IsAtomInvolved, _1, shared_from_this())); + l.erase(j, l.end()); + } } }}} // ns