CMS 3D CMS Logo

Event.cc
Go to the documentation of this file.
2 
14 
15 namespace {
16  const edm::ParentageID s_emptyParentage;
17 }
18 namespace edm {
19 
21 
22  Event::Event(EventPrincipal const& ep, ModuleDescription const& md, ModuleCallingContext const* moduleCallingContext)
23  : provRecorder_(ep, md, true /*always at end*/),
24  aux_(ep.aux()),
25  luminosityBlock_(ep.luminosityBlockPrincipalPtrValid()
26  ? new LuminosityBlock(ep.luminosityBlockPrincipal(), md, moduleCallingContext, false)
27  : nullptr),
28  gotBranchIDs_(),
29  gotViews_(),
30  streamID_(ep.streamID()),
31  moduleCallingContext_(moduleCallingContext) {}
32 
34 
36 
37  void Event::setConsumer(EDConsumerBase const* iConsumer) {
38  provRecorder_.setConsumer(iConsumer);
40  const_cast<LuminosityBlock*>(luminosityBlock_.get())->setConsumer(iConsumer);
41  }
42 
44  provRecorder_.setSharedResourcesAcquirer(iResourceAcquirer);
45  const_cast<LuminosityBlock*>(luminosityBlock_.get())->setSharedResourcesAcquirer(iResourceAcquirer);
46  }
47 
48  void Event::setProducerCommon(ProducerBase const* iProd, std::vector<BranchID>* previousParentage) {
50  //set appropriate size
52  previousBranchIDs_ = previousParentage;
53  }
54 
55  void Event::setProducer(ProducerBase const* iProd,
56  std::vector<BranchID>* previousParentage,
57  std::vector<BranchID>* gotBranchIDsFromAcquire) {
58  setProducerCommon(iProd, previousParentage);
59  if (previousParentage) {
60  //are we supposed to record parentage for at least one item?
61  bool record_parents = false;
62  for (auto v : provRecorder_.recordProvenanceList()) {
63  if (v) {
64  record_parents = true;
65  break;
66  }
67  }
68  if (not record_parents) {
69  previousBranchIDs_ = nullptr;
70  return;
71  }
72  gotBranchIDsFromPrevious_.resize(previousParentage->size(), false);
73  if (gotBranchIDsFromAcquire) {
74  for (auto const& branchID : *gotBranchIDsFromAcquire) {
75  addToGotBranchIDs(branchID);
76  }
77  }
78  }
79  }
80 
82  std::vector<BranchID>* previousParentage,
83  std::vector<BranchID>& gotBranchIDsFromAcquire) {
84  setProducerCommon(iProd, previousParentage);
85  gotBranchIDsFromAcquire_ = &gotBranchIDsFromAcquire;
86  gotBranchIDsFromAcquire_->clear();
87  }
88 
90  return dynamic_cast<EventPrincipal const&>(provRecorder_.principal());
91  }
92 
94 
97  }
98 
99  Run const& Event::getRun() const { return getLuminosityBlock().getRun(); }
100 
102 
104 
107  }
108 
111  }
112 
113  void Event::getAllProvenance(std::vector<Provenance const*>& provenances) const {
115  }
116 
117  void Event::getAllStableProvenance(std::vector<StableProvenance const*>& provenances) const {
119  }
120 
123  bool process_found = processHistory().getConfigurationForProcess(processName, config);
124  if (process_found) {
126  assert(!ps.empty());
127  }
128  return process_found;
129  }
130 
132  return parameterSetForID_(psID);
133  }
134 
136 
137  void Event::commit_(std::vector<edm::ProductResolverIndex> const& iShouldPut, ParentageID* previousParentageId) {
138  size_t nPut = 0;
139  for (auto const& p : putProducts()) {
140  if (p) {
141  ++nPut;
142  }
143  }
144  if (nPut > 0) {
145  commit_aux(putProducts(), previousParentageId);
146  }
147  auto sz = iShouldPut.size();
148  if (sz != 0 and sz != nPut) {
149  //some were missed
150  auto& p = provRecorder_.principal();
151  for (auto index : iShouldPut) {
152  auto resolver = p.getProductResolverByIndex(index);
153  if (not resolver->productResolved()) {
154  resolver->putProduct(std::unique_ptr<WrapperBase>());
155  }
156  }
157  }
158  }
159 
161  // fill in guts of provenance here
162  auto& ep = eventPrincipal();
163 
164  //If we don't have a valid previousParentage then we want to use a temp value in order to
165  // avoid constantly recalculating the ParentageID which is a time consuming operation
166  ParentageID const* presentParentageId;
167 
168  if (previousBranchIDs_) {
169  bool sameAsPrevious = gotBranchIDs_.empty();
170  if (sameAsPrevious) {
171  for (auto i : gotBranchIDsFromPrevious_) {
172  if (not i) {
173  sameAsPrevious = false;
174  break;
175  }
176  }
177  }
178  if (not sameAsPrevious) {
179  std::vector<BranchID> gotBranchIDVector{gotBranchIDs_.begin(), gotBranchIDs_.end()};
180  //add items in common from previous
181  auto n = gotBranchIDsFromPrevious_.size();
182  for (size_t i = 0; i < n; ++i) {
184  gotBranchIDVector.push_back((*previousBranchIDs_)[i]);
185  }
186  }
187  std::sort(gotBranchIDVector.begin(), gotBranchIDVector.end());
188  previousBranchIDs_->assign(gotBranchIDVector.begin(), gotBranchIDVector.end());
189 
190  Parentage p;
191  p.setParents(std::move(gotBranchIDVector));
192  *previousParentageId = p.id();
194  }
195  presentParentageId = previousParentageId;
196  } else {
197  presentParentageId = &s_emptyParentage;
198  }
199 
200  auto const& recordProv = provRecorder_.recordProvenanceList();
201  for (unsigned int i = 0; i < products.size(); ++i) {
202  auto& p = get_underlying_safe(products[i]);
203  if (p) {
204  if (recordProv[i]) {
205  ep.put(provRecorder_.putTokenIndexToProductResolverIndex()[i], std::move(p), *presentParentageId);
206  } else {
207  ep.put(provRecorder_.putTokenIndexToProductResolverIndex()[i], std::move(p), s_emptyParentage);
208  }
209  }
210  }
211 
212  // the cleanup is all or none
213  products.clear();
214  }
215 
217 
218  void Event::addToGotBranchIDs(BranchID const& branchID) const {
219  if (previousBranchIDs_) {
220  auto range = std::equal_range(previousBranchIDs_->begin(), previousBranchIDs_->end(), branchID);
221  if (range.first == range.second) {
222  gotBranchIDs_.insert(branchID.id());
223  } else {
224  gotBranchIDsFromPrevious_[range.first - previousBranchIDs_->begin()] = true;
225  }
226  } else if (gotBranchIDsFromAcquire_) {
227  gotBranchIDsFromAcquire_->push_back(branchID);
228  }
229  }
230 
232 
233  size_t Event::size() const {
234  return std::count_if(putProducts().begin(), putProducts().end(), [](auto const& i) { return bool(i); }) +
236  }
237 
238  BasicHandle Event::getByLabelImpl(std::type_info const&,
239  std::type_info const& iProductType,
240  const InputTag& iTag) const {
242  if (h.isValid()) {
244  }
245  return h;
246  }
247 
248  BasicHandle Event::getImpl(std::type_info const&, ProductID const& pid) const {
249  BasicHandle h = this->getByProductID_(pid);
250  if (h.isValid()) {
252  }
253  return h;
254  }
255 
257  edm::TriggerNames const* names = triggerNames_(triggerResults);
258  if (names != nullptr)
259  return *names;
260 
261  throw cms::Exception("TriggerNamesNotFound") << "TriggerNames not found in ParameterSet registry";
262  return *names;
263  }
264 
266  edm::TriggerNames const* names = triggerNames_(triggerResults);
267  return TriggerResultsByName(&triggerResults, names);
268  }
269 } // namespace edm
ProcessHistory const & processHistory() const
edm::ParameterSet const * parameterSet(edm::ParameterSetID const &psID) const override
Definition: Event.cc:131
bool getProcessParameterSet(std::string const &processName, ParameterSet &ps) const
Definition: Event.cc:121
void setProducerForAcquire(ProducerBase const *iProd, std::vector< BranchID > *previousParentage, std::vector< BranchID > &gotBranchIDsFromAcquire)
Definition: Event.cc:81
std::shared_ptr< LuminosityBlock const > const luminosityBlock_
Definition: Event.h:301
unsigned long CacheIdentifier_t
Definition: Event.h:109
void setConsumer(EDConsumerBase const *iConsumer)
bool empty() const
Definition: ParameterSet.h:191
void getAllProvenance(std::vector< Provenance const * > &provenances) const
Definition: Event.cc:113
size_t size() const
Definition: Principal.cc:299
EventSelectionIDVector const & eventSelectionIDs() const
size_t numberOfProductsConsumed() const
BasicHandle getByLabelImpl(std::type_info const &iWrapperType, std::type_info const &iProductType, InputTag const &iTag) const override
Definition: Event.cc:238
bool isValid() const (true)
Definition: BasicHandle.h:74
Principal const & principal() const
TriggerResultsByName triggerResultsByName(edm::TriggerResults const &triggerResults) const override
Definition: Event.cc:265
FWCore Framework interface EventSetupRecordImplementation h
Helper function to determine trigger accepts.
BasicHandle getByLabel_(TypeID const &tid, InputTag const &tag, ModuleCallingContext const *mcc) const
size_t size() const
Definition: Event.cc:233
Event(EventPrincipal const &ep, ModuleDescription const &md, ModuleCallingContext const *)
Definition: Event.cc:22
BasicHandle getByProductID(ProductID const &oid) const
ParentageID id() const
Definition: Parentage.cc:23
std::vector< edm::ProductResolverIndex > const & putTokenIndexToProductResolverIndex() const
BranchIDSet gotBranchIDs_
Definition: Event.h:308
EDProductGetter const & productGetter() const
Definition: Event.cc:93
#define nullptr
void getAllProvenance(std::vector< Provenance const * > &provenances) const
Definition: Principal.cc:813
Provenance getProvenance(ProductID const &pid, ModuleCallingContext const *mcc) const
void getAllStableProvenance(std::vector< StableProvenance const * > &provenances) const
Definition: Principal.cc:830
Provenance getProvenance(BranchID const &bid, ModuleCallingContext const *mcc) const
Definition: Principal.cc:796
Run const & getRun() const
Definition: Event.cc:99
void setConsumer(EDConsumerBase const *iConsumer)
Definition: Event.cc:37
Provenance const * provenance() const (true)
Definition: BasicHandle.h:86
CacheIdentifier_t cacheIdentifier() const
Definition: Principal.h:184
void setSharedResourcesAcquirer(SharedResourcesAcquirer *iSra)
unsigned int id() const
Definition: BranchID.h:23
const std::string names[nVars_]
ModuleCallingContext const * moduleCallingContext_
Definition: Event.h:320
ProductID branchIDToProductID(BranchID const &bid) const
std::vector< EventSelectionID > EventSelectionIDVector
ESProducts< std::remove_reference_t< TArgs >... > products(TArgs &&...args)
Definition: ESProducts.h:128
std::vector< BranchID > * gotBranchIDsFromAcquire_
Definition: Event.h:311
void setProducer(ProducerBase const *iProd)
bool getConfigurationForProcess(std::string const &name, ProcessConfiguration &config) const
BasicHandle getImpl(std::type_info const &iProductType, ProductID const &pid) const override
Definition: Event.cc:248
config
Definition: looper.py:291
void setParents(std::vector< BranchID > const &parents)
Definition: Parentage.h:46
static edm::ParameterSet const * parameterSetForID_(edm::ParameterSetID const &psID)
Definition: EventBase.cc:41
ParameterSetID const & parameterSetID() const
PrincipalGetAdapter provRecorder_
Definition: Event.h:293
void setProducerCommon(ProducerBase const *iProd, std::vector< BranchID > *previousParentage)
Definition: Event.cc:48
ProcessHistoryID const & processHistoryID() const
Definition: Principal.h:142
std::vector< bool > gotBranchIDsFromPrevious_
Definition: Event.h:309
ProcessHistory const & processHistory() const override
Definition: Event.cc:231
CacheIdentifier_t cacheIdentifier() const
Definition: Event.cc:35
void commit_(std::vector< edm::ProductResolverIndex > const &iShouldPut, ParentageID *previousParentageId=0)
Definition: Event.cc:137
bool getMapped(key_type const &k, value_type &result) const
Definition: Registry.cc:17
LuminosityBlock const & getLuminosityBlock() const
Definition: Event.h:97
#define end
Definition: vmac.h:39
ProductPtrVec putProducts_
Definition: Event.h:298
std::shared_ptr< T > & get_underlying_safe(propagate_const< std::shared_ptr< T >> &iP)
void addToGotBranchIDs(Provenance const &prov) const
Definition: Event.cc:216
ProductID makeProductID(BranchDescription const &desc) const
Definition: Event.cc:95
std::vector< bool > const & recordProvenanceList() const
static TriggerNames const * triggerNames_(edm::TriggerResults const &triggerResults)
Definition: EventBase.cc:45
BranchID const & originalBranchID() const
Definition: Provenance.h:75
void setProducer(ProducerBase const *iProd, std::vector< BranchID > *previousParentage, std::vector< BranchID > *gotBranchIDsFromAcquire=0)
Definition: Event.cc:55
static std::string const triggerResults("TriggerResults")
ProcessHistoryID const & processHistoryID() const
Definition: Event.cc:103
ProductPtrVec & putProducts()
Definition: Event.h:290
EventSelectionIDVector const & eventSelectionIDs() const
Definition: Event.cc:101
void setSharedResourcesAcquirer(SharedResourcesAcquirer *iResourceAcquirer)
Definition: Event.cc:43
#define begin
Definition: vmac.h:32
HLT enums.
std::vector< edm::propagate_const< std::unique_ptr< WrapperBase > > > ProductPtrVec
Definition: Event.h:247
BranchID const & originalBranchID() const
BasicHandle getByProductID_(ProductID const &oid) const
Definition: Event.cc:135
static const std::string emptyString_
Definition: Event.h:322
void commit_aux(ProductPtrVec &products, ParentageID *previousParentageId=0)
Definition: Event.cc:160
Provenance getProvenance(BranchID const &theID) const
Definition: Event.cc:105
static ParentageRegistry * instance()
EventPrincipal const & eventPrincipal() const
Definition: Event.cc:89
edm::TriggerNames const & triggerNames(edm::TriggerResults const &triggerResults) const override
Definition: Event.cc:256
std::vector< BranchID > * previousBranchIDs_
Definition: Event.h:310
bool insertMapped(value_type const &v)
~Event() override
Definition: Event.cc:33
def move(src, dest)
Definition: eostools.py:511
static Registry * instance()
Definition: Registry.cc:12
Definition: Run.h:45
void getAllStableProvenance(std::vector< StableProvenance const * > &provenances) const
Definition: Event.cc:117
Run const & getRun() const