11 #include <initializer_list> 46 #include "TLorentzVector.h" 64 void match(
MonitorElement * me, vector<LeafCandidate> & from, vector<LeafCandidate> &
to,
double deltaRMatchingCut, vector<int> &
map );
65 void myBook2D(
DQMStore::IBooker & ibooker, TString
name, vector<double> &xBins, TString xLabel, vector<double> &yBins, TString yLabel, TString
title);
66 void myBook2D(
DQMStore::IBooker & ibooker, TString name, vector<double> &xBins, TString xLabel, vector<double> &yBins, TString yLabel){
67 myBook2D(ibooker, name, xBins, xLabel, yBins, yLabel, name);
69 void myBookProfile2D(
DQMStore::IBooker & ibooker, TString name, vector<double> &xBins, TString xLabel, vector<double> &yBins, TString yLabel, TString title);
71 myBookProfile2D(ibooker, name, xBins, xLabel, yBins, yLabel, name);
73 void myBook1D(
DQMStore::IBooker & ibooker, TString name, vector<double> &xBins, TString
label, TString title );
75 myBook1D(ibooker, name, xBins, label, name );
115 map<TString, MonitorElement *>
ME;
122 dqmFolder(pset.getUntrackedParameter<
string>(
"DQMFolder")),
123 triggerProcessName(pset.getUntrackedParameter<
string>(
"TriggerProcessName")),
124 triggerPathName(pset.getUntrackedParameter<
string>(
"TriggerPathName")),
125 motherIDs(pset.getUntrackedParameter<vector<
int> >(
"MotherIDs")),
126 genGlobDeltaRMatchingCut(pset.getUntrackedParameter<double>(
"GenGlobDeltaRMatchingCut")),
127 globL1DeltaRMatchingCut(pset.getUntrackedParameter<double>(
"GlobL1DeltaRMatchingCut")),
128 globL2DeltaRMatchingCut(pset.getUntrackedParameter<double>(
"GlobL2DeltaRMatchingCut")),
129 globL3DeltaRMatchingCut(pset.getUntrackedParameter<double>(
"GlobL3DeltaRMatchingCut")),
130 deltaEtaBins(pset.getUntrackedParameter<vector<double> >(
"DeltaEtaBins")),
131 deltaPhiBins(pset.getUntrackedParameter<vector<double> >(
"DeltaPhiBins")),
132 muonPtBins(pset.getUntrackedParameter<vector<double> >(
"MuonPtBins")),
133 muonEtaBins(pset.getUntrackedParameter<vector<double> >(
"MuonEtaBins")),
134 muonPhiBins(pset.getUntrackedParameter<vector<double> >(
"MuonPhiBins")),
135 dimuonPtBins(pset.getUntrackedParameter<vector<double> >(
"DimuonPtBins")),
136 dimuonEtaBins(pset.getUntrackedParameter<vector<double> >(
"DimuonEtaBins")),
137 dimuonDRBins(pset.getUntrackedParameter<vector<double> >(
"DimuonDRBins")),
155 LogDebug(
"HLTriggerOfflineHeavyFlavor") <<
"Successfully initialized HLTConfigProvider with process name: "<<
triggerProcessName<<endl;
161 for (
const auto &trigName : triggerNames) {
164 vector<string> moduleNames = hltConfig.
moduleLabels( trigName );
278 vector<double> sizeBins; sizeBins.push_back(10); sizeBins.push_back(0); sizeBins.push_back(10);
279 myBook1D(ibooker,
"genMuon_size", sizeBins,
"container size" );
280 myBook1D(ibooker,
"globMuon_size", sizeBins,
"container size" );
296 for(GenParticleCollection::const_iterator
p=genParticles->begin();
p!= genParticles->end(); ++
p){
297 if(
p->status() == 1 &&
std::abs(
p->pdgId())==13 &&
299 genMuons.push_back( *
p );
303 LogDebug(
"HLTriggerOfflineHeavyFlavor")<<
"Could not access GenParticleCollection"<<endl;
306 ME[
"genMuon_size"]->Fill(genMuons.size());
307 LogDebug(
"HLTriggerOfflineHeavyFlavor")<<
"GenParticleCollection from "<<
genParticlesTag<<
" has size: "<<genMuons.size()<<endl;
309 vector<LeafCandidate> globMuons;
310 vector<LeafCandidate> globMuons_position;
314 for(MuonCollection::const_iterator
p=recoMuonsHandle->begin();
p!= recoMuonsHandle->end(); ++
p){
315 if(
p->isGlobalMuon()){
316 globMuons.push_back(*
p);
317 globMuons_position.push_back(
LeafCandidate(
p->charge(),
math::XYZTLorentzVector(
p->outerTrack()->innerPosition().x(),
p->outerTrack()->innerPosition().y(),
p->outerTrack()->innerPosition().z(), 0.) ) );
321 LogDebug(
"HLTriggerOfflineHeavyFlavor")<<
"Could not access reco Muons"<<endl;
323 ME[
"globMuon_size"]->Fill(globMuons.size());
324 LogDebug(
"HLTriggerOfflineHeavyFlavor")<<
"Global Muons from "<<
recoMuonsTag<<
" has size: "<<globMuons.size()<<endl;
327 vector<vector<LeafCandidate> > muonsAtFilter;
328 vector<vector<LeafCandidate> > muonPositionsAtFilter;
330 muonsAtFilter.push_back(vector<LeafCandidate>());
331 muonPositionsAtFilter.push_back(vector<LeafCandidate>());
335 if( rawTriggerEvent.
isValid() ){
338 if ( index < rawTriggerEvent->
size() ){
340 vector<L1MuonParticleRef> l1Cands;
342 for(
size_t j=0; j<l1Cands.size(); j++){
343 muonsAtFilter[
i].push_back(*l1Cands[j]);
346 vector<RecoChargedCandidateRef> hltCands;
348 for(
size_t j=0; j<hltCands.size(); j++){
349 muonsAtFilter[
i].push_back(*hltCands[j]);
356 ME[TString::Format(
"filt%dMuon_size",
int(
i+1))]->Fill(muonsAtFilter[
i].
size());
357 LogDebug(
"HLTriggerOfflineHeavyFlavor")<<
"Filter \""<<
filterNamesLevels[
i].first<<
"\" has "<<muonsAtFilter[
i].size()<<
" muons"<<endl;
360 LogDebug(
"HLTriggerOfflineHeavyFlavor")<<
"Could not access RAWTriggerEvent"<<endl;
364 vector<LeafCandidate> pathMuons;
372 for(
size_t j=0; j<keys.size(); j++){
377 ME[
"pathMuon_size"]->Fill(pathMuons.size());
380 LogDebug(
"HLTriggerOfflineHeavyFlavor")<<
"Could not access AODTriggerEvent"<<endl;
384 bool triggerFired =
false;
390 bool hlt_exists =
false;
391 for (
unsigned int i=0;
i!=triggerNames.
size();
i++) {
394 triggerFired = triggerResults->
accept(
i );
407 vector<int> glob_gen(genMuons.size(),-1);
409 vector<vector<int> > filt_glob;
411 filt_glob.push_back( vector<int>(globMuons.size(),-1) );
420 vector<int> path_glob(globMuons.size(),-1);
431 for(
size_t i=0;
i<genMuons.size();
i++){
432 ME[
"genMuon_genEtaPt"]->Fill(genMuons[
i].
eta(), genMuons[
i].
pt());
433 ME[
"genMuon_genEtaPhi"]->Fill(genMuons[
i].
eta(), genMuons[
i].
phi());
434 if(glob_gen[
i] != -1) {
435 ME[
"resGlobGen_genEtaPt"]->Fill(genMuons[
i].
eta(), genMuons[
i].
pt(), (globMuons[glob_gen[
i]].
pt()-genMuons[
i].
pt())/genMuons[
i].
pt() );
436 ME[
"globMuon_genEtaPt"]->Fill(genMuons[
i].
eta(), genMuons[
i].
pt());
437 ME[
"globMuon_genEtaPhi"]->Fill(genMuons[
i].
eta(), genMuons[
i].
phi());
438 ME[
"globMuon_recoEtaPt"]->Fill(globMuons[glob_gen[
i]].
eta(), globMuons[glob_gen[
i]].
pt());
439 ME[
"globMuon_recoEtaPhi"]->Fill(globMuons[glob_gen[
i]].
eta(), globMuons[glob_gen[
i]].
phi());
441 if(filt_glob[
f][glob_gen[
i]] != -1) {
442 ME[TString::Format(
"resFilt%dGlob_recoEtaPt",
int(
f+1))]->Fill(globMuons[glob_gen[
i]].
eta(), globMuons[glob_gen[
i]].
pt(), (muonsAtFilter[
f][filt_glob[
f][glob_gen[
i]]].
pt()-globMuons[glob_gen[
i]].
pt())/globMuons[glob_gen[
i]].
pt() );
443 ME[TString::Format(
"filt%dMuon_recoEtaPt",
int(
f+1))]->Fill(globMuons[glob_gen[
i]].
eta(), globMuons[glob_gen[
i]].
pt());
444 ME[TString::Format(
"filt%dMuon_recoEtaPhi",
int(
f+1))]->Fill(globMuons[glob_gen[
i]].
eta(), globMuons[glob_gen[
i]].
phi());
449 if(path_glob[glob_gen[
i]] != -1){
450 ME[
"resPathGlob_recoEtaPt"]->Fill(globMuons[glob_gen[
i]].
eta(), globMuons[glob_gen[
i]].
pt(), (pathMuons[path_glob[glob_gen[
i]]].
pt()-globMuons[glob_gen[
i]].
pt())/globMuons[glob_gen[
i]].
pt() );
451 ME[
"pathMuon_recoEtaPt"]->Fill(globMuons[glob_gen[
i]].
eta(), globMuons[glob_gen[
i]].
pt());
452 ME[
"pathMuon_recoEtaPhi"]->Fill(globMuons[glob_gen[
i]].
eta(), globMuons[glob_gen[
i]].
phi());
458 ME[
"resultMuon_recoEtaPt"]->Fill(globMuons[glob_gen[
i]].
eta(), globMuons[glob_gen[
i]].
pt());
459 ME[
"resultMuon_recoEtaPhi"]->Fill(globMuons[glob_gen[
i]].
eta(), globMuons[glob_gen[
i]].
phi());
467 for(
size_t j=1; j<genMuons.size(); j++){
468 if(genMuons[0].
charge()*genMuons[j].charge()==-1){
475 double genDimuonPt = (genMuons[0].p4()+genMuons[secondMuon].p4()).
pt();
476 double genDimuonEta = (genMuons[0].p4()+genMuons[secondMuon].p4()).
eta();
477 double genDimuonRap = (genMuons[0].p4()+genMuons[secondMuon].p4()).Rapidity();
478 double genDimuonDR = deltaR<LeafCandidate,LeafCandidate>( genMuons[0], genMuons[secondMuon] );
479 bool highPt = genMuons[0].pt()>7. && genMuons[secondMuon].pt()>7;
480 ME[
"genDimuon_genEtaPt"]->Fill( genDimuonEta, genDimuonPt );
481 ME[
"genDimuon_genRapPt"]->Fill( genDimuonRap, genDimuonPt );
482 if(highPt)
ME[
"genDimuon_genPtDR"]->Fill( genDimuonPt, genDimuonDR );
484 if(glob_gen[0]!=-1 && glob_gen[secondMuon]!=-1){
485 ME[
"globDimuon_genEtaPt"]->Fill( genDimuonEta, genDimuonPt );
486 ME[
"globDimuon_genRapPt"]->Fill( genDimuonRap, genDimuonPt );
487 if(highPt)
ME[
"globDimuon_genPtDR"]->Fill( genDimuonPt, genDimuonDR );
488 double globDimuonPt = (globMuons[glob_gen[0]].p4()+globMuons[glob_gen[secondMuon]].p4()).
pt();
489 double globDimuonEta = (globMuons[glob_gen[0]].p4()+globMuons[glob_gen[secondMuon]].p4()).
eta();
490 double globDimuonRap = (globMuons[glob_gen[0]].p4()+globMuons[glob_gen[secondMuon]].p4()).Rapidity();
491 double globDimuonDR = deltaR<LeafCandidate,LeafCandidate>( globMuons[glob_gen[0]], globMuons[glob_gen[secondMuon]] );
492 double globDimuonDRpos = deltaR<LeafCandidate,LeafCandidate>( globMuons_position[glob_gen[0]], globMuons_position[glob_gen[secondMuon]] );
493 ME[
"globDimuon_recoEtaPt"]->Fill( globDimuonEta, globDimuonPt );
494 ME[
"globDimuon_recoRapPt"]->Fill( globDimuonRap, globDimuonPt );
495 if(highPt)
ME[
"globDimuon_recoPtDR"]->Fill( globDimuonPt, globDimuonDR );
496 if(highPt)
ME[
"globDimuon_recoPtDRpos"]->Fill( globDimuonPt, globDimuonDRpos );
499 if(filt_glob[
f][glob_gen[0]] != -1 && filt_glob[
f][glob_gen[secondMuon]] != -1){
500 ME[TString::Format(
"diFilt%dDimuon_recoEtaPt",
int(
f+1))]->Fill( globDimuonEta, globDimuonPt );
501 ME[TString::Format(
"diFilt%dDimuon_recoRapPt",
int(
f+1))]->Fill( globDimuonRap, globDimuonPt );
502 if(highPt)
ME[TString::Format(
"diFilt%dDimuon_recoPtDR",
int(
f+1))]->Fill( globDimuonPt, globDimuonDR );
503 if(highPt)
ME[TString::Format(
"diFilt%dDimuon_recoPtDRpos",
int(
f+1))]->Fill( globDimuonPt, globDimuonDRpos );
510 if(filt_glob[
f][glob_gen[0]] != -1 || filt_glob[
f][glob_gen[secondMuon]] != -1){
511 ME[TString::Format(
"filt%dDimuon_recoEtaPt",
int(
f+1))]->Fill( globDimuonEta, globDimuonPt );
512 ME[TString::Format(
"filt%dDimuon_recoRapPt",
int(
f+1))]->Fill( globDimuonRap, globDimuonPt );
513 if(highPt)
ME[TString::Format(
"filt%dDimuon_recoPtDR",
int(
f+1))]->Fill( globDimuonPt, globDimuonDR );
514 if(highPt)
ME[TString::Format(
"filt%dDimuon_recoPtDRpos",
int(
f+1))]->Fill( globDimuonPt, globDimuonDRpos );
520 if(path_glob[glob_gen[0]] != -1 && path_glob[glob_gen[secondMuon]] != -1){
521 ME[
"diPathDimuon_recoEtaPt"]->Fill( globDimuonEta, globDimuonPt );
522 ME[
"diPathDimuon_recoRapPt"]->Fill( globDimuonRap, globDimuonPt );
523 if(highPt)
ME[
"diPathDimuon_recoPtDR"]->Fill( globDimuonPt, globDimuonDR );
524 if(highPt)
ME[
"diPathDimuon_recoPtDRpos"]->Fill( globDimuonPt, globDimuonDRpos );
527 if(path_glob[glob_gen[0]] != -1 || path_glob[glob_gen[secondMuon]] != -1){
528 ME[
"pathDimuon_recoEtaPt"]->Fill( globDimuonEta, globDimuonPt );
529 ME[
"pathDimuon_recoRapPt"]->Fill( globDimuonRap, globDimuonPt );
530 if(highPt)
ME[
"pathDimuon_recoPtDR"]->Fill( globDimuonPt, globDimuonDR );
531 if(highPt)
ME[
"pathDimuon_recoPtDRpos"]->Fill( globDimuonPt, globDimuonDRpos );
535 ME[
"resultDimuon_recoEtaPt"]->Fill( globDimuonEta, globDimuonPt );
536 ME[
"resultDimuon_recoRapPt"]->Fill( globDimuonRap, globDimuonPt );
537 if(highPt)
ME[
"resultDimuon_recoPtDR"]->Fill( globDimuonPt, globDimuonDR );
538 if(highPt)
ME[
"resultDimuon_recoPtDRpos"]->Fill( globDimuonPt, globDimuonDRpos );
550 return mother->
pdgId();
558 vector<double>
dR(from.size());
559 for(
size_t i=0;
i<from.size();
i++){
563 for(
size_t j=0; j<to.size(); j++){
564 double dRtmp = deltaR<double>(from[
i].eta(), from[
i].phi(), to[j].eta(), to[j].phi());
575 if(
dR[
i] > dRMatchingCut ){
580 for(
size_t k=0;
k<
i;
k++){
581 if( map[
k] != -1 && map[i] == map[
k] ){
597 int ptN = ptBins.size()==3 ? (
int)ptBins[0]+1 : ptBins.size();
598 Double_t *
pt =
new Double_t[ ptN ];
599 for(
int i=0;
i<ptN;
i++){
600 pt[
i] = ptBins.size()==3 ? ptBins[1] +
i*(ptBins[2]-ptBins[1])/ptBins[0] : ptBins[
i] ;
602 int etaN = etaBins.size()==3 ? (
int)etaBins[0]+1 : etaBins.size();
603 Double_t *
eta =
new Double_t[ etaN ];
604 for(
int i=0;
i<etaN;
i++){
605 eta[
i] = etaBins.size()==3 ? etaBins[1] +
i*(etaBins[2]-etaBins[1])/etaBins[0] : etaBins[
i] ;
607 TH2F *
h =
new TH2F( name, name, ptN-1, pt, etaN-1, eta );
608 h->SetXTitle(ptLabel);
609 h->SetYTitle(etaLabel);
618 int ptN = ptBins.size()==3 ? (
int)ptBins[0]+1 : ptBins.size();
619 Double_t *
pt =
new Double_t[ ptN ];
620 for(
int i=0;
i<ptN;
i++){
621 pt[
i] = ptBins.size()==3 ? ptBins[1] +
i*(ptBins[2]-ptBins[1])/ptBins[0] : ptBins[
i] ;
623 int etaN = etaBins.size()==3 ? (
int)etaBins[0]+1 : etaBins.size();
624 Double_t *
eta =
new Double_t[ etaN ];
625 for(
int i=0;
i<etaN;
i++){
626 eta[
i] = etaBins.size()==3 ? etaBins[1] +
i*(etaBins[2]-etaBins[1])/etaBins[0] : etaBins[
i] ;
628 TProfile2D *
h =
new TProfile2D( name, name, ptN-1, pt, etaN-1, eta );
629 h->SetXTitle(ptLabel);
630 h->SetYTitle(etaLabel);
639 int binsN = bins.size()==3 ? (
int)bins[0]+1 : bins.size();
640 Double_t *myBins =
new Double_t[ binsN ];
641 for(
int i=0;
i<binsN;
i++){
642 myBins[
i] = bins.size()==3 ? bins[1] +
i*(bins[2]-bins[1])/bins[0] : bins[
i] ;
644 TH1F *
h =
new TH1F( name, name, binsN-1, myBins );
655 return s.find(sub) != std::string::npos;
659 const auto containsAny = [](
const std::string &
s,
const std::vector<std::string> &subs) ->
bool {
660 for (
const auto &sub : subs) {
661 if (s.find(sub) != std::string::npos)
return true;
667 const auto isAnyOf = [](
const std::string &
s,
const std::vector<std::string>&
ms) ->
bool {
668 for (
const auto &
m :
ms) {
669 if (s ==
m)
return true;
683 const std::string l2Filter =
"HLTMuonL2FromL1TPreFilter";
684 const std::vector<std::string> l3Filters = {
"HLTMuonDimuonL3Filter",
"HLTMuonL3PreFilter"};
685 const std::vector<std::string> l4Filters = {
"HLTDisplacedmumuFilter",
"HLTDiMuonGlbTrkFilter",
686 "HLTMuonTrackMassFilter"};
687 const std::vector<std::string> l5Filters = {
"HLTmumutkFilter",
"HLT2MuonMuonDZ",
"HLTDisplacedmumuFilter"};
691 hltConfig.
moduleType(moduleName) == l1Filter) {
697 if (
contains(moduleName,
"L3") && isAnyOf(hltConfig.
moduleType(moduleName), l3Filters)) {
700 if (containsAny(moduleName, {
"DisplacedmumuFilter",
"DiMuon",
"MuonL3Filtered",
"TrackMassFiltered"}) &&
701 isAnyOf(hltConfig.
moduleType(moduleName), l4Filters)) {
704 if (containsAny(moduleName, {
"Vertex",
"Dz"}) &&
705 isAnyOf(hltConfig.
moduleType(moduleName), l5Filters)) {
double globL1DeltaRMatchingCut
vector< double > dimuonPtBins
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
const std::string moduleType(const std::string &module) const
C++ class name of module.
bool contains(EventRange const &lh, EventID const &rh)
trigger::size_type sizeFilters() const
void myBook2D(DQMStore::IBooker &ibooker, TString name, vector< double > &xBins, TString xLabel, vector< double > &yBins, TString yLabel, TString title)
FWCore Framework interface EventSetupRecordImplementation h
Helper function to determine trigger accepts.
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
bool accept() const
Has at least one path accepted the event?
const std::vector< std::string > & triggerNames() const
names of trigger paths
const Keys & filterKeys(trigger::size_type index) const
vector< pair< string, int > > filterNamesLevels
const std::string moduleEDMType(const std::string &module) const
C++ base class name of module.
virtual const Candidate * mother(size_type i=0) const =0
return pointer to mother
Strings::size_type size() const
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
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)
std::string moduleName(Provenance const &provenance)
#define DEFINE_FWK_MODULE(type)
void setCurrentFolder(std::string const &fullpath)
void match(MonitorElement *me, vector< LeafCandidate > &from, vector< LeafCandidate > &to, double deltaRMatchingCut, vector< int > &map)
const TriggerObjectCollection & getObjects() const
MonitorElement * bookProfile2D(Args &&...args)
virtual int pdgId() const =0
PDG identifier.
EDGetTokenT< TriggerEventWithRefs > triggerSummaryRAWTag
MonitorElement * book1D(Args &&...args)
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 &)
size_type filterIndex(const edm::InputTag &filterTag) const
index from tag
double globL2DeltaRMatchingCut
const std::vector< std::string > & moduleLabels(unsigned int trigger) const
label(s) of module(s) on a trigger path
~HeavyFlavorValidation() override
std::vector< TriggerObject > TriggerObjectCollection
collection of trigger physics objects (e.g., all isolated muons)
const edm::InputTag filterTag(trigger::size_type index) const
vector< double > deltaEtaBins
MonitorElement * book2D(Args &&...args)
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
void getObjects(size_type filter, Vids &ids, VRphoton &photons) const
extract Ref<C>s for a specific filter and of specific physics type
bool init(const edm::Run &iRun, const edm::EventSetup &iSetup, const std::string &processName, bool &changed)
d'tor
vector< double > muonPhiBins
example_stream void bookHistograms(DQMStore::IBooker &,@example_stream edm::Run const &,@example_stream edm::EventSetup const &) override
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
InputTag triggerResultsTag
map< TString, MonitorElement * > ME
edm::TriggerNames const & triggerNames(edm::TriggerResults const &triggerResults) const override
vector< double > muonEtaBins