CMS 3D CMS Logo

EDAnalyzerAdaptorBase.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: FWCore/Framework
4 // Class : edm::stream::EDAnalyzerAdaptorBase
5 //
6 // Implementation:
7 // [Notes on implementation]
8 //
9 // Original Author: Chris Jones
10 // Created: Fri, 02 Aug 2013 21:43:44 GMT
11 //
12 
13 // system include files
14 #include <array>
15 #include <cassert>
16 
17 // user include files
28 
32 
33 using namespace edm::stream;
34 //
35 // constants, enums and typedefs
36 //
37 
38 //
39 // static data member definitions
40 //
41 
42 //
43 // constructors and destructor
44 //
46 
47 // EDAnalyzerAdaptorBase::EDAnalyzerAdaptorBase(const EDAnalyzerAdaptorBase& rhs)
48 // {
49 // // do actual copying here;
50 // }
51 
53  for (auto m : m_streamModules) {
54  delete m;
55  }
56 }
57 
59  for (auto m : m_streamModules) {
60  delete m;
61  }
62  m_streamModules.clear();
63 }
64 
65 //
66 // assignment operators
67 //
68 // const EDAnalyzerAdaptorBase& EDAnalyzerAdaptorBase::operator=(const EDAnalyzerAdaptorBase& rhs)
69 // {
70 // //An exception safe implementation is
71 // EDAnalyzerAdaptorBase temp(rhs);
72 // swap(rhs);
73 //
74 // return *this;
75 // }
76 
77 //
78 // member functions
79 //
81  m_streamModules.resize(iPrealloc.numberOfStreams(), static_cast<stream::EDAnalyzerBase*>(nullptr));
84 }
85 
87  for (auto mod : m_streamModules) {
88  mod->registerProductsAndCallbacks(mod, reg);
89  }
90 }
91 
92 void EDAnalyzerAdaptorBase::itemsToGet(BranchType iType, std::vector<ProductResolverIndexAndSkipBit>& iIndices) const {
93  assert(not m_streamModules.empty());
94  m_streamModules[0]->itemsToGet(iType, iIndices);
95 }
96 void EDAnalyzerAdaptorBase::itemsMayGet(BranchType iType, std::vector<ProductResolverIndexAndSkipBit>& iIndices) const {
97  assert(not m_streamModules.empty());
98  m_streamModules[0]->itemsMayGet(iType, iIndices);
99 }
100 
101 std::vector<edm::ProductResolverIndexAndSkipBit> const& EDAnalyzerAdaptorBase::itemsToGetFrom(BranchType iType) const {
102  assert(not m_streamModules.empty());
103  return m_streamModules[0]->itemsToGetFrom(iType);
104 }
105 
106 std::vector<edm::ESProxyIndex> const& EDAnalyzerAdaptorBase::esGetTokenIndicesVector(edm::Transition iTrans) const {
107  assert(not m_streamModules.empty());
108  return m_streamModules[0]->esGetTokenIndicesVector(iTrans);
109 }
110 
111 std::vector<edm::ESRecordIndex> const& EDAnalyzerAdaptorBase::esGetTokenRecordIndicesVector(
112  edm::Transition iTrans) const {
113  assert(not m_streamModules.empty());
114  return m_streamModules[0]->esGetTokenRecordIndicesVector(iTrans);
115 }
116 
118  ProductResolverIndexHelper const& iHelper,
119  bool iPrefetchMayGet) {
120  for (auto mod : m_streamModules) {
121  mod->updateLookup(iType, iHelper, iPrefetchMayGet);
122  }
123 }
124 
126  for (auto mod : m_streamModules) {
127  mod->updateLookup(iPI);
128  }
129 }
130 
132 
134  std::array<std::vector<ModuleDescription const*>*, NumBranchTypes>& modules,
135  std::vector<ModuleProcessName>& modulesInPreviousProcesses,
136  ProductRegistry const& preg,
137  std::map<std::string, ModuleDescription const*> const& labelsToDesc,
138  std::string const& processName) const {
139  assert(not m_streamModules.empty());
140  return m_streamModules[0]->modulesWhoseProductsAreConsumed(
141  modules, modulesInPreviousProcesses, preg, labelsToDesc, processName);
142 }
143 
145  for (auto mod : m_streamModules) {
146  mod->convertCurrentProcessAlias(processName);
147  }
148 }
149 
150 std::vector<edm::ConsumesInfo> EDAnalyzerAdaptorBase::consumesInfo() const {
151  assert(not m_streamModules.empty());
152  return m_streamModules[0]->consumesInfo();
153 }
154 
156  ActivityRegistry* act,
157  ModuleCallingContext const* mcc) {
158  EventPrincipal const& ep = info.principal();
159  assert(ep.streamID() < m_streamModules.size());
160  auto mod = m_streamModules[ep.streamID()];
161  Event e(ep, moduleDescription_, mcc);
162  e.setConsumer(mod);
163  ESParentContext parentC(mcc);
164  const EventSetup c{
165  info, static_cast<unsigned int>(Transition::Event), mod->esGetTokenIndices(Transition::Event), parentC};
166  EventSignalsSentry sentry(act, mcc);
167  mod->analyze(e, c);
168  return true;
169 }
170 
173 
175  RunTransitionInfo const& info,
176  ModuleCallingContext const* mcc) {
177  RunPrincipal const& rp = info.principal();
178  auto mod = m_streamModules[id];
179  setupRun(mod, rp.index());
180 
181  Run r(rp, moduleDescription_, mcc, false);
182  ESParentContext parentC(mcc);
183  const EventSetup c{
184  info, static_cast<unsigned int>(Transition::BeginRun), mod->esGetTokenIndices(Transition::BeginRun), parentC};
185  r.setConsumer(mod);
186  mod->beginRun(r, c);
187 }
188 
190  RunTransitionInfo const& info,
191  ModuleCallingContext const* mcc) {
192  auto mod = m_streamModules[id];
193  Run r(info, moduleDescription_, mcc, true);
194  r.setConsumer(mod);
195  ESParentContext parentC(mcc);
196  const EventSetup c{
197  info, static_cast<unsigned int>(Transition::EndRun), mod->esGetTokenIndices(Transition::EndRun), parentC};
198  mod->endRun(r, c);
200 }
201 
203  LumiTransitionInfo const& info,
204  ModuleCallingContext const* mcc) {
205  LuminosityBlockPrincipal const& lbp = info.principal();
206  auto mod = m_streamModules[id];
208 
209  LuminosityBlock lb(lbp, moduleDescription_, mcc, false);
210  lb.setConsumer(mod);
211  ESParentContext parentC(mcc);
212  const EventSetup c{info,
213  static_cast<unsigned int>(Transition::BeginLuminosityBlock),
214  mod->esGetTokenIndices(Transition::BeginLuminosityBlock),
215  parentC};
216  mod->beginLuminosityBlock(lb, c);
217 }
219  LumiTransitionInfo const& info,
220  ModuleCallingContext const* mcc) {
221  auto mod = m_streamModules[id];
222  LuminosityBlock lb(info, moduleDescription_, mcc, true);
223  lb.setConsumer(mod);
224  ESParentContext parentC(mcc);
225  const EventSetup c{info,
226  static_cast<unsigned int>(Transition::EndLuminosityBlock),
227  mod->esGetTokenIndices(Transition::EndLuminosityBlock),
228  parentC};
229  mod->endLuminosityBlock(lb, c);
231 }
232 
234  m->setModuleDescriptionPtr(&moduleDescription_);
235 }
void itemsToGet(BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
void registerProductsAndCallbacks(EDAnalyzerAdaptorBase const *, ProductRegistry *reg)
static const TGPicture * info(bool iBackgroundIsBlack)
void setConsumer(EDConsumerBase const *iConsumer)
std::vector< ConsumesInfo > consumesInfo() const
std::vector< EDAnalyzerBase * > m_streamModules
void doPreallocate(PreallocationConfiguration const &)
void updateLookup(BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
void doStreamEndLuminosityBlock(StreamID, LumiTransitionInfo const &, ModuleCallingContext const *)
assert(be >=bs)
virtual void setupLuminosityBlock(EDAnalyzerBase *, LuminosityBlockIndex)=0
BranchType
Definition: BranchType.h:11
void doStreamBeginLuminosityBlock(StreamID, LumiTransitionInfo const &, ModuleCallingContext const *)
void itemsMayGet(BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
void convertCurrentProcessAlias(std::string const &processName)
const EDConsumerBase * consumer() const
std::vector< ESProxyIndex > const & esGetTokenIndicesVector(edm::Transition iTrans) const
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom(BranchType) const
Transition
Definition: Transition.h:12
RunIndex index() const
Definition: RunPrincipal.h:57
virtual void streamEndLuminosityBlockSummary(EDAnalyzerBase *, edm::LuminosityBlock const &, edm::EventSetup const &)=0
virtual void setupRun(EDAnalyzerBase *, RunIndex)=0
void doStreamBeginRun(StreamID, RunTransitionInfo const &, ModuleCallingContext const *)
virtual void preallocLumis(unsigned int)
std::vector< ESRecordIndex > const & esGetTokenRecordIndicesVector(edm::Transition iTrans) const
LuminosityBlockIndex index() const
void modulesWhoseProductsAreConsumed(std::array< std::vector< ModuleDescription const *> *, NumBranchTypes > &modules, std::vector< ModuleProcessName > &modulesInPreviousProcesses, ProductRegistry const &preg, std::map< std::string, ModuleDescription const *> const &labelsToDesc, std::string const &processName) const
bool doEvent(EventTransitionInfo const &, ActivityRegistry *, ModuleCallingContext const *)
virtual void streamEndRunSummary(EDAnalyzerBase *, edm::Run const &, edm::EventSetup const &)=0
T mod(const T &a, const T &b)
Definition: ecalDccMap.h:4
void doStreamEndRun(StreamID, RunTransitionInfo const &, ModuleCallingContext const *)
Definition: Run.h:45
void setModuleDescriptionPtr(EDAnalyzerBase *m)