00001 #ifndef GET4_SUBEVENT_H 00002 #define GET4_SUBEVENT_H 00003 00004 #include "base/SubEvent.h" 00005 00006 #include "roc/Message.h" 00007 00008 #include <vector> 00009 00010 namespace get4 { 00011 00012 00013 /* 00014 * Extended message container. Keeps original ROC message, but adds full timestamp and 00015 * optionally corrected adc valules. 00016 * Note that extended messages inside the vector will be sorted after full timestamp 00017 * by the TRocProc::FinalizeEvent 00018 * 00019 */ 00020 00021 class MessageExtended { 00022 protected: 00023 /* original roc message*/ 00024 roc::Message fMessage; 00025 00026 /* full time stamp without correction*/ 00027 double fGlobalTime; 00028 00029 public: 00030 00031 MessageExtended() : 00032 fMessage(), 00033 fGlobalTime(0.) 00034 { 00035 } 00036 00037 MessageExtended(const roc::Message& msg, double globaltm) : 00038 fMessage(msg), 00039 fGlobalTime(globaltm) 00040 { 00041 } 00042 00043 MessageExtended(const MessageExtended& src) : 00044 fMessage(src.fMessage), 00045 fGlobalTime(src.fGlobalTime) 00046 { 00047 } 00048 00049 MessageExtended& operator=(const MessageExtended& src) 00050 { 00051 fMessage = src.fMessage; 00052 fGlobalTime = src.fGlobalTime; 00053 return *this; 00054 } 00055 00056 ~MessageExtended() {} 00057 00058 /* this is used for timesorting the messages in the filled vectors */ 00059 bool operator<(const MessageExtended &rhs) const 00060 { return (fGlobalTime < rhs.fGlobalTime); } 00061 00062 const roc::Message& msg() const { return fMessage; } 00063 00064 double GetGlobalTime() const { return fGlobalTime; } 00065 }; 00066 00067 00068 class SubEvent : public base::SubEvent { 00069 public: 00070 std::vector<get4::MessageExtended> fExtMessages; 00071 00072 SubEvent() : base::SubEvent(), fExtMessages() {} 00073 virtual ~SubEvent() {} 00074 00075 virtual void Reset() 00076 { 00077 fExtMessages.clear(); 00078 } 00079 }; 00080 00081 } 00082 00083 00084 00085 #endif