11 #include <initializer_list>
45 #include "TLorentzVector.h"
50 using namespace l1extra;
51 using namespace trigger;
66 vector<LeafCandidate> &from,
67 vector<LeafCandidate> &
to,
68 double deltaRMatchingCut,
72 vector<double> &xBins,
74 vector<double> &yBins,
79 vector<double> &xBins,
81 vector<double> &yBins,
83 myBook2D(ibooker, name, xBins, xLabel, yBins, yLabel, name);
87 vector<double> &xBins,
89 vector<double> &yBins,
94 vector<double> &xBins,
96 vector<double> &yBins,
98 myBookProfile2D(ibooker, name, xBins, xLabel, yBins, yLabel, name);
100 void myBook1D(
DQMStore::IBooker &ibooker, TString name, vector<double> &xBins, TString
label, TString title);
102 myBook1D(ibooker, name, xBins, label, name);
142 map<TString, MonitorElement *>
ME;
149 dqmFolder(pset.getUntrackedParameter<
string>(
"DQMFolder")),
150 triggerProcessName(pset.getUntrackedParameter<
string>(
"TriggerProcessName")),
151 triggerPathName(pset.getUntrackedParameter<
string>(
"TriggerPathName")),
152 motherIDs(pset.getUntrackedParameter<
vector<int> >(
"MotherIDs")),
153 genGlobDeltaRMatchingCut(pset.getUntrackedParameter<double>(
"GenGlobDeltaRMatchingCut")),
154 globL1DeltaRMatchingCut(pset.getUntrackedParameter<double>(
"GlobL1DeltaRMatchingCut")),
155 globL2DeltaRMatchingCut(pset.getUntrackedParameter<double>(
"GlobL2DeltaRMatchingCut")),
156 globL3DeltaRMatchingCut(pset.getUntrackedParameter<double>(
"GlobL3DeltaRMatchingCut")),
157 deltaEtaBins(pset.getUntrackedParameter<
vector<double> >(
"DeltaEtaBins")),
158 deltaPhiBins(pset.getUntrackedParameter<
vector<double> >(
"DeltaPhiBins")),
159 muonPtBins(pset.getUntrackedParameter<
vector<double> >(
"MuonPtBins")),
160 muonEtaBins(pset.getUntrackedParameter<
vector<double> >(
"MuonEtaBins")),
161 muonPhiBins(pset.getUntrackedParameter<
vector<double> >(
"MuonPhiBins")),
162 dimuonPtBins(pset.getUntrackedParameter<
vector<double> >(
"DimuonPtBins")),
163 dimuonEtaBins(pset.getUntrackedParameter<
vector<double> >(
"DimuonEtaBins")),
164 dimuonDRBins(pset.getUntrackedParameter<
vector<double> >(
"DimuonDRBins")),
183 LogDebug(
"HLTriggerOfflineHeavyFlavor")
184 <<
"Successfully initialized HLTConfigProvider with process name: " <<
triggerProcessName << endl;
187 <<
"Could not initialize HLTConfigProvider with process name: " <<
triggerProcessName << endl;
191 for (
const auto &trigName : triggerNames) {
194 vector<string> moduleNames = hltConfig.
moduleLabels(trigName);
213 str = str +
" " +
filters.first;
232 TString::Format(
"filt%dMuon_recoEtaPt",
int(
i + 1)),
245 TString::Format(
"resFilt%dGlob_recoEtaPt",
int(
i + 1)),
260 TString::Format(
"filt%dDimuon_recoEtaPt",
int(
i + 1)),
272 TString::Format(
"diFilt%dDimuon_recoEtaPt",
int(
i + 1)),
287 TString::Format(
"filt%dMuon_recoEtaPhi",
int(
i + 1)),
302 TString::Format(
"filt%dDimuon_recoRapPt",
int(
i + 1)),
310 "pathDimuon_recoRapPt",
319 TString::Format(
"diFilt%dDimuon_recoRapPt",
int(
i + 1)),
327 "diPathDimuon_recoRapPt",
339 TString::Format(
"filt%dDimuon_recoPtDR",
int(
i + 1)),
343 "#mu#mu #Delta R at IP",
347 "pathDimuon_recoPtDR",
351 "#mu#mu #Delta R at IP",
355 TString::Format(
"diFilt%dDimuon_recoPtDR",
int(
i + 1)),
359 "#mu#mu #Delta R at IP",
363 "diPathDimuon_recoPtDR",
367 "#mu#mu #Delta R at IP",
374 TString::Format(
"filt%dDimuon_recoPtDRpos",
int(
i + 1)),
378 "#mu#mu #Delta R in MS",
382 "pathDimuon_recoPtDRpos",
386 "#mu#mu #Delta R in MS",
390 TString::Format(
"diFilt%dDimuon_recoPtDRpos",
int(
i + 1)),
394 "#mu#mu #Delta R in MS",
398 "diPathDimuon_recoPtDRpos",
402 "#mu#mu #Delta R in MS",
411 TString::Format(
"filt%dGlob_deltaEtaDeltaPhi",
int(
i + 1)),
421 vector<double> sizeBins;
422 sizeBins.push_back(10);
423 sizeBins.push_back(0);
424 sizeBins.push_back(10);
425 myBook1D(ibooker,
"genMuon_size", sizeBins,
"container size");
426 myBook1D(ibooker,
"globMuon_size", sizeBins,
"container size");
443 for (GenParticleCollection::const_iterator
p = genParticles->begin();
p != genParticles->end(); ++
p) {
444 if (
p->status() == 1 &&
std::abs(
p->pdgId()) == 13 &&
447 genMuons.push_back(*
p);
451 LogDebug(
"HLTriggerOfflineHeavyFlavor") <<
"Could not access GenParticleCollection" << endl;
454 ME[
"genMuon_size"]->Fill(genMuons.size());
455 LogDebug(
"HLTriggerOfflineHeavyFlavor")
456 <<
"GenParticleCollection from " <<
genParticlesTag <<
" has size: " << genMuons.size() << endl;
458 vector<LeafCandidate> globMuons;
459 vector<LeafCandidate> globMuons_position;
462 if (recoMuonsHandle.
isValid()) {
463 for (MuonCollection::const_iterator
p = recoMuonsHandle->begin();
p != recoMuonsHandle->end(); ++
p) {
464 if (
p->isGlobalMuon()) {
465 globMuons.push_back(*
p);
468 p->outerTrack()->innerPosition().y(),
469 p->outerTrack()->innerPosition().z(),
474 LogDebug(
"HLTriggerOfflineHeavyFlavor") <<
"Could not access reco Muons" << endl;
476 ME[
"globMuon_size"]->Fill(globMuons.size());
477 LogDebug(
"HLTriggerOfflineHeavyFlavor")
478 <<
"Global Muons from " <<
recoMuonsTag <<
" has size: " << globMuons.size() << endl;
481 vector<vector<LeafCandidate> > muonsAtFilter;
482 vector<vector<LeafCandidate> > muonPositionsAtFilter;
484 muonsAtFilter.push_back(vector<LeafCandidate>());
485 muonPositionsAtFilter.push_back(vector<LeafCandidate>());
489 if (rawTriggerEvent.
isValid()) {
492 if (index < rawTriggerEvent->
size()) {
494 vector<L1MuonParticleRef> l1Cands;
495 rawTriggerEvent->getObjects(index,
TriggerL1Mu, l1Cands);
496 for (
size_t j = 0;
j < l1Cands.size();
j++) {
497 muonsAtFilter[
i].push_back(*l1Cands[
j]);
500 vector<RecoChargedCandidateRef> hltCands;
501 rawTriggerEvent->getObjects(index,
TriggerMuon, hltCands);
502 for (
size_t j = 0;
j < hltCands.size();
j++) {
503 muonsAtFilter[
i].push_back(*hltCands[
j]);
505 muonPositionsAtFilter[
i].push_back(
508 hltCands[j]->
track()->innerPosition().
y(),
509 hltCands[j]->
track()->innerPosition().
z(),
515 ME[TString::Format(
"filt%dMuon_size",
int(
i + 1))]->Fill(muonsAtFilter[
i].
size());
516 LogDebug(
"HLTriggerOfflineHeavyFlavor")
517 <<
"Filter \"" <<
filterNamesLevels[
i].first <<
"\" has " << muonsAtFilter[
i].size() <<
" muons" << endl;
520 LogDebug(
"HLTriggerOfflineHeavyFlavor") <<
"Could not access RAWTriggerEvent" << endl;
524 vector<LeafCandidate> pathMuons;
527 if (aodTriggerEvent.
isValid()) {
529 for (
int i = 0;
i < aodTriggerEvent->sizeFilters();
i++) {
531 Keys keys = aodTriggerEvent->filterKeys(
i);
532 for (
size_t j = 0;
j < keys.size();
j++) {
534 allObjects[keys[
j]].
id() > 0 ? 1 : -1,
536 allObjects[keys[
j]].
pt(), allObjects[keys[
j]].
eta(), allObjects[keys[
j]].
phi(),
muonMass)));
540 ME[
"pathMuon_size"]->Fill(pathMuons.size());
541 LogDebug(
"HLTriggerOfflineHeavyFlavor")
542 <<
"Path \"" <<
triggerPathName <<
"\" has " << pathMuons.size() <<
" muons at last filter \""
545 LogDebug(
"HLTriggerOfflineHeavyFlavor") <<
"Could not access AODTriggerEvent" << endl;
549 bool triggerFired =
false;
552 if (triggerResults.
isValid()) {
555 bool hlt_exists =
false;
556 for (
unsigned int i = 0;
i != triggerNames.
size();
i++) {
559 triggerFired = triggerResults->accept(
i);
572 vector<int> glob_gen(genMuons.size(), -1);
574 vector<vector<int> > filt_glob;
576 filt_glob.push_back(vector<int>(globMuons.size(), -1));
578 match(
ME[TString::Format(
"filt%dGlob_deltaEtaDeltaPhi",
int(
i + 1))],
584 match(
ME[TString::Format(
"filt%dGlob_deltaEtaDeltaPhi",
int(
i + 1))],
586 muonPositionsAtFilter[
i],
590 match(
ME[TString::Format(
"filt%dGlob_deltaEtaDeltaPhi",
int(
i + 1))],
597 vector<int> path_glob(globMuons.size(), -1);
608 for (
size_t i = 0;
i < genMuons.size();
i++) {
609 ME[
"genMuon_genEtaPt"]->Fill(genMuons[
i].
eta(), genMuons[
i].
pt());
610 ME[
"genMuon_genEtaPhi"]->Fill(genMuons[
i].
eta(), genMuons[
i].
phi());
611 if (glob_gen[
i] != -1) {
612 ME[
"resGlobGen_genEtaPt"]->Fill(
613 genMuons[
i].
eta(), genMuons[
i].
pt(), (globMuons[glob_gen[
i]].
pt() - genMuons[
i].
pt()) / genMuons[
i].
pt());
614 ME[
"globMuon_genEtaPt"]->Fill(genMuons[
i].
eta(), genMuons[
i].
pt());
615 ME[
"globMuon_genEtaPhi"]->Fill(genMuons[
i].
eta(), genMuons[
i].
phi());
616 ME[
"globMuon_recoEtaPt"]->Fill(globMuons[glob_gen[
i]].
eta(), globMuons[glob_gen[
i]].
pt());
617 ME[
"globMuon_recoEtaPhi"]->Fill(globMuons[glob_gen[
i]].
eta(), globMuons[glob_gen[
i]].
phi());
619 if (filt_glob[
f][glob_gen[
i]] != -1) {
620 ME[TString::Format(
"resFilt%dGlob_recoEtaPt",
int(
f + 1))]->Fill(
621 globMuons[glob_gen[
i]].
eta(),
622 globMuons[glob_gen[
i]].
pt(),
623 (muonsAtFilter[
f][filt_glob[
f][glob_gen[
i]]].
pt() - globMuons[glob_gen[
i]].
pt()) /
624 globMuons[glob_gen[
i]].
pt());
625 ME[TString::Format(
"filt%dMuon_recoEtaPt",
int(
f + 1))]->Fill(globMuons[glob_gen[
i]].
eta(),
626 globMuons[glob_gen[
i]].
pt());
627 ME[TString::Format(
"filt%dMuon_recoEtaPhi",
int(
f + 1))]->Fill(globMuons[glob_gen[
i]].
eta(),
628 globMuons[glob_gen[
i]].
phi());
633 if (path_glob[glob_gen[
i]] != -1) {
634 ME[
"resPathGlob_recoEtaPt"]->Fill(
635 globMuons[glob_gen[
i]].
eta(),
636 globMuons[glob_gen[
i]].
pt(),
637 (pathMuons[path_glob[glob_gen[
i]]].
pt() - globMuons[glob_gen[
i]].
pt()) / globMuons[glob_gen[
i]].
pt());
638 ME[
"pathMuon_recoEtaPt"]->Fill(globMuons[glob_gen[
i]].
eta(), globMuons[glob_gen[
i]].
pt());
639 ME[
"pathMuon_recoEtaPhi"]->Fill(globMuons[glob_gen[
i]].
eta(), globMuons[glob_gen[
i]].
phi());
645 ME[
"resultMuon_recoEtaPt"]->Fill(globMuons[glob_gen[
i]].
eta(), globMuons[glob_gen[
i]].
pt());
646 ME[
"resultMuon_recoEtaPhi"]->Fill(globMuons[glob_gen[
i]].
eta(), globMuons[glob_gen[
i]].
phi());
654 for (
size_t j = 1;
j < genMuons.size();
j++) {
655 if (genMuons[0].
charge() * genMuons[
j].charge() == -1) {
660 if (secondMuon > 0) {
662 double genDimuonPt = (genMuons[0].p4() + genMuons[secondMuon].p4()).
pt();
663 double genDimuonEta = (genMuons[0].p4() + genMuons[secondMuon].p4()).
eta();
664 double genDimuonRap = (genMuons[0].p4() + genMuons[secondMuon].p4()).Rapidity();
665 double genDimuonDR = deltaR<LeafCandidate, LeafCandidate>(genMuons[0], genMuons[secondMuon]);
666 bool highPt = genMuons[0].pt() > 7. && genMuons[secondMuon].pt() > 7;
667 ME[
"genDimuon_genEtaPt"]->Fill(genDimuonEta, genDimuonPt);
668 ME[
"genDimuon_genRapPt"]->Fill(genDimuonRap, genDimuonPt);
670 ME[
"genDimuon_genPtDR"]->Fill(genDimuonPt, genDimuonDR);
672 if (glob_gen[0] != -1 && glob_gen[secondMuon] != -1) {
673 ME[
"globDimuon_genEtaPt"]->Fill(genDimuonEta, genDimuonPt);
674 ME[
"globDimuon_genRapPt"]->Fill(genDimuonRap, genDimuonPt);
676 ME[
"globDimuon_genPtDR"]->Fill(genDimuonPt, genDimuonDR);
677 double globDimuonPt = (globMuons[glob_gen[0]].p4() + globMuons[glob_gen[secondMuon]].p4()).
pt();
678 double globDimuonEta = (globMuons[glob_gen[0]].p4() + globMuons[glob_gen[secondMuon]].p4()).
eta();
679 double globDimuonRap = (globMuons[glob_gen[0]].p4() + globMuons[glob_gen[secondMuon]].p4()).Rapidity();
680 double globDimuonDR =
681 deltaR<LeafCandidate, LeafCandidate>(globMuons[glob_gen[0]], globMuons[glob_gen[secondMuon]]);
682 double globDimuonDRpos = deltaR<LeafCandidate, LeafCandidate>(globMuons_position[glob_gen[0]],
683 globMuons_position[glob_gen[secondMuon]]);
684 ME[
"globDimuon_recoEtaPt"]->Fill(globDimuonEta, globDimuonPt);
685 ME[
"globDimuon_recoRapPt"]->Fill(globDimuonRap, globDimuonPt);
687 ME[
"globDimuon_recoPtDR"]->Fill(globDimuonPt, globDimuonDR);
689 ME[
"globDimuon_recoPtDRpos"]->Fill(globDimuonPt, globDimuonDRpos);
692 if (filt_glob[
f][glob_gen[0]] != -1 && filt_glob[
f][glob_gen[secondMuon]] != -1) {
693 ME[TString::Format(
"diFilt%dDimuon_recoEtaPt",
int(
f + 1))]->Fill(globDimuonEta, globDimuonPt);
694 ME[TString::Format(
"diFilt%dDimuon_recoRapPt",
int(
f + 1))]->Fill(globDimuonRap, globDimuonPt);
696 ME[TString::Format(
"diFilt%dDimuon_recoPtDR",
int(
f + 1))]->Fill(globDimuonPt, globDimuonDR);
698 ME[TString::Format(
"diFilt%dDimuon_recoPtDRpos",
int(
f + 1))]->Fill(globDimuonPt, globDimuonDRpos);
705 if (filt_glob[
f][glob_gen[0]] != -1 || filt_glob[
f][glob_gen[secondMuon]] != -1) {
706 ME[TString::Format(
"filt%dDimuon_recoEtaPt",
int(
f + 1))]->Fill(globDimuonEta, globDimuonPt);
707 ME[TString::Format(
"filt%dDimuon_recoRapPt",
int(
f + 1))]->Fill(globDimuonRap, globDimuonPt);
709 ME[TString::Format(
"filt%dDimuon_recoPtDR",
int(
f + 1))]->Fill(globDimuonPt, globDimuonDR);
711 ME[TString::Format(
"filt%dDimuon_recoPtDRpos",
int(
f + 1))]->Fill(globDimuonPt, globDimuonDRpos);
717 if (path_glob[glob_gen[0]] != -1 && path_glob[glob_gen[secondMuon]] != -1) {
718 ME[
"diPathDimuon_recoEtaPt"]->Fill(globDimuonEta, globDimuonPt);
719 ME[
"diPathDimuon_recoRapPt"]->Fill(globDimuonRap, globDimuonPt);
721 ME[
"diPathDimuon_recoPtDR"]->Fill(globDimuonPt, globDimuonDR);
723 ME[
"diPathDimuon_recoPtDRpos"]->Fill(globDimuonPt, globDimuonDRpos);
726 if (path_glob[glob_gen[0]] != -1 || path_glob[glob_gen[secondMuon]] != -1) {
727 ME[
"pathDimuon_recoEtaPt"]->Fill(globDimuonEta, globDimuonPt);
728 ME[
"pathDimuon_recoRapPt"]->Fill(globDimuonRap, globDimuonPt);
730 ME[
"pathDimuon_recoPtDR"]->Fill(globDimuonPt, globDimuonDR);
732 ME[
"pathDimuon_recoPtDRpos"]->Fill(globDimuonPt, globDimuonDRpos);
736 ME[
"resultDimuon_recoEtaPt"]->Fill(globDimuonEta, globDimuonPt);
737 ME[
"resultDimuon_recoRapPt"]->Fill(globDimuonRap, globDimuonPt);
739 ME[
"resultDimuon_recoPtDR"]->Fill(globDimuonPt, globDimuonDR);
741 ME[
"resultDimuon_recoPtDRpos"]->Fill(globDimuonPt, globDimuonDRpos);
753 return mother->
pdgId();
761 vector<LeafCandidate> &from,
762 vector<LeafCandidate> &
to,
763 double dRMatchingCut,
765 vector<double> dR(from.size());
766 for (
size_t i = 0;
i < from.size();
i++) {
770 for (
size_t j = 0;
j < to.size();
j++) {
771 double dRtmp = deltaR<double>(from[
i].eta(), from[
i].phi(), to[
j].eta(), to[
j].phi());
782 if (dR[
i] > dRMatchingCut) {
787 for (
size_t k = 0;
k <
i;
k++) {
788 if (map[
k] != -1 && map[i] == map[
k]) {
803 vector<double> &ptBins,
805 vector<double> &etaBins,
809 int ptN = ptBins.size() == 3 ? (int)ptBins[0] + 1 : ptBins.size();
810 Double_t *
pt =
new Double_t[ptN];
811 for (
int i = 0;
i < ptN;
i++) {
812 pt[
i] = ptBins.size() == 3 ? ptBins[1] +
i * (ptBins[2] - ptBins[1]) / ptBins[0] : ptBins[
i];
814 int etaN = etaBins.size() == 3 ? (int)etaBins[0] + 1 : etaBins.size();
815 Double_t *
eta =
new Double_t[etaN];
816 for (
int i = 0;
i < etaN;
i++) {
817 eta[
i] = etaBins.size() == 3 ? etaBins[1] +
i * (etaBins[2] - etaBins[1]) / etaBins[0] : etaBins[
i];
819 TH2F *
h =
new TH2F(name, name, ptN - 1, pt, etaN - 1, eta);
820 h->SetXTitle(ptLabel);
821 h->SetYTitle(etaLabel);
829 vector<double> &ptBins,
831 vector<double> &etaBins,
835 int ptN = ptBins.size() == 3 ? (int)ptBins[0] + 1 : ptBins.size();
836 Double_t *
pt =
new Double_t[ptN];
837 for (
int i = 0;
i < ptN;
i++) {
838 pt[
i] = ptBins.size() == 3 ? ptBins[1] +
i * (ptBins[2] - ptBins[1]) / ptBins[0] : ptBins[
i];
840 int etaN = etaBins.size() == 3 ? (int)etaBins[0] + 1 : etaBins.size();
841 Double_t *
eta =
new Double_t[etaN];
842 for (
int i = 0;
i < etaN;
i++) {
843 eta[
i] = etaBins.size() == 3 ? etaBins[1] +
i * (etaBins[2] - etaBins[1]) / etaBins[0] : etaBins[
i];
845 TProfile2D *
h =
new TProfile2D(name, name, ptN - 1, pt, etaN - 1, eta);
846 h->SetXTitle(ptLabel);
847 h->SetYTitle(etaLabel);
856 int binsN = bins.size() == 3 ? (int)bins[0] + 1 : bins.size();
857 Double_t *myBins =
new Double_t[binsN];
858 for (
int i = 0;
i < binsN;
i++) {
859 myBins[
i] = bins.size() == 3 ? bins[1] +
i * (bins[2] - bins[1]) / bins[0] : bins[
i];
861 TH1F *
h =
new TH1F(name, name, binsN - 1, myBins);
871 return s.find(sub) != std::string::npos;
875 const auto containsAny = [](
const std::string &
s,
const std::vector<std::string> &subs) ->
bool {
876 for (
const auto &sub : subs) {
877 if (s.find(sub) != std::string::npos)
884 const auto isAnyOf = [](
const std::string &
s,
const std::vector<std::string> &ms) ->
bool {
885 for (
const auto &
m : ms) {
901 const std::string l2Filter =
"HLTMuonL2FromL1TPreFilter";
902 const std::vector<std::string> l3Filters = {
"HLTMuonDimuonL3Filter",
"HLTMuonL3PreFilter"};
903 const std::vector<std::string> l4Filters = {
904 "HLTDisplacedmumuFilter",
"HLTDiMuonGlbTrkFilter",
"HLTMuonTrackMassFilter"};
905 const std::vector<std::string> l5Filters = {
"HLTmumutkFilter",
"HLT2MuonMuonDZ",
"HLTDisplacedmumuFilter"};
915 if (
contains(moduleName,
"L3") && isAnyOf(hltConfig.
moduleType(moduleName), l3Filters)) {
918 if (containsAny(moduleName, {
"DisplacedmumuFilter",
"DiMuon",
"MuonL3Filtered",
"TrackMassFiltered"}) &&
919 isAnyOf(hltConfig.
moduleType(moduleName), l4Filters)) {
922 if (containsAny(moduleName, {
"Vertex",
"Dz"}) && isAnyOf(hltConfig.
moduleType(moduleName), l5Filters)) {
double globL1DeltaRMatchingCut
vector< double > dimuonPtBins
T getUntrackedParameter(std::string const &, T const &) const
MonitorElement * bookProfile2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, double lowZ, double highZ, char const *option="s", FUNC onbooking=NOOP())
const std::string moduleType(const std::string &module) const
C++ class name of module.
bool contains(EventRange const &lh, EventID const &rh)
void myBook2D(DQMStore::IBooker &ibooker, TString name, vector< double > &xBins, TString xLabel, vector< double > &yBins, TString yLabel, TString title)
virtual const Candidate * mother(size_type i=0) const =0
return pointer to mother
virtual void setCurrentFolder(std::string const &fullpath)
void analyze(const edm::Event &, const edm::EventSetup &) override
bool getByToken(EDGetToken token, Handle< PROD > &result) const
enum start value shifted to 81 so as to avoid clashes with PDG codes
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
vector< double > deltaPhiBins
#define DEFINE_FWK_MODULE(type)
const std::vector< std::string > & triggerNames() const
names of trigger paths
const std::string moduleEDMType(const std::string &module) const
C++ base class name of module.
double globL3DeltaRMatchingCut
void dqmBeginRun(const edm::Run &, const edm::EventSetup &) override
string triggerProcessName
vector< double > dimuonEtaBins
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
std::vector< TPRegexp > filters
int getFilterLevel(const std::string &moduleName, const HLTConfigProvider &hltConfig)
example_stream void analyze(const edm::Event &, const edm::EventSetup &) override
EDGetTokenT< TriggerEvent > triggerSummaryAODTag
edm::TriggerNames const & triggerNames(edm::TriggerResults const &triggerResults) const override
example_stream void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
U second(std::pair< T, U > const &p)
PtEtaPhiMLorentzVectorD PtEtaPhiMLorentzVector
Lorentz vector with cartesian internal representation.
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
void myBookProfile2D(DQMStore::IBooker &ibooker, TString name, vector< double > &xBins, TString xLabel, vector< double > &yBins, TString yLabel, TString title)
vector< double > dimuonDRBins
int getMotherId(const Candidate *p)
void match(MonitorElement *me, vector< LeafCandidate > &from, vector< LeafCandidate > &to, double deltaRMatchingCut, vector< int > &map)
EDGetTokenT< TriggerEventWithRefs > triggerSummaryRAWTag
Abs< T >::type abs(const T &t)
void myBook1D(DQMStore::IBooker &ibooker, TString name, vector< double > &xBins, TString label, TString title)
static std::string const triggerResults
double genGlobDeltaRMatchingCut
vector< double > muonPtBins
HeavyFlavorValidation(const edm::ParameterSet &)
double globL2DeltaRMatchingCut
const std::vector< std::string > & moduleLabels(unsigned int trigger) const
label(s) of module(s) on a trigger path
~HeavyFlavorValidation() override
virtual int pdgId() const =0
PDG identifier.
std::vector< TriggerObject > TriggerObjectCollection
collection of trigger physics objects (e.g., all isolated muons)
vector< double > deltaEtaBins
void myBook2D(DQMStore::IBooker &ibooker, TString name, vector< double > &xBins, TString xLabel, vector< double > &yBins, TString yLabel)
EDGetTokenT< MuonCollection > recoMuonsToken
std::string const & triggerName(unsigned int index) const
std::vector< size_type > Keys
bool init(const edm::Run &iRun, const edm::EventSetup &iSetup, const std::string &processName, bool &changed)
d'tor
MonitorElement * book2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, FUNC onbooking=NOOP())
vector< double > muonPhiBins
T getParameter(std::string const &) const
EDGetTokenT< GenParticleCollection > genParticlesToken
void myBookProfile2D(DQMStore::IBooker &ibooker, TString name, vector< double > &xBins, TString xLabel, vector< double > &yBins, TString yLabel)
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
void myBook1D(DQMStore::IBooker &ibooker, TString name, vector< double > &xBins, TString label)
EDGetTokenT< TriggerResults > triggerResultsToken
Log< level::Warning, false > LogWarning
InputTag triggerResultsTag
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
map< TString, MonitorElement * > ME
vector< pair< string, int > > filterNamesLevels
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
tuple size
Write out results.
vector< double > muonEtaBins