File indexing completed on 2025-06-29 22:58:00
0001 #ifndef FWCore_Framework_limited_OutputModuleBase_h
0002 #define FWCore_Framework_limited_OutputModuleBase_h
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022 #include "FWCore/Framework/interface/OutputModuleCore.h"
0023 #include "FWCore/Concurrency/interface/LimitedTaskQueue.h"
0024
0025
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;
0043 OutputModuleBase& operator=(OutputModuleBase const&) = delete;
0044
0045 static void fillDescription(
0046 ParameterSetDescription& desc,
0047 std::vector<std::string> const& iDefaultOutputCommands = ProductSelectorRules::defaultSelectionStrings());
0048
0049
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) { doBeginStream_(id); }
0067 void doEndStream(StreamID id) { doEndStream_(id); }
0068
0069 bool doEvent(EventTransitionInfo const&, ActivityRegistry*, ModuleCallingContext const*);
0070
0071 void preActionBeforeRunEventAsync(WaitingTaskHolder,
0072 ModuleCallingContext const&,
0073 Principal const&) const noexcept {}
0074
0075 private:
0076 LimitedTaskQueue queue_;
0077
0078 virtual void preallocStreams(unsigned int) {}
0079 virtual void preallocate(PreallocationConfiguration const&) {}
0080 virtual void doBeginStream_(StreamID) {}
0081 virtual void doEndStream_(StreamID) {}
0082 virtual void doStreamBeginRun_(StreamID, RunForOutput const&, EventSetup const&) {}
0083 virtual void doStreamEndRun_(StreamID, RunForOutput const&, EventSetup const&) {}
0084 virtual void doStreamEndRunSummary_(StreamID, RunForOutput const&, EventSetup const&) {}
0085 virtual void doStreamBeginLuminosityBlock_(StreamID, LuminosityBlockForOutput const&, EventSetup const&) {}
0086 virtual void doStreamEndLuminosityBlock_(StreamID, LuminosityBlockForOutput const&, EventSetup const&) {}
0087 virtual void doStreamEndLuminosityBlockSummary_(StreamID, LuminosityBlockForOutput const&, EventSetup const&) {}
0088
0089 virtual void doBeginRunSummary_(RunForOutput const&, EventSetup const&) {}
0090 virtual void doEndRunSummary_(RunForOutput const&, EventSetup const&) {}
0091 virtual void doBeginLuminosityBlockSummary_(LuminosityBlockForOutput const&, EventSetup const&) {}
0092 virtual void doEndLuminosityBlockSummary_(LuminosityBlockForOutput const&, EventSetup const&) {}
0093 bool hasAcquire() const noexcept { return false; }
0094 };
0095 }
0096 }
0097 #endif