diff --git a/modules/mol/base/pymod/export_editors.cc b/modules/mol/base/pymod/export_editors.cc index eb1720a1de10dcfde86e1ba7c47105bd4e4368be..6cee09765c2ce84e7a07bbddf4d05abebdd84cf6 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 e9fed6874cf52057b0ad21b82dc8fa3980bc3ba8..ba822f0f5e3f57535d1ae59ab9837819f447221d 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 0527a0a7b1291a2cac7b77387076c915207d5b83..c6309cce3ee22f5c792b6240487d16b15c6ed48c 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 5ac2b91ab1d6cf372769d9135ecffd38a97773a1..009f436a5406a42caeda27605574587d48decbe3 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 8e99792dd1597eefe4a28658d46d2a6fd97fed87..bcb3436e2bc463dadcfe1ca6af4e1bbac48af24b 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 bc3fba841fe6798db72963e07bbbf79d718344c9..daf9c7c1fbcc33970c7acf316c12a69f786b8ffb 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 3c5000920c23a959ab631e62874d54df6cce6878..dd88fb32575437e74bb95bc8e7df90c26976b4aa 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 19bccc98e7e39e4f27c2001feb7efe58ceaf3fbe..168c9744c44c7c7188f1259a6ff33eabeed85a1b 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_;