diff --git a/modules/io/src/mol/dcd_io.cc b/modules/io/src/mol/dcd_io.cc index 7ec81f5ed190a9f68aed306199e56cc5cd4d9cf5..39255d366fdd579e035a18ded33ecc3abb77c35e 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 6bdeb1d6958f797898aea3a2915a3063daf10dea..a445e74c079e0d2074f3b6bd3e4ce6b7a520ec0a 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 db3fd341ce04a76c6e928ca1e0fd93e869b583c7..bd56a4e004159ee76f30cbf8e4d5051a0967fae3 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 652fe34636d3dc11c7fa5168c83c05d906b6524a..bf049aadd049b4a3803c8fe1bc35f954f72d142b 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 5f0e42a633334acc768b9796399ab002fdad6599..335117423068e6bae62392a60bbaf87f2658ae96 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 fec0d9946cb2ecd275abb23d5ebb58b080422734..a50f256a15ee81b62d969ef92be0a64cb7cb5bbb 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 ea01db894a69efa04189e126b3f2d6429df46f12..a8d985c25acd30213949ad9139b2dc3e7048cd70 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 0984791aae634bcf315efe08f55f10850ef77c5f..6b6d15f6a22c804fdbe901358817f59093f83f47 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;