1 #ifndef IOPool_Streamer_RecoEventOutputModuleForFU_h 2 #define IOPool_Streamer_RecoEventOutputModuleForFU_h 11 #include <boost/filesystem.hpp> 12 #include <boost/algorithm/string.hpp> 24 template <
typename Consumer>
41 void start()
override;
51 std::unique_ptr<Consumer>
c_;
73 template <
typename Consumer>
90 outBuf_(new unsigned char[1024 * 1024]) {
97 throw cms::Exception(
"RecoEventOutputModuleForFU") <<
"Underscore character is reserved can not be used for " 98 "stream names in FFF, but was detected in stream name -: " 103 boost::algorithm::to_lower(streamLabelLow);
104 auto streampos = streamLabelLow.rfind(
"stream");
105 if (streampos != 0 && streampos != std::string::npos)
107 <<
"stream (case-insensitive) sequence was found in stream suffix. This is reserved and can not be used for " 108 "names in FFF based HLT, but was detected in stream name";
113 template <
typename Consumer>
117 LogDebug(
"RecoEventOutputModuleForFU") <<
"writing .dat files to -: " << baseRunDir;
145 std::stringstream tmpss,
ss;
146 tmpss << baseRunDir <<
"/open/" 147 <<
"output_" << getpid() <<
".jsd";
148 ss << baseRunDir <<
"/" 149 <<
"output_" << getpid() <<
".jsd";
155 if (
stat(outJsonDefName.c_str(), &fstat) != 0) {
156 LogDebug(
"RecoEventOutputModuleForFU") <<
"writing output definition file -: " << outJsonDefName;
160 boost::filesystem::rename(outTmpJsonDefName, outJsonDefName);
180 template <
typename Consumer>
183 template <
typename Consumer>
188 <<
"start() method, initializing streams. init stream -: " << openInitFileName;
189 c_->setInitMessageFile(openInitFileName);
193 template <
typename Consumer>
198 template <
typename Consumer>
200 c_->doOutputHeader(init_message);
204 stat(openIniFileName.c_str(), &istat);
207 uint32_t adlera = 1, adlerb = 0;
208 FILE*
src = fopen(openIniFileName.c_str(),
"r");
209 while (readInput < istat.st_size) {
210 size_t toRead = readInput + 1024 * 1024 < istat.st_size ? 1024 * 1024 : istat.st_size - readInput;
211 fread(
outBuf_, toRead, 1, src);
220 uint32_t adler32c = (adlerb << 16) | adlera;
221 if (adler32c !=
c_->get_adler32_ini()) {
223 <<
"Checksum mismatch of ini file -: " << openIniFileName <<
" expected:" <<
c_->get_adler32_ini()
224 <<
" obtained:" << adler32c;
226 LogDebug(
"RecoEventOutputModuleForFU") <<
"Ini file checksum -: " <<
streamLabel_ <<
" " << adler32c;
231 template <
typename Consumer>
234 c_->doOutputEvent(msg);
237 template <
typename Consumer>
241 Consumer::fillDescription(desc);
256 template <
typename Consumer>
263 template <
typename Consumer>
273 template <
typename Consumer>
278 c_->closeOutputFile();
279 bool abortFlag =
false;
283 edm::LogInfo(
"RecoEventOutputModuleForFU") <<
"output suppressed";
291 filesize = istat.st_size;
292 boost::filesystem::rename(
void addLegendItem(std::string const &name, std::string const &type, std::string const &operation)
static void fillDescription(ParameterSetDescription &desc)
void endLuminosityBlock(edm::LuminosityBlockForOutput const &) override
jsoncollector::IntJ accepted_
unsigned int getEventsProcessedForLumi(unsigned int lumi, bool *abortFlag=0)
static const std::string BINARYOR
jsoncollector::StringJ mergeType_
static const std::string ADLER32
jsoncollector::IntJ filesize_
static const std::string SUM
static bool serialize(JsonSerializable *pObj, std::string &output)
jsoncollector::IntJ hltErrorEvents_
void doOutputEvent(EventMsgBuilder const &msg) override
~RecoEventOutputModuleForFU() override
RecoEventOutputModuleForFU(edm::ParameterSet const &ps)
LuminosityBlockNumber_t luminosityBlock() const
void addDefault(ParameterSetDescription const &psetDescription)
jsoncollector::IntJ fileAdler32_
virtual void setName(std::string name)
jsoncollector::StringJ filelist_
static const std::string MERGE
evf::FastMonitoringService * fms_
boost::filesystem::path openDatChecksumFilePath_
jsoncollector::StringJ transferDestination_
void doOutputHeader(InitMsgBuilder const &init_message) override
static void writeStringToFile(std::string const &filename, std::string &content)
static const std::string CAT
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
void Adler32(char const *data, size_t len, uint32_t &a, uint32_t &b)
StreamerOutputModuleBase(ParameterSet const &ps)
jsoncollector::IntJ errorEvents_
jsoncollector::IntJ retCodeMask_
jsoncollector::DataPointDefinition outJsonDef_
jsoncollector::IntJ processed_
jsoncollector::StringJ inputFiles_
std::shared_ptr< jsoncollector::FastMonitor > jsonMonitor_
std::unique_ptr< Consumer > c_
void setDefaultGroup(std::string const &group)
void beginLuminosityBlock(edm::LuminosityBlockForOutput const &) override
boost::filesystem::path openDatFilePath_
static const std::string SAME