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 }
72 
73 //
74 // constructors and destructor
75 //
77  throw_(ps.getParameter<bool>("throw")),
78  pn_(ps.getParameter<std::string>("processName")),
79  moduleLabelPatternsToMatch_(convertToRegex(ps.getParameter<std::vector<std::string>>("moduleLabelPatternsToMatch"))),
80  moduleLabelPatternsToSkip_(convertToRegex(ps.getParameter<std::vector<std::string>>("moduleLabelPatternsToSkip"))),
81  filterTagsEvent_(pn_!="*"),
82  filterTagsStream_(pn_!="*"),
83  collectionTagsEvent_(pn_!="*"),
84  collectionTagsStream_(pn_!="*"),
85  toc_(),
86  tags_(),
87  offset_(),
88  keys_(),
89  ids_(),
90  maskFilters_()
91 {
92  if (pn_=="@") {
94  if (tns.isAvailable()) {
95  pn_ = tns->getProcessName();
96  } else {
97  edm::LogError("TriggerSummaryProducerAOD") << "HLT Error: TriggerNamesService not available!";
98  pn_="*";
99  }
100 
105  }
106  LogDebug("TriggerSummaryProducerAOD") << "Using process name: '" << pn_ <<"'";
107 
108  filterTagsStream_.clear();
109  collectionTagsStream_.clear();
110 
111  produces<trigger::TriggerEvent>();
112 
113  auto const* pProcessName = &pn_;
114  auto const& moduleLabelPatternsToMatch = moduleLabelPatternsToMatch_;
115  auto const& moduleLabelPatternsToSkip = moduleLabelPatternsToSkip_;
116  auto productMatch = [pProcessName,&moduleLabelPatternsToSkip,&moduleLabelPatternsToMatch](edm::BranchDescription const& iBranch) -> bool {
117  if(iBranch.processName() == *pProcessName || *pProcessName == "*") {
118  auto const& label = iBranch.moduleLabel();
119  for(auto& match: moduleLabelPatternsToMatch) {
120  if(std::regex_match(label,match)) {
121  //make sure this is not in the reject list
122  for(auto& reject: moduleLabelPatternsToSkip) {
123  if(std::regex_match(label,reject)) {
124  return false;
125  }
126  }
127  return true;
128  }
129  }
130  }
131  return false;
132  };
133 
156 
164  getMETCollection_(bd);
180  });
181 }
182 
184 
185 //
186 // member functions
187 //
188 
189 namespace {
190  inline void
192 
193  using std::string;
194 
195  const char token(':');
196  const string empty;
197 
198  label=tag;
199  const string::size_type i1(label.find(token));
200  if (i1==string::npos) {
201  instance=empty;
202  process=empty;
203  } else {
204  instance=label.substr(i1+1);
205  label.resize(i1);
206  const string::size_type i2(instance.find(token));
207  if (i2==string::npos) {
208  process=empty;
209  } else {
210  process=instance.substr(i2+1);
211  instance.resize(i2);
212  }
213  }
214  }
215 }
216 
219  desc.add<bool>("throw",false)->setComment("Throw exception or LogError");
220  desc.add<std::string>("processName","@")->setComment("Process name to use when getting data. The value of '@' is used to denote the current process name.");
221  desc.add<std::vector<std::string>>("moduleLabelPatternsToMatch",std::vector<std::string>(1,"hlt*"))->setComment("glob patterns for module labels to get data.");
222  desc.add<std::vector<std::string>>("moduleLabelPatternsToSkip",std::vector<std::string>())->setComment("module labels for data products which should not be gotten.");
223  descriptions.add("triggerSummaryProducerAOD", desc);
224 }
225 
226 // ------------ method called to produce the data ------------
227 void
229 {
230  using namespace std;
231  using namespace edm;
232  using namespace reco;
233  using namespace l1extra;
234  using namespace trigger;
235  using namespace l1t;
236 
237  std::vector<edm::Handle<trigger::TriggerFilterObjectWithRefs> > fobs;
239 
240  const unsigned int nfob(fobs.size());
241  LogTrace("TriggerSummaryProducerAOD") << "Number of filter objects found: " << nfob;
242 
243  string tagLabel,tagInstance,tagProcess;
244 
250  maskFilters_.clear();
251  maskFilters_.resize(nfob);
252  filterTagsEvent_.clear();
253  collectionTagsEvent_.clear();
254  unsigned int nf(0);
255  for (unsigned int ifob=0; ifob!=nfob; ++ifob) {
256  maskFilters_[ifob]=false;
257  const vector<string>& collectionTags_(fobs[ifob]->getCollectionTagsAsStrings());
258  const unsigned int ncol(collectionTags_.size());
259  if (ncol>0) {
260  nf++;
261  maskFilters_[ifob]=true;
262  const string& label (fobs[ifob].provenance()->moduleLabel());
263  const string& instance (fobs[ifob].provenance()->productInstanceName());
264  const string& process (fobs[ifob].provenance()->processName());
265  filterTagsEvent_.insert(InputTag(label,instance,process));
266  for (unsigned int icol=0; icol!=ncol; ++icol) {
267  // overwrite process name (usually not set)
268  tokenizeTag(collectionTags_[icol],tagLabel,tagInstance,tagProcess);
269  collectionTagsEvent_.insert(InputTag(tagLabel,tagInstance,pn_));
270  }
271  }
272  }
274  if (filterTagsEvent_.size()!=nf) {
275  LogError("TriggerSummaryProducerAOD")
276  << "Mismatch in number of filter tags: "
277  << filterTagsEvent_.size() << "!=" << nf ;
278  }
279 
283 
285  if (isDebugEnabled()) {
286 
288  const unsigned int nc(collectionTagsEvent_.size());
289  LogTrace("TriggerSummaryProducerAOD") << "Number of unique collections requested " << nc;
290  const InputTagSet::const_iterator cb(collectionTagsEvent_.begin());
291  const InputTagSet::const_iterator ce(collectionTagsEvent_.end());
292  for ( InputTagSet::const_iterator ci=cb; ci!=ce; ++ci) {
293  LogTrace("TriggerSummaryProducerAOD") << distance(cb,ci) << " " << ci->encode();
294  }
295  const unsigned int nf(filterTagsEvent_.size());
296  LogTrace("TriggerSummaryProducerAOD") << "Number of unique filters requested " << nf;
297  const InputTagSet::const_iterator fb(filterTagsEvent_.begin());
298  const InputTagSet::const_iterator fe(filterTagsEvent_.end());
299  for ( InputTagSet::const_iterator fi=fb; fi!=fe; ++fi) {
300  LogTrace("TriggerSummaryProducerAOD") << distance(fb,fi) << " " << fi->encode();
301  }
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, getIsolatedPixelTrackCandidateCollection_);
323  fillTriggerObjectCollections< L1EmParticleCollection>(iEvent, getL1EmParticleCollection_);
324  fillTriggerObjectCollections< L1MuonParticleCollection>(iEvent, getL1MuonParticleCollection_);
325  fillTriggerObjectCollections< L1JetParticleCollection>(iEvent, getL1JetParticleCollection_);
326  fillTriggerObjectCollections< L1EtMissParticleCollection>(iEvent, getL1EtMissParticleCollection_);
327  fillTriggerObjectCollections< L1HFRingsCollection>(iEvent, getL1HFRingsCollection_);
328  fillTriggerObjectCollections< MuonBxCollection>(iEvent, getL1TMuonParticleCollection_);
329  fillTriggerObjectCollections< EGammaBxCollection>(iEvent, getL1TEGammaParticleCollection_);
330  fillTriggerObjectCollections< JetBxCollection>(iEvent, getL1TJetParticleCollection_);
331  fillTriggerObjectCollections< TauBxCollection>(iEvent, getL1TTauParticleCollection_);
332  fillTriggerObjectCollections< EtSumBxCollection>(iEvent, getL1TEtSumParticleCollection_);
334  fillTriggerObjectCollections< PFJetCollection>(iEvent, getPFJetCollection_);
335  fillTriggerObjectCollections< PFTauCollection>(iEvent, getPFTauCollection_);
336  fillTriggerObjectCollections< PFMETCollection>(iEvent, getPFMETCollection_);
338  const unsigned int nk(tags_.size());
339  LogDebug("TriggerSummaryProducerAOD") << "Number of collections found: " << nk;
340  const unsigned int no(toc_.size());
341  LogDebug("TriggerSummaryProducerAOD") << "Number of physics objects found: " << no;
342 
345  unique_ptr<TriggerEvent> product(new TriggerEvent(pn_,nk,no,nf));
346 
348  product->addCollections(tags_,keys_);
349  product->addObjects(toc_);
350 
352  for (unsigned int ifob=0; ifob!=nfob; ++ifob) {
353  if (maskFilters_[ifob]) {
354  const string& label (fobs[ifob].provenance()->moduleLabel());
355  const string& instance (fobs[ifob].provenance()->productInstanceName());
356  const string& process (fobs[ifob].provenance()->processName());
357  const edm::InputTag filterTag(label,instance,process);
358  ids_.clear();
359  keys_.clear();
360  fillFilterObjectMembers(iEvent,filterTag,fobs[ifob]->photonIds() ,fobs[ifob]->photonRefs());
361  fillFilterObjectMembers(iEvent,filterTag,fobs[ifob]->electronIds() ,fobs[ifob]->electronRefs());
362  fillFilterObjectMembers(iEvent,filterTag,fobs[ifob]->muonIds() ,fobs[ifob]->muonRefs());
363  fillFilterObjectMembers(iEvent,filterTag,fobs[ifob]->jetIds() ,fobs[ifob]->jetRefs());
364  fillFilterObjectMembers(iEvent,filterTag,fobs[ifob]->compositeIds(),fobs[ifob]->compositeRefs());
365  fillFilterObjectMembers(iEvent,filterTag,fobs[ifob]->basemetIds() ,fobs[ifob]->basemetRefs());
366  fillFilterObjectMembers(iEvent,filterTag,fobs[ifob]->calometIds() ,fobs[ifob]->calometRefs());
367  fillFilterObjectMembers(iEvent,filterTag,fobs[ifob]->pixtrackIds() ,fobs[ifob]->pixtrackRefs());
368  fillFilterObjectMembers(iEvent,filterTag,fobs[ifob]->l1emIds() ,fobs[ifob]->l1emRefs());
369  fillFilterObjectMembers(iEvent,filterTag,fobs[ifob]->l1muonIds() ,fobs[ifob]->l1muonRefs());
370  fillFilterObjectMembers(iEvent,filterTag,fobs[ifob]->l1jetIds() ,fobs[ifob]->l1jetRefs());
371  fillFilterObjectMembers(iEvent,filterTag,fobs[ifob]->l1etmissIds() ,fobs[ifob]->l1etmissRefs());
372  fillFilterObjectMembers(iEvent,filterTag,fobs[ifob]->l1hfringsIds(),fobs[ifob]->l1hfringsRefs());
373  fillFilterObjectMembers(iEvent,filterTag,fobs[ifob]->l1tmuonIds() ,fobs[ifob]->l1tmuonRefs());
374  fillFilterObjectMembers(iEvent,filterTag,fobs[ifob]->l1tegammaIds(),fobs[ifob]->l1tegammaRefs());
375  fillFilterObjectMembers(iEvent,filterTag,fobs[ifob]->l1tjetIds() ,fobs[ifob]->l1tjetRefs());
376  fillFilterObjectMembers(iEvent,filterTag,fobs[ifob]->l1ttauIds() ,fobs[ifob]->l1ttauRefs());
377  fillFilterObjectMembers(iEvent,filterTag,fobs[ifob]->l1tetsumIds() ,fobs[ifob]->l1tetsumRefs());
378  fillFilterObjectMembers(iEvent,filterTag,fobs[ifob]->pfjetIds() ,fobs[ifob]->pfjetRefs());
379  fillFilterObjectMembers(iEvent,filterTag,fobs[ifob]->pftauIds() ,fobs[ifob]->pftauRefs());
380  fillFilterObjectMembers(iEvent,filterTag,fobs[ifob]->pfmetIds() ,fobs[ifob]->pfmetRefs());
381  product->addFilter(filterTag,ids_,keys_);
382  }
383  }
384 
385  OrphanHandle<TriggerEvent> ref = iEvent.put(std::move(product));
386  LogTrace("TriggerSummaryProducerAOD") << "Number of physics objects packed: " << ref->sizeObjects();
387  LogTrace("TriggerSummaryProducerAOD") << "Number of filter objects packed: " << ref->sizeFilters();
388 
389 }
390 
391 template <typename C>
393 
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 
436  using namespace trigger;
437  toc_.push_back( TriggerObject(object) );
438 
439  return;
440 }
441 
443 
444  using namespace l1extra;
445  using namespace trigger;
446 
448  object.hfEtSum(L1HFRings::kRing1PosEta),
449  object.hfEtSum(L1HFRings::kRing1NegEta),
450  object.hfEtSum(L1HFRings::kRing2PosEta),
451  object.hfEtSum(L1HFRings::kRing2NegEta) ) );
453  object.hfBitCount(L1HFRings::kRing1PosEta),
454  object.hfBitCount(L1HFRings::kRing1NegEta),
455  object.hfBitCount(L1HFRings::kRing2PosEta),
456  object.hfBitCount(L1HFRings::kRing2NegEta) ) );
457 
458  return;
459 }
460 
462 
463  using namespace l1extra;
464  using namespace trigger;
465 
466  toc_.push_back( TriggerObject(object) );
467  if (object.type()==L1EtMissParticle::kMET) {
468  toc_.push_back(TriggerObject(TriggerL1ETT,object.etTotal(),0.0,0.0,0.0));
469  } else if (object.type()==L1EtMissParticle::kMHT) {
470  toc_.push_back(TriggerObject(TriggerL1HTT,object.etTotal(),0.0,0.0,0.0));
471  } else {
472  toc_.push_back(TriggerObject(0, object.etTotal(),0.0,0.0,0.0));
473  }
474 
475  return;
476 }
477 
479 
480  using namespace reco;
481  using namespace trigger;
482 
483  toc_.push_back( TriggerObject(object) );
484  toc_.push_back(TriggerObject(TriggerTET ,object.sumEt() ,0.0,0.0,0.0));
485  toc_.push_back(TriggerObject(TriggerMETSig ,object.mEtSig() ,0.0,0.0,0.0));
486  toc_.push_back(TriggerObject(TriggerELongit,object.e_longitudinal(),0.0,0.0,0.0));
487 
488  return;
489 }
490 
492 
493  using namespace reco;
494  using namespace trigger;
495 
496  toc_.push_back( TriggerObject(object) );
497  toc_.push_back(TriggerObject(TriggerTET ,object.sumEt() ,0.0,0.0,0.0));
498  toc_.push_back(TriggerObject(TriggerMETSig ,object.mEtSig() ,0.0,0.0,0.0));
499  toc_.push_back(TriggerObject(TriggerELongit,object.e_longitudinal(),0.0,0.0,0.0));
500 
501  return;
502 }
503 
505 
506  using namespace reco;
507  using namespace trigger;
508 
509  toc_.push_back( TriggerObject(object) );
510  toc_.push_back(TriggerObject(TriggerTHT ,object.sumEt() ,0.0,0.0,0.0));
511  toc_.push_back(TriggerObject(TriggerMHTSig ,object.mEtSig() ,0.0,0.0,0.0));
512  toc_.push_back(TriggerObject(TriggerHLongit,object.e_longitudinal(),0.0,0.0,0.0));
513 
514  return;
515 }
516 
517 template <typename C>
519 
523 
524  using namespace std;
525  using namespace edm;
526  using namespace reco;
527  using namespace l1extra;
528  using namespace trigger;
529 
530  if (ids.size()!=refs.size()) {
531  LogError("TriggerSummaryProducerAOD") << "Vector length is different: "
532  << ids.size() << " " << refs.size();
533  }
534 
535  const unsigned int n(min(ids.size(),refs.size()));
536  for (unsigned int i=0; i!=n; ++i) {
537  const ProductID pid(refs[i].id());
538  if (!(pid.isValid())) {
539  std::ostringstream ost;
540  ost
541  << "Iinvalid pid: " << pid
542  << " FilterTag / Key: " << tag.encode()
543  << " / " << i << "of" << n
544  << " CollectionTag / Key: "
545  << " <Unrecoverable>"
546  << " / " << refs[i].key()
547  << " CollectionType: " << typeid(C).name();
548  if (throw_) {
549  throw cms::Exception("TriggerSummaryProducerAOD") << ost.str();
550  } else {
551  LogError("TriggerSummaryProducerAOD") << ost.str();
552  }
553  } else if (offset_.find(pid)==offset_.end()) {
554  const string& label(iEvent.getProvenance(pid).moduleLabel());
555  const string& instance(iEvent.getProvenance(pid).productInstanceName());
556  const string& process(iEvent.getProvenance(pid).processName());
557  std::ostringstream ost;
558  ost
559  << "Uunknown pid: " << pid
560  << " FilterTag / Key: " << tag.encode()
561  << " / " << i << "of" << n
562  << " CollectionTag / Key: "
564  << " / " << refs[i].key()
565  << " CollectionType: " << typeid(C).name();
566  if (throw_) {
567  throw cms::Exception("TriggerSummaryProducerAOD") << ost.str();
568  } else {
569  LogError("TriggerSummaryProducerAOD") << ost.str();
570  }
571  } else {
572  fillFilterObjectMember(offset_[pid],ids[i],refs[i]);
573  }
574  }
575  return;
576 
577 }
578 
579 template <typename C>
580 void TriggerSummaryProducerAOD::fillFilterObjectMember(const int& offset, const int& id, const edm::Ref<C> & ref) {
581 
582  keys_.push_back(offset+ref.key());
583  ids_.push_back(id);
584 
585  return;
586 }
587 
589 
590  using namespace trigger;
591 
592  if (id==TriggerL1HfBitCounts) {
593  keys_.push_back(offset+2*ref.key()+1);
594  } else { // if (ids[i]==TriggerL1HfRingEtSums) {
595  keys_.push_back(offset+2*ref.key()+0);
596  }
597  ids_.push_back(id);
598 
599  return;
600 }
601 
603 
604  using namespace trigger;
605 
606  if ( (id==TriggerL1ETT) || (id==TriggerL1HTT) ) {
607  keys_.push_back(offset+2*ref.key()+1);
608  } else {
609  keys_.push_back(offset+2*ref.key()+0);
610  }
611  ids_.push_back(id);
612 
613  return;
614 }
615 
617 
618  using namespace trigger;
619 
620  if ( (id==TriggerTHT) || (id==TriggerTET) ) {
621  keys_.push_back(offset+4*ref.key()+1);
622  } else if ( (id==TriggerMETSig) || (id==TriggerMHTSig) ) {
623  keys_.push_back(offset+4*ref.key()+2);
624  } else if ( (id==TriggerELongit) || (id==TriggerHLongit) ) {
625  keys_.push_back(offset+4*ref.key()+3);
626  } else {
627  keys_.push_back(offset+4*ref.key()+0);
628  }
629  ids_.push_back(id);
630 
631  return;
632 }
633 
635 
636  using namespace trigger;
637 
638  if ( (id==TriggerTHT) || (id==TriggerTET) ) {
639  keys_.push_back(offset+4*ref.key()+1);
640  } else if ( (id==TriggerMETSig) || (id==TriggerMHTSig) ) {
641  keys_.push_back(offset+4*ref.key()+2);
642  } else if ( (id==TriggerELongit) || (id==TriggerHLongit) ) {
643  keys_.push_back(offset+4*ref.key()+3);
644  } else {
645  keys_.push_back(offset+4*ref.key()+0);
646  }
647  ids_.push_back(id);
648 
649  return;
650 }
651 
653 
654  using namespace trigger;
655 
656  if ( (id==TriggerTHT) || (id==TriggerTET) ) {
657  keys_.push_back(offset+4*ref.key()+1);
658  } else if ( (id==TriggerMETSig) || (id==TriggerMHTSig) ) {
659  keys_.push_back(offset+4*ref.key()+2);
660  } else if ( (id==TriggerELongit) || (id==TriggerHLongit) ) {
661  keys_.push_back(offset+4*ref.key()+3);
662  } else {
663  keys_.push_back(offset+4*ref.key()+0);
664  }
665  ids_.push_back(id);
666 
667  return;
668 }
669 
671  globalCache()->collectionTagsGlobal_.insert(collectionTagsStream_.begin(),collectionTagsStream_.end());
672  globalCache()->filterTagsGlobal_.insert(filterTagsStream_.begin(),filterTagsStream_.end());
673  return;
674 }
675 
677 
678  using namespace std;
679  using namespace edm;
680  using namespace trigger;
681 
682  LogVerbatim("TriggerSummaryProducerAOD") << endl;
683  LogVerbatim("TriggerSummaryProducerAOD") << "TriggerSummaryProducerAOD::globalEndJob - accumulated tags:" << endl;
684 
685  InputTagSet filterTags(false);
686  InputTagSet collectionTags(false);
687 
688  filterTags.insert(globalInputTags->filterTagsGlobal_.begin(),globalInputTags->filterTagsGlobal_.end());
689  collectionTags.insert(globalInputTags->collectionTagsGlobal_.begin(),globalInputTags->collectionTagsGlobal_.end());
690 
691  const unsigned int nc(collectionTags.size());
692  const unsigned int nf(filterTags.size());
693  LogVerbatim("TriggerSummaryProducerAOD") << " Overall number of Collections/Filters: "
694  << nc << "/" << nf << endl;
695 
696  LogVerbatim("TriggerSummaryProducerAOD") << " The collections: " << nc << endl;
697  const InputTagSet::const_iterator cb(collectionTags.begin());
698  const InputTagSet::const_iterator ce(collectionTags.end());
699  for ( InputTagSet::const_iterator ci=cb; ci!=ce; ++ci) {
700  LogVerbatim("TriggerSummaryProducerAOD") << " " << distance(cb,ci) << " " << ci->encode() << endl;
701  }
702 
703  LogVerbatim("TriggerSummaryProducerAOD") << " The filters:" << nf << endl;
704  const InputTagSet::const_iterator fb(filterTags.begin());
705  const InputTagSet::const_iterator fe(filterTags.end());
706  for ( InputTagSet::const_iterator fi=fb; fi!=fe; ++fi) {
707  LogVerbatim("TriggerSummaryProducerAOD") << " " << distance(fb,fi) << " " << fi->encode() << endl;
708  }
709 
710  LogVerbatim("TriggerSummaryProducerAOD") << "TriggerSummaryProducerAOD::endJob." << endl;
711  LogVerbatim("TriggerSummaryProducerAOD") << endl;
712 
713  return;
714 
715 }
#define LogDebug(id)
size
Write out results.
~TriggerSummaryProducerAOD() override
void produce(edm::Event &, const edm::EventSetup &) override
type
Definition: HCALResponse.h:21
void callWhenNewProductsRegistered(std::function< void(BranchDescription const &)> const &func)
Definition: ProducerBase.h:76
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_
The single EDProduct to be saved for each event (AOD case)
Definition: TriggerEvent.h:25
trigger::size_type sizeFilters() const
Definition: TriggerEvent.h:135
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_
edm::GetterOfProducts< l1t::JetBxCollection > getL1TJetParticleCollection_
std::set< edm::InputTag, OrderInputTag > InputTagSet
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:265
std::vector< std::string > tags_
std::string const & processName() const
Definition: Provenance.h:52
uint16_t size_type
std::string encode() const
Definition: InputTag.cc:166
edm::GetterOfProducts< reco::PFJetCollection > getPFJetCollection_
int iEvent
Definition: GenABIO.cc:230
edm::GetterOfProducts< reco::RecoChargedCandidateCollection > getRecoChargedCandidateCollection_
Definition: MET.h:42
edm::GetterOfProducts< l1extra::L1HFRingsCollection > getL1HFRingsCollection_
std::vector< std::regex > moduleLabelPatternsToMatch_
module labels which should be avoided
bool isAvailable() const
Definition: Service.h:46
std::map< edm::ProductID, unsigned int > offset_
global map for indices into toc_: offset per input L3 collection
T min(T a, T b)
Definition: MathUtil.h:58
ParameterDescriptionBase * add(U const &iLabel, T const &value)
void fillFilterObjectMembers(const edm::Event &, const edm::InputTag &tag, const trigger::Vids &, const std::vector< edm::Ref< C > > &)
edm::GetterOfProducts< l1t::MuonBxCollection > getL1TMuonParticleCollection_
#define LogTrace(id)
trigger::size_type sizeObjects() const
Definition: TriggerEvent.h:134
tbb::concurrent_unordered_set< edm::InputTag, InputTagHash > filterTagsGlobal_
void add(std::string const &label, ParameterSetDescription const &psetDescription)
std::string const & moduleLabel() const
Definition: Provenance.h:50
edm::GetterOfProducts< reco::CaloMETCollection > getCaloMETCollection_
edm::GetterOfProducts< reco::ElectronCollection > getElectronCollection_
fixed size matrix
HLT enums.
InputTagSet collectionTagsEvent_
list of L3 collection tags
void fillHandles(edm::Event const &event, std::vector< edm::Handle< T > > &handles) const
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:35
static void globalEndJob(const GlobalInputTags *)
std::string const & productInstanceName() const
Definition: Provenance.h:53
Provenance getProvenance(BranchID const &theID) const
Definition: Event.cc:129
long double T
tbb::concurrent_unordered_set< edm::InputTag, InputTagHash > collectionTagsGlobal_
edm::GetterOfProducts< l1t::EtSumBxCollection > getL1TEtSumParticleCollection_
std::vector< int > Vids
edm::GetterOfProducts< l1extra::L1EmParticleCollection > getL1EmParticleCollection_
def move(src, dest)
Definition: eostools.py:510
edm::GetterOfProducts< l1t::EGammaBxCollection > getL1TEGammaParticleCollection_