00001 00010 #ifndef SIMHITSPLITSVC_H 00011 #define SIMHITSPLITSVC_H 00012 00013 #include "MixSimHit.h" 00014 00015 #include "Event/GenHeader.h" 00016 #include "Event/SimHeader.h" 00017 #include "Event/SimHit.h" 00018 00019 #include "Conventions/Electronics.h" 00020 00021 #include "SimHitSplitSvc/ISimHitSplitSvc.h" 00022 00023 #include "GaudiKernel/Service.h" 00024 #include "GaudiKernel/MsgStream.h" 00025 00026 #include <map> 00027 #include <deque> 00028 #include <vector> 00029 00030 using namespace std; 00031 00032 class SimHitSplitSvc : public Service, 00033 virtual public ISimHitSplitSvc 00034 { 00035 public: 00036 SimHitSplitSvc(const string& name, ISvcLocator* pSvcLocator); 00037 virtual ~SimHitSplitSvc(); 00038 00039 virtual StatusCode initialize(); 00040 virtual StatusCode queryInterface(const InterfaceID& riid, void** ppint); 00041 00042 StatusCode getSimHitHeader(SimHeader* sh, vector<SimHitHeader*>& shhs, vector<TimeStamp>& hites, vector<TimeStamp>& hitls); 00043 00044 private: 00045 //MsgStream 00046 mutable MsgStream m_log; 00047 00048 //Parameters to dealing with SimHits 00049 deque<double> m_hitsGap; //for SimHit 00050 deque<MixSimHit> m_SimHits; //SimHits buffer 00051 00052 //Fill Hits buffer and HitHeader with given SimHeader's 00053 StatusCode fillHitsBuffer(SimHeader* sh); 00054 00055 //Search Hits buffer for a gap, update the gap vector 00056 StatusCode findGap(); 00057 00058 //Filling one or more SimHitHeader with proper SimHits 00059 //then push_back the SimHitHeader into SimHitHeader vector 00060 StatusCode createHitHeaders(SimHeader* sh, vector<SimHitHeader*>& shhs, vector<TimeStamp>& hites, vector<TimeStamp>& hitls); 00061 00062 //The absolute time of the SimHeader 00063 TimeStamp m_absTime; 00064 //SimHit chunks' earliest and latest 00065 vector<TimeStamp> m_hitEarliests; 00066 vector<TimeStamp> m_hitLatests; 00067 00068 double m_minTimeGap; 00069 TimeStamp m_MinTimeGap; 00070 }; 00071 00072 #endif //SIMHITSPLITSVC_H