Skip to content
Snippets Groups Projects
Commit 675d0d81 authored by Studer Gabriel's avatar Studer Gabriel
Browse files

properly remove torsion handles from residues

When an atom gets deleted, all related torsions get deleted from
the entities TorsionImplMap. The ResidueHandles keep their own vector
of the same TorsionHandles. If an atom gets deleted, only the internal
torsion list of the corresponding residue got updated. This had to be
extended to all residues containing torsions related to the deleted
atom.
parent b8e99086
Branches
Tags
No related merge requests found
......@@ -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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment