From 501e9f065acef4c83313d01c3241e1ddd5a72e60 Mon Sep 17 00:00:00 2001 From: Niklaus Johner <nij2003@med.cornell.edu> Date: Wed, 20 Feb 2013 16:42:25 -0500 Subject: [PATCH] Fixed atom ordering in the GetFrameFromEntity() function in the structure_analysis.py module. This is used to make functions written at the CoordFrame level accesible to analyze both entities and trajectories. --- modules/mol/alg/pymod/structure_analysis.py | 2 +- modules/mol/base/pymod/export_entity.cc | 2 +- modules/mol/base/src/entity_handle.cc | 11 +++++++++-- modules/mol/base/src/entity_handle.hh | 2 +- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/modules/mol/alg/pymod/structure_analysis.py b/modules/mol/alg/pymod/structure_analysis.py index 7cbd0dd4b..1ad301618 100644 --- a/modules/mol/alg/pymod/structure_analysis.py +++ b/modules/mol/alg/pymod/structure_analysis.py @@ -13,7 +13,7 @@ def GetFrameFromEntity(eh): Input: eh : EntityHandle """ - return ost.mol.CreateCoordFrame(eh.GetAtomPosList()) + return ost.mol.CreateCoordFrame(eh.GetAtomPosList(ordered_by_index=True)) def GetDistanceBetwCenterOfMass(sele1,sele2): """ diff --git a/modules/mol/base/pymod/export_entity.cc b/modules/mol/base/pymod/export_entity.cc index bb55d9bd6..280024f0a 100644 --- a/modules/mol/base/pymod/export_entity.cc +++ b/modules/mol/base/pymod/export_entity.cc @@ -155,7 +155,7 @@ void export_Entity() .def("GetMass", &EntityHandle::GetMass) .def("GetCenterOfMass", &EntityHandle::GetCenterOfMass) .def("GetCenterOfAtoms", &EntityHandle::GetCenterOfAtoms) - .def("GetAtomPosList", &EntityHandle::GetAtomPosList) + .def("GetAtomPosList", &EntityHandle::GetAtomPosList, arg("ordered_by_index")=false) .def("GetGeometricCenter", geom_center<EntityHandle>) .add_property("geometric_center", geom_center<EntityHandle>) diff --git a/modules/mol/base/src/entity_handle.cc b/modules/mol/base/src/entity_handle.cc index e34e11d2e..7bf3ed349 100644 --- a/modules/mol/base/src/entity_handle.cc +++ b/modules/mol/base/src/entity_handle.cc @@ -402,16 +402,23 @@ AtomHandleList EntityHandle::GetAtomList() const return atoms; } -geom::Vec3List EntityHandle::GetAtomPosList() const { +bool less_index(const mol::AtomHandle& a1, const mol::AtomHandle& a2) +{ + return a1.GetIndex()<a2.GetIndex(); +} + +geom::Vec3List EntityHandle::GetAtomPosList(bool ordered_by_index) const { this->CheckValidity(); geom::Vec3List atom_pos_list; atom_pos_list.reserve(this->GetAtomCount()); AtomHandleList atom_list=this->GetAtomList(); + if (ordered_by_index){ + std::sort(atom_list.begin(),atom_list.end(),less_index); + } for (AtomHandleList::const_iterator a=atom_list.begin(), e=atom_list.end(); a!=e; ++a) { atom_pos_list.push_back(a->GetPos()); } return atom_pos_list; - //return Impl()->GetAtomPosList(); } EntityHandle EntityHandle::GetHandle() const diff --git a/modules/mol/base/src/entity_handle.hh b/modules/mol/base/src/entity_handle.hh index fe2a43913..c2888c9e2 100644 --- a/modules/mol/base/src/entity_handle.hh +++ b/modules/mol/base/src/entity_handle.hh @@ -289,7 +289,7 @@ public: AtomHandleList GetAtomList() const; /// \brief get complete list of atom positions - geom::Vec3List GetAtomPosList() const; + geom::Vec3List GetAtomPosList(bool ordered_by_index = false) const; /// \brief Get editor for external coordinate system to manipulate atom /// positions -- GitLab