00001 #ifndef MixRootIOCnvSvc_H
00002 #define MixRootIOCnvSvc_H
00003
00011 #include <algorithm>
00012
00013
00014 #include "TRandom.h"
00015
00016 #include "RootIOSvc/RootIOCnvSvc.h"
00017 #include "Mixing/MixHeader.h"
00018 #include "Mixing/IMixingSvc.h"
00019 #include "Context/TimeStamp.h"
00020 #include "Conventions/Detectors.h"
00021
00022 #include "GaudiKernel/MsgStream.h"
00023
00024
00025 using namespace std;
00026 using namespace DayaBay;
00027
00028 class IRndmGenSvc;
00029 class PerReadoutHeader;
00030
00031 class MixRootIOCnvSvc : public RootIOCnvSvc, virtual public IMixingSvc
00032 {
00033 public:
00034 MixRootIOCnvSvc(const string& name, ISvcLocator* svc);
00035 virtual ~MixRootIOCnvSvc();
00036
00037 virtual StatusCode initialize();
00038 virtual StatusCode queryInterface(const InterfaceID& riid, void** ppint);
00039 virtual void setInputFiles( const vector<string>& inputs)
00040 { m_defaultInputFilenames = inputs;}
00041
00042 virtual StatusCode buildStream();
00043 virtual StatusCode readin(deque<MixHeader>* value);
00044 virtual MixHeader fetchMixHeader();
00045 virtual void print();
00046 virtual long entries();
00047
00048 private:
00049 StatusCode updateBuffer();
00050 StatusCode doInit();
00051 double nextTime(double tau);
00052 double flatdis(double maximum);
00053 void performMixing();
00054
00055 map<string, vector<string> > m_inputSamples;
00056 map<string, RootInputStream*> m_simROMap;
00057 map<string, map<string, RootInputStream*> > m_sampleInputStreamMap;
00058
00059 long m_totalentries;
00060 double m_days;
00061 double m_maximum;
00062 double m_maintau;
00063 double m_lasttime;
00064 TimeStamp m_lastTime;
00065
00066
00067 map<string, int> m_fileNum;
00068 map<string, int> m_fileindex;
00069 map<string, int> m_fileEntryNum;
00070
00071 map<string, int> m_fileentries;
00072 map<string, int> m_streamentries;
00073 map<string, double> m_nod;
00074 map<string, double> m_timeTau;
00075
00076 deque<MixHeader>* m_firstBuffer;
00077 deque<MixHeader>* m_secondBuffer;
00078 deque<MixHeader>* m_tesBuffer;
00079
00080 mutable MsgStream m_log;
00081
00082
00083
00084
00085
00086
00087 MixHeader m_earliestHeader;
00088 };
00089
00090 #endif