From 28e62d110a9aa3f080fa23992c061c0c77b07a14 Mon Sep 17 00:00:00 2001
From: Ansgar Philippsen <ansgar.philippsen@gmail.com>
Date: Tue, 26 Jun 2012 11:57:03 -0400
Subject: [PATCH] added frame delta and start time properties to coord group

---
 modules/io/src/mol/dcd_io.cc                 |  2 +-
 modules/mol/base/pymod/export_coord_group.cc | 12 ++++++++--
 modules/mol/base/src/coord_group.cc          | 24 ++++++++++++++++++++
 modules/mol/base/src/coord_group.hh          | 15 +++++++++++-
 modules/mol/base/src/coord_source.cc         | 10 +++-----
 modules/mol/base/src/coord_source.hh         | 17 ++++++++++----
 modules/mol/base/src/in_mem_coord_source.cc  |  2 +-
 modules/mol/base/src/in_mem_coord_source.hh  |  2 +-
 8 files changed, 67 insertions(+), 17 deletions(-)

diff --git a/modules/io/src/mol/dcd_io.cc b/modules/io/src/mol/dcd_io.cc
index 7ec81f5ed..39255d366 100644
--- a/modules/io/src/mol/dcd_io.cc
+++ b/modules/io/src/mol/dcd_io.cc
@@ -306,7 +306,7 @@ public:
   }
     
   
-  virtual uint GetFrameCount() 
+  virtual uint GetFrameCount() const
   { 
     if (!frame_count_)
       const_cast<DCDCoordSource*>(this)->FetchFrame(0);
diff --git a/modules/mol/base/pymod/export_coord_group.cc b/modules/mol/base/pymod/export_coord_group.cc
index 6bdeb1d69..a445e74c0 100644
--- a/modules/mol/base/pymod/export_coord_group.cc
+++ b/modules/mol/base/pymod/export_coord_group.cc
@@ -47,24 +47,32 @@ void export_CoordGroup()
   class_<CoordGroupHandle>("CoordGroupHandle",no_init)
     .def("IsValid",&CoordGroupHandle::IsValid)
     .def("GetEntity",&CoordGroupHandle::GetEntity)
+    .add_property("entity",&CoordGroupHandle::GetEntity)
     .def("GetAtomCount",&CoordGroupHandle::GetAtomCount)
+    .add_property("atom_count",&CoordGroupHandle::GetAtomCount)
     .def("GetFrame",&CoordGroupHandle::GetFrame2)
     .def("AddFrames", &CoordGroupHandle::AddFrames)
     .def("AddFrame", add_frame1)
     .def("AddFrame", add_frame2)
     .def("GetFrameCount",&CoordGroupHandle::GetFrameCount)
+    .add_property("frame_count",&CoordGroupHandle::GetFrameCount)
     .def("GetFramePositions",&CoordGroupHandle::GetFramePositions)
     .def("SetFramePositions",&CoordGroupHandle::SetFramePositions)
     .def("SetAtomPos",&CoordGroupHandle::SetAtomPos)
     .def("GetAtomPos",&CoordGroupHandle::GetAtomPos)
     .def("CopyFrame",&CoordGroupHandle::CopyFrame)
-    .add_property("atoms", &CoordGroupHandle::GetAtomList)
-    .add_property("entity", &CoordGroupHandle::GetEntity)
     .def("IsValid", &CoordGroupHandle::IsValid)
     .def("Capture", capture1)
     .def("Capture", capture2)
     .def("CaptureInto",&CoordGroupHandle::CaptureInto)
     .def("GetAtomList",&CoordGroupHandle::GetAtomList)
+    .add_property("atoms", &CoordGroupHandle::GetAtomList)
+    .def("GetDelta",&CoordGroupHandle::GetDelta)
+    .def("SetDelta",&CoordGroupHandle::SetDelta)
+    .add_property("delta",&CoordGroupHandle::GetDelta,&CoordGroupHandle::SetDelta)
+    .def("GetStartTime",&CoordGroupHandle::GetStartTime)
+    .def("SetStartTime",&CoordGroupHandle::SetStartTime)
+    .add_property("start_time",&CoordGroupHandle::GetStartTime,&CoordGroupHandle::SetStartTime)
     .def("__getitem__",cg_getitem)
     .def("__setitem__",cg_setitem)
     .def("Filter", &CoordGroupHandle::Filter, (arg("selected"),arg("first")=0,arg("last")=-1))
diff --git a/modules/mol/base/src/coord_group.cc b/modules/mol/base/src/coord_group.cc
index db3fd341c..bd56a4e00 100644
--- a/modules/mol/base/src/coord_group.cc
+++ b/modules/mol/base/src/coord_group.cc
@@ -66,6 +66,30 @@ uint CoordGroupHandle::GetFrameCount() const
   return source_->GetFrameCount();
 }
 
+float CoordGroupHandle::GetDelta() const
+{
+  this->CheckValidity();  
+  return source_->GetFrameDelta();
+}
+
+void CoordGroupHandle::SetDelta(float d)
+{
+  this->CheckValidity();  
+  source_->SetFrameDelta(d);
+}
+
+float CoordGroupHandle::GetStartTime() const
+{
+  this->CheckValidity();  
+  return source_->GetStartTime();
+}
+
+void CoordGroupHandle::SetStartTime(float t)
+{
+  this->CheckValidity();  
+  source_->SetStartTime(t);
+}
+
 void CoordGroupHandle::SetFramePositions(uint frame, 
                                          const std::vector<geom::Vec3>& clist)
 {
diff --git a/modules/mol/base/src/coord_group.hh b/modules/mol/base/src/coord_group.hh
index 652fe3463..bf049aadd 100644
--- a/modules/mol/base/src/coord_group.hh
+++ b/modules/mol/base/src/coord_group.hh
@@ -35,6 +35,8 @@ class DLLEXPORT_OST_MOL CoordGroupHandle {
 public:
   /// \brief create empty, invalid handle
   CoordGroupHandle();
+  /// \brief used internally
+  CoordGroupHandle(CoordSourcePtr source);
 
   /// \brief return trajectories entity handle
   EntityHandle GetEntity() const;
@@ -48,6 +50,18 @@ public:
   /// \brief number of frames
   uint GetFrameCount() const;
 
+  /// \brief time in ps between frames, default 0.0
+  float GetDelta() const;
+
+  /// \brief set time between each frame in ps
+  void SetDelta(float d);
+
+  /// \brief start time in ps, default 0.0
+  float GetStartTime() const;
+
+  /// \rbrief set start time in ps
+  void SetStartTime(float t);
+
   /// \brief assign positions to the given frame - order and count must match 
   ///      initial atomlist
   void SetFramePositions(uint frame, const std::vector<geom::Vec3>& clist);
@@ -92,7 +106,6 @@ public:
   ///     view
   CoordGroupHandle Filter(const EntityView& selected,int first=0,int last=-1) const;
   
-  CoordGroupHandle(CoordSourcePtr source);
 
 
 private:
diff --git a/modules/mol/base/src/coord_source.cc b/modules/mol/base/src/coord_source.cc
index 5f0e42a63..335117423 100644
--- a/modules/mol/base/src/coord_source.cc
+++ b/modules/mol/base/src/coord_source.cc
@@ -35,7 +35,9 @@ CoordSource::CoordSource(const AtomHandleList& atoms):
   atoms_(atoms), 
   entity_(),
   mutable_(false),
-  atom_dict_()
+  atom_dict_(),
+  delta_(1.0),
+  start_time_(0.0)
 {
   if (!atoms_.empty()) {
     entity_=atoms_.front().GetEntity();
@@ -45,12 +47,6 @@ CoordSource::CoordSource(const AtomHandleList& atoms):
   }
 }
 
-  
-CoordSource::~CoordSource()
-{
-  
-}
-
 void CoordSource::CopyFrame(uint frame_id)
 {
   if (atoms_.empty()) {
diff --git a/modules/mol/base/src/coord_source.hh b/modules/mol/base/src/coord_source.hh
index fec0d9946..a50f256a1 100644
--- a/modules/mol/base/src/coord_source.hh
+++ b/modules/mol/base/src/coord_source.hh
@@ -43,14 +43,22 @@ class DLLEXPORT_OST_MOL CoordSource {
 public:
   CoordSource(const AtomHandleList& atoms);
   
-  virtual ~CoordSource();
+  virtual ~CoordSource() {}
   
+  virtual uint GetFrameCount() const =0;
+
+  virtual CoordFramePtr GetFrame(uint frame_id) const = 0;
+ 
   CoordSourcePtr Extract(int start=0, int stop=-1, int step=1);
   
-  virtual uint GetFrameCount()=0;
+  // time in ps between frames
+  float GetFrameDelta() const {return delta_;}
+  void SetFrameDelta(float d) {delta_=d;}
+
+  // start time in ps
+  float GetStartTime() const {return start_time_;}
+  void SetStartTime(float t) {start_time_=t;}
   
-  virtual CoordFramePtr GetFrame(uint frame_id) const = 0;
- 
   int GetAtomCount() const;
   
   EntityHandle GetEntity() const;
@@ -79,6 +87,7 @@ private:
   EntityHandle   entity_;
   bool           mutable_;
   std::map<long,uint> atom_dict_;
+  float delta_,start_time_;
 };
 
 }}
diff --git a/modules/mol/base/src/in_mem_coord_source.cc b/modules/mol/base/src/in_mem_coord_source.cc
index ea01db894..a8d985c25 100644
--- a/modules/mol/base/src/in_mem_coord_source.cc
+++ b/modules/mol/base/src/in_mem_coord_source.cc
@@ -9,7 +9,7 @@ InMemCoordSource::InMemCoordSource(const AtomHandleList& atoms):
   this->SetMutable(true);
 }
   
-uint InMemCoordSource::GetFrameCount()
+uint InMemCoordSource::GetFrameCount() const
 {
   return frames_.size();
 }
diff --git a/modules/mol/base/src/in_mem_coord_source.hh b/modules/mol/base/src/in_mem_coord_source.hh
index 0984791aa..6b6d15f6a 100644
--- a/modules/mol/base/src/in_mem_coord_source.hh
+++ b/modules/mol/base/src/in_mem_coord_source.hh
@@ -38,7 +38,7 @@ class DLLEXPORT_OST_MOL InMemCoordSource : public CoordSource {
 public:
   InMemCoordSource(const AtomHandleList& atoms);
   
-  virtual uint GetFrameCount();
+  virtual uint GetFrameCount() const;
   
   virtual CoordFramePtr GetFrame(uint frame_id) const;
   
-- 
GitLab