00001 #ifndef _ots_RawDataSaverConsumerBase_h_
00002 #define _ots_RawDataSaverConsumerBase_h_
00003
00004 #include "otsdaq-core/DataManager/DataConsumer.h"
00005 #include "otsdaq-core/ConfigurationInterface/Configurable.h"
00006
00007 #include <string>
00008 #include <fstream>
00009
00010 namespace ots
00011 {
00012
00013 class RawDataSaverConsumerBase : public DataConsumer, public Configurable
00014 {
00015 public:
00016 RawDataSaverConsumerBase(std::string supervisorApplicationUID, std::string bufferUID, std::string processorUID, const ConfigurationTree& theXDAQContextConfigTree, const std::string& configurationPath);
00017 virtual ~RawDataSaverConsumerBase(void);
00018
00019 protected:
00020 virtual void openFile (std::string runNumber);
00021 virtual void closeFile (void);
00022 virtual void save (const std::string& data);
00023 virtual void writeHeader (void){;}
00024 virtual void writeFooter (void){;}
00025 virtual void writePacketHeader (const std::string& data){unsigned char quadWordsCount = (data.length()-2)/8; outFile_.write( (char*)&quadWordsCount, 1);}
00026 virtual void writePacketFooter (const std::string& data){;}
00027 virtual void startProcessingData(std::string runNumber) override;
00028 virtual void stopProcessingData (void) override;
00029 virtual bool workLoopThread (toolbox::task::WorkLoop* workLoop);
00030 virtual void fastRead (void);
00031 virtual void slowRead (void);
00032
00033 std::ofstream outFile_;
00034
00035 std::string* dataP_;
00036 std::map<std::string,std::string>* headerP_;
00037
00038 std::string data_;
00039 std::map<std::string,std::string> header_;
00040
00041 std::string filePath_;
00042 std::string fileRadix_;
00043 long maxFileSize_;
00044 std::string currentRunNumber_;
00045 unsigned int currentSubRunNumber_;
00046
00047 };
00048
00049 }
00050
00051 #endif