File indexing completed on 2023-05-06 02:46:18
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 { return true; }
0051 bool wantsGlobalLuminosityBlocks() const { return true; }
0052 virtual bool wantsProcessBlocks() const = 0;
0053 virtual bool wantsInputProcessBlocks() const = 0;
0054 virtual bool wantsStreamRuns() const = 0;
0055 virtual bool wantsStreamLuminosityBlocks() const = 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
0071 void preActionBeforeRunEventAsync(WaitingTaskHolder,
0072 ModuleCallingContext const&,
0073 Principal const&) const {}
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 { return false; }
0096 };
0097 }
0098 }
0099 #endif