00001 #ifndef DAQFORMATMODULES_DAQFORMATWRITER_H 00002 #define DAQFORMATMODULES_DAQFORMATWRITER_H 00003 00004 /* 00005 * DaqFormat.h 00006 * DaqFormatModules 00007 * 00008 * Created by Simon Patton on 8/5/10. 00009 * Copyright 2010 DayaBay Collaboration. All rights reserved. 00010 * 00011 */ 00012 00013 #include <string> 00014 00015 #include "DybAlg/DybAlgorithm.h" 00016 #include "Event/ReadoutHeader.h" 00017 00018 class IDaqReadoutSvc; 00019 00020 namespace DybDaq { 00021 class DaqToOStream; 00022 class FileTraits; 00023 class DaqToOStream; 00024 } 00025 00026 namespace DybDaq { 00027 00028 class DaqFormatWriter : public DybAlgorithm<DayaBay::ReadoutHeader> 00029 { 00030 00031 public: 00032 00033 DaqFormatWriter(const std::string& name, 00034 ISvcLocator* pSvcLocator); 00035 virtual ~DaqFormatWriter(); 00036 00037 virtual StatusCode initialize(); 00038 00039 virtual StatusCode execute(); 00040 00041 virtual StatusCode finalize(); 00042 00043 protected: 00044 00048 virtual DaqToOStream* createDaqToOStream(const FileTraits& traits) = 0; 00049 00053 virtual StatusCode writeFileHead(const DayaBay::DaqCrate* daqCrate); 00054 00058 virtual StatusCode writeData(const DayaBay::DaqCrate* daqCrate); 00059 00063 virtual StatusCode writeFileFoot(); 00064 00068 virtual void wroteFileHead() = 0; 00069 00073 virtual void wroteData() = 0; 00074 00078 virtual void wroteFileFoot() = 0; 00079 00080 private: 00081 00085 const DybDaq::FileTraits* m_traits; 00086 00090 IDaqReadoutSvc* m_daqSvc; 00091 00095 DybDaq::DaqToOStream* m_daqToOStream; 00096 00100 std::string m_outputBase; 00101 00105 unsigned long m_fileByteCount; 00106 00110 unsigned long m_fileByteLimit; 00111 00115 unsigned int m_fileBlockCount; 00116 00120 unsigned int m_fileBlockLimit; 00121 00122 }; 00123 00124 } 00125 00126 #endif // DAQFORMATMODULES_DAQFORMATWRITER_H