Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:12:00

0001 #ifndef FWCore_Framework_stream_EDAnalyzerBase_h
0002 #define FWCore_Framework_stream_EDAnalyzerBase_h
0003 // -*- C++ -*-
0004 //
0005 // Package:     FWCore/Framework
0006 // Class  :     EDAnalyzerBase
0007 //
0008 /**\class edm::stream::EDAnalyzerBase EDAnalyzerBase.h "FWCore/Framework/interface/stream/EDAnalyzerBase.h"
0009 
0010  Description: [one line class summary]
0011 
0012  Usage:
0013     <usage>
0014 
0015 */
0016 //
0017 // Original Author:  Chris Jones
0018 //         Created:  Fri, 02 Aug 2013 00:11:27 GMT
0019 //
0020 
0021 // system include files
0022 
0023 // user include files
0024 #include "FWCore/Framework/interface/EDConsumerBase.h"
0025 #include "FWCore/Framework/interface/Frameworkfwd.h"
0026 #include "FWCore/Framework/interface/stream/EDAnalyzerAdaptor.h"
0027 #include "DataFormats/Provenance/interface/ModuleDescription.h"
0028 #include "FWCore/ParameterSet/interface/ParameterSetfwd.h"
0029 
0030 // forward declarations
0031 namespace edm {
0032   namespace stream {
0033     class EDAnalyzerAdaptorBase;
0034 
0035     class EDAnalyzerBase : public edm::EDConsumerBase {
0036       //This needs access to the parentage cache info
0037       friend class EDAnalyzerAdaptorBase;
0038 
0039     public:
0040       typedef EDAnalyzerAdaptorBase ModuleType;
0041 
0042       EDAnalyzerBase();
0043       EDAnalyzerBase(const EDAnalyzerBase&) = delete;                   // stop default
0044       const EDAnalyzerBase& operator=(const EDAnalyzerBase&) = delete;  // stop default
0045       ~EDAnalyzerBase() override;
0046 
0047       static void fillDescriptions(ConfigurationDescriptions& descriptions);
0048       static void prevalidate(ConfigurationDescriptions& descriptions);
0049       static const std::string& baseType();
0050 
0051       // Warning: the returned moduleDescription will be invalid during construction
0052       ModuleDescription const& moduleDescription() const { return *moduleDescriptionPtr_; }
0053 
0054       void callWhenNewProductsRegistered(std::function<void(BranchDescription const&)> const& func);
0055 
0056     private:
0057       void registerProductsAndCallbacks(EDAnalyzerBase const*, ProductRegistry* reg);
0058 
0059       virtual void beginStream(StreamID) {}
0060       virtual void beginRun(edm::Run const&, edm::EventSetup const&) {}
0061       virtual void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) {}
0062       virtual void analyze(Event const&, EventSetup const&) = 0;
0063       virtual void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) {}
0064       virtual void endRun(edm::Run const&, edm::EventSetup const&) {}
0065       virtual void endStream() {}
0066 
0067       void setModuleDescriptionPtr(ModuleDescription const* iDesc) { moduleDescriptionPtr_ = iDesc; }
0068       // ---------- member data --------------------------------
0069       std::function<void(BranchDescription const&)> callWhenNewProductsRegistered_;
0070       ModuleDescription const* moduleDescriptionPtr_;
0071     };
0072 
0073   }  // namespace stream
0074 }  // namespace edm
0075 
0076 #endif