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
31 // forward declarations
32 
33 namespace edm {
35  namespace stream {
36 
37  template<typename T, typename M, typename B>
38  class ProducingModuleAdaptor : public B
39  {
40 
41  public:
43  m_pset(&iPSet)
44  {
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  }
53  }
54 
55  static void fillDescriptions(ConfigurationDescriptions& descriptions) {
56  T::fillDescriptions(descriptions);
57  }
58  static void prevalidate(ConfigurationDescriptions& descriptions) {
59  T::prevalidate(descriptions);
60  }
61 
62  bool wantsGlobalRuns() const final {
69  T::HasAbility::kBeginLuminosityBlockProducer or
70  T::HasAbility::kEndLuminosityBlockProducer;}
71 
72  bool hasAcquire() const final {
73  return T::HasAbility::kExternalWork;
74  }
75 
76  private:
86 
87  void setupStreamModules() final {
88  this->createStreamModules([this] () -> M* {
89  auto tmp = impl::makeStreamModule<T>(*m_pset,m_global.get());
90  MyGlobal::set(tmp,m_global.get());
91  return tmp;
92  });
93  m_pset= nullptr;
94  }
95 
96  void doEndJob() final {
98  }
99  void setupRun(M* iProd, RunIndex iIndex) final {
100  MyGlobalRun::set(iProd, m_runs[iIndex].get());
101  }
102  void streamEndRunSummary(M* iProd,
103  edm::Run const& iRun,
104  edm::EventSetup const& iES) final {
105  auto s = m_runSummaries[iRun.index()].get();
106  std::lock_guard<decltype(m_runSummaryLock)> guard(m_runSummaryLock);
108  }
109 
110  void setupLuminosityBlock(M* iProd, LuminosityBlockIndex iIndex) final
111  {
112  MyGlobalLuminosityBlock::set(iProd, m_lumis[iIndex].get());
113  }
115  edm::LuminosityBlock const& iLumi,
116  edm::EventSetup const& iES) final {
117  auto s = m_lumiSummaries[iLumi.index()].get();
118  std::lock_guard<decltype(m_lumiSummaryLock)> guard(m_lumiSummaryLock);
120  }
121 
122  void doBeginRun(RunPrincipal const& rp,
123  EventSetup const& c,
124  ModuleCallingContext const* mcc) final {
126  Run r(rp, this->moduleDescription(), mcc);
127  r.setConsumer(this->consumer());
128  r.setProducer(this->producer());
129  Run const& cnstR = r;
130  RunIndex ri = rp.index();
131  MyGlobalRun::beginRun(cnstR,c,m_global.get(),m_runs[ri]);
132  typename T::RunContext rc(m_runs[ri].get(),m_global.get());
134  if(T::HasAbility::kBeginRunProducer) {
136  this->commit(r);
137  }
138  }
139  }
140  void doEndRun(RunPrincipal const& rp,
141  EventSetup const& c,
142  ModuleCallingContext const* mcc) final
143  {
145 
146  Run r(rp, this->moduleDescription(), mcc);
147  r.setConsumer(this->consumer());
148  r.setProducer(this->producer());
149 
150  RunIndex ri = rp.index();
151  typename T::RunContext rc(m_runs[ri].get(),m_global.get());
152  if(T::HasAbility::kEndRunProducer) {
153  MyEndRunProduce::produce(r,c,&rc,m_runSummaries[ri].get());
154  this->commit(r);
155  }
157  MyGlobalRun::endRun(r,c,&rc);
158  }
159  }
160 
162  ModuleCallingContext const* mcc) final
163  {
164  if(T::HasAbility::kLuminosityBlockCache or T::HasAbility::kLuminosityBlockSummaryCache or T::HasAbility::kBeginLuminosityBlockProducer) {
165  LuminosityBlock lb(lbp, this->moduleDescription(), mcc);
166  lb.setConsumer(this->consumer());
167  lb.setProducer(this->producer());
168  LuminosityBlock const& cnstLb = lb;
169  LuminosityBlockIndex li = lbp.index();
170  RunIndex ri = lbp.runPrincipal().index();
171  typename T::RunContext rc(m_runs[ri].get(),m_global.get());
173  typename T::LuminosityBlockContext lc(m_lumis[li].get(),m_runs[ri].get(),m_global.get());
175  if(T::HasAbility::kBeginLuminosityBlockProducer) {
177  this->commit(lb);
178  }
179  }
180 
181  }
183  EventSetup const& c,
184  ModuleCallingContext const* mcc) final {
185  if(T::HasAbility::kLuminosityBlockCache or T::HasAbility::kLuminosityBlockSummaryCache or T::HasAbility::kEndLuminosityBlockProducer) {
186 
187  LuminosityBlock lb(lbp, this->moduleDescription(), mcc);
188  lb.setConsumer(this->consumer());
189  lb.setProducer(this->producer());
190 
191  LuminosityBlockIndex li = lbp.index();
192  RunIndex ri = lbp.runPrincipal().index();
193  typename T::LuminosityBlockContext lc(m_lumis[li].get(),m_runs[ri].get(),m_global.get());
194  if(T::HasAbility::kEndLuminosityBlockProducer) {
196  this->commit(lb);
197  }
200  }
201  }
202 
203  ProducingModuleAdaptor(const ProducingModuleAdaptor&) = delete; // stop default
204 
205  const ProducingModuleAdaptor& operator=(const ProducingModuleAdaptor&) = delete; // stop default
206 
207  // ---------- member data --------------------------------
216  };
217  }
218 }
219 
220 #endif
static void endLuminosityBlock(edm::LuminosityBlock const &Lumi, edm::EventSetup const &iES, typename T::LuminosityBlockContext const *iContext)
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 setConsumer(EDConsumerBase const *iConsumer)
static void endRun(edm::Run const &iRun, edm::EventSetup const &iES, typename T::RunContext const *iContext)
Definition: callAbilities.h:72
impl::choose_unique_ptr< typename T::GlobalCache >::type m_global
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
impl::choose_mutex< typename T::LuminosityBlockSummaryCache >::type m_lumiSummaryLock
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
static void beginRun(edm::Run const &iRun, edm::EventSetup const &iES, typename T::GlobalCache const *iGC, std::shared_ptr< typename T::RunCache const > &oCache)
Definition: callAbilities.h:60
void doBeginRun(RunPrincipal const &rp, EventSetup const &c, ModuleCallingContext const *mcc) final
static void set(B *iProd, typename T::RunCache const *iCache)
Definition: callAbilities.h:68
impl::choose_mutex< typename T::RunSummaryCache >::type m_runSummaryLock
void doEndRun(RunPrincipal const &rp, EventSetup const &c, ModuleCallingContext const *mcc) final
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 doBeginLuminosityBlock(LuminosityBlockPrincipal const &lbp, EventSetup const &c, ModuleCallingContext const *mcc) 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
static const std::string B
impl::choose_shared_vec< typename T::LuminosityBlockSummaryCache >::type m_lumiSummaries
static void set(B *iProd, typename T::LuminosityBlockCache const *iCache)
void doEndLuminosityBlock(LuminosityBlockPrincipal const &lbp, EventSetup const &c, ModuleCallingContext const *mcc) final
void setupLuminosityBlock(M *iProd, LuminosityBlockIndex iIndex) final
void setupRun(M *iProd, RunIndex iIndex) final
CallGlobalLuminosityBlockSummary< T > MyGlobalLuminosityBlockSummary
static void endJob(typename T::GlobalCache *iCache)
Definition: callAbilities.h:42
static void streamEndLuminosityBlockSummary(B *iProd, edm::LuminosityBlock const &iLumi, edm::EventSetup const &iES, typename T::LuminosityBlockSummaryCache *iCache)
CallEndLuminosityBlockProduce< T > MyEndLuminosityBlockProduce
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)
CallGlobalLuminosityBlock< T > MyGlobalLuminosityBlock
impl::choose_shared_vec< typename T::RunCache const >::type m_runs
std::vector< std::vector< double > > tmp
Definition: MVATrainer.cc:100
HLT enums.
ProducingModuleAdaptor(edm::ParameterSet const &iPSet)
CallBeginRunProduce< T > MyBeginRunProduce
CallGlobalRunSummary< T > MyGlobalRunSummary
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
std::vector< std::shared_ptr< T > > type
Definition: dummy_helpers.h:64
CallBeginLuminosityBlockProduce< T > MyBeginLuminosityBlockProduce
static void globalEndLuminosityBlock(edm::LuminosityBlock const &Lumi, edm::EventSetup const &iES, typename T::LuminosityBlockContext const *iContext, typename T::LuminosityBlockSummaryCache *iCache)
static void beginLuminosityBlock(edm::LuminosityBlock const &Lumi, edm::EventSetup const &iES, typename T::RunContext const *iRC, std::shared_ptr< typename T::LuminosityBlockCache const > &oCache)
void setConsumer(EDConsumerBase const *iConsumer)
Definition: Run.h:50
static void set(B *iProd, typename T::GlobalCache const *iCache)
Definition: callAbilities.h:38
Definition: Run.h:43