Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-01-11 03:38:17

0001 #ifndef FWCore_Framework_stream_EDFilterBase_h
0002 #define FWCore_Framework_stream_EDFilterBase_h
0003 // -*- C++ -*-
0004 //
0005 // Package:     FWCore/Framework
0006 // Class  :     EDFilterBase
0007 //
0008 /**\class edm::stream::EDFilterBase EDFilterBase.h "FWCore/Framework/interface/stream/EDFilterBase.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/ProducerBase.h"
0025 #include "FWCore/Framework/interface/EDConsumerBase.h"
0026 #include "FWCore/Framework/interface/Frameworkfwd.h"
0027 #include "FWCore/Framework/interface/stream/EDFilterAdaptor.h"
0028 #include "DataFormats/Provenance/interface/ModuleDescription.h"
0029 #include "FWCore/ParameterSet/interface/ParameterSetfwd.h"
0030 
0031 // forward declarations
0032 namespace edm {
0033 
0034   class ProductRegistry;
0035   class ThinnedAssociationsHelper;
0036 
0037   namespace stream {
0038     class EDFilterAdaptorBase;
0039     template <typename>
0040     class ProducingModuleAdaptorBase;
0041 
0042     class EDFilterBase : public edm::ProducerBase, public edm::EDConsumerBase {
0043       //This needs access to the parentage cache info
0044       friend class EDFilterAdaptorBase;
0045       friend class ProducingModuleAdaptorBase<EDFilterBase>;
0046 
0047     public:
0048       typedef EDFilterAdaptorBase ModuleType;
0049 
0050       EDFilterBase();
0051       EDFilterBase(const EDFilterBase&) = delete;                   // stop default
0052       const EDFilterBase& operator=(const EDFilterBase&) = delete;  // stop default
0053       ~EDFilterBase() override;
0054 
0055       static void fillDescriptions(ConfigurationDescriptions& descriptions);
0056       static void prevalidate(ConfigurationDescriptions& descriptions);
0057       static const std::string& baseType();
0058 
0059       // Warning: the returned moduleDescription will be invalid during construction
0060       ModuleDescription const& moduleDescription() const { return *moduleDescriptionPtr_; }
0061 
0062     private:
0063       virtual void beginStream(StreamID) {}
0064       virtual void beginRun(edm::Run const&, edm::EventSetup const&) {}
0065       virtual void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) {}
0066       virtual bool filter(Event&, EventSetup const&) = 0;
0067       virtual void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) {}
0068       virtual void endRun(edm::Run const&, edm::EventSetup const&) {}
0069       virtual void endStream() {}
0070 
0071       virtual void registerThinnedAssociations(ProductRegistry const&, ThinnedAssociationsHelper&) {}
0072 
0073       virtual void doAcquire_(Event const&, EventSetup const&, WaitingTaskHolder&&) = 0;
0074 
0075       void setModuleDescriptionPtr(ModuleDescription const* iDesc) { moduleDescriptionPtr_ = iDesc; }
0076       // ---------- member data --------------------------------
0077 
0078       std::vector<BranchID> previousParentage_;
0079       std::vector<BranchID> gotBranchIDsFromAcquire_;
0080       ParentageID previousParentageId_;
0081       ModuleDescription const* moduleDescriptionPtr_;
0082     };
0083   }  // namespace stream
0084 }  // namespace edm
0085 #endif