CMS 3D CMS Logo

ProducingModuleAdaptorBase.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: FWCore/Framework
4 // Class : edm::stream::ProducingModuleAdaptorBase
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 <cassert>
15 
16 // user include files
26 
27 //
28 // constants, enums and typedefs
29 //
30 
31 //
32 // static data member definitions
33 //
34 
35 //
36 // constructors and destructor
37 //
38 namespace edm {
39  namespace stream {
40  template <typename T>
42 
43  template <typename T>
45  for (auto m : m_streamModules) {
46  delete m;
47  }
48  }
49 
50  template <typename T>
52  for (auto m : m_streamModules) {
53  delete m;
54  }
55  m_streamModules.clear();
56  }
57 
58  //
59  // member functions
60  //
61 
62  template <typename T>
64  m_streamModules.resize(iPrealloc.numberOfStreams(), static_cast<T*>(nullptr));
65  setupStreamModules();
66  preallocLumis(iPrealloc.numberOfLuminosityBlocks());
67  }
68 
69  template <typename T>
71  ProductRegistry* reg) {
72  auto firstMod = m_streamModules[0];
73  if (firstMod->registrationCallback() and m_streamModules.size() > 1) {
74  //we have a callback so we will collect all callbacks and create a new callback which calls them all.
75 
76  std::vector<std::function<void(BranchDescription const&)>> callbacks;
77  callbacks.reserve(m_streamModules.size());
78 
79  for (auto mod : m_streamModules) {
80  callbacks.push_back(mod->registrationCallback());
81  }
82  //Since only the first module will actually do the registration
83  // we will change its callback to call all the callbacks
84  firstMod->callWhenNewProductsRegistered([callbacks](BranchDescription const& iBD) {
85  for (const auto& c : callbacks) {
86  c(iBD);
87  }
88  });
89  }
90  firstMod->registerProducts(firstMod, reg, moduleDescription_);
91  }
92 
93  template <typename T>
95  std::vector<ProductResolverIndexAndSkipBit>& iIndices) const {
96  assert(not m_streamModules.empty());
97  m_streamModules[0]->itemsToGet(iType, iIndices);
98  }
99 
100  template <typename T>
102  std::vector<ProductResolverIndexAndSkipBit>& iIndices) const {
103  assert(not m_streamModules.empty());
104  m_streamModules[0]->itemsMayGet(iType, iIndices);
105  }
106 
107  template <typename T>
108  std::vector<edm::ProductResolverIndexAndSkipBit> const& ProducingModuleAdaptorBase<T>::itemsToGetFrom(
109  BranchType iType) const {
110  assert(not m_streamModules.empty());
111  return m_streamModules[0]->itemsToGetFrom(iType);
112  }
113 
114  template <typename T>
116  edm::Transition iTrans) const {
117  assert(not m_streamModules.empty());
118  return m_streamModules[0]->esGetTokenIndicesVector(iTrans);
119  }
120 
121  template <typename T>
123  edm::Transition iTrans) const {
124  assert(not m_streamModules.empty());
125  return m_streamModules[0]->esGetTokenRecordIndicesVector(iTrans);
126  }
127 
128  template <typename T>
130  std::array<std::vector<ModuleDescription const*>*, NumBranchTypes>& modules,
131  std::vector<ModuleProcessName>& modulesInPreviousProcesses,
132  ProductRegistry const& preg,
133  std::map<std::string, ModuleDescription const*> const& labelsToDesc,
134  std::string const& processName) const {
135  assert(not m_streamModules.empty());
136  return m_streamModules[0]->modulesWhoseProductsAreConsumed(
137  modules, modulesInPreviousProcesses, preg, labelsToDesc, processName);
138  }
139 
140  template <typename T>
142  for (auto mod : m_streamModules) {
143  mod->convertCurrentProcessAlias(processName);
144  }
145  }
146 
147  template <typename T>
148  std::vector<edm::ConsumesInfo> ProducingModuleAdaptorBase<T>::consumesInfo() const {
149  assert(not m_streamModules.empty());
150  return m_streamModules[0]->consumesInfo();
151  }
152 
153  template <typename T>
155  ProductResolverIndexHelper const& iHelper,
156  bool iPrefetchMayGet) {
157  for (auto mod : m_streamModules) {
158  mod->updateLookup(iType, iHelper, iPrefetchMayGet);
159  }
160  }
161  template <typename T>
163  for (auto mod : m_streamModules) {
164  mod->updateLookup(iPI);
165  }
166  }
167 
168  template <typename T>
170  ModuleToResolverIndicies const& iIndicies,
171  std::string const& moduleLabel) {
172  for (auto mod : m_streamModules) {
173  mod->resolvePutIndicies(iBranchType, iIndicies, moduleLabel);
174  }
175  }
176 
177  template <typename T>
178  std::vector<edm::ProductResolverIndex> const& ProducingModuleAdaptorBase<T>::indiciesForPutProducts(
179  BranchType iBranchType) const {
180  return m_streamModules[0]->indiciesForPutProducts(iBranchType);
181  }
182 
183  template <typename T>
185  m_streamModules[id]->beginStream(id);
186  }
187  template <typename T>
189  m_streamModules[id]->endStream();
190  }
191 
192  template <typename T>
194  RunTransitionInfo const& info,
195  ModuleCallingContext const* mcc) {
196  RunPrincipal const& rp = info.principal();
197  auto mod = m_streamModules[id];
198  setupRun(mod, rp.index());
199 
200  Run r(rp, moduleDescription_, mcc, false);
201  r.setConsumer(mod);
202  ESParentContext parentC(mcc);
203  const EventSetup c{
204  info, static_cast<unsigned int>(Transition::BeginRun), mod->esGetTokenIndices(Transition::BeginRun), parentC};
205  mod->beginRun(r, c);
206  }
207 
208  template <typename T>
210  RunTransitionInfo const& info,
211  ModuleCallingContext const* mcc) {
212  auto mod = m_streamModules[id];
213  Run r(info, moduleDescription_, mcc, true);
214  r.setConsumer(mod);
215  ESParentContext parentC(mcc);
216  const EventSetup c{
217  info, static_cast<unsigned int>(Transition::EndRun), mod->esGetTokenIndices(Transition::EndRun), parentC};
218  mod->endRun(r, c);
219  streamEndRunSummary(mod, r, c);
220  }
221 
222  template <typename T>
224  LumiTransitionInfo const& info,
225  ModuleCallingContext const* mcc) {
226  LuminosityBlockPrincipal const& lbp = info.principal();
227  auto mod = m_streamModules[id];
228  setupLuminosityBlock(mod, lbp.index());
229 
230  LuminosityBlock lb(lbp, moduleDescription_, mcc, false);
231  lb.setConsumer(mod);
232  ESParentContext parentC(mcc);
233  const EventSetup c{info,
234  static_cast<unsigned int>(Transition::BeginLuminosityBlock),
235  mod->esGetTokenIndices(Transition::BeginLuminosityBlock),
236  parentC};
237  mod->beginLuminosityBlock(lb, c);
238  }
239 
240  template <typename T>
242  LumiTransitionInfo const& info,
243  ModuleCallingContext const* mcc) {
244  auto mod = m_streamModules[id];
245  LuminosityBlock lb(info, moduleDescription_, mcc, true);
246  lb.setConsumer(mod);
247  ESParentContext parentC(mcc);
248  const EventSetup c{info,
249  static_cast<unsigned int>(Transition::EndLuminosityBlock),
250  mod->esGetTokenIndices(Transition::EndLuminosityBlock),
251  parentC};
252  mod->endLuminosityBlock(lb, c);
253  streamEndLuminosityBlockSummary(mod, lb, c);
254  }
255 
256  template <typename T>
259  assert(not m_streamModules.empty());
260  auto mod = m_streamModules[0];
261  mod->registerThinnedAssociations(registry, helper);
262  }
263  } // namespace stream
264 } // namespace edm
void doStreamEndLuminosityBlock(StreamID, LumiTransitionInfo const &, ModuleCallingContext const *)
static const TGPicture * info(bool iBackgroundIsBlack)
void setConsumer(EDConsumerBase const *iConsumer)
void doRegisterThinnedAssociations(ProductRegistry const &, ThinnedAssociationsHelper &)
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom(BranchType) const
Definition: helper.py:1
std::vector< ESRecordIndex > const & esGetTokenRecordIndicesVector(edm::Transition iTrans) 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
uint32_t T const *__restrict__ uint32_t const *__restrict__ int32_t int Histo::index_type cudaStream_t stream
assert(be >=bs)
void doPreallocate(PreallocationConfiguration const &)
BranchType
Definition: BranchType.h:11
void registerProductsAndCallbacks(ProducingModuleAdaptorBase const *, ProductRegistry *reg)
void doStreamBeginRun(StreamID, RunTransitionInfo const &, ModuleCallingContext const *)
void updateLookup(BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
void itemsToGet(BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
std::vector< ESProxyIndex > const & esGetTokenIndicesVector(edm::Transition iTrans) const
Transition
Definition: Transition.h:12
RunIndex index() const
Definition: RunPrincipal.h:57
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 callbacks
Definition: Activities.doc:12
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts(BranchType iBranchType) const
void convertCurrentProcessAlias(std::string const &processName)
void resolvePutIndicies(BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
void itemsMayGet(BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
HLT enums.
LuminosityBlockIndex index() const
std::vector< ConsumesInfo > consumesInfo() const
void doStreamEndRun(StreamID, RunTransitionInfo const &, ModuleCallingContext const *)
long double T
T mod(const T &a, const T &b)
Definition: ecalDccMap.h:4
std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex > > ModuleToResolverIndicies
void doStreamBeginLuminosityBlock(StreamID, LumiTransitionInfo const &, ModuleCallingContext const *)
Definition: Run.h:45