Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2023-03-17 10:59:04

0001 #ifndef DQMSERVICES_COMPONENTS_DQMFILESAVERBASE_H
0002 #define DQMSERVICES_COMPONENTS_DQMFILESAVERBASE_H
0003 
0004 #include "FWCore/Framework/interface/global/EDAnalyzer.h"
0005 #include "DQMServices/Core/interface/DQMStore.h"
0006 
0007 #include "EventFilter/Utilities/interface/FastMonitoringService.h"
0008 #include "EventFilter/Utilities/interface/EvFDaqDirector.h"
0009 
0010 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0011 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0012 #include "FWCore/Framework/interface/GetterOfProducts.h"
0013 #include "FWCore/Framework/interface/ProcessMatch.h"
0014 
0015 #include "DataFormats/Histograms/interface/DQMToken.h"
0016 
0017 #include <sys/time.h>
0018 #include <string>
0019 #include <mutex>
0020 
0021 #include <boost/property_tree/ptree.hpp>
0022 
0023 namespace dqm {
0024 
0025   struct NoCache {};
0026 
0027   class DQMFileSaverBase : public edm::global::EDAnalyzer<edm::RunCache<NoCache>, edm::LuminosityBlockCache<NoCache> > {
0028   public:
0029     typedef dqm::legacy::MonitorElement MonitorElement;
0030     typedef dqm::legacy::DQMStore DQMStore;
0031 
0032     DQMFileSaverBase(const edm::ParameterSet &ps);
0033     ~DQMFileSaverBase() override;
0034 
0035   protected:
0036     // file name components, in order
0037     struct FileParameters {
0038       std::string path_;      //
0039       std::string producer_;  // DQM or Playback
0040       int version_;
0041       std::string tag_;
0042       long run_;
0043       long lumi_;
0044       std::string child_;  // child of a fork
0045     };
0046 
0047   protected:
0048     //virtual void beginJob(void) const override final;
0049     //virtual void endJob(void) const override final;
0050 
0051     std::shared_ptr<NoCache> globalBeginRun(const edm::Run &, const edm::EventSetup &) const final;
0052 
0053     std::shared_ptr<NoCache> globalBeginLuminosityBlock(const edm::LuminosityBlock &,
0054                                                         const edm::EventSetup &) const final;
0055 
0056     void analyze(edm::StreamID, const edm::Event &e, const edm::EventSetup &) const final;
0057 
0058     void globalEndLuminosityBlock(const edm::LuminosityBlock &, const edm::EventSetup &) const final;
0059     void globalEndRun(const edm::Run &, const edm::EventSetup &) const final;
0060 
0061     // these method (and only these) should be overriden
0062     // so we need to call all file savers
0063     virtual void initRun() const {};
0064     virtual void saveLumi(const FileParameters &fp) const {};
0065     virtual void saveRun(const FileParameters &fp) const {};
0066 
0067     static const std::string filename(const FileParameters &fp, bool useLumi = false);
0068 
0069     // utilities
0070     void logFileAction(const std::string &msg, const std::string &fileName) const;
0071     void saveJobReport(const std::string &filename) const;
0072 
0073     // members
0074     mutable std::mutex initial_fp_lock_;
0075     FileParameters initial_fp_;
0076     int runNumber_;
0077 
0078     edm::GetterOfProducts<DQMToken> lumigetter_;
0079     edm::GetterOfProducts<DQMToken> rungetter_;
0080 
0081   public:
0082     static void fillDescription(edm::ParameterSetDescription &d);
0083   };
0084 }  // namespace dqm
0085 
0086 #endif  // DQMSERVICES_COMPONENTS_DQMFILESAVERBASE_H