CMS 3D CMS Logo

TriggerSummaryProducerAOD.cc
Go to the documentation of this file.
1 
10 #include <ostream>
11 #include <algorithm>
12 #include <memory>
13 #include <typeinfo>
14 
17 
24 
37 
43 
49 
52 
55 
56 #include "boost/algorithm/string.hpp"
57 
58 namespace {
59  std::vector<std::regex> convertToRegex(std::vector<std::string> const& iPatterns) {
60  std::vector<std::regex> result;
61 
62  for (auto const& pattern : iPatterns) {
63  auto regexPattern = pattern;
64  boost::replace_all(regexPattern, "*", ".*");
65  boost::replace_all(regexPattern, "?", ".");
66 
67  result.emplace_back(regexPattern);
68  }
69  return result;
70  }
71 } // namespace
72 
73 //
74 // constructors and destructor
75 //
77  : throw_(ps.getParameter<bool>("throw")),
78  pn_(ps.getParameter<std::string>("processName")),
79  moduleLabelPatternsToMatch_(
80  convertToRegex(ps.getParameter<std::vector<std::string>>("moduleLabelPatternsToMatch"))),
81  moduleLabelPatternsToSkip_(
82  convertToRegex(ps.getParameter<std::vector<std::string>>("moduleLabelPatternsToSkip"))),
83  filterTagsEvent_(pn_ != "*"),
84  filterTagsStream_(pn_ != "*"),
85  collectionTagsEvent_(pn_ != "*"),
86  collectionTagsStream_(pn_ != "*"),
87  toc_(),
88  tags_(),
89  offset_(),
90  keys_(),
91  ids_(),
92  maskFilters_() {
93  if (pn_ == "@") {
95  if (tns.isAvailable()) {
96  pn_ = tns->getProcessName();
97  } else {
98  edm::LogError("TriggerSummaryProducerAOD") << "HLT Error: TriggerNamesService not available!";
99  pn_ = "*";
100  }
101 
102  filterTagsEvent_ = InputTagSet(pn_ != "*");
106  }
107  LogDebug("TriggerSummaryProducerAOD") << "Using process name: '" << pn_ << "'";
108 
109  filterTagsStream_.clear();
110  collectionTagsStream_.clear();
111 
112  produces<trigger::TriggerEvent>();
113 
114  auto const* pProcessName = &pn_;
117  auto productMatch = [pProcessName, &moduleLabelPatternsToSkip, &moduleLabelPatternsToMatch](
118  edm::BranchDescription const& iBranch) -> bool {
119  if (iBranch.processName() == *pProcessName || *pProcessName == "*") {
120  auto const& label = iBranch.moduleLabel();
121  for (auto& match : moduleLabelPatternsToMatch) {
122  if (std::regex_match(label, match)) {
123  //make sure this is not in the reject list
124  for (auto& reject : moduleLabelPatternsToSkip) {
125  if (std::regex_match(label, reject)) {
126  return false;
127  }
128  }
129  return true;
130  }
131  }
132  }
133  return false;
134  };
135 
159 
160  callWhenNewProductsRegistered([this](edm::BranchDescription const& bd) {
167  getMETCollection_(bd);
183  });
184 }
185 
187 
188 //
189 // member functions
190 //
191 
192 namespace {
193  inline void tokenizeTag(const std::string& tag, std::string& label, std::string& instance, std::string& process) {
194  using std::string;
195 
196  const char token(':');
197  const string empty;
198 
199  label = tag;
200  const string::size_type i1(label.find(token));
201  if (i1 == string::npos) {
202  instance = empty;
203  process = empty;
204  } else {
205  instance = label.substr(i1 + 1);
206  label.resize(i1);
207  const string::size_type i2(instance.find(token));
208  if (i2 == string::npos) {
209  process = empty;
210  } else {
211  process = instance.substr(i2 + 1);
212  instance.resize(i2);
213  }
214  }
215  }
216 } // namespace
217 
220  desc.add<bool>("throw", false)->setComment("Throw exception or LogError");
221  desc.add<std::string>("processName", "@")
222  ->setComment(
223  "Process name to use when getting data. The value of '@' is used to denote the current process name.");
224  desc.add<std::vector<std::string>>("moduleLabelPatternsToMatch", std::vector<std::string>(1, "hlt*"))
225  ->setComment("glob patterns for module labels to get data.");
226  desc.add<std::vector<std::string>>("moduleLabelPatternsToSkip", std::vector<std::string>())
227  ->setComment("module labels for data products which should not be gotten.");
228  descriptions.add("triggerSummaryProducerAOD", desc);
229 }
230 
231 // ------------ method called to produce the data ------------
233  using namespace std;
234  using namespace edm;
235  using namespace reco;
236  using namespace l1extra;
237  using namespace trigger;
238  using namespace l1t;
239 
240  std::vector<edm::Handle<trigger::TriggerFilterObjectWithRefs>> fobs;
242 
243  const unsigned int nfob(fobs.size());
244  LogTrace("TriggerSummaryProducerAOD") << "Number of filter objects found: " << nfob;
245 
246  string tagLabel, tagInstance, tagProcess;
247 
253  maskFilters_.clear();
254  maskFilters_.resize(nfob);
255  filterTagsEvent_.clear();
256  collectionTagsEvent_.clear();
257  unsigned int nf(0);
258  for (unsigned int ifob = 0; ifob != nfob; ++ifob) {
259  maskFilters_[ifob] = false;
260  const vector<string>& collectionTags_(fobs[ifob]->getCollectionTagsAsStrings());
261  const unsigned int ncol(collectionTags_.size());
262  if (ncol > 0) {
263  nf++;
264  maskFilters_[ifob] = true;
265  const string& label(fobs[ifob].provenance()->moduleLabel());
266  const string& instance(fobs[ifob].provenance()->productInstanceName());
267  const string& process(fobs[ifob].provenance()->processName());
268  filterTagsEvent_.insert(InputTag(label, instance, process));
269  for (unsigned int icol = 0; icol != ncol; ++icol) {
270  // overwrite process name (usually not set)
271  tokenizeTag(collectionTags_[icol], tagLabel, tagInstance, tagProcess);
272  collectionTagsEvent_.insert(InputTag(tagLabel, tagInstance, pn_));
273  }
274  }
275  }
277  if (filterTagsEvent_.size() != nf) {
278  LogError("TriggerSummaryProducerAOD")
279  << "Mismatch in number of filter tags: " << filterTagsEvent_.size() << "!=" << nf;
280  }
281 
284  filterTagsStream_.insert(filterTagsEvent_.begin(), filterTagsEvent_.end());
285 
287  if (isDebugEnabled()) {
289  const unsigned int nc(collectionTagsEvent_.size());
290  LogTrace("TriggerSummaryProducerAOD") << "Number of unique collections requested " << nc;
291  const InputTagSet::const_iterator cb(collectionTagsEvent_.begin());
292  const InputTagSet::const_iterator ce(collectionTagsEvent_.end());
293  for (InputTagSet::const_iterator ci = cb; ci != ce; ++ci) {
294  LogTrace("TriggerSummaryProducerAOD") << distance(cb, ci) << " " << ci->encode();
295  }
296  const unsigned int nf(filterTagsEvent_.size());
297  LogTrace("TriggerSummaryProducerAOD") << "Number of unique filters requested " << nf;
298  const InputTagSet::const_iterator fb(filterTagsEvent_.begin());
299  const InputTagSet::const_iterator fe(filterTagsEvent_.end());
300  for (InputTagSet::const_iterator fi = fb; fi != fe; ++fi) {
301  LogTrace("TriggerSummaryProducerAOD") << distance(fb, fi) << " " << fi->encode();
302  }
303  }
304 
310  toc_.clear();
311  tags_.clear();
312  keys_.clear();
313  offset_.clear();
314  fillTriggerObjectCollections<RecoEcalCandidateCollection>(iEvent, getRecoEcalCandidateCollection_);
315  fillTriggerObjectCollections<ElectronCollection>(iEvent, getElectronCollection_);
316  fillTriggerObjectCollections<RecoChargedCandidateCollection>(iEvent, getRecoChargedCandidateCollection_);
317  fillTriggerObjectCollections<CaloJetCollection>(iEvent, getCaloJetCollection_);
318  fillTriggerObjectCollections<CompositeCandidateCollection>(iEvent, getCompositeCandidateCollection_);
319  fillTriggerObjectCollections<METCollection>(iEvent, getMETCollection_);
320  fillTriggerObjectCollections<CaloMETCollection>(iEvent, getCaloMETCollection_);
321  fillTriggerObjectCollections<IsolatedPixelTrackCandidateCollection>(iEvent,
324  fillTriggerObjectCollections<L1EmParticleCollection>(iEvent, getL1EmParticleCollection_);
325  fillTriggerObjectCollections<L1MuonParticleCollection>(iEvent, getL1MuonParticleCollection_);
326  fillTriggerObjectCollections<L1JetParticleCollection>(iEvent, getL1JetParticleCollection_);
327  fillTriggerObjectCollections<L1EtMissParticleCollection>(iEvent, getL1EtMissParticleCollection_);
328  fillTriggerObjectCollections<L1HFRingsCollection>(iEvent, getL1HFRingsCollection_);
329  fillTriggerObjectCollections<MuonBxCollection>(iEvent, getL1TMuonParticleCollection_);
330  fillTriggerObjectCollections<EGammaBxCollection>(iEvent, getL1TEGammaParticleCollection_);
331  fillTriggerObjectCollections<JetBxCollection>(iEvent, getL1TJetParticleCollection_);
332  fillTriggerObjectCollections<TauBxCollection>(iEvent, getL1TTauParticleCollection_);
333  fillTriggerObjectCollections<EtSumBxCollection>(iEvent, getL1TEtSumParticleCollection_);
335  fillTriggerObjectCollections<PFJetCollection>(iEvent, getPFJetCollection_);
336  fillTriggerObjectCollections<PFTauCollection>(iEvent, getPFTauCollection_);
337  fillTriggerObjectCollections<PFMETCollection>(iEvent, getPFMETCollection_);
339  const unsigned int nk(tags_.size());
340  LogDebug("TriggerSummaryProducerAOD") << "Number of collections found: " << nk;
341  const unsigned int no(toc_.size());
342  LogDebug("TriggerSummaryProducerAOD") << "Number of physics objects found: " << no;
343 
346  unique_ptr<TriggerEvent> product(new TriggerEvent(pn_, nk, no, nf));
347 
349  product->addCollections(tags_, keys_);
350  product->addObjects(toc_);
351 
353  for (unsigned int ifob = 0; ifob != nfob; ++ifob) {
354  if (maskFilters_[ifob]) {
355  const string& label(fobs[ifob].provenance()->moduleLabel());
356  const string& instance(fobs[ifob].provenance()->productInstanceName());
357  const string& process(fobs[ifob].provenance()->processName());
358  const edm::InputTag filterTag(label, instance, process);
359  ids_.clear();
360  keys_.clear();
361  fillFilterObjectMembers(iEvent, filterTag, fobs[ifob]->photonIds(), fobs[ifob]->photonRefs());
362  fillFilterObjectMembers(iEvent, filterTag, fobs[ifob]->electronIds(), fobs[ifob]->electronRefs());
363  fillFilterObjectMembers(iEvent, filterTag, fobs[ifob]->muonIds(), fobs[ifob]->muonRefs());
364  fillFilterObjectMembers(iEvent, filterTag, fobs[ifob]->jetIds(), fobs[ifob]->jetRefs());
365  fillFilterObjectMembers(iEvent, filterTag, fobs[ifob]->compositeIds(), fobs[ifob]->compositeRefs());
366  fillFilterObjectMembers(iEvent, filterTag, fobs[ifob]->basemetIds(), fobs[ifob]->basemetRefs());
367  fillFilterObjectMembers(iEvent, filterTag, fobs[ifob]->calometIds(), fobs[ifob]->calometRefs());
368  fillFilterObjectMembers(iEvent, filterTag, fobs[ifob]->pixtrackIds(), fobs[ifob]->pixtrackRefs());
369  fillFilterObjectMembers(iEvent, filterTag, fobs[ifob]->l1emIds(), fobs[ifob]->l1emRefs());
370  fillFilterObjectMembers(iEvent, filterTag, fobs[ifob]->l1muonIds(), fobs[ifob]->l1muonRefs());
371  fillFilterObjectMembers(iEvent, filterTag, fobs[ifob]->l1jetIds(), fobs[ifob]->l1jetRefs());
372  fillFilterObjectMembers(iEvent, filterTag, fobs[ifob]->l1etmissIds(), fobs[ifob]->l1etmissRefs());
373  fillFilterObjectMembers(iEvent, filterTag, fobs[ifob]->l1hfringsIds(), fobs[ifob]->l1hfringsRefs());
374  fillFilterObjectMembers(iEvent, filterTag, fobs[ifob]->l1tmuonIds(), fobs[ifob]->l1tmuonRefs());
375  fillFilterObjectMembers(iEvent, filterTag, fobs[ifob]->l1tegammaIds(), fobs[ifob]->l1tegammaRefs());
376  fillFilterObjectMembers(iEvent, filterTag, fobs[ifob]->l1tjetIds(), fobs[ifob]->l1tjetRefs());
377  fillFilterObjectMembers(iEvent, filterTag, fobs[ifob]->l1ttauIds(), fobs[ifob]->l1ttauRefs());
378  fillFilterObjectMembers(iEvent, filterTag, fobs[ifob]->l1tetsumIds(), fobs[ifob]->l1tetsumRefs());
379  fillFilterObjectMembers(iEvent, filterTag, fobs[ifob]->pfjetIds(), fobs[ifob]->pfjetRefs());
380  fillFilterObjectMembers(iEvent, filterTag, fobs[ifob]->pftauIds(), fobs[ifob]->pftauRefs());
381  fillFilterObjectMembers(iEvent, filterTag, fobs[ifob]->pfmetIds(), fobs[ifob]->pfmetRefs());
382  product->addFilter(filterTag, ids_, keys_);
383  }
384  }
385 
386  OrphanHandle<TriggerEvent> ref = iEvent.put(std::move(product));
387  LogTrace("TriggerSummaryProducerAOD") << "Number of physics objects packed: " << ref->sizeObjects();
388  LogTrace("TriggerSummaryProducerAOD") << "Number of filter objects packed: " << ref->sizeFilters();
389 }
390 
391 template <typename C>
393  edm::GetterOfProducts<C>& getter) {
397 
398  using namespace std;
399  using namespace edm;
400  using namespace reco;
401  using namespace l1extra;
402  using namespace trigger;
403  using namespace l1t;
404 
405  vector<Handle<C>> collections;
406  getter.fillHandles(iEvent, collections);
407  const unsigned int nc(collections.size());
408 
409  for (unsigned int ic = 0; ic != nc; ++ic) {
410  const Provenance& provenance(*(collections[ic].provenance()));
411  const string& label(provenance.moduleLabel());
412  const string& instance(provenance.productInstanceName());
413  const string& process(provenance.processName());
414  const InputTag collectionTag(label, instance, process);
415 
416  if (collectionTagsEvent_.find(collectionTag) != collectionTagsEvent_.end()) {
417  const ProductID pid(collections[ic].provenance()->productID());
418  if (offset_.find(pid) != offset_.end()) {
419  LogError("TriggerSummaryProducerAOD") << "Duplicate pid: " << pid;
420  }
421  offset_[pid] = toc_.size();
422  const unsigned int n(collections[ic]->size());
423  for (unsigned int i = 0; i != n; ++i) {
424  fillTriggerObject((*collections[ic])[i]);
425  }
426  tags_.push_back(collectionTag.encode());
427  keys_.push_back(toc_.size());
428  }
429 
430  }
431 }
432 
433 template <typename T>
435  using namespace trigger;
436  toc_.push_back(TriggerObject(object));
437 
438  return;
439 }
440 
442  using namespace l1extra;
443  using namespace trigger;
444 
446  object.hfEtSum(L1HFRings::kRing1PosEta),
447  object.hfEtSum(L1HFRings::kRing1NegEta),
448  object.hfEtSum(L1HFRings::kRing2PosEta),
449  object.hfEtSum(L1HFRings::kRing2NegEta)));
451  object.hfBitCount(L1HFRings::kRing1PosEta),
452  object.hfBitCount(L1HFRings::kRing1NegEta),
453  object.hfBitCount(L1HFRings::kRing2PosEta),
454  object.hfBitCount(L1HFRings::kRing2NegEta)));
455 
456  return;
457 }
458 
460  using namespace l1extra;
461  using namespace trigger;
462 
463  toc_.push_back(TriggerObject(object));
464  if (object.type() == L1EtMissParticle::kMET) {
465  toc_.push_back(TriggerObject(TriggerL1ETT, object.etTotal(), 0.0, 0.0, 0.0));
466  } else if (object.type() == L1EtMissParticle::kMHT) {
467  toc_.push_back(TriggerObject(TriggerL1HTT, object.etTotal(), 0.0, 0.0, 0.0));
468  } else {
469  toc_.push_back(TriggerObject(0, object.etTotal(), 0.0, 0.0, 0.0));
470  }
471 
472  return;
473 }
474 
476  using namespace reco;
477  using namespace trigger;
478 
479  toc_.push_back(TriggerObject(object));
480  toc_.push_back(TriggerObject(TriggerTET, object.sumEt(), 0.0, 0.0, 0.0));
481  toc_.push_back(TriggerObject(TriggerMETSig, object.mEtSig(), 0.0, 0.0, 0.0));
482  toc_.push_back(TriggerObject(TriggerELongit, object.e_longitudinal(), 0.0, 0.0, 0.0));
483 
484  return;
485 }
486 
488  using namespace reco;
489  using namespace trigger;
490 
491  toc_.push_back(TriggerObject(object));
492  toc_.push_back(TriggerObject(TriggerTET, object.sumEt(), 0.0, 0.0, 0.0));
493  toc_.push_back(TriggerObject(TriggerMETSig, object.mEtSig(), 0.0, 0.0, 0.0));
494  toc_.push_back(TriggerObject(TriggerELongit, object.e_longitudinal(), 0.0, 0.0, 0.0));
495 
496  return;
497 }
498 
500  using namespace reco;
501  using namespace trigger;
502 
503  toc_.push_back(TriggerObject(object));
504  toc_.push_back(TriggerObject(TriggerTHT, object.sumEt(), 0.0, 0.0, 0.0));
505  toc_.push_back(TriggerObject(TriggerMHTSig, object.mEtSig(), 0.0, 0.0, 0.0));
506  toc_.push_back(TriggerObject(TriggerHLongit, object.e_longitudinal(), 0.0, 0.0, 0.0));
507 
508  return;
509 }
510 
511 template <typename C>
513  const edm::InputTag& tag,
514  const trigger::Vids& ids,
515  const std::vector<edm::Ref<C>>& refs) {
519 
520  using namespace std;
521  using namespace edm;
522  using namespace reco;
523  using namespace l1extra;
524  using namespace trigger;
525 
526  if (ids.size() != refs.size()) {
527  LogError("TriggerSummaryProducerAOD") << "Vector length is different: " << ids.size() << " " << refs.size();
528  }
529 
530  const unsigned int n(min(ids.size(), refs.size()));
531  for (unsigned int i = 0; i != n; ++i) {
532  const ProductID pid(refs[i].id());
533  if (!(pid.isValid())) {
534  std::ostringstream ost;
535  ost << "Iinvalid pid: " << pid << " FilterTag / Key: " << tag.encode() << " / " << i << "of" << n
536  << " CollectionTag / Key: "
537  << " <Unrecoverable>"
538  << " / " << refs[i].key() << " CollectionType: " << typeid(C).name();
539  if (throw_) {
540  throw cms::Exception("TriggerSummaryProducerAOD") << ost.str();
541  } else {
542  LogError("TriggerSummaryProducerAOD") << ost.str();
543  }
544  } else if (offset_.find(pid) == offset_.end()) {
545  const string& label(iEvent.getProvenance(pid).moduleLabel());
546  const string& instance(iEvent.getProvenance(pid).productInstanceName());
547  const string& process(iEvent.getProvenance(pid).processName());
548  std::ostringstream ost;
549  ost << "Uunknown pid: " << pid << " FilterTag / Key: " << tag.encode() << " / " << i << "of" << n
550  << " CollectionTag / Key: " << InputTag(label, instance, process).encode() << " / " << refs[i].key()
551  << " CollectionType: " << typeid(C).name();
552  if (throw_) {
553  throw cms::Exception("TriggerSummaryProducerAOD") << ost.str();
554  } else {
555  LogError("TriggerSummaryProducerAOD") << ost.str();
556  }
557  } else {
558  fillFilterObjectMember(offset_[pid], ids[i], refs[i]);
559  }
560  }
561  return;
562 }
563 
564 template <typename C>
565 void TriggerSummaryProducerAOD::fillFilterObjectMember(const int& offset, const int& id, const edm::Ref<C>& ref) {
566  keys_.push_back(offset + ref.key());
567  ids_.push_back(id);
568 
569  return;
570 }
571 
573  const int& id,
575  using namespace trigger;
576 
577  if (id == TriggerL1HfBitCounts) {
578  keys_.push_back(offset + 2 * ref.key() + 1);
579  } else { // if (ids[i]==TriggerL1HfRingEtSums) {
580  keys_.push_back(offset + 2 * ref.key() + 0);
581  }
582  ids_.push_back(id);
583 
584  return;
585 }
586 
588  const int& id,
590  using namespace trigger;
591 
592  if ((id == TriggerL1ETT) || (id == TriggerL1HTT)) {
593  keys_.push_back(offset + 2 * ref.key() + 1);
594  } else {
595  keys_.push_back(offset + 2 * ref.key() + 0);
596  }
597  ids_.push_back(id);
598 
599  return;
600 }
601 
603  const int& id,
604  const edm::Ref<reco::PFMETCollection>& ref) {
605  using namespace trigger;
606 
607  if ((id == TriggerTHT) || (id == TriggerTET)) {
608  keys_.push_back(offset + 4 * ref.key() + 1);
609  } else if ((id == TriggerMETSig) || (id == TriggerMHTSig)) {
610  keys_.push_back(offset + 4 * ref.key() + 2);
611  } else if ((id == TriggerELongit) || (id == TriggerHLongit)) {
612  keys_.push_back(offset + 4 * ref.key() + 3);
613  } else {
614  keys_.push_back(offset + 4 * ref.key() + 0);
615  }
616  ids_.push_back(id);
617 
618  return;
619 }
620 
622  const int& id,
624  using namespace trigger;
625 
626  if ((id == TriggerTHT) || (id == TriggerTET)) {
627  keys_.push_back(offset + 4 * ref.key() + 1);
628  } else if ((id == TriggerMETSig) || (id == TriggerMHTSig)) {
629  keys_.push_back(offset + 4 * ref.key() + 2);
630  } else if ((id == TriggerELongit) || (id == TriggerHLongit)) {
631  keys_.push_back(offset + 4 * ref.key() + 3);
632  } else {
633  keys_.push_back(offset + 4 * ref.key() + 0);
634  }
635  ids_.push_back(id);
636 
637  return;
638 }
639 
641  const int& id,
642  const edm::Ref<reco::METCollection>& ref) {
643  using namespace trigger;
644 
645  if ((id == TriggerTHT) || (id == TriggerTET)) {
646  keys_.push_back(offset + 4 * ref.key() + 1);
647  } else if ((id == TriggerMETSig) || (id == TriggerMHTSig)) {
648  keys_.push_back(offset + 4 * ref.key() + 2);
649  } else if ((id == TriggerELongit) || (id == TriggerHLongit)) {
650  keys_.push_back(offset + 4 * ref.key() + 3);
651  } else {
652  keys_.push_back(offset + 4 * ref.key() + 0);
653  }
654  ids_.push_back(id);
655 
656  return;
657 }
658 
660  globalCache()->collectionTagsGlobal_.insert(collectionTagsStream_.begin(), collectionTagsStream_.end());
661  globalCache()->filterTagsGlobal_.insert(filterTagsStream_.begin(), filterTagsStream_.end());
662  return;
663 }
664 
666  using namespace std;
667  using namespace edm;
668  using namespace trigger;
669 
670  LogVerbatim("TriggerSummaryProducerAOD") << endl;
671  LogVerbatim("TriggerSummaryProducerAOD") << "TriggerSummaryProducerAOD::globalEndJob - accumulated tags:" << endl;
672 
673  InputTagSet filterTags(false);
675 
676  filterTags.insert(globalInputTags->filterTagsGlobal_.begin(), globalInputTags->filterTagsGlobal_.end());
677  collectionTags.insert(globalInputTags->collectionTagsGlobal_.begin(), globalInputTags->collectionTagsGlobal_.end());
678 
679  const unsigned int nc(collectionTags.size());
680  const unsigned int nf(filterTags.size());
681  LogVerbatim("TriggerSummaryProducerAOD") << " Overall number of Collections/Filters: " << nc << "/" << nf << endl;
682 
683  LogVerbatim("TriggerSummaryProducerAOD") << " The collections: " << nc << endl;
684  const InputTagSet::const_iterator cb(collectionTags.begin());
685  const InputTagSet::const_iterator ce(collectionTags.end());
686  for (InputTagSet::const_iterator ci = cb; ci != ce; ++ci) {
687  LogVerbatim("TriggerSummaryProducerAOD") << " " << distance(cb, ci) << " " << ci->encode() << endl;
688  }
689 
690  LogVerbatim("TriggerSummaryProducerAOD") << " The filters:" << nf << endl;
691  const InputTagSet::const_iterator fb(filterTags.begin());
692  const InputTagSet::const_iterator fe(filterTags.end());
693  for (InputTagSet::const_iterator fi = fb; fi != fe; ++fi) {
694  LogVerbatim("TriggerSummaryProducerAOD") << " " << distance(fb, fi) << " " << fi->encode() << endl;
695  }
696 
697  LogVerbatim("TriggerSummaryProducerAOD") << "TriggerSummaryProducerAOD::endJob." << endl;
698  LogVerbatim("TriggerSummaryProducerAOD") << endl;
699 
700  return;
701 }
#define LogDebug(id)
size
Write out results.
~TriggerSummaryProducerAOD() override
void produce(edm::Event &, const edm::EventSetup &) override
type
Definition: HCALResponse.h:21
bool isDebugEnabled()
void setComment(std::string const &value)
edm::GetterOfProducts< l1t::TauBxCollection > getL1TTauParticleCollection_
std::vector< std::regex > moduleLabelPatternsToSkip_
edm::GetterOfProducts< l1extra::L1JetParticleCollection > getL1JetParticleCollection_
edm::GetterOfProducts< reco::IsolatedPixelTrackCandidateCollection > getIsolatedPixelTrackCandidateCollection_
edm::GetterOfProducts< reco::RecoEcalCandidateCollection > getRecoEcalCandidateCollection_
std::string const & getProcessName() const
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
edm::GetterOfProducts< l1extra::L1MuonParticleCollection > getL1MuonParticleCollection_
trigger::size_type sizeFilters() const
Definition: TriggerEvent.h:146
trigger::TriggerObjectCollection toc_
trigger object collection
edm::GetterOfProducts< reco::PFTauCollection > getPFTauCollection_
static PFTauRenderPlugin instance
std::vector< bool > maskFilters_
packing decision
edm::GetterOfProducts< reco::METCollection > getMETCollection_
tbb::concurrent_unordered_set< edm::InputTag, InputTagHash > filterTagsGlobal_
edm::GetterOfProducts< l1t::JetBxCollection > getL1TJetParticleCollection_
void fillHandles(edm::Event const &event, std::vector< edm::Handle< T >> &handles) const
void fillFilterObjectMembers(const edm::Event &, const edm::InputTag &tag, const trigger::Vids &, const std::vector< edm::Ref< C >> &)
std::map< edm::ProductID, unsigned int > offset_
global map for indices into toc_: offset per input L3 collection
edm::GetterOfProducts< reco::CaloJetCollection > getCaloJetCollection_
delete x;
Definition: CaloConfig.h:22
void fillFilterObjectMember(const int &, const int &, const edm::Ref< C > &)
edm::GetterOfProducts< l1extra::L1EtMissParticleCollection > getL1EtMissParticleCollection_
key_type key() const
Accessor for product key.
Definition: Ref.h:250
std::vector< std::string > tags_
std::string const & processName() const
Definition: Provenance.h:57
uint16_t size_type
std::string encode() const
Definition: InputTag.cc:159
edm::GetterOfProducts< reco::PFJetCollection > getPFJetCollection_
char const * label
int iEvent
Definition: GenABIO.cc:224
edm::GetterOfProducts< reco::RecoChargedCandidateCollection > getRecoChargedCandidateCollection_
Definition: MET.h:41
edm::GetterOfProducts< l1extra::L1HFRingsCollection > getL1HFRingsCollection_
std::vector< std::regex > moduleLabelPatternsToMatch_
module labels which should be avoided
bool isAvailable() const
Definition: Service.h:40
T min(T a, T b)
Definition: MathUtil.h:58
ParameterDescriptionBase * add(U const &iLabel, T const &value)
std::set< edm::InputTag, OrderInputTag > InputTagSet
edm::GetterOfProducts< l1t::MuonBxCollection > getL1TMuonParticleCollection_
#define LogTrace(id)
trigger::size_type sizeObjects() const
Definition: TriggerEvent.h:145
void add(std::string const &label, ParameterSetDescription const &psetDescription)
std::string const & moduleLabel() const
Definition: Provenance.h:55
edm::GetterOfProducts< reco::CaloMETCollection > getCaloMETCollection_
edm::GetterOfProducts< reco::ElectronCollection > getElectronCollection_
fixed size matrix
HLT enums.
tbb::concurrent_unordered_set< edm::InputTag, InputTagHash > collectionTagsGlobal_
InputTagSet collectionTagsEvent_
list of L3 collection tags
edm::GetterOfProducts< reco::CompositeCandidateCollection > getCompositeCandidateCollection_
edm::GetterOfProducts< trigger::TriggerFilterObjectWithRefs > getTriggerFilterObjectWithRefs_
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
Definition: Utils.h:10
edm::GetterOfProducts< reco::PFMETCollection > getPFMETCollection_
void fillTriggerObjectCollections(const edm::Event &, edm::GetterOfProducts< C > &)
InputTagSet filterTagsEvent_
list of L3 filter tags
TriggerSummaryProducerAOD(const edm::ParameterSet &, const GlobalInputTags *)
bool isValid() const
Definition: ProductID.h:32
static void globalEndJob(const GlobalInputTags *)
std::string const & productInstanceName() const
Definition: Provenance.h:58
Provenance getProvenance(BranchID const &theID) const
Definition: Event.cc:114
long double T
edm::GetterOfProducts< l1t::EtSumBxCollection > getL1TEtSumParticleCollection_
std::vector< int > Vids
edm::GetterOfProducts< l1extra::L1EmParticleCollection > getL1EmParticleCollection_
def move(src, dest)
Definition: eostools.py:511
edm::GetterOfProducts< l1t::EGammaBxCollection > getL1TEGammaParticleCollection_