CMS 3D CMS Logo

EDAnalyzerAdaptor.h
Go to the documentation of this file.
1 #ifndef FWCore_Framework_stream_EDAnalyzerAdaptor_h
2 #define FWCore_Framework_stream_EDAnalyzerAdaptor_h
3 // -*- C++ -*-
4 //
5 // Package: FWCore/Framework
6 // Class : EDAnalyzerAdaptor
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
33 
34 // forward declarations
35 
36 namespace edm {
37  namespace stream {
38 
39  template<typename ABase, typename ModType> struct BaseToAdaptor;
40 
41  template<typename T> class EDAnalyzerAdaptor;
42  template<typename ModType> struct BaseToAdaptor<EDAnalyzerAdaptorBase,ModType> {
44  };
45 
46  template<typename T>
48  {
49 
50  public:
52  m_pset(&iPSet)
53  {
54  m_runs.resize(1);
55  m_lumis.resize(1);
56  m_runSummaries.resize(1);
57  m_lumiSummaries.resize(1);
58  typename T::GlobalCache const* dummy=nullptr;
59  m_global = impl::makeGlobal<T>(iPSet,dummy);
60  }
61  ~EDAnalyzerAdaptor() override {
62  }
63 
64  static void fillDescriptions(ConfigurationDescriptions& descriptions) {
65  T::fillDescriptions(descriptions);
66  }
67  static void prevalidate(ConfigurationDescriptions& descriptions) {
68  T::prevalidate(descriptions);
69  }
70 
71  bool wantsGlobalRuns() const final {
74 
75  private:
81 
82  void setupStreamModules() final {
83  this->createStreamModules([this] () -> EDAnalyzerBase* {
84  auto tmp = impl::makeStreamModule<T>(*m_pset,m_global.get());
85  MyGlobal::set(tmp,m_global.get());
86  return tmp;
87  });
88  m_pset= nullptr;
89  }
90 
91  void preallocLumis(unsigned int iNLumis) final {
92  m_lumis.resize(iNLumis);
93  m_lumiSummaries.resize(iNLumis);
94  }
95 
96  void doEndJob() final {
97  MyGlobal::endJob(m_global.get());
98  }
99  void setupRun(EDAnalyzerBase* iProd, RunIndex iIndex) final {
100  MyGlobalRun::set(iProd, m_runs[iIndex].get());
101  }
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);
107  MyGlobalRunSummary::streamEndRunSummary(iProd,iRun,iES,s);
108  }
109 
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);
119  MyGlobalLuminosityBlockSummary::streamEndLuminosityBlockSummary(iProd,iLumi,iES,s);
120  }
121 
122  void doBeginRun(RunPrincipal const& rp,
123  EventSetup const& c,
124  ModuleCallingContext const* mcc) final {
126  Run r(rp, moduleDescription(), mcc, false);
127  r.setConsumer(consumer());
128  Run const& cnstR = r;
129  RunIndex ri = rp.index();
130  MyGlobalRun::beginRun(cnstR,c,m_global.get(),m_runs[ri]);
131  typename T::RunContext rc(m_runs[ri].get(),m_global.get());
132  MyGlobalRunSummary::beginRun(cnstR,c,&rc,m_runSummaries[ri]);
133  }
134  }
135  void doEndRun(RunPrincipal const& rp,
136  EventSetup const& c,
137  ModuleCallingContext const* mcc) final
138  {
140 
141  Run r(rp, moduleDescription(), mcc, true);
142  r.setConsumer(consumer());
143 
144  RunIndex ri = rp.index();
145  typename T::RunContext rc(m_runs[ri].get(),m_global.get());
146  MyGlobalRunSummary::globalEndRun(r,c,&rc,m_runSummaries[ri].get());
147  MyGlobalRun::endRun(r,c,&rc);
148  }
149  }
150 
152  EventSetup const& c,
153  ModuleCallingContext const* mcc) final
154  {
156  LuminosityBlock lb(lbp, moduleDescription(), mcc, false);
157  lb.setConsumer(consumer());
158  LuminosityBlock const& cnstLb = lb;
159  LuminosityBlockIndex li = lbp.index();
160  RunIndex ri = lbp.runPrincipal().index();
161  typename T::RunContext rc(m_runs[ri].get(),m_global.get());
162  MyGlobalLuminosityBlock::beginLuminosityBlock(cnstLb,c,&rc,m_lumis[li]);
163  typename T::LuminosityBlockContext lc(m_lumis[li].get(),m_runs[ri].get(),m_global.get());
164  MyGlobalLuminosityBlockSummary::beginLuminosityBlock(cnstLb,c,&lc,m_lumiSummaries[li]);
165  }
166 
167  }
169  EventSetup const& c,
170  ModuleCallingContext const* mcc) final {
172 
173  LuminosityBlock lb(lbp, moduleDescription(), mcc, true);
174  lb.setConsumer(consumer());
175 
176  LuminosityBlockIndex li = lbp.index();
177  RunIndex ri = lbp.runPrincipal().index();
178  typename T::LuminosityBlockContext lc(m_lumis[li].get(),m_runs[ri].get(),m_global.get());
179  MyGlobalLuminosityBlockSummary::globalEndLuminosityBlock(lb,c,&lc,m_lumiSummaries[li].get());
180  MyGlobalLuminosityBlock::endLuminosityBlock(lb,c,&lc);
181  }
182  }
183 
184  EDAnalyzerAdaptor(const EDAnalyzerAdaptor&) = delete; // stop default
185 
186  const EDAnalyzerAdaptor& operator=(const EDAnalyzerAdaptor&) = delete; // stop default
187 
188  // ---------- member data --------------------------------
197  };
198  }
199 
200  template<>
202  {
204  public:
205  template<typename ModType>
206  static std::unique_ptr<Base> makeModule(ParameterSet const& pset) {
207  typedef typename stream::BaseToAdaptor<Base,ModType>::Type Adaptor;
208  auto module = std::make_unique<Adaptor>(pset);
209  return std::unique_ptr<Base>(module.release());
210  }
211  };
212 
213 }
214 
215 #endif
void streamEndRunSummary(EDAnalyzerBase *iProd, edm::Run const &iRun, edm::EventSetup const &iES) final
void doEndLuminosityBlock(LuminosityBlockPrincipal const &lbp, EventSetup const &c, ModuleCallingContext const *mcc) final
void doBeginLuminosityBlock(LuminosityBlockPrincipal const &lbp, EventSetup const &c, ModuleCallingContext const *mcc) final
impl::choose_shared_vec< typename T::RunCache const >::type m_runs
static void fillDescriptions(ConfigurationDescriptions &descriptions)
void setConsumer(EDConsumerBase const *iConsumer)
static std::unique_ptr< Base > makeModule(ParameterSet const &pset)
void streamEndLuminosityBlockSummary(EDAnalyzerBase *iProd, edm::LuminosityBlock const &iLumi, edm::EventSetup const &iES) final
bool wantsGlobalRuns() const final
void doBeginRun(RunPrincipal const &rp, EventSetup const &c, ModuleCallingContext const *mcc) final
void preallocLumis(unsigned int iNLumis) final
void doEndRun(RunPrincipal const &rp, EventSetup const &c, ModuleCallingContext const *mcc) final
void setupLuminosityBlock(EDAnalyzerBase *iProd, LuminosityBlockIndex iIndex) final
impl::choose_unique_ptr< typename T::GlobalCache >::type m_global
impl::choose_shared_vec< typename T::RunSummaryCache >::type m_runSummaries
impl::choose_mutex< typename T::RunSummaryCache >::type m_runSummaryLock
CallGlobalLuminosityBlock< T > MyGlobalLuminosityBlock
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
bool wantsGlobalLuminosityBlocks() const final
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
impl::choose_shared_vec< typename T::LuminosityBlockSummaryCache >::type m_lumiSummaries
EDAnalyzerAdaptor(edm::ParameterSet const &iPSet)
impl::choose_shared_vec< typename T::LuminosityBlockCache const >::type m_lumis
CallGlobalLuminosityBlockSummary< T > MyGlobalLuminosityBlockSummary
std::vector< std::vector< double > > tmp
Definition: MVATrainer.cc:100
impl::choose_mutex< typename T::LuminosityBlockSummaryCache >::type m_lumiSummaryLock
HLT enums.
std::vector< std::shared_ptr< T > > type
Definition: dummy_helpers.h:64
void setConsumer(EDConsumerBase const *iConsumer)
Definition: Run.h:51
CallGlobalRunSummary< T > MyGlobalRunSummary
Definition: vlib.h:208
void setupRun(EDAnalyzerBase *iProd, RunIndex iIndex) final
Definition: Run.h:44
static void prevalidate(ConfigurationDescriptions &descriptions)