00001 #ifndef RAWDATAINPUTSVC_H
00002 #define RAWDATAINPUTSVC_H
00003
00004
00005 #include <vector>
00006
00007
00008 #include "GaudiKernel/Service.h"
00009
00010
00011 #include "RawDataEvent.h"
00012 #include "RawDataIO/IRawDataInputSvc.h"
00013
00014
00015 #include "RawData/IInputStream.h"
00016 #include "RawData/RawDataReader.h"
00017 #include "RawData/RawData.h"
00018
00019 class RawDataInputSvc: public Service,
00020 virtual public IRawDataInputSvc
00021 {
00022 public:
00023 RawDataInputSvc(const std::string& name, ISvcLocator* svcloc);
00024 ~RawDataInputSvc();
00025
00026
00027 virtual StatusCode queryInterface(const InterfaceID& riid, void** ppRaw);
00028 virtual StatusCode initialize();
00029 virtual StatusCode finalize();
00030
00032 virtual RawDataEvent* currentEvent();
00033 virtual StatusCode nextEvent();
00034
00035 private:
00037 StatusCode nextInputFile();
00038
00040 uint32_t nextRecord();
00041
00043 void setBuffer(uint32_t size) {
00044 if (m_buffer != 0) delete[] m_buffer;
00045 m_buffer = new char[size];
00046 m_bufferSize = size;
00047 }
00048
00050 void readRawEventBuffer();
00051 int readRomData(RawDataEvent::RomFee* rom, int& offset, const int& romDataSize);
00052 int readRomData(RawDataEvent::RomFadc* rom, int& offset, const int& romDataSize);
00053 int readRomData(RawDataEvent::RomLtb* rom, int& offset, const int& romDataSize);
00054 int readRomDataUTC(RawDataEvent::RomLtb* rom, int& offset, const int& romDataSize);
00055 int readRomDataUnix(RawDataEvent::RomLtb* rom, int& offset, const int& romDataSize);
00056
00058 void printEvent();
00059
00061 int queryRawFileFromDB();
00062
00063 std::vector<std::string> m_inputFiles;
00064 IInputStream* m_inputStream;
00065 RawDataEvent* m_rawDataEvent;
00066
00068 int m_bufferSize;
00069 char* m_buffer;
00070 int m_printFreq;
00071 bool m_isFileHeaderPrinted;
00072 bool m_includeRawEvent;
00073 bool m_ifRawEventHeader;
00074
00076 int m_samplingInterval;
00077 int m_randomEvtNum;
00078
00080 int m_SeqNo;
00081 bool m_IsDBI;
00082
00083
00085 public:
00086 DayaBay::RawEvent* currentRawEvent();
00087 DayaBay::RawEvent* currentRawEventClone();
00088
00089 private:
00090 DayaBay::RawDataReader* m_reader;
00091 DayaBay::RawEvent* m_rawEvent;
00092 DayaBay::RawEvent* m_rawEventClone;
00093
00094 };
00095
00096 #endif