Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-06-22 02:23:37

0001 #ifndef DQMServices_StreamerIO_DQMStreamerReader_h
0002 #define DQMServices_StreamerIO_DQMStreamerReader_h
0003 
0004 #include "IOPool/Streamer/interface/StreamerInputSource.h"
0005 #include "IOPool/Streamer/interface/StreamerInputFile.h"
0006 #include "IOPool/Streamer/interface/MsgTools.h"
0007 
0008 #include "DQMFileIterator.h"
0009 #include "TriggerSelector.h"
0010 
0011 #include <memory>
0012 #include <string>
0013 #include <vector>
0014 
0015 namespace dqmservices {
0016 
0017   class DQMStreamerReader : public edm::streamer::StreamerInputSource {
0018   public:
0019     DQMStreamerReader(edm::ParameterSet const& pset, edm::InputSourceDescription const& desc);
0020     ~DQMStreamerReader() override;
0021 
0022     static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0023 
0024     bool newHeader();
0025 
0026   protected:
0027     Next checkNext() override;      /* from raw input source */
0028     void skip(int toSkip) override; /* from raw input source */
0029     void genuineReadFile() override;
0030     void genuineCloseFile() override;
0031 
0032   private:
0033     // our own, but we do inherit reset(),
0034     // which will break things if called
0035     void reset_() override;
0036 
0037     void openFileImp_(const DQMFileIterator::LumiEntry& entry);
0038     void closeFileImp_(const std::string& reason);
0039 
0040     bool openNextFileImp_();
0041 
0042     edm::streamer::InitMsgView const* getHeaderMsg();
0043     edm::streamer::EventMsgView const* getEventMsg();
0044 
0045     void setupMetaData(edm::streamer::InitMsgView const& msg, bool subsequent);
0046     edm::streamer::EventMsgView const* prepareNextEvent();
0047 
0048     bool isFirstFile_ = true;
0049     bool prepareNextFile();
0050     bool acceptEvent(const edm::streamer::EventMsgView*);
0051 
0052     DQMFileIterator fiterator_;
0053     unsigned int processedEventPerLs_ = 0;
0054 
0055     unsigned int const minEventsPerLs_;
0056     bool const flagSkipFirstLumis_;
0057     bool const flagEndOfRunKills_;
0058     bool const flagDeleteDatFiles_;
0059     std::vector<std::string> const hltSel_;
0060     bool const unitTest_;
0061 
0062     bool acceptAllEvt_ = false;
0063     bool setAcceptAllEvt();
0064 
0065     bool matchTriggerSel_ = false;
0066     bool setMatchTriggerSel(std::vector<std::string> const& tnames);
0067 
0068     //If the event meta data changes while reading a file, we need to
0069     // cause a file transition to happen to allow synchronous update
0070     bool artificialFileBoundary_ = false;
0071     struct OpenFile {
0072       std::unique_ptr<edm::streamer::StreamerInputFile> streamFile_;
0073       DQMFileIterator::LumiEntry lumi_;
0074 
0075       bool open() { return (streamFile_.get() != nullptr); }
0076 
0077     } file_;
0078 
0079     std::shared_ptr<edm::EventSkipperByID> eventSkipperByID_;
0080     std::shared_ptr<TriggerSelector> triggerSelector_;
0081   };
0082 
0083 }  // namespace dqmservices
0084 
0085 #endif  // DQMServices_StreamerIO_DQMStreamerReader_h