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 doEndJob() final {
92  MyGlobal::endJob(m_global.get());
93  }
94  void setupRun(EDAnalyzerBase* iProd, RunIndex iIndex) final {
95  MyGlobalRun::set(iProd, m_runs[iIndex].get());
96  }
98  edm::Run const& iRun,
99  edm::EventSetup const& iES) final {
100  auto s = m_runSummaries[iRun.index()].get();
101  std::lock_guard<decltype(m_runSummaryLock)> guard(m_runSummaryLock);
102  MyGlobalRunSummary::streamEndRunSummary(iProd,iRun,iES,s);
103  }
104 
106  {
107  MyGlobalLuminosityBlock::set(iProd, m_lumis[iIndex].get());
108  }
110  edm::LuminosityBlock const& iLumi,
111  edm::EventSetup const& iES) final {
112  auto s = m_lumiSummaries[iLumi.index()].get();
113  std::lock_guard<decltype(m_lumiSummaryLock)> guard(m_lumiSummaryLock);
114  MyGlobalLuminosityBlockSummary::streamEndLuminosityBlockSummary(iProd,iLumi,iES,s);
115  }
116 
117  void doBeginRun(RunPrincipal const& rp,
118  EventSetup const& c,
119  ModuleCallingContext const* mcc) final {
121  Run r(rp, moduleDescription(), mcc);
122  r.setConsumer(consumer());
123  Run const& cnstR = r;
124  RunIndex ri = rp.index();
125  MyGlobalRun::beginRun(cnstR,c,m_global.get(),m_runs[ri]);
126  typename T::RunContext rc(m_runs[ri].get(),m_global.get());
127  MyGlobalRunSummary::beginRun(cnstR,c,&rc,m_runSummaries[ri]);
128  }
129  }
130  void doEndRun(RunPrincipal const& rp,
131  EventSetup const& c,
132  ModuleCallingContext const* mcc) final
133  {
135 
136  Run r(rp, moduleDescription(), mcc);
137  r.setConsumer(consumer());
138 
139  RunIndex ri = rp.index();
140  typename T::RunContext rc(m_runs[ri].get(),m_global.get());
141  MyGlobalRunSummary::globalEndRun(r,c,&rc,m_runSummaries[ri].get());
142  MyGlobalRun::endRun(r,c,&rc);
143  }
144  }
145 
147  EventSetup const& c,
148  ModuleCallingContext const* mcc) final
149  {
151  LuminosityBlock lb(lbp, moduleDescription(), mcc);
152  lb.setConsumer(consumer());
153  LuminosityBlock const& cnstLb = lb;
154  LuminosityBlockIndex li = lbp.index();
155  RunIndex ri = lbp.runPrincipal().index();
156  typename T::RunContext rc(m_runs[ri].get(),m_global.get());
157  MyGlobalLuminosityBlock::beginLuminosityBlock(cnstLb,c,&rc,m_lumis[li]);
158  typename T::LuminosityBlockContext lc(m_lumis[li].get(),m_runs[ri].get(),m_global.get());
159  MyGlobalLuminosityBlockSummary::beginLuminosityBlock(cnstLb,c,&lc,m_lumiSummaries[li]);
160  }
161 
162  }
164  EventSetup const& c,
165  ModuleCallingContext const* mcc) final {
167 
168  LuminosityBlock lb(lbp, moduleDescription(), mcc);
169  lb.setConsumer(consumer());
170 
171  LuminosityBlockIndex li = lbp.index();
172  RunIndex ri = lbp.runPrincipal().index();
173  typename T::LuminosityBlockContext lc(m_lumis[li].get(),m_runs[ri].get(),m_global.get());
174  MyGlobalLuminosityBlockSummary::globalEndLuminosityBlock(lb,c,&lc,m_lumiSummaries[li].get());
175  MyGlobalLuminosityBlock::endLuminosityBlock(lb,c,&lc);
176  }
177  }
178 
179  EDAnalyzerAdaptor(const EDAnalyzerAdaptor&) = delete; // stop default
180 
181  const EDAnalyzerAdaptor& operator=(const EDAnalyzerAdaptor&) = delete; // stop default
182 
183  // ---------- member data --------------------------------
192  };
193  }
194 
195  template<>
197  {
199  public:
200  template<typename ModType>
201  static std::unique_ptr<Base> makeModule(ParameterSet const& pset) {
202  typedef typename stream::BaseToAdaptor<Base,ModType>::Type Adaptor;
203  auto module = std::make_unique<Adaptor>(pset);
204  return std::unique_ptr<Base>(module.release());
205  }
206  };
207 
208 }
209 
210 #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 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
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:50
CallGlobalRunSummary< T > MyGlobalRunSummary
Definition: vlib.h:208
void setupRun(EDAnalyzerBase *iProd, RunIndex iIndex) final
Definition: Run.h:43
static void prevalidate(ConfigurationDescriptions &descriptions)