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  if (pn_ == "@") {
85  if (tns.isAvailable()) {
86  pn_ = tns->getProcessName();
87  } else {
88  edm::LogError("TriggerSummaryProducerAOD") << "HLT Error: TriggerNamesService not available!";
89  pn_ = "*";
90  }
91  }
92  LogDebug("TriggerSummaryProducerAOD") << "Using process name: '" << pn_ << "'";
93 
94  produces<trigger::TriggerEvent>();
95 
96  auto const* pProcessName = &pn_;
99  auto productMatch = [pProcessName, &moduleLabelPatternsToSkip, &moduleLabelPatternsToMatch](
100  edm::BranchDescription const& iBranch) -> bool {
101  if (iBranch.processName() == *pProcessName || *pProcessName == "*") {
102  auto const& label = iBranch.moduleLabel();
103  for (auto& match : moduleLabelPatternsToMatch) {
104  if (std::regex_match(label, match)) {
105  //make sure this is not in the reject list
106  for (auto& reject : moduleLabelPatternsToSkip) {
107  if (std::regex_match(label, reject)) {
108  return false;
109  }
110  }
111  return true;
112  }
113  }
114  }
115  return false;
116  };
117 
141 
165  });
166 }
167 
169 
170 //
171 // member functions
172 //
173 
174 namespace {
175  inline void tokenizeTag(const std::string& tag, std::string& label, std::string& instance, std::string& process) {
176  using std::string;
177 
178  const char token(':');
179  const string empty;
180 
181  label = tag;
182  const string::size_type i1(label.find(token));
183  if (i1 == string::npos) {
184  instance = empty;
185  process = empty;
186  } else {
187  instance = label.substr(i1 + 1);
188  label.resize(i1);
189  const string::size_type i2(instance.find(token));
190  if (i2 == string::npos) {
191  process = empty;
192  } else {
193  process = instance.substr(i2 + 1);
194  instance.resize(i2);
195  }
196  }
197  }
198 } // namespace
199 
202  desc.add<bool>("throw", false)->setComment("Throw exception or LogError");
203  desc.add<std::string>("processName", "@")
204  ->setComment(
205  "Process name to use when getting data. The value of '@' is used to denote the current process name.");
206  desc.add<std::vector<std::string>>("moduleLabelPatternsToMatch", std::vector<std::string>(1, "hlt*"))
207  ->setComment("glob patterns for module labels to get data.");
208  desc.add<std::vector<std::string>>("moduleLabelPatternsToSkip", std::vector<std::string>())
209  ->setComment("module labels for data products which should not be gotten.");
210  descriptions.add("triggerSummaryProducerAOD", desc);
211 }
212 
213 // ------------ method called to produce the data ------------
215  using namespace std;
216  using namespace edm;
217  using namespace reco;
218  using namespace l1extra;
219  using namespace trigger;
220  using namespace l1t;
221 
222  std::vector<edm::Handle<trigger::TriggerFilterObjectWithRefs>> fobs;
224 
225  const unsigned int nfob(fobs.size());
226  LogTrace("TriggerSummaryProducerAOD") << "Number of filter objects found: " << nfob;
227 
228  string tagLabel, tagInstance, tagProcess;
229 
235  std::vector<bool> maskFilters;
236  maskFilters.resize(nfob);
237  InputTagSet filterTagsEvent(pn_ != "*");
238  InputTagSet collectionTagsEvent(pn_ != "*");
239 
240  unsigned int nf(0);
241  for (unsigned int ifob = 0; ifob != nfob; ++ifob) {
242  maskFilters[ifob] = false;
243  const vector<string>& collectionTags_(fobs[ifob]->getCollectionTagsAsStrings());
244  const unsigned int ncol(collectionTags_.size());
245  if (ncol > 0) {
246  nf++;
247  maskFilters[ifob] = true;
248  const string& label(fobs[ifob].provenance()->moduleLabel());
249  const string& instance(fobs[ifob].provenance()->productInstanceName());
250  const string& process(fobs[ifob].provenance()->processName());
251  filterTagsEvent.insert(InputTag(label, instance, process));
252  for (unsigned int icol = 0; icol != ncol; ++icol) {
253  // overwrite process name (usually not set)
254  tokenizeTag(collectionTags_[icol], tagLabel, tagInstance, tagProcess);
255  collectionTagsEvent.insert(InputTag(tagLabel, tagInstance, pn_));
256  }
257  }
258  }
260  if (filterTagsEvent.size() != nf) {
261  LogError("TriggerSummaryProducerAOD")
262  << "Mismatch in number of filter tags: " << filterTagsEvent.size() << "!=" << nf;
263  }
264 
266  collectionTagsGlobal_.insert(collectionTagsEvent.begin(), collectionTagsEvent.end());
267  filterTagsGlobal_.insert(filterTagsEvent.begin(), filterTagsEvent.end());
268 
270  if (isDebugEnabled()) {
272  const unsigned int nc(collectionTagsEvent.size());
273  LogTrace("TriggerSummaryProducerAOD") << "Number of unique collections requested " << nc;
274  const InputTagSet::const_iterator cb(collectionTagsEvent.begin());
275  const InputTagSet::const_iterator ce(collectionTagsEvent.end());
276  for (InputTagSet::const_iterator ci = cb; ci != ce; ++ci) {
277  LogTrace("TriggerSummaryProducerAOD") << distance(cb, ci) << " " << ci->encode();
278  }
279  const unsigned int nf(filterTagsEvent.size());
280  LogTrace("TriggerSummaryProducerAOD") << "Number of unique filters requested " << nf;
281  const InputTagSet::const_iterator fb(filterTagsEvent.begin());
282  const InputTagSet::const_iterator fe(filterTagsEvent.end());
283  for (InputTagSet::const_iterator fi = fb; fi != fe; ++fi) {
284  LogTrace("TriggerSummaryProducerAOD") << distance(fb, fi) << " " << fi->encode();
285  }
286  }
287 
294  //toc_.clear();
295  std::vector<std::string> tags;
297  std::map<edm::ProductID, unsigned int> offset;
298 
299  fillTriggerObjectCollections<RecoEcalCandidateCollection>(
300  toc, offset, tags, keys, iEvent, getRecoEcalCandidateCollection_, collectionTagsEvent);
301  fillTriggerObjectCollections<ElectronCollection>(
302  toc, offset, tags, keys, iEvent, getElectronCollection_, collectionTagsEvent);
303  fillTriggerObjectCollections<RecoChargedCandidateCollection>(
304  toc, offset, tags, keys, iEvent, getRecoChargedCandidateCollection_, collectionTagsEvent);
305  fillTriggerObjectCollections<CaloJetCollection>(
306  toc, offset, tags, keys, iEvent, getCaloJetCollection_, collectionTagsEvent);
307  fillTriggerObjectCollections<CompositeCandidateCollection>(
308  toc, offset, tags, keys, iEvent, getCompositeCandidateCollection_, collectionTagsEvent);
309  fillTriggerObjectCollections<METCollection>(toc, offset, tags, keys, iEvent, getMETCollection_, collectionTagsEvent);
310  fillTriggerObjectCollections<CaloMETCollection>(
311  toc, offset, tags, keys, iEvent, getCaloMETCollection_, collectionTagsEvent);
312  fillTriggerObjectCollections<IsolatedPixelTrackCandidateCollection>(
313  toc, offset, tags, keys, iEvent, getIsolatedPixelTrackCandidateCollection_, collectionTagsEvent);
315  fillTriggerObjectCollections<L1EmParticleCollection>(
316  toc, offset, tags, keys, iEvent, getL1EmParticleCollection_, collectionTagsEvent);
317  fillTriggerObjectCollections<L1MuonParticleCollection>(
318  toc, offset, tags, keys, iEvent, getL1MuonParticleCollection_, collectionTagsEvent);
319  fillTriggerObjectCollections<L1JetParticleCollection>(
320  toc, offset, tags, keys, iEvent, getL1JetParticleCollection_, collectionTagsEvent);
321  fillTriggerObjectCollections<L1EtMissParticleCollection>(
322  toc, offset, tags, keys, iEvent, getL1EtMissParticleCollection_, collectionTagsEvent);
323  fillTriggerObjectCollections<L1HFRingsCollection>(
324  toc, offset, tags, keys, iEvent, getL1HFRingsCollection_, collectionTagsEvent);
325  fillTriggerObjectCollections<MuonBxCollection>(
326  toc, offset, tags, keys, iEvent, getL1TMuonParticleCollection_, collectionTagsEvent);
327  fillTriggerObjectCollections<EGammaBxCollection>(
328  toc, offset, tags, keys, iEvent, getL1TEGammaParticleCollection_, collectionTagsEvent);
329  fillTriggerObjectCollections<JetBxCollection>(
330  toc, offset, tags, keys, iEvent, getL1TJetParticleCollection_, collectionTagsEvent);
331  fillTriggerObjectCollections<TauBxCollection>(
332  toc, offset, tags, keys, iEvent, getL1TTauParticleCollection_, collectionTagsEvent);
333  fillTriggerObjectCollections<EtSumBxCollection>(
334  toc, offset, tags, keys, iEvent, getL1TEtSumParticleCollection_, collectionTagsEvent);
336  fillTriggerObjectCollections<PFJetCollection>(
337  toc, offset, tags, keys, iEvent, getPFJetCollection_, collectionTagsEvent);
338  fillTriggerObjectCollections<PFTauCollection>(
339  toc, offset, tags, keys, iEvent, getPFTauCollection_, collectionTagsEvent);
340  fillTriggerObjectCollections<PFMETCollection>(
341  toc, offset, tags, keys, iEvent, getPFMETCollection_, collectionTagsEvent);
343  const unsigned int nk(tags.size());
344  LogDebug("TriggerSummaryProducerAOD") << "Number of collections found: " << nk;
345  const unsigned int no(toc.size());
346  LogDebug("TriggerSummaryProducerAOD") << "Number of physics objects found: " << no;
347 
350  unique_ptr<TriggerEvent> product(new TriggerEvent(pn_, nk, no, nf));
351 
353  product->addCollections(tags, keys);
354  product->addObjects(toc);
355 
357  trigger::Vids ids;
358  for (unsigned int ifob = 0; ifob != nfob; ++ifob) {
359  if (maskFilters[ifob]) {
360  const string& label(fobs[ifob].provenance()->moduleLabel());
361  const string& instance(fobs[ifob].provenance()->productInstanceName());
362  const string& process(fobs[ifob].provenance()->processName());
363  const edm::InputTag filterTag(label, instance, process);
364  ids.clear();
365  keys.clear();
366  fillFilterObjectMembers(iEvent, filterTag, fobs[ifob]->photonIds(), fobs[ifob]->photonRefs(), offset, keys, ids);
368  iEvent, filterTag, fobs[ifob]->electronIds(), fobs[ifob]->electronRefs(), offset, keys, ids);
369  fillFilterObjectMembers(iEvent, filterTag, fobs[ifob]->muonIds(), fobs[ifob]->muonRefs(), offset, keys, ids);
370  fillFilterObjectMembers(iEvent, filterTag, fobs[ifob]->jetIds(), fobs[ifob]->jetRefs(), offset, keys, ids);
372  iEvent, filterTag, fobs[ifob]->compositeIds(), fobs[ifob]->compositeRefs(), offset, keys, ids);
374  iEvent, filterTag, fobs[ifob]->basemetIds(), fobs[ifob]->basemetRefs(), offset, keys, ids);
376  iEvent, filterTag, fobs[ifob]->calometIds(), fobs[ifob]->calometRefs(), offset, keys, ids);
378  iEvent, filterTag, fobs[ifob]->pixtrackIds(), fobs[ifob]->pixtrackRefs(), offset, keys, ids);
379  fillFilterObjectMembers(iEvent, filterTag, fobs[ifob]->l1emIds(), fobs[ifob]->l1emRefs(), offset, keys, ids);
380  fillFilterObjectMembers(iEvent, filterTag, fobs[ifob]->l1muonIds(), fobs[ifob]->l1muonRefs(), offset, keys, ids);
381  fillFilterObjectMembers(iEvent, filterTag, fobs[ifob]->l1jetIds(), fobs[ifob]->l1jetRefs(), offset, keys, ids);
383  iEvent, filterTag, fobs[ifob]->l1etmissIds(), fobs[ifob]->l1etmissRefs(), offset, keys, ids);
385  iEvent, filterTag, fobs[ifob]->l1hfringsIds(), fobs[ifob]->l1hfringsRefs(), offset, keys, ids);
387  iEvent, filterTag, fobs[ifob]->l1tmuonIds(), fobs[ifob]->l1tmuonRefs(), offset, keys, ids);
389  iEvent, filterTag, fobs[ifob]->l1tegammaIds(), fobs[ifob]->l1tegammaRefs(), offset, keys, ids);
390  fillFilterObjectMembers(iEvent, filterTag, fobs[ifob]->l1tjetIds(), fobs[ifob]->l1tjetRefs(), offset, keys, ids);
391  fillFilterObjectMembers(iEvent, filterTag, fobs[ifob]->l1ttauIds(), fobs[ifob]->l1ttauRefs(), offset, keys, ids);
393  iEvent, filterTag, fobs[ifob]->l1tetsumIds(), fobs[ifob]->l1tetsumRefs(), offset, keys, ids);
394  fillFilterObjectMembers(iEvent, filterTag, fobs[ifob]->pfjetIds(), fobs[ifob]->pfjetRefs(), offset, keys, ids);
395  fillFilterObjectMembers(iEvent, filterTag, fobs[ifob]->pftauIds(), fobs[ifob]->pftauRefs(), offset, keys, ids);
396  fillFilterObjectMembers(iEvent, filterTag, fobs[ifob]->pfmetIds(), fobs[ifob]->pfmetRefs(), offset, keys, ids);
397  product->addFilter(filterTag, ids, keys);
398  }
399  }
400 
401  OrphanHandle<TriggerEvent> ref = iEvent.put(std::move(product));
402  LogTrace("TriggerSummaryProducerAOD") << "Number of physics objects packed: " << ref->sizeObjects();
403  LogTrace("TriggerSummaryProducerAOD") << "Number of filter objects packed: " << ref->sizeFilters();
404 }
405 
406 template <typename C>
409  std::vector<std::string>& tags,
411  const edm::Event& iEvent,
412  const edm::GetterOfProducts<C>& getter,
413  const InputTagSet& collectionTagsEvent) const {
417 
418  using namespace std;
419  using namespace edm;
420  using namespace reco;
421  using namespace l1extra;
422  using namespace trigger;
423  using namespace l1t;
424 
425  vector<Handle<C>> collections;
426  getter.fillHandles(iEvent, collections);
427  const unsigned int nc(collections.size());
428 
429  for (unsigned int ic = 0; ic != nc; ++ic) {
430  const Provenance& provenance(*(collections[ic].provenance()));
431  const string& label(provenance.moduleLabel());
432  const string& instance(provenance.productInstanceName());
433  const string& process(provenance.processName());
434  const InputTag collectionTag(label, instance, process);
435 
436  if (collectionTagsEvent.find(collectionTag) != collectionTagsEvent.end()) {
437  const ProductID pid(collections[ic].provenance()->productID());
438  if (offset.find(pid) != offset.end()) {
439  LogError("TriggerSummaryProducerAOD") << "Duplicate pid: " << pid;
440  }
441  offset[pid] = toc.size();
442  const unsigned int n(collections[ic]->size());
443  for (unsigned int i = 0; i != n; ++i) {
444  fillTriggerObject(toc, (*collections[ic])[i]);
445  }
446  tags.push_back(collectionTag.encode());
447  keys.push_back(toc.size());
448  }
449 
450  }
451 }
452 
453 template <typename T>
455  using namespace trigger;
456  toc.emplace_back(object);
457 
458  return;
459 }
460 
462  const l1extra::L1HFRings& object) const {
463  using namespace l1extra;
464  using namespace trigger;
465 
466  toc.emplace_back(TriggerL1HfRingEtSums,
467  object.hfEtSum(L1HFRings::kRing1PosEta),
468  object.hfEtSum(L1HFRings::kRing1NegEta),
469  object.hfEtSum(L1HFRings::kRing2PosEta),
470  object.hfEtSum(L1HFRings::kRing2NegEta));
471  toc.emplace_back(TriggerL1HfBitCounts,
472  object.hfBitCount(L1HFRings::kRing1PosEta),
473  object.hfBitCount(L1HFRings::kRing1NegEta),
474  object.hfBitCount(L1HFRings::kRing2PosEta),
475  object.hfBitCount(L1HFRings::kRing2NegEta));
476 
477  return;
478 }
479 
481  const l1extra::L1EtMissParticle& object) const {
482  using namespace l1extra;
483  using namespace trigger;
484 
485  toc.emplace_back(object);
486  if (object.type() == L1EtMissParticle::kMET) {
487  toc.emplace_back(TriggerL1ETT, object.etTotal(), 0.0, 0.0, 0.0);
488  } else if (object.type() == L1EtMissParticle::kMHT) {
489  toc.emplace_back(TriggerL1HTT, object.etTotal(), 0.0, 0.0, 0.0);
490  } else {
491  toc.emplace_back(0, object.etTotal(), 0.0, 0.0, 0.0);
492  }
493 
494  return;
495 }
496 
498  const reco::PFMET& object) const {
499  using namespace reco;
500  using namespace trigger;
501 
502  toc.emplace_back(object);
503  toc.emplace_back(TriggerTET, object.sumEt(), 0.0, 0.0, 0.0);
504  toc.emplace_back(TriggerMETSig, object.mEtSig(), 0.0, 0.0, 0.0);
505  toc.emplace_back(TriggerELongit, object.e_longitudinal(), 0.0, 0.0, 0.0);
506 
507  return;
508 }
509 
511  const reco::CaloMET& object) const {
512  using namespace reco;
513  using namespace trigger;
514 
515  toc.emplace_back(object);
516  toc.emplace_back(TriggerTET, object.sumEt(), 0.0, 0.0, 0.0);
517  toc.emplace_back(TriggerMETSig, object.mEtSig(), 0.0, 0.0, 0.0);
518  toc.emplace_back(TriggerELongit, object.e_longitudinal(), 0.0, 0.0, 0.0);
519 
520  return;
521 }
522 
524  const reco::MET& object) const {
525  using namespace reco;
526  using namespace trigger;
527 
528  toc.emplace_back(object);
529  toc.emplace_back(TriggerTHT, object.sumEt(), 0.0, 0.0, 0.0);
530  toc.emplace_back(TriggerMHTSig, object.mEtSig(), 0.0, 0.0, 0.0);
531  toc.emplace_back(TriggerHLongit, object.e_longitudinal(), 0.0, 0.0, 0.0);
532 
533  return;
534 }
535 
536 template <typename C>
538  const edm::InputTag& tag,
539  const trigger::Vids& ids,
540  const std::vector<edm::Ref<C>>& refs,
541  const ProductIDtoIndex& offset,
543  trigger::Vids& oIDs) const {
547 
548  using namespace std;
549  using namespace edm;
550  using namespace reco;
551  using namespace l1extra;
552  using namespace trigger;
553 
554  if (ids.size() != refs.size()) {
555  LogError("TriggerSummaryProducerAOD") << "Vector length is different: " << ids.size() << " " << refs.size();
556  }
557 
558  const unsigned int n(min(ids.size(), refs.size()));
559  for (unsigned int i = 0; i != n; ++i) {
560  const ProductID pid(refs[i].id());
561  if (!(pid.isValid())) {
562  std::ostringstream ost;
563  ost << "Iinvalid pid: " << pid << " FilterTag / Key: " << tag.encode() << " / " << i << "of" << n
564  << " CollectionTag / Key: "
565  << " <Unrecoverable>"
566  << " / " << refs[i].key() << " CollectionType: " << typeid(C).name();
567  if (throw_) {
568  throw cms::Exception("TriggerSummaryProducerAOD") << ost.str();
569  } else {
570  LogError("TriggerSummaryProducerAOD") << ost.str();
571  }
572  } else {
573  auto itOffset = offset.find(pid);
574  if (itOffset == offset.end()) {
575  const string& label(iEvent.getProvenance(pid).moduleLabel());
576  const string& instance(iEvent.getProvenance(pid).productInstanceName());
577  const string& process(iEvent.getProvenance(pid).processName());
578  std::ostringstream ost;
579  ost << "Uunknown pid: " << pid << " FilterTag / Key: " << tag.encode() << " / " << i << "of" << n
580  << " CollectionTag / Key: " << InputTag(label, instance, process).encode() << " / " << refs[i].key()
581  << " CollectionType: " << typeid(C).name();
582  if (throw_) {
583  throw cms::Exception("TriggerSummaryProducerAOD") << ost.str();
584  } else {
585  LogError("TriggerSummaryProducerAOD") << ost.str();
586  }
587  } else {
588  fillFilterObjectMember(keys, oIDs, itOffset->second, ids[i], refs[i]);
589  }
590  }
591  }
592  return;
593 }
594 
595 template <typename C>
597  trigger::Keys& keys, trigger::Vids& ids, const int& offset, const int& id, const edm::Ref<C>& ref) const {
598  keys.push_back(offset + ref.key());
599  ids.push_back(id);
600 
601  return;
602 }
603 
605  trigger::Vids& ids,
606  const int& offset,
607  const int& id,
608  const edm::Ref<l1extra::L1HFRingsCollection>& ref) const {
609  using namespace trigger;
610 
611  if (id == TriggerL1HfBitCounts) {
612  keys.push_back(offset + 2 * ref.key() + 1);
613  } else { // if (ids[i]==TriggerL1HfRingEtSums) {
614  keys.push_back(offset + 2 * ref.key() + 0);
615  }
616  ids.push_back(id);
617 
618  return;
619 }
620 
622  trigger::Vids& ids,
623  const int& offset,
624  const int& id,
626  using namespace trigger;
627 
628  if ((id == TriggerL1ETT) || (id == TriggerL1HTT)) {
629  keys.push_back(offset + 2 * ref.key() + 1);
630  } else {
631  keys.push_back(offset + 2 * ref.key() + 0);
632  }
633  ids.push_back(id);
634 
635  return;
636 }
637 
639  trigger::Vids& ids,
640  const int& offset,
641  const int& id,
642  const edm::Ref<reco::PFMETCollection>& ref) const {
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  trigger::Vids& ids,
661  const int& offset,
662  const int& id,
663  const edm::Ref<reco::CaloMETCollection>& ref) const {
664  using namespace trigger;
665 
666  if ((id == TriggerTHT) || (id == TriggerTET)) {
667  keys.push_back(offset + 4 * ref.key() + 1);
668  } else if ((id == TriggerMETSig) || (id == TriggerMHTSig)) {
669  keys.push_back(offset + 4 * ref.key() + 2);
670  } else if ((id == TriggerELongit) || (id == TriggerHLongit)) {
671  keys.push_back(offset + 4 * ref.key() + 3);
672  } else {
673  keys.push_back(offset + 4 * ref.key() + 0);
674  }
675  ids.push_back(id);
676 
677  return;
678 }
679 
681  trigger::Vids& ids,
682  const int& offset,
683  const int& id,
684  const edm::Ref<reco::METCollection>& ref) const {
685  using namespace trigger;
686 
687  if ((id == TriggerTHT) || (id == TriggerTET)) {
688  keys.push_back(offset + 4 * ref.key() + 1);
689  } else if ((id == TriggerMETSig) || (id == TriggerMHTSig)) {
690  keys.push_back(offset + 4 * ref.key() + 2);
691  } else if ((id == TriggerELongit) || (id == TriggerHLongit)) {
692  keys.push_back(offset + 4 * ref.key() + 3);
693  } else {
694  keys.push_back(offset + 4 * ref.key() + 0);
695  }
696  ids.push_back(id);
697 
698  return;
699 }
700 
702  using namespace std;
703  using namespace edm;
704  using namespace trigger;
705 
706  LogVerbatim("TriggerSummaryProducerAOD") << endl;
707  LogVerbatim("TriggerSummaryProducerAOD") << "TriggerSummaryProducerAOD::globalEndJob - accumulated tags:" << endl;
708 
709  InputTagSet filterTags(false);
711 
712  filterTags.insert(filterTagsGlobal_.begin(), filterTagsGlobal_.end());
714 
715  const unsigned int nc(collectionTags.size());
716  const unsigned int nf(filterTags.size());
717  LogVerbatim("TriggerSummaryProducerAOD") << " Overall number of Collections/Filters: " << nc << "/" << nf << endl;
718 
719  LogVerbatim("TriggerSummaryProducerAOD") << " The collections: " << nc << endl;
720  const InputTagSet::const_iterator cb(collectionTags.begin());
721  const InputTagSet::const_iterator ce(collectionTags.end());
722  for (InputTagSet::const_iterator ci = cb; ci != ce; ++ci) {
723  LogVerbatim("TriggerSummaryProducerAOD") << " " << distance(cb, ci) << " " << ci->encode() << endl;
724  }
725 
726  LogVerbatim("TriggerSummaryProducerAOD") << " The filters:" << nf << endl;
727  const InputTagSet::const_iterator fb(filterTags.begin());
728  const InputTagSet::const_iterator fe(filterTags.end());
729  for (InputTagSet::const_iterator fi = fb; fi != fe; ++fi) {
730  LogVerbatim("TriggerSummaryProducerAOD") << " " << distance(fb, fi) << " " << fi->encode() << endl;
731  }
732 
733  LogVerbatim("TriggerSummaryProducerAOD") << "TriggerSummaryProducerAOD::endJob." << endl;
734  LogVerbatim("TriggerSummaryProducerAOD") << endl;
735 
736  return;
737 }
ConfigurationDescriptions.h
edm::Provenance::moduleLabel
std::string const & moduleLabel() const
Definition: Provenance.h:55
edm::StreamID
Definition: StreamID.h:30
testProducerWithPsetDescEmpty_cfi.i2
i2
Definition: testProducerWithPsetDescEmpty_cfi.py:46
Handle.h
trigger::TriggerEvent::sizeFilters
trigger::size_type sizeFilters() const
Definition: TriggerEvent.h:146
CaloJet.h
electrons_cff.bool
bool
Definition: electrons_cff.py:393
mps_fire.i
i
Definition: mps_fire.py:428
MessageLogger.h
CompositeCandidate.h
dqmiodumpmetadata.n
n
Definition: dqmiodumpmetadata.py:28
TriggerSummaryProducerAOD::InputTagSet
std::set< edm::InputTag, OrderInputTag > InputTagSet
Definition: TriggerSummaryProducerAOD.h:107
trigger::Vids
std::vector< int > Vids
Definition: TriggerTypeDefs.h:21
TriggerSummaryProducerAOD::getElectronCollection_
edm::GetterOfProducts< reco::ElectronCollection > getElectronCollection_
Definition: TriggerSummaryProducerAOD.h:183
TriggerSummaryProducerAOD::getRecoChargedCandidateCollection_
edm::GetterOfProducts< reco::RecoChargedCandidateCollection > getRecoChargedCandidateCollection_
Definition: TriggerSummaryProducerAOD.h:184
trigger::TriggerMHTSig
Definition: TriggerTypeDefs.h:80
TriggerSummaryProducerAOD::collectionTagsGlobal_
tbb::concurrent_unordered_set< edm::InputTag, InputTagHash > collectionTagsGlobal_
list of L3 collection tags
Definition: TriggerSummaryProducerAOD.h:165
TriggerNamesService.h
min
T min(T a, T b)
Definition: MathUtil.h:58
TriggerEvent.h
TriggerSummaryProducerAOD::getCompositeCandidateCollection_
edm::GetterOfProducts< reco::CompositeCandidateCollection > getCompositeCandidateCollection_
Definition: TriggerSummaryProducerAOD.h:186
edm
HLT enums.
Definition: AlignableModifier.h:19
deep_tau::DeepTauBase::BasicDiscriminator
BasicDiscriminator
Definition: DeepTauBase.h:115
Muon.h
TriggerSummaryProducerAOD::fillFilterObjectMembers
void fillFilterObjectMembers(const edm::Event &, const edm::InputTag &tag, const trigger::Vids &, const std::vector< edm::Ref< C >> &, const ProductIDtoIndex &, trigger::Keys &keys, trigger::Vids &oIds) const
Definition: TriggerSummaryProducerAOD.cc:537
TriggerSummaryProducerAOD::pn_
std::string pn_
process name
Definition: TriggerSummaryProducerAOD.h:156
PFJet.h
testProducerWithPsetDescEmpty_cfi.i1
i1
Definition: testProducerWithPsetDescEmpty_cfi.py:45
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:89287
edm::service::TriggerNamesService::getProcessName
std::string const & getProcessName() const
Definition: TriggerNamesService.h:107
edm::ParameterSetDescription
Definition: ParameterSetDescription.h:52
TriggerSummaryProducerAOD::moduleLabelPatternsToMatch_
std::vector< std::regex > moduleLabelPatternsToMatch_
module labels which should be avoided
Definition: TriggerSummaryProducerAOD.h:158
Jet.h
objects.METAnalyzer.sumEt
sumEt
Definition: METAnalyzer.py:97
relativeConstraints.keys
keys
Definition: relativeConstraints.py:89
L1HFRings.h
reco
fixed size matrix
Definition: AlignmentAlgorithmBase.h:45
IsolatedPixelTrackCandidate.h
trigger::TriggerELongit
Definition: TriggerTypeDefs.h:79
trigger::TriggerTET
Definition: TriggerTypeDefs.h:73
edm::Service::isAvailable
bool isAvailable() const
Definition: Service.h:40
CaloMETFwd.h
l1extra::L1EtMissParticle
Definition: L1EtMissParticle.h:27
TriggerSummaryProducerAOD::produce
void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override
Definition: TriggerSummaryProducerAOD.cc:214
edm::Ref
Definition: AssociativeIterator.h:58
reco::CaloMET
Definition: CaloMET.h:21
trigger::TriggerTHT
Definition: TriggerTypeDefs.h:74
edm::ProducerBase::callWhenNewProductsRegistered
void callWhenNewProductsRegistered(std::function< void(BranchDescription const &)> const &func)
Definition: ProducerBase.h:84
TriggerSummaryProducerAOD::getL1TTauParticleCollection_
edm::GetterOfProducts< l1t::TauBxCollection > getL1TTauParticleCollection_
Definition: TriggerSummaryProducerAOD.h:201
reco::MET
Definition: MET.h:41
TriggerSummaryProducerAOD::getIsolatedPixelTrackCandidateCollection_
edm::GetterOfProducts< reco::IsolatedPixelTrackCandidateCollection > getIsolatedPixelTrackCandidateCollection_
Definition: TriggerSummaryProducerAOD.h:190
trigger::size_type
uint16_t size_type
Definition: TriggerTypeDefs.h:18
edm::ConfigurationDescriptions::add
void add(std::string const &label, ParameterSetDescription const &psetDescription)
Definition: ConfigurationDescriptions.cc:57
CaloMET.h
GlobalPosition_Frontier_DevDB_cff.tag
tag
Definition: GlobalPosition_Frontier_DevDB_cff.py:11
EGamma.h
edm::Provenance::processName
std::string const & processName() const
Definition: Provenance.h:57
Service.h
TriggerSummaryProducerAOD::getL1EtMissParticleCollection_
edm::GetterOfProducts< l1extra::L1EtMissParticleCollection > getL1EtMissParticleCollection_
Definition: TriggerSummaryProducerAOD.h:194
OrphanHandle.h
HLT_Fake1_cff.moduleLabelPatternsToMatch
moduleLabelPatternsToMatch
Definition: HLT_Fake1_cff.py:166
ProcessMatch.h
Provenance.h
TriggerSummaryProducerAOD::getCaloMETCollection_
edm::GetterOfProducts< reco::CaloMETCollection > getCaloMETCollection_
Definition: TriggerSummaryProducerAOD.h:188
TriggerSummaryProducerAOD::getL1EmParticleCollection_
edm::GetterOfProducts< l1extra::L1EmParticleCollection > getL1EmParticleCollection_
Definition: TriggerSummaryProducerAOD.h:191
TriggerSummaryProducerAOD::getL1TEtSumParticleCollection_
edm::GetterOfProducts< l1t::EtSumBxCollection > getL1TEtSumParticleCollection_
Definition: TriggerSummaryProducerAOD.h:202
l1extra::L1HFRings
Definition: L1HFRings.h:31
TriggerSummaryProducerAOD::ProductIDtoIndex
std::map< edm::ProductID, unsigned int > ProductIDtoIndex
Definition: TriggerSummaryProducerAOD.h:106
TriggerSummaryProducerAOD::throw_
const bool throw_
throw on error
Definition: TriggerSummaryProducerAOD.h:154
TriggerSummaryProducerAOD::getL1TJetParticleCollection_
edm::GetterOfProducts< l1t::JetBxCollection > getL1TJetParticleCollection_
Definition: TriggerSummaryProducerAOD.h:200
edm::ConfigurationDescriptions
Definition: ConfigurationDescriptions.h:28
edm::Provenance::productInstanceName
std::string const & productInstanceName() const
Definition: Provenance.h:58
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
oniaPATMuonsWithTrigger_cff.collections
collections
Definition: oniaPATMuonsWithTrigger_cff.py:37
TriggerSummaryProducerAOD::fillTriggerObjectCollections
void fillTriggerObjectCollections(trigger::TriggerObjectCollection &, ProductIDtoIndex &, std::vector< std::string > &, trigger::Keys &, const edm::Event &, const edm::GetterOfProducts< C > &, const InputTagSet &) const
Definition: TriggerSummaryProducerAOD.cc:407
TriggerSummaryProducerAOD::getTriggerFilterObjectWithRefs_
edm::GetterOfProducts< trigger::TriggerFilterObjectWithRefs > getTriggerFilterObjectWithRefs_
trigger object collection
Definition: TriggerSummaryProducerAOD.h:181
reco::PFMET
Definition: PFMET.h:18
trigger::TriggerMETSig
Definition: TriggerTypeDefs.h:78
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:223
trigger::TriggerL1HfBitCounts
Definition: TriggerTypeDefs.h:41
edm::ParameterSet
Definition: ParameterSet.h:47
TriggerSummaryProducerAOD::getRecoEcalCandidateCollection_
edm::GetterOfProducts< reco::RecoEcalCandidateCollection > getRecoEcalCandidateCollection_
Definition: TriggerSummaryProducerAOD.h:182
l1t
delete x;
Definition: CaloConfig.h:22
TriggerSummaryProducerAOD::fillDescriptions
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Definition: TriggerSummaryProducerAOD.cc:200
TriggerSummaryProducerAOD::TriggerSummaryProducerAOD
TriggerSummaryProducerAOD(const edm::ParameterSet &)
Definition: TriggerSummaryProducerAOD.cc:76
LaserDQM_cfg.process
process
Definition: LaserDQM_cfg.py:3
TriggerSummaryProducerAOD::getCaloJetCollection_
edm::GetterOfProducts< reco::CaloJetCollection > getCaloJetCollection_
Definition: TriggerSummaryProducerAOD.h:185
trigger::TriggerObjectCollection
std::vector< TriggerObject > TriggerObjectCollection
collection of trigger physics objects (e.g., all isolated muons)
Definition: TriggerObject.h:75
TriggerSummaryProducerAOD::getL1MuonParticleCollection_
edm::GetterOfProducts< l1extra::L1MuonParticleCollection > getL1MuonParticleCollection_
Definition: TriggerSummaryProducerAOD.h:192
gainCalibHelper::gainCalibPI::type
type
Definition: SiPixelGainCalibHelper.h:39
match
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
Definition: Utils.h:10
PFMET.h
edm::Service
Definition: Service.h:30
iEvent
int iEvent
Definition: GenABIO.cc:224
edm::GetterOfProducts< trigger::TriggerFilterObjectWithRefs >
trigger::Keys
std::vector< size_type > Keys
Definition: TriggerTypeDefs.h:19
topSingleLeptonDQM_PU_cfi.pattern
pattern
Definition: topSingleLeptonDQM_PU_cfi.py:39
trackerHitRTTI::vector
Definition: trackerHitRTTI.h:21
EcalCalibMonitorTasks_cfi.collectionTags
collectionTags
Definition: EcalCalibMonitorTasks_cfi.py:21
edm::EventSetup
Definition: EventSetup.h:57
L1EmParticle.h
edm::LogError
Log< level::Error, false > LogError
Definition: MessageLogger.h:123
TriggerSummaryProducerAOD::fillTriggerObject
void fillTriggerObject(trigger::TriggerObjectCollection &, const T &) const
Definition: TriggerSummaryProducerAOD.cc:454
TriggerSummaryProducerAOD::getL1TEGammaParticleCollection_
edm::GetterOfProducts< l1t::EGammaBxCollection > getL1TEGammaParticleCollection_
Definition: TriggerSummaryProducerAOD.h:199
trigger::TriggerEvent::sizeObjects
trigger::size_type sizeObjects() const
Definition: TriggerEvent.h:145
edm::ProductID::isValid
bool isValid() const
Definition: ProductID.h:32
instance
static PFTauRenderPlugin instance
Definition: PFTauRenderPlugin.cc:70
SimL1EmulatorRepack_CalouGT_cff.processName
processName
Definition: SimL1EmulatorRepack_CalouGT_cff.py:17
TriggerSummaryProducerAOD::getL1JetParticleCollection_
edm::GetterOfProducts< l1extra::L1JetParticleCollection > getL1JetParticleCollection_
Definition: TriggerSummaryProducerAOD.h:193
TriggerSummaryProducerAOD::moduleLabelPatternsToSkip_
std::vector< std::regex > moduleLabelPatternsToSkip_
Definition: TriggerSummaryProducerAOD.h:159
PFMETFwd.h
TriggerSummaryProducerAOD::filterTagsGlobal_
tbb::concurrent_unordered_set< edm::InputTag, InputTagHash > filterTagsGlobal_
list of L3 filter tags
Definition: TriggerSummaryProducerAOD.h:162
trigger::TriggerL1HfRingEtSums
Definition: TriggerTypeDefs.h:42
MET.h
TriggerSummaryProducerAOD::getPFMETCollection_
edm::GetterOfProducts< reco::PFMETCollection > getPFMETCollection_
Definition: TriggerSummaryProducerAOD.h:189
edm::GetterOfProducts::fillHandles
void fillHandles(edm::Event const &event, std::vector< edm::Handle< T >> &handles) const
Definition: GetterOfProducts.h:142
submitPVResolutionJobs.desc
string desc
Definition: submitPVResolutionJobs.py:251
Electron.h
eostools.move
def move(src, dest)
Definition: eostools.py:511
std
Definition: JetResolutionObject.h:76
edm::OrphanHandle
Definition: EDProductfwd.h:39
RecoEcalCandidate.h
trigger::TriggerL1HTT
Definition: TriggerTypeDefs.h:38
L1MuonParticle.h
gen::C
C
Definition: PomwigHadronizer.cc:78
RecoChargedCandidate.h
edm::LogVerbatim
Log< level::Info, true > LogVerbatim
Definition: MessageLogger.h:128
T
long double T
Definition: Basic3DVectorLD.h:48
relativeConstraints.empty
bool empty
Definition: relativeConstraints.py:46
TriggerSummaryProducerAOD::getPFTauCollection_
edm::GetterOfProducts< reco::PFTauCollection > getPFTauCollection_
Definition: TriggerSummaryProducerAOD.h:197
Exception
Definition: hltDiff.cc:246
METFwd.h
trigger::TriggerHLongit
Definition: TriggerTypeDefs.h:81
PFTau.h
HLT_Fake1_cff.moduleLabelPatternsToSkip
moduleLabelPatternsToSkip
Definition: HLT_Fake1_cff.py:163
TriggerSummaryProducerAOD::endJob
void endJob() override
Definition: TriggerSummaryProducerAOD.cc:701
Skims_PA_cff.name
name
Definition: Skims_PA_cff.py:17
TriggerSummaryProducerAOD::getMETCollection_
edm::GetterOfProducts< reco::METCollection > getMETCollection_
Definition: TriggerSummaryProducerAOD.h:187
triggerMatcherToHLTDebug_cfi.tags
tags
Definition: triggerMatcherToHLTDebug_cfi.py:9
TriggerSummaryProducerAOD.h
trigger
Definition: HLTPrescaleTableCond.h:8
edm::isDebugEnabled
bool isDebugEnabled()
Definition: MessageLogger.cc:12
edm::BranchDescription
Definition: BranchDescription.h:32
edm::Ref::key
key_type key() const
Accessor for product key.
Definition: Ref.h:250
TriggerSummaryProducerAOD::getPFJetCollection_
edm::GetterOfProducts< reco::PFJetCollection > getPFJetCollection_
Definition: TriggerSummaryProducerAOD.h:196
mps_fire.result
result
Definition: mps_fire.py:311
TriggerSummaryProducerAOD::~TriggerSummaryProducerAOD
~TriggerSummaryProducerAOD() override
LogTrace
#define LogTrace(id)
Definition: MessageLogger.h:224
L1EtMissParticle.h
TriggerSummaryProducerAOD::fillFilterObjectMember
void fillFilterObjectMember(trigger::Keys &keys, trigger::Vids &ids, const int &, const int &, const edm::Ref< C > &) const
Definition: TriggerSummaryProducerAOD.cc:596
HerwigMaxPtPartonFilter_cfi.moduleLabel
moduleLabel
Definition: HerwigMaxPtPartonFilter_cfi.py:4
EtSum.h
TriggerSummaryProducerAOD::getL1TMuonParticleCollection_
edm::GetterOfProducts< l1t::MuonBxCollection > getL1TMuonParticleCollection_
Definition: TriggerSummaryProducerAOD.h:198
l1extra
Definition: L1EmParticle.h:26
edm::Provenance
Definition: Provenance.h:34
hltrates_dqm_sourceclient-live_cfg.offset
offset
Definition: hltrates_dqm_sourceclient-live_cfg.py:82
edm::Event
Definition: Event.h:73
HLT_FULL_cff.distance
distance
Definition: HLT_FULL_cff.py:7733
L1JetParticle.h
trigger::TriggerL1ETT
Definition: TriggerTypeDefs.h:37
edm::InputTag
Definition: InputTag.h:15
TriggerSummaryProducerAOD::getL1HFRingsCollection_
edm::GetterOfProducts< l1extra::L1HFRingsCollection > getL1HFRingsCollection_
Definition: TriggerSummaryProducerAOD.h:195
label
const char * label
Definition: PFTauDecayModeTools.cc:11
benchmark_cfg.fb
fb
Definition: benchmark_cfg.py:14
edm::ProductID
Definition: ProductID.h:27
ZCounting_cff.TriggerEvent
TriggerEvent
Definition: ZCounting_cff.py:5
Tau.h
findQualityFiles.size
size
Write out results.
Definition: findQualityFiles.py:443
unpackBuffers-CaloStage2.token
token
Definition: unpackBuffers-CaloStage2.py:318