From ea0e71d9aec276f0f41cbd157f47f6fd8c8b0e4f Mon Sep 17 00:00:00 2001 From: Gabriel Studer <gabriel.studer@stud.unibas.ch> Date: Wed, 22 Feb 2012 12:22:08 +0100 Subject: [PATCH] Added RenumberAllResidue functionality --- modules/mol/base/pymod/export_editors.cc | 1 + modules/mol/base/src/editor_base.cc | 5 +++++ modules/mol/base/src/editor_base.hh | 11 +++++++++++ modules/mol/base/src/impl/chain_impl.cc | 22 ++++++++++++++++++++++ modules/mol/base/src/impl/chain_impl.hh | 2 ++ modules/mol/base/src/impl/entity_impl.cc | 8 ++++++++ modules/mol/base/src/impl/entity_impl.hh | 2 ++ modules/mol/base/src/residue_prop.hh | 10 ++++++++++ 8 files changed, 61 insertions(+) diff --git a/modules/mol/base/pymod/export_editors.cc b/modules/mol/base/pymod/export_editors.cc index eb1720a1d..6cee09765 100644 --- a/modules/mol/base/pymod/export_editors.cc +++ b/modules/mol/base/pymod/export_editors.cc @@ -220,6 +220,7 @@ void export_Editors() .def("AddTorsion", &EditorBase::AddTorsion) .def("ReorderResidues",&EditorBase::ReorderResidues) .def("ReorderAllResidues",&EditorBase::ReorderAllResidues) + .def("RenumberAllResidues",&EditorBase::RenumberAllResidues) ; class_<XCSEditor, bases<EditorBase> >("XCSEditor", no_init) diff --git a/modules/mol/base/src/editor_base.cc b/modules/mol/base/src/editor_base.cc index e9fed6874..ba822f0f5 100644 --- a/modules/mol/base/src/editor_base.cc +++ b/modules/mol/base/src/editor_base.cc @@ -165,6 +165,11 @@ void EditorBase::ReorderAllResidues() ent_.Impl()->ReorderAllResidues(); } +void EditorBase::RenumberAllResidues(int start, bool keep_spacing) +{ + ent_.Impl()->RenumberAllResidues(start, keep_spacing); +} + void EditorBase::RenameAtom(AtomHandle atom, const String& new_name) { CheckHandleValidity(atom); diff --git a/modules/mol/base/src/editor_base.hh b/modules/mol/base/src/editor_base.hh index 0527a0a7b..c6309cce3 100644 --- a/modules/mol/base/src/editor_base.hh +++ b/modules/mol/base/src/editor_base.hh @@ -205,6 +205,17 @@ public: /// \brief reorder residues of all chains based on their residue number void ReorderAllResidues(); + + /// \brief renumber residues of all chains + /// + /// \param start + /// Residues of every chain will be renumbered, whereas the first + /// residue gets the residue number start. + /// + /// \param keep_spacing + /// If set to false, residues will continously be renumbered ongoing from start. + /// Otherwise the spacings between the residues are kept. + void RenumberAllResidues(int start, bool keep_spacing); /// \brief Get edit mode of editor EditMode GetMode() const {return mode_;} diff --git a/modules/mol/base/src/impl/chain_impl.cc b/modules/mol/base/src/impl/chain_impl.cc index 5ac2b91ab..009f436a5 100644 --- a/modules/mol/base/src/impl/chain_impl.cc +++ b/modules/mol/base/src/impl/chain_impl.cc @@ -484,6 +484,28 @@ void ChainImpl::ReorderResidues() UpdateShifts(); } +void ChainImpl::RenumberAllResidues(int start, bool keep_spacing) +{ + ResNum actual_num=ResNum(start); + ResNum original_start_num=residue_list_[0]->GetNumber(); + ResNum start_diff=ResNum(start)-original_start_num; + + + for (ResidueImplList::const_iterator i=residue_list_.begin(); + i!=residue_list_.end(); ++i) { + + if(keep_spacing){ + ResNum temp=(*i)->GetNumber(); + (*i)->SetNumber(temp+start_diff); + continue; + } + + (*i)->SetNumber(actual_num); + actual_num++; + } + UpdateShifts(); +} + void ChainImpl::SetInSequence(const int index) { ResNum num=residue_list_[index]->GetNumber(); diff --git a/modules/mol/base/src/impl/chain_impl.hh b/modules/mol/base/src/impl/chain_impl.hh index 8e99792dd..bcb3436e2 100644 --- a/modules/mol/base/src/impl/chain_impl.hh +++ b/modules/mol/base/src/impl/chain_impl.hh @@ -169,6 +169,8 @@ public: void DeleteAllResidues(); void ReorderResidues(); + + void RenumberAllResidues(int start, bool keep_spacing); int GetIndex(const ResidueImplPtr& res) const; void AssignSecondaryStructure(SecStructure ss, diff --git a/modules/mol/base/src/impl/entity_impl.cc b/modules/mol/base/src/impl/entity_impl.cc index bc3fba841..daf9c7c1f 100644 --- a/modules/mol/base/src/impl/entity_impl.cc +++ b/modules/mol/base/src/impl/entity_impl.cc @@ -1210,4 +1210,12 @@ void EntityImpl::ReorderAllResidues() } } +void EntityImpl::RenumberAllResidues(int start, bool keep_spacing) +{ + for(ChainImplList::iterator cit=chain_list_.begin();cit!=chain_list_.end();++cit) { + (*cit)->RenumberAllResidues(start, keep_spacing); + } + +} + }}} // ns diff --git a/modules/mol/base/src/impl/entity_impl.hh b/modules/mol/base/src/impl/entity_impl.hh index 3c5000920..dd88fb325 100644 --- a/modules/mol/base/src/impl/entity_impl.hh +++ b/modules/mol/base/src/impl/entity_impl.hh @@ -254,6 +254,8 @@ public: void ReorderAllResidues(); + void RenumberAllResidues(int start, bool keep_spacing); + private: void DoCopy(EntityImplPtr dest); diff --git a/modules/mol/base/src/residue_prop.hh b/modules/mol/base/src/residue_prop.hh index 19bccc98e..168c9744c 100644 --- a/modules/mol/base/src/residue_prop.hh +++ b/modules/mol/base/src/residue_prop.hh @@ -75,6 +75,16 @@ public: return num_; } + ResNum operator+(const ResNum& r) + { + return ResNum(num_+r.num_); + } + + ResNum operator-(const ResNum& r) + { + return ResNum(num_-r.num_); + } + ResNum& operator++() { ++num_; -- GitLab