Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-05-11 03:34:10

0001 #ifndef FWCore_Framework_limited_OutputModuleBase_h
0002 #define FWCore_Framework_limited_OutputModuleBase_h
0003 // -*- C++ -*-
0004 //
0005 // Package:     FWCore/Framework
0006 // Class  :     OutputModuleBase
0007 //
0008 /**\class OutputModuleBase OutputModuleBase.h "FWCore/Framework/interface/limited/OutputModuleBase.h"
0009 
0010  Description: Base class for all 'limited' OutputModules
0011 
0012  Usage:
0013     <usage>
0014 
0015 */
0016 //
0017 //
0018 
0019 // system include files
0020 
0021 // user include files
0022 #include "FWCore/Framework/interface/OutputModuleCore.h"
0023 #include "FWCore/Concurrency/interface/LimitedTaskQueue.h"
0024 
0025 // forward declarations
0026 namespace edm {
0027 
0028   namespace limited {
0029 
0030     class OutputModuleBase : public core::OutputModuleCore {
0031     public:
0032       template <typename U>
0033       friend class edm::maker::ModuleHolderT;
0034       template <typename T>
0035       friend class ::edm::WorkerT;
0036       template <typename T>
0037       friend class ::edm::OutputModuleCommunicatorT;
0038       typedef OutputModuleBase ModuleType;
0039 
0040       explicit OutputModuleBase(ParameterSet const& pset);
0041 
0042       OutputModuleBase(OutputModuleBase const&) = delete;             // Disallow copying and moving
0043       OutputModuleBase& operator=(OutputModuleBase const&) = delete;  // Disallow copying and moving
0044 
0045       static void fillDescription(
0046           ParameterSetDescription& desc,
0047           std::vector<std::string> const& iDefaultOutputCommands = ProductSelectorRules::defaultSelectionStrings());
0048 
0049       //Output modules always need writeRun and writeLumi to be called
0050       bool wantsGlobalRuns() const noexcept { return true; }
0051       bool wantsGlobalLuminosityBlocks() const noexcept { return true; }
0052       virtual bool wantsProcessBlocks() const noexcept = 0;
0053       virtual bool wantsInputProcessBlocks() const noexcept = 0;
0054       virtual bool wantsStreamRuns() const noexcept = 0;
0055       virtual bool wantsStreamLuminosityBlocks() const noexcept = 0;
0056 
0057       unsigned int concurrencyLimit() const { return queue_.concurrencyLimit(); }
0058 
0059       LimitedTaskQueue& queue() { return queue_; }
0060 
0061     protected:
0062       void doPreallocate(PreallocationConfiguration const&);
0063 
0064       void doBeginJob();
0065 
0066       void doBeginStream(StreamID id);
0067       void doEndStream(StreamID id);
0068 
0069       bool doEvent(EventTransitionInfo const&, ActivityRegistry*, ModuleCallingContext const*);
0070       //For now this is a placeholder
0071       /*virtual*/ void preActionBeforeRunEventAsync(WaitingTaskHolder,
0072                                                     ModuleCallingContext const&,
0073                                                     Principal const&) const noexcept {}
0074 
0075     private:
0076       LimitedTaskQueue queue_;
0077 
0078       std::string workerType() const { return "WorkerT<edm::limited::OutputModuleBase>"; }
0079 
0080       virtual void preallocStreams(unsigned int) {}
0081       virtual void preallocate(PreallocationConfiguration const&) {}
0082       virtual void doBeginStream_(StreamID) {}
0083       virtual void doEndStream_(StreamID) {}
0084       virtual void doStreamBeginRun_(StreamID, RunForOutput const&, EventSetup const&) {}
0085       virtual void doStreamEndRun_(StreamID, RunForOutput const&, EventSetup const&) {}
0086       virtual void doStreamEndRunSummary_(StreamID, RunForOutput const&, EventSetup const&) {}
0087       virtual void doStreamBeginLuminosityBlock_(StreamID, LuminosityBlockForOutput const&, EventSetup const&) {}
0088       virtual void doStreamEndLuminosityBlock_(StreamID, LuminosityBlockForOutput const&, EventSetup const&) {}
0089       virtual void doStreamEndLuminosityBlockSummary_(StreamID, LuminosityBlockForOutput const&, EventSetup const&) {}
0090 
0091       virtual void doBeginRunSummary_(RunForOutput const&, EventSetup const&) {}
0092       virtual void doEndRunSummary_(RunForOutput const&, EventSetup const&) {}
0093       virtual void doBeginLuminosityBlockSummary_(LuminosityBlockForOutput const&, EventSetup const&) {}
0094       virtual void doEndLuminosityBlockSummary_(LuminosityBlockForOutput const&, EventSetup const&) {}
0095       bool hasAcquire() const noexcept { return false; }
0096     };
0097   }  // namespace limited
0098 }  // namespace edm
0099 #endif