CMS 3D CMS Logo

ProducingModuleAdaptor.h
Go to the documentation of this file.
1 #ifndef FWCore_Framework_stream_ProducingModuleAdaptor_h
2 #define FWCore_Framework_stream_ProducingModuleAdaptor_h
3 // -*- C++ -*-
4 //
5 // Package: FWCore/Framework
6 // Class : ProducingModuleAdaptor
7 //
16 //
17 // Original Author: Chris Jones
18 // Created: Fri, 02 Aug 2013 18:09:18 GMT
19 //
20 
21 // system include files
22 
23 // user include files
35 // forward declarations
36 
37 namespace edm {
39  namespace stream {
40 
41  template <typename T, typename M, typename B>
42  class ProducingModuleAdaptor : public B {
43  public:
45  m_runs.resize(1);
46  m_lumis.resize(1);
47  m_runSummaries.resize(1);
48  m_lumiSummaries.resize(1);
49  typename T::GlobalCache const* dummy = nullptr;
50  m_global = impl::makeGlobal<T>(iPSet, dummy);
51  typename T::InputProcessBlockCache const* dummyInputProcessBlockCacheImpl = nullptr;
52  m_inputProcessBlocks = impl::makeInputProcessBlockCacheImpl(dummyInputProcessBlockCacheImpl);
53  }
54  ProducingModuleAdaptor(const ProducingModuleAdaptor&) = delete; // stop default
55  const ProducingModuleAdaptor& operator=(const ProducingModuleAdaptor&) = delete; // stop default
56  ~ProducingModuleAdaptor() override { this->deleteModulesEarly(); }
57 
58  static void fillDescriptions(ConfigurationDescriptions& descriptions) { T::fillDescriptions(descriptions); }
59  static void prevalidate(ConfigurationDescriptions& descriptions) { T::prevalidate(descriptions); }
60 
61  bool wantsProcessBlocks() const final {
62  return T::HasAbility::kWatchProcessBlock or T::HasAbility::kBeginProcessBlockProducer or
63  T::HasAbility::kEndProcessBlockProducer;
64  }
65  bool wantsInputProcessBlocks() const final { return T::HasAbility::kInputProcessBlockCache; }
66  bool wantsGlobalRuns() const final {
69  }
72  T::HasAbility::kBeginLuminosityBlockProducer or T::HasAbility::kEndLuminosityBlockProducer;
73  }
74 
75  bool hasAcquire() const final { return T::HasAbility::kExternalWork; }
76 
77  bool hasAccumulator() const final { return T::HasAbility::kAccumulator; }
78 
79  private:
93 
94  void setupStreamModules() final {
95  this->createStreamModules([this](unsigned int iStreamModule) -> M* {
96  auto tmp = impl::makeStreamModule<T>(*m_pset, m_global.get());
97  MyGlobal::set(tmp, m_global.get());
99  return tmp;
100  });
101  m_pset = nullptr;
102  }
103 
104  void preallocRuns(unsigned int iNRuns) final {
105  m_runs.resize(iNRuns);
106  m_runSummaries.resize(iNRuns);
107  }
108  void preallocLumis(unsigned int iNLumis) final {
109  m_lumis.resize(iNLumis);
110  m_lumiSummaries.resize(iNLumis);
111  }
112  void doBeginJob() final { MyGlobal::beginJob(m_global.get()); }
113  void doEndJob() final { MyGlobal::endJob(m_global.get()); }
114  void setupRun(M* iProd, RunIndex iIndex) final { MyGlobalRun::set(iProd, m_runs[iIndex].get()); }
115  void streamEndRunSummary(M* iProd, edm::Run const& iRun, edm::EventSetup const& iES) final {
116  auto s = m_runSummaries[iRun.index()].get();
117  std::lock_guard<decltype(m_runSummaryLock)> guard(m_runSummaryLock);
118  MyGlobalRunSummary::streamEndRunSummary(iProd, iRun, iES, s);
119  }
120 
121  void setupLuminosityBlock(M* iProd, LuminosityBlockIndex iIndex) final {
122  MyGlobalLuminosityBlock::set(iProd, m_lumis[iIndex].get());
123  }
125  edm::LuminosityBlock const& iLumi,
126  edm::EventSetup const& iES) final {
127  auto s = m_lumiSummaries[iLumi.index()].get();
128  std::lock_guard<decltype(m_lumiSummaryLock)> guard(m_lumiSummaryLock);
130  }
131 
133  if constexpr (T::HasAbility::kWatchProcessBlock or T::HasAbility::kBeginProcessBlockProducer) {
134  ProcessBlock processBlock(pbp, this->moduleDescription(), mcc, false);
135  ProcessBlock const& cnstProcessBlock = processBlock;
136  processBlock.setConsumer(this->consumer());
137  MyWatchProcessBlock::beginProcessBlock(cnstProcessBlock, m_global.get());
138  if constexpr (T::HasAbility::kBeginProcessBlockProducer) {
139  processBlock.setProducer(this->producer());
140  MyBeginProcessBlockProduce::produce(processBlock, m_global.get());
141  this->commit(processBlock);
142  }
143  }
144  }
145 
147  if constexpr (T::HasAbility::kInputProcessBlockCache) {
148  ProcessBlock processBlock(pbp, this->moduleDescription(), mcc, false);
149  ProcessBlock const& cnstProcessBlock = processBlock;
150  processBlock.setConsumer(this->consumer());
152  }
153  }
154 
155  void doEndProcessBlock(ProcessBlockPrincipal const& pbp, ModuleCallingContext const* mcc) final {
156  if constexpr (T::HasAbility::kWatchProcessBlock or T::HasAbility::kEndProcessBlockProducer) {
157  ProcessBlock processBlock(pbp, this->moduleDescription(), mcc, true);
158  ProcessBlock const& cnstProcessBlock = processBlock;
159  processBlock.setConsumer(this->consumer());
160  MyWatchProcessBlock::endProcessBlock(cnstProcessBlock, m_global.get());
161  if constexpr (T::HasAbility::kEndProcessBlockProducer) {
162  processBlock.setProducer(this->producer());
163  MyEndProcessBlockProduce::produce(processBlock, m_global.get());
164  this->commit(processBlock);
165  }
166  }
167  }
168 
169  void doBeginRun(RunTransitionInfo const& info, ModuleCallingContext const* mcc) final {
171  RunPrincipal const& rp = info.principal();
172  Run r(rp, this->moduleDescription(), mcc, false);
173  r.setConsumer(this->consumer());
174  r.setProducer(this->producer());
175  Run const& cnstR = r;
176  RunIndex ri = rp.index();
177  ESParentContext parentC(mcc);
178  const EventSetup c{info,
179  static_cast<unsigned int>(Transition::BeginRun),
180  this->consumer()->esGetTokenIndices(Transition::BeginRun),
181  parentC};
182  MyGlobalRun::beginRun(cnstR, c, m_global.get(), m_runs[ri]);
183  typename T::RunContext rc(m_runs[ri].get(), m_global.get());
185  if constexpr (T::HasAbility::kBeginRunProducer) {
186  MyBeginRunProduce::produce(r, c, &rc);
187  this->commit(r);
188  }
189  }
190  }
191 
192  void doEndRun(RunTransitionInfo const& info, ModuleCallingContext const* mcc) final {
194  RunPrincipal const& rp = info.principal();
195  Run r(rp, this->moduleDescription(), mcc, true);
196  r.setConsumer(this->consumer());
197  r.setProducer(this->producer());
198 
199  RunIndex ri = rp.index();
200  typename T::RunContext rc(m_runs[ri].get(), m_global.get());
201  ESParentContext parentC(mcc);
202  const EventSetup c{info,
203  static_cast<unsigned int>(Transition::EndRun),
204  this->consumer()->esGetTokenIndices(Transition::EndRun),
205  parentC};
207  if constexpr (T::HasAbility::kEndRunProducer) {
208  MyEndRunProduce::produce(r, c, &rc, m_runSummaries[ri].get());
209  this->commit(r);
210  }
211  MyGlobalRun::endRun(r, c, &rc);
212  }
213  }
214 
217  T::HasAbility::kBeginLuminosityBlockProducer) {
218  LuminosityBlockPrincipal const& lbp = info.principal();
219  LuminosityBlock lb(lbp, this->moduleDescription(), mcc, false);
220  lb.setConsumer(this->consumer());
221  lb.setProducer(this->producer());
222  LuminosityBlock const& cnstLb = lb;
223  LuminosityBlockIndex li = lbp.index();
224  RunIndex ri = lbp.runPrincipal().index();
225  typename T::RunContext rc(m_runs[ri].get(), m_global.get());
226  ESParentContext parentC(mcc);
227  const EventSetup c{info,
228  static_cast<unsigned int>(Transition::BeginLuminosityBlock),
229  this->consumer()->esGetTokenIndices(Transition::BeginLuminosityBlock),
230  parentC};
231 
233  typename T::LuminosityBlockContext lc(m_lumis[li].get(), m_runs[ri].get(), m_global.get());
235  if constexpr (T::HasAbility::kBeginLuminosityBlockProducer) {
237  this->commit(lb);
238  }
239  }
240  }
243  T::HasAbility::kEndLuminosityBlockProducer) {
244  LuminosityBlockPrincipal const& lbp = info.principal();
245  LuminosityBlock lb(lbp, this->moduleDescription(), mcc, true);
246  lb.setConsumer(this->consumer());
247  lb.setProducer(this->producer());
248 
249  LuminosityBlockIndex li = lbp.index();
250  RunIndex ri = lbp.runPrincipal().index();
251  typename T::LuminosityBlockContext lc(m_lumis[li].get(), m_runs[ri].get(), m_global.get());
252  ESParentContext parentC(mcc);
253  const EventSetup c{info,
254  static_cast<unsigned int>(Transition::EndLuminosityBlock),
255  this->consumer()->esGetTokenIndices(Transition::EndLuminosityBlock),
256  parentC};
258  if constexpr (T::HasAbility::kEndLuminosityBlockProducer) {
260  this->commit(lb);
261  }
263  }
264  }
265 
267 
268  using B::consumer;
269 
270  void selectInputProcessBlocks(ProductRegistry const& productRegistry,
271  ProcessBlockHelperBase const& processBlockHelperBase) final {
273  m_inputProcessBlocks, productRegistry, processBlockHelperBase, *consumer());
274  }
275 
276  // ---------- member data --------------------------------
286  };
287  } // namespace stream
288 } // namespace edm
289 
290 #endif
static void endLuminosityBlock(edm::LuminosityBlock const &Lumi, edm::EventSetup const &iES, typename T::LuminosityBlockContext const *iContext)
static void beginProcessBlock(edm::ProcessBlock const &iProcessBlock, typename T::GlobalCache *iGC)
static void beginRun(edm::Run const &iRun, edm::EventSetup const &iES, typename T::RunContext const *iRC, std::shared_ptr< typename T::RunSummaryCache > &oCache)
void setProducer(ProducerBase const *iProducer)
Definition: Run.cc:79
void doBeginProcessBlock(ProcessBlockPrincipal const &pbp, ModuleCallingContext const *mcc) final
static const TGPicture * info(bool iBackgroundIsBlack)
void setConsumer(EDConsumerBase const *iConsumer)
std::unique_ptr< G > makeInputProcessBlockCacheImpl(G const *)
Definition: makeGlobal.h:49
static void endRun(edm::Run const &iRun, edm::EventSetup const &iES, typename T::RunContext const *iContext)
Definition: APVGainStruct.h:7
impl::choose_unique_ptr< typename T::GlobalCache >::type m_global
void selectInputProcessBlocks(ProductRegistry const &productRegistry, ProcessBlockHelperBase const &processBlockHelperBase) final
void doEndLuminosityBlock(LumiTransitionInfo const &info, ModuleCallingContext const *mcc) final
static void beginRun(edm::Run const &iRun, edm::EventSetup const &iES, typename T::GlobalCache const *iGC, std::shared_ptr< typename T::RunCache const > &oCache)
static void produce(edm::LuminosityBlock &Lumi, edm::EventSetup const &iES, typename T::LuminosityBlockContext const *iRC)
static void produce(edm::LuminosityBlock &, edm::EventSetup const &, typename T::LuminosityBlockContext const *, typename T::LuminosityBlockSummaryCache const *)
void streamEndLuminosityBlockSummary(M *iProd, edm::LuminosityBlock const &iLumi, edm::EventSetup const &iES) final
RunPrincipal const & runPrincipal() const
void doEndProcessBlock(ProcessBlockPrincipal const &pbp, ModuleCallingContext const *mcc) final
static void set(T *iProd, typename impl::choose_unique_ptr< typename T::InputProcessBlockCache >::type const *iCaches, unsigned int iStreamModule)
Definition: callAbilities.h:76
static void selectInputProcessBlocks(typename impl::choose_unique_ptr< typename T::InputProcessBlockCache >::type &iCaches, ProductRegistry const &productRegistry, ProcessBlockHelperBase const &processBlockHelperBase, EDConsumerBase const &edConsumerBase)
Definition: callAbilities.h:86
void preallocLumis(unsigned int iNLumis) final
impl::choose_mutex< typename T::LuminosityBlockSummaryCache >::type m_lumiSummaryLock
static void clearCaches(typename impl::choose_unique_ptr< typename T::InputProcessBlockCache >::type &iCaches)
static void prevalidate(ConfigurationDescriptions &descriptions)
void streamEndRunSummary(M *iProd, edm::Run const &iRun, edm::EventSetup const &iES) final
static void streamEndRunSummary(B *iProd, edm::Run const &iRun, edm::EventSetup const &iES, typename T::RunSummaryCache *iCache)
const ProducingModuleAdaptor & operator=(const ProducingModuleAdaptor &)=delete
uint32_t T const *__restrict__ uint32_t const *__restrict__ int32_t int Histo::index_type cudaStream_t stream
void doAccessInputProcessBlock(ProcessBlockPrincipal const &pbp, ModuleCallingContext const *mcc) final
static void accessInputProcessBlock(edm::ProcessBlock const &processBlock, typename T::GlobalCache *iGC, typename impl::choose_unique_ptr< typename T::InputProcessBlockCache >::type &iCaches)
Definition: callAbilities.h:94
void doBeginRun(RunTransitionInfo const &info, ModuleCallingContext const *mcc) final
static void set(B *iProd, typename T::RunCache const *iCache)
impl::choose_mutex< typename T::RunSummaryCache >::type m_runSummaryLock
static void produce(edm::ProcessBlock &processBlock, typename T::GlobalCache *globalCache)
static void beginLuminosityBlock(edm::LuminosityBlock const &Lumi, edm::EventSetup const &iES, typename T::RunContext const *iRC, std::shared_ptr< typename T::LuminosityBlockCache const > &oCache)
static void beginLuminosityBlock(edm::LuminosityBlock const &Lumi, edm::EventSetup const &iES, typename T::LuminosityBlockContext const *iRC, std::shared_ptr< typename T::LuminosityBlockSummaryCache > &oCache)
static void produce(edm::Run &iRun, edm::EventSetup const &iES, typename T::RunContext const *iRC)
void setConsumer(EDConsumerBase const *iConsumer)
Definition: ProcessBlock.h:53
void preallocRuns(unsigned int iNRuns) final
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
impl::choose_shared_vec< typename T::RunSummaryCache >::type m_runSummaries
RunIndex index() const
Definition: RunPrincipal.h:56
void doEndRun(RunTransitionInfo const &info, ModuleCallingContext const *mcc) final
impl::choose_shared_vec< typename T::LuminosityBlockSummaryCache >::type m_lumiSummaries
static void set(B *iProd, typename T::LuminosityBlockCache const *iCache)
void setupLuminosityBlock(M *iProd, LuminosityBlockIndex iIndex) final
void setupRun(M *iProd, RunIndex iIndex) final
impl::choose_unique_ptr< typename T::InputProcessBlockCache >::type m_inputProcessBlocks
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
void setProducer(ProducerBase const *iProducer)
Definition: ProcessBlock.cc:13
static void endJob(typename T::GlobalCache *iCache)
Definition: callAbilities.h:59
static void streamEndLuminosityBlockSummary(B *iProd, edm::LuminosityBlock const &iLumi, edm::EventSetup const &iES, typename T::LuminosityBlockSummaryCache *iCache)
static void globalEndRun(edm::Run const &iRun, edm::EventSetup const &iES, typename T::RunContext const *iContext, typename T::RunSummaryCache *iCache)
void setProducer(ProducerBase const *iProducer)
void doBeginLuminosityBlock(LumiTransitionInfo const &info, ModuleCallingContext const *mcc) final
impl::choose_shared_vec< typename T::RunCache const >::type m_runs
HLT enums.
ProducingModuleAdaptor(edm::ParameterSet const &iPSet)
LuminosityBlockIndex index() const
static void fillDescriptions(ConfigurationDescriptions &descriptions)
static void produce(edm::Run &, edm::EventSetup const &, typename T::RunContext const *, typename T::RunSummaryCache const *)
impl::choose_shared_vec< typename T::LuminosityBlockCache const >::type m_lumis
static void beginJob(typename T::GlobalCache *iCache)
Definition: callAbilities.h:54
std::vector< std::shared_ptr< T > > type
Definition: dummy_helpers.h:64
static void globalEndLuminosityBlock(edm::LuminosityBlock const &Lumi, edm::EventSetup const &iES, typename T::LuminosityBlockContext const *iContext, typename T::LuminosityBlockSummaryCache *iCache)
tmp
align.sh
Definition: createJobs.py:716
static void produce(edm::ProcessBlock &processBlock, typename T::GlobalCache *globalCache)
static void set(B *iProd, typename T::GlobalCache const *iCache)
Definition: callAbilities.h:51
Definition: Run.h:45
static void endProcessBlock(edm::ProcessBlock const &iProcessBlock, typename T::GlobalCache *iGC)