From f92d319697c1f33d126d50be790640b9a6eb74bd Mon Sep 17 00:00:00 2001
From: Niklaus Johner <nij2003@med.cornell.edu>
Date: Wed, 26 Oct 2011 18:26:54 -0400
Subject: [PATCH] Added a first and last argument in the CoordGroup::Filter
 function

---
 modules/mol/base/pymod/export_coord_group.cc | 2 +-
 modules/mol/base/src/coord_group.cc          | 7 ++++---
 modules/mol/base/src/coord_group.hh          | 2 +-
 3 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/modules/mol/base/pymod/export_coord_group.cc b/modules/mol/base/pymod/export_coord_group.cc
index 794db5363..c6f30e8f5 100644
--- a/modules/mol/base/pymod/export_coord_group.cc
+++ b/modules/mol/base/pymod/export_coord_group.cc
@@ -61,7 +61,7 @@ void export_CoordGroup()
     .def("GetAtomList",&CoordGroupHandle::GetAtomList)
     .def("__getitem__",cg_getitem)
     .def("__setitem__",cg_setitem)
-    .def("Filter", &CoordGroupHandle::Filter)
+    .def("Filter", &CoordGroupHandle::Filter, (arg("selected"),arg("first")=0,arg("last")=-1))
   ;
 
   def("CreateCoordGroup",CreateCoordGroup);
diff --git a/modules/mol/base/src/coord_group.cc b/modules/mol/base/src/coord_group.cc
index f92c58e22..47622e901 100644
--- a/modules/mol/base/src/coord_group.cc
+++ b/modules/mol/base/src/coord_group.cc
@@ -171,7 +171,7 @@ void CoordGroupHandle::Capture(uint frame)
   }  
 }
 
-CoordGroupHandle CoordGroupHandle::Filter(const EntityView& selected) const
+CoordGroupHandle CoordGroupHandle::Filter(const EntityView& selected, int first, int last) const
 {
   this->CheckValidity();
   std::vector<unsigned long> indices;
@@ -194,8 +194,9 @@ CoordGroupHandle CoordGroupHandle::Filter(const EntityView& selected) const
 
   CoordGroupHandle filtered_cg=CreateCoordGroup(new_ent.GetAtomList());
   std::vector<geom::Vec3> vecs(indices.size());
-  for (size_t i=0; i<this->GetFrameCount(); ++i) {
-    LOG_INFO("Filtering frame " << i << "/" << this->GetFrameCount());
+  if (last==-1) last=this->GetFrameCount();
+  for (int i=first; i<last; ++i) {
+    LOG_INFO("Filtering frame " << i << "/" << last);
     CoordFramePtr frame=this->GetFrame(i);
     for (std::vector<unsigned long>::const_iterator 
          j=indices.begin(), e2=indices.end(); j!=e2; ++j) {
diff --git a/modules/mol/base/src/coord_group.hh b/modules/mol/base/src/coord_group.hh
index 2b6d6fe7f..57701931b 100644
--- a/modules/mol/base/src/coord_group.hh
+++ b/modules/mol/base/src/coord_group.hh
@@ -85,7 +85,7 @@ public:
   
   /// \brief return a filtered coord group, containing only the atoms in the 
   ///     view
-  CoordGroupHandle Filter(const EntityView& selected) const;
+  CoordGroupHandle Filter(const EntityView& selected,int first=0,int last=-1) const;
   
   CoordGroupHandle(CoordSourcePtr source);
 
-- 
GitLab