1 #include "otsdaq-core/DataManager/RawDataSaverConsumerBase.h"
2 #include "otsdaq-core/Macros/BinaryStringMacros.h"
3 #include "otsdaq-core/MessageFacility/MessageFacility.h"
15 RawDataSaverConsumerBase::RawDataSaverConsumerBase(
16 std::string supervisorApplicationUID,
17 std::string bufferUID,
18 std::string processorUID,
20 const std::string& configurationPath)
23 supervisorApplicationUID, bufferUID, processorUID, HighConsumerPriority)
24 ,
Configurable(theXDAQContextConfigTree, configurationPath)
25 , filePath_(theXDAQContextConfigTree.getNode(configurationPath)
27 .getValue<std::string>())
28 , fileRadix_(theXDAQContextConfigTree.getNode(configurationPath)
29 .getNode(
"RadixFileName")
30 .getValue<std::string>())
31 , maxFileSize_(theXDAQContextConfigTree.getNode(configurationPath)
32 .getNode(
"MaxFileSize")
35 , currentSubRunNumber_(0)
43 RawDataSaverConsumerBase::~RawDataSaverConsumerBase(
void) {}
46 void RawDataSaverConsumerBase::startProcessingData(std::string runNumber)
50 currentSubRunNumber_ = 0;
53 DataConsumer::startProcessingData(runNumber);
57 void RawDataSaverConsumerBase::stopProcessingData(
void)
59 DataConsumer::stopProcessingData();
64 void RawDataSaverConsumerBase::openFile(std::string runNumber)
66 currentRunNumber_ = runNumber;
68 std::stringstream fileName;
69 fileName << filePath_ <<
"/" << fileRadix_ <<
"_Run" << runNumber;
72 fileName <<
"_" << currentSubRunNumber_;
73 fileName <<
"_Raw.dat";
74 __CFG_COUT__ <<
"Saving file: " << fileName.str() << std::endl;
75 outFile_.open(fileName.str().c_str(), std::ios::out | std::ios::binary);
76 if(!outFile_.is_open())
78 __CFG_SS__ <<
"Can't open file " << fileName.str() << std::endl;
86 void RawDataSaverConsumerBase::closeFile(
void)
88 if(outFile_.is_open())
96 void RawDataSaverConsumerBase::save(
const std::string& data)
143 long length = outFile_.tellp();
144 if(length >= maxFileSize_ / 1000)
147 ++currentSubRunNumber_;
148 openFile(currentRunNumber_);
152 writePacketHeader(data);
153 outFile_.write((
char*)&data[0], data.length());
154 writePacketFooter(data);
158 bool RawDataSaverConsumerBase::workLoopThread(toolbox::task::WorkLoop* workLoop)
163 return WorkLoop::continueWorkLoop_;
167 void RawDataSaverConsumerBase::fastRead(
void)
170 if(DataConsumer::read(dataP_, headerP_) < 0)
175 __CFG_COUTV__(dataP_->length());
176 std::string& buffer = *dataP_;
184 DataConsumer::setReadSubBuffer<std::string, std::map<std::string, std::string> >();
188 void RawDataSaverConsumerBase::slowRead(
void)
192 if(DataConsumer::read(data_, header_) < 0)