1 #include "otsdaq-core/DataManager/RawDataSaverConsumerBase.h"
2 #include "otsdaq-core/MessageFacility/MessageFacility.h"
16 RawDataSaverConsumerBase::RawDataSaverConsumerBase(std::string supervisorApplicationUID, std::string bufferUID, std::string processorUID,
const ConfigurationTree& theXDAQContextConfigTree,
const std::string& configurationPath)
18 ,
DataConsumer (supervisorApplicationUID, bufferUID, processorUID, HighConsumerPriority)
19 ,
Configurable (theXDAQContextConfigTree, configurationPath)
20 , filePath_ (theXDAQContextConfigTree.getNode(configurationPath).getNode(
"FilePath").getValue<std::string>())
21 , fileRadix_ (theXDAQContextConfigTree.getNode(configurationPath).getNode(
"RadixFileName").getValue<std::string>())
22 , maxFileSize_ (theXDAQContextConfigTree.getNode(configurationPath).getNode(
"MaxFileSize").getValue<long>()*1000000)
23 , currentSubRunNumber_(0)
27 FILE *fp = fopen(
"/home/otsdaq/tsave.txt",
"w");
32 RawDataSaverConsumerBase::~RawDataSaverConsumerBase(
void)
36 void RawDataSaverConsumerBase::startProcessingData(std::string runNumber)
39 DataConsumer::startProcessingData(runNumber);
43 void RawDataSaverConsumerBase::stopProcessingData(
void)
45 DataConsumer::stopProcessingData();
50 void RawDataSaverConsumerBase::openFile(std::string runNumber)
52 currentRunNumber_ = runNumber;
54 std::stringstream fileName;
55 fileName << filePath_ <<
"/" << fileRadix_ <<
"_Run" << runNumber;
58 fileName <<
"_" << currentSubRunNumber_;
59 fileName <<
"_Raw.dat";
60 std::cout << __COUT_HDR_FL__ <<
"Saving file: " << fileName.str() << std::endl;
61 outFile_.open(fileName.str().c_str(), std::ios::out | std::ios::binary);
62 if(!outFile_.is_open())
64 __SS__ <<
"Can't open file " << fileName.str() << std::endl;
65 __COUT_ERR__ <<
"\n" << ss.str();
66 throw std::runtime_error(ss.str());
73 void RawDataSaverConsumerBase::closeFile(
void)
75 if(outFile_.is_open())
83 void RawDataSaverConsumerBase::save(
const std::string& data)
134 long length = outFile_.tellp();
135 if(length >= maxFileSize_)
138 ++currentSubRunNumber_;
139 openFile(currentRunNumber_);
143 writePacketHeader(data);
144 outFile_.write( (
char*)&data[0], data.length());
145 writePacketFooter(data);
149 bool RawDataSaverConsumerBase::workLoopThread(toolbox::task::WorkLoop* workLoop)
153 return WorkLoop::continueWorkLoop_;
157 void RawDataSaverConsumerBase::fastRead(
void)
160 if(DataConsumer::read(dataP_, headerP_) < 0)
168 DataConsumer::setReadSubBuffer<std::string, std::map<std::string, std::string>>();
172 void RawDataSaverConsumerBase::slowRead(
void)
176 if(DataConsumer::read(data_, header_) < 0)