#include <HLTriggerOfflineHeavyFlavor/src/HeavyFlavorValidation.cc>
Public Member Functions | |
HeavyFlavorValidation (const edm::ParameterSet &) | |
~HeavyFlavorValidation () | |
Private Member Functions | |
virtual void | analyze (const edm::Event &, const edm::EventSetup &) |
virtual void | beginRun (const Run &iRun, const EventSetup &iSetup) |
virtual void | endJob () |
int | getMotherId (const Candidate *p) |
void | match (MonitorElement *me, vector< LeafCandidate > &from, vector< LeafCandidate > &to, double deltaRMatchingCut, vector< int > &map) |
void | myBook1D (TString name, vector< double > &xBins, TString label) |
void | myBook1D (TString name, vector< double > &xBins, TString label, TString title) |
void | myBook2D (TString name, vector< double > &xBins, TString xLabel, vector< double > &yBins, TString yLabel) |
void | myBook2D (TString name, vector< double > &xBins, TString xLabel, vector< double > &yBins, TString yLabel, TString title) |
void | myBookProfile2D (TString name, vector< double > &xBins, TString xLabel, vector< double > &yBins, TString yLabel, TString title) |
void | myBookProfile2D (TString name, vector< double > &xBins, TString xLabel, vector< double > &yBins, TString yLabel) |
Private Attributes | |
vector< double > | deltaEtaBins |
vector< double > | deltaPhiBins |
vector< double > | dimuonDRBins |
vector< double > | dimuonEtaBins |
vector< double > | dimuonPtBins |
string | dqmFolder |
DQMStore * | dqmStore |
vector< pair< string, int > > | filterNamesLevels |
double | genGlobDeltaRMatchingCut |
InputTag | genParticlesTag |
double | globL1DeltaRMatchingCut |
double | globL2DeltaRMatchingCut |
double | globL3DeltaRMatchingCut |
map< TString, MonitorElement * > | ME |
vector< int > | motherIDs |
vector< double > | muonEtaBins |
const double | muonMass |
vector< double > | muonPhiBins |
vector< double > | muonPtBins |
InputTag | recoMuonsTag |
string | triggerPathName |
string | triggerProcessName |
InputTag | triggerResultsTag |
InputTag | triggerSummaryAODTag |
InputTag | triggerSummaryRAWTag |
Description: Analyzer to fill Monitoring Elements for muon, dimuon and trigger path efficiency studies (HLT/RECO, RECO/GEN)
Implementation: matching is based on closest in delta R, no duplicates allowed. Generated to Global based on momentum at IP; L1, L2, L2v to Global based on position in muon system, L3 to Global based on momentum at IP.
Definition at line 52 of file HeavyFlavorValidation.cc.
HeavyFlavorValidation::HeavyFlavorValidation | ( | const edm::ParameterSet & | pset | ) | [explicit] |
Definition at line 101 of file HeavyFlavorValidation.cc.
: //get parameters dqmFolder(pset.getUntrackedParameter<string>("DQMFolder")), triggerProcessName(pset.getUntrackedParameter<string>("TriggerProcessName")), triggerPathName(pset.getUntrackedParameter<string>("TriggerPathName")), triggerSummaryRAWTag(InputTag( pset.getUntrackedParameter<string>("TriggerSummaryRAW"), "", triggerProcessName)), triggerSummaryAODTag(InputTag( pset.getUntrackedParameter<string>("TriggerSummaryAOD"), "", triggerProcessName)), triggerResultsTag(InputTag( pset.getUntrackedParameter<string>("TriggerResults"), "", triggerProcessName)), recoMuonsTag(pset.getParameter<InputTag>("RecoMuons")), genParticlesTag(pset.getParameter<InputTag>("GenParticles")), motherIDs(pset.getUntrackedParameter<vector<int> >("MotherIDs")), genGlobDeltaRMatchingCut(pset.getUntrackedParameter<double>("GenGlobDeltaRMatchingCut")), globL1DeltaRMatchingCut(pset.getUntrackedParameter<double>("GlobL1DeltaRMatchingCut")), globL2DeltaRMatchingCut(pset.getUntrackedParameter<double>("GlobL2DeltaRMatchingCut")), globL3DeltaRMatchingCut(pset.getUntrackedParameter<double>("GlobL3DeltaRMatchingCut")), deltaEtaBins(pset.getUntrackedParameter<vector<double> >("DeltaEtaBins")), deltaPhiBins(pset.getUntrackedParameter<vector<double> >("DeltaPhiBins")), muonPtBins(pset.getUntrackedParameter<vector<double> >("MuonPtBins")), muonEtaBins(pset.getUntrackedParameter<vector<double> >("MuonEtaBins")), muonPhiBins(pset.getUntrackedParameter<vector<double> >("MuonPhiBins")), dimuonPtBins(pset.getUntrackedParameter<vector<double> >("DimuonPtBins")), dimuonEtaBins(pset.getUntrackedParameter<vector<double> >("DimuonEtaBins")), dimuonDRBins(pset.getUntrackedParameter<vector<double> >("DimuonDRBins")), muonMass(0.106) {}
HeavyFlavorValidation::~HeavyFlavorValidation | ( | ) |
Definition at line 642 of file HeavyFlavorValidation.cc.
{ }
void HeavyFlavorValidation::analyze | ( | const edm::Event & | iEvent, |
const edm::EventSetup & | iSetup | ||
) | [private, virtual] |
Implements edm::EDAnalyzer.
Definition at line 275 of file HeavyFlavorValidation.cc.
References abs, DeDxDiscriminatorTools::charge(), dqmStore, eta(), f, filterNamesLevels, spr::find(), first, genGlobDeltaRMatchingCut, genParticleCandidates2GenParticles_cfi::genParticles, genParticlesTag, edm::Event::getByLabel(), getMotherId(), globL1DeltaRMatchingCut, globL2DeltaRMatchingCut, globL3DeltaRMatchingCut, i, getHLTprescales::index, edm::HandleBase::isValid(), j, relativeConstraints::keys, LogDebug, match(), motherIDs, muonMass, AlCaHLTBitMon_ParallelJobs::p, phi, recoMuonsTag, edm::second(), findQualityFiles::size, edm::TriggerNames::size(), python::multivaluedict::sort(), edm::TriggerNames::triggerIndex(), trigger::TriggerL1Mu, trigger::TriggerMuon, edm::Event::triggerNames(), triggerPathName, triggerProcessName, patRefSel_triggerSelection_cff::triggerResults, triggerResultsTag, triggerSummaryAODTag, triggerSummaryRAWTag, x, detailsBasic3DVector::y, and z.
{ if( !dqmStore ){ LogDebug("HLTriggerOfflineHeavyFlavor")<<"Could not access DQM Store service"<<endl; return; } if(filterNamesLevels.size()==0){ return; } //access the containers and create LeafCandidate copies vector<LeafCandidate> genMuons; Handle<GenParticleCollection> genParticles; iEvent.getByLabel(genParticlesTag, genParticles); if(genParticles.isValid()){ for(GenParticleCollection::const_iterator p=genParticles->begin(); p!= genParticles->end(); ++p){ if( p->status() == 1 && std::abs(p->pdgId())==13 && ( find( motherIDs.begin(), motherIDs.end(), -1 )!=motherIDs.end() || find( motherIDs.begin(), motherIDs.end(), getMotherId(&(*p)) )!=motherIDs.end() ) ){ genMuons.push_back( *p ); } } }else{ LogDebug("HLTriggerOfflineHeavyFlavor")<<"Could not access GenParticleCollection"<<endl; } sort(genMuons.begin(), genMuons.end(), GreaterByPt<LeafCandidate>()); ME["genMuon_size"]->Fill(genMuons.size()); LogDebug("HLTriggerOfflineHeavyFlavor")<<"GenParticleCollection from "<<genParticlesTag<<" has size: "<<genMuons.size()<<endl; vector<LeafCandidate> globMuons; vector<LeafCandidate> globMuons_position; Handle<MuonCollection> recoMuonsHandle; iEvent.getByLabel(recoMuonsTag, recoMuonsHandle); if(recoMuonsHandle.isValid()){ for(MuonCollection::const_iterator p=recoMuonsHandle->begin(); p!= recoMuonsHandle->end(); ++p){ if(p->isGlobalMuon()){ globMuons.push_back(*p); globMuons_position.push_back( LeafCandidate( p->charge(), math::XYZTLorentzVector(p->outerTrack()->innerPosition().x(), p->outerTrack()->innerPosition().y(), p->outerTrack()->innerPosition().z(), 0.) ) ); } } }else{ LogDebug("HLTriggerOfflineHeavyFlavor")<<"Could not access reco Muons"<<endl; } ME["globMuon_size"]->Fill(globMuons.size()); LogDebug("HLTriggerOfflineHeavyFlavor")<<"Global Muons from "<<recoMuonsTag<<" has size: "<<globMuons.size()<<endl; // access RAW trigger event vector<vector<LeafCandidate> > muonsAtFilter; vector<vector<LeafCandidate> > muonPositionsAtFilter; for(size_t i=0; i<filterNamesLevels.size(); i++){ muonsAtFilter.push_back(vector<LeafCandidate>()); muonPositionsAtFilter.push_back(vector<LeafCandidate>()); } Handle<TriggerEventWithRefs> rawTriggerEvent; iEvent.getByLabel( triggerSummaryRAWTag, rawTriggerEvent ); if( rawTriggerEvent.isValid() ){ for(size_t i=0; i<filterNamesLevels.size(); i++){ size_t index = rawTriggerEvent->filterIndex(InputTag( filterNamesLevels[i].first, "", triggerProcessName )); if ( index < rawTriggerEvent->size() ){ if( filterNamesLevels[i].second==1 ){ vector<L1MuonParticleRef> l1Cands; rawTriggerEvent->getObjects( index, TriggerL1Mu, l1Cands ); for(size_t j=0; j<l1Cands.size(); j++){ muonsAtFilter[i].push_back(*l1Cands[j]); } }else{ vector<RecoChargedCandidateRef> hltCands; rawTriggerEvent->getObjects( index, TriggerMuon, hltCands ); for(size_t j=0; j<hltCands.size(); j++){ muonsAtFilter[i].push_back(*hltCands[j]); if( filterNamesLevels[i].second==2 ){ muonPositionsAtFilter[i].push_back( LeafCandidate( hltCands[j]->charge(), math::XYZTLorentzVector(hltCands[j]->track()->innerPosition().x(), hltCands[j]->track()->innerPosition().y(), hltCands[j]->track()->innerPosition().z(), 0.) ) ); } } } } ME[TString::Format("filt%dMuon_size",int(i+1))]->Fill(muonsAtFilter[i].size()); LogDebug("HLTriggerOfflineHeavyFlavor")<<"Filter \""<<filterNamesLevels[i].first<<"\" has "<<muonsAtFilter[i].size()<<" muons"<<endl; } }else{ LogDebug("HLTriggerOfflineHeavyFlavor")<<"Could not access RAWTriggerEvent"<<endl; } // access AOD trigger event vector<LeafCandidate> pathMuons; Handle<TriggerEvent> aodTriggerEvent; iEvent.getByLabel(triggerSummaryAODTag,aodTriggerEvent); if(aodTriggerEvent.isValid()){ TriggerObjectCollection allObjects = aodTriggerEvent->getObjects(); for(int i=0; i<aodTriggerEvent->sizeFilters(); i++){ if(aodTriggerEvent->filterTag(i)==InputTag((filterNamesLevels.end()-1)->first,"",triggerProcessName)){ Keys keys = aodTriggerEvent->filterKeys(i); for(size_t j=0; j<keys.size(); j++){ pathMuons.push_back( LeafCandidate( allObjects[keys[j]].id()>0 ? 1 : -1, math::PtEtaPhiMLorentzVector( allObjects[keys[j]].pt(), allObjects[keys[j]].eta(), allObjects[keys[j]].phi(), muonMass ) ) ); } } } ME["pathMuon_size"]->Fill(pathMuons.size()); LogDebug("HLTriggerOfflineHeavyFlavor")<<"Path \""<<triggerPathName<<"\" has "<<pathMuons.size()<<" muons at last filter \""<<(filterNamesLevels.end()-1)->first<<"\""<<endl; }else{ LogDebug("HLTriggerOfflineHeavyFlavor")<<"Could not access AODTriggerEvent"<<endl; } // access Trigger Results bool triggerFired = false; Handle<TriggerResults> triggerResults; iEvent.getByLabel(triggerResultsTag,triggerResults); if(triggerResults.isValid()){ LogDebug("HLTriggerOfflineHeavyFlavor")<<"Successfully initialized "<<triggerResultsTag<<endl; const edm::TriggerNames & triggerNames = iEvent.triggerNames(*triggerResults); size_t index = triggerNames.triggerIndex(triggerPathName); if( index < triggerNames.size() ){ triggerFired = triggerResults->accept( index ); }else{ LogDebug("HLTriggerOfflineHeavyFlavor")<<triggerResultsTag<<" has no trigger: "<<triggerPathName<<endl; } }else{ LogDebug("HLTriggerOfflineHeavyFlavor")<<"Could not initialize "<<triggerResultsTag<<endl; } //create matching maps vector<int> glob_gen(genMuons.size(),-1); match( ME["globGen_deltaEtaDeltaPhi"], genMuons, globMuons, genGlobDeltaRMatchingCut, glob_gen ); vector<vector<int> > filt_glob; for(size_t i=0; i<filterNamesLevels.size(); i++){ filt_glob.push_back( vector<int>(globMuons.size(),-1) ); if( filterNamesLevels[i].second == 1 ){ match( ME[TString::Format("filt%dGlob_deltaEtaDeltaPhi",int(i+1))], globMuons_position, muonsAtFilter[i] ,globL1DeltaRMatchingCut, filt_glob[i] ); }else if( filterNamesLevels[i].second == 2 ){ match( ME[TString::Format("filt%dGlob_deltaEtaDeltaPhi",int(i+1))], globMuons_position, muonPositionsAtFilter[i] ,globL2DeltaRMatchingCut, filt_glob[i] ); }else if( filterNamesLevels[i].second == 3 ){ match( ME[TString::Format("filt%dGlob_deltaEtaDeltaPhi",int(i+1))], globMuons, muonsAtFilter[i] ,globL3DeltaRMatchingCut, filt_glob[i] ); } } vector<int> path_glob(globMuons.size(),-1); if( (filterNamesLevels.end()-1)->second == 1 ){ match( ME["pathGlob_deltaEtaDeltaPhi"], globMuons_position, pathMuons ,globL1DeltaRMatchingCut, path_glob ); }else if( (filterNamesLevels.end()-1)->second == 2 ){ match( ME["pathGlob_deltaEtaDeltaPhi"], globMuons, pathMuons ,globL2DeltaRMatchingCut, path_glob ); }else if( (filterNamesLevels.end()-1)->second == 3 ){ match( ME["pathGlob_deltaEtaDeltaPhi"], globMuons, pathMuons ,globL3DeltaRMatchingCut, path_glob ); } //fill histos bool first = true; for(size_t i=0; i<genMuons.size(); i++){ ME["genMuon_genEtaPt"]->Fill(genMuons[i].eta(), genMuons[i].pt()); ME["genMuon_genEtaPhi"]->Fill(genMuons[i].eta(), genMuons[i].phi()); if(glob_gen[i] != -1){ ME["resGlobGen_genEtaPt"]->Fill(genMuons[i].eta(), genMuons[i].pt(), (globMuons[glob_gen[i]].pt()-genMuons[i].pt())/genMuons[i].pt() ); ME["globMuon_genEtaPt"]->Fill(genMuons[i].eta(), genMuons[i].pt()); ME["globMuon_genEtaPhi"]->Fill(genMuons[i].eta(), genMuons[i].phi()); ME["globMuon_recoEtaPt"]->Fill(globMuons[glob_gen[i]].eta(), globMuons[glob_gen[i]].pt()); ME["globMuon_recoEtaPhi"]->Fill(globMuons[glob_gen[i]].eta(), globMuons[glob_gen[i]].phi()); for(size_t f=0; f<filterNamesLevels.size(); f++){ if(filt_glob[f][glob_gen[i]] != -1){ 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() ); ME[TString::Format("filt%dMuon_recoEtaPt",int(f+1))]->Fill(globMuons[glob_gen[i]].eta(), globMuons[glob_gen[i]].pt()); ME[TString::Format("filt%dMuon_recoEtaPhi",int(f+1))]->Fill(globMuons[glob_gen[i]].eta(), globMuons[glob_gen[i]].phi()); }else{ break; } } if(path_glob[glob_gen[i]] != -1){ 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() ); ME["pathMuon_recoEtaPt"]->Fill(globMuons[glob_gen[i]].eta(), globMuons[glob_gen[i]].pt()); ME["pathMuon_recoEtaPhi"]->Fill(globMuons[glob_gen[i]].eta(), globMuons[glob_gen[i]].phi()); } //highest pt muon if( first ){ first = false; if( triggerFired ){ ME["resultMuon_recoEtaPt"]->Fill(globMuons[glob_gen[i]].eta(), globMuons[glob_gen[i]].pt()); ME["resultMuon_recoEtaPhi"]->Fill(globMuons[glob_gen[i]].eta(), globMuons[glob_gen[i]].phi()); } } } } //fill dimuon histograms (highest pT, opposite charge) int secondMuon = 0; for(size_t j=1; j<genMuons.size(); j++){ if(genMuons[0].charge()*genMuons[j].charge()==-1){ secondMuon = j; break; } } if(secondMuon > 0){ // int pos = genMuons[0].charge()>0 ? 0 : secondMuon ; // int neg = genMuons[0].charge()<0 ? 0 : secondMuon ; //two generated double genDimuonPt = (genMuons[0].p4()+genMuons[secondMuon].p4()).pt(); double genDimuonEta = (genMuons[0].p4()+genMuons[secondMuon].p4()).eta(); double genDimuonRap = (genMuons[0].p4()+genMuons[secondMuon].p4()).Rapidity(); double genDimuonDR = deltaR<LeafCandidate,LeafCandidate>( genMuons[0], genMuons[secondMuon] ); bool highPt = genMuons[0].pt()>7. && genMuons[secondMuon].pt()>7; ME["genDimuon_genEtaPt"]->Fill( genDimuonEta, genDimuonPt ); ME["genDimuon_genRapPt"]->Fill( genDimuonRap, genDimuonPt ); if(highPt) ME["genDimuon_genPtDR"]->Fill( genDimuonPt, genDimuonDR ); //two global if(glob_gen[0]!=-1 && glob_gen[secondMuon]!=-1){ ME["globDimuon_genEtaPt"]->Fill( genDimuonEta, genDimuonPt ); ME["globDimuon_genRapPt"]->Fill( genDimuonRap, genDimuonPt ); if(highPt) ME["globDimuon_genPtDR"]->Fill( genDimuonPt, genDimuonDR ); double globDimuonPt = (globMuons[glob_gen[0]].p4()+globMuons[glob_gen[secondMuon]].p4()).pt(); double globDimuonEta = (globMuons[glob_gen[0]].p4()+globMuons[glob_gen[secondMuon]].p4()).eta(); double globDimuonRap = (globMuons[glob_gen[0]].p4()+globMuons[glob_gen[secondMuon]].p4()).Rapidity(); double globDimuonDR = deltaR<LeafCandidate,LeafCandidate>( globMuons[glob_gen[0]], globMuons[glob_gen[secondMuon]] ); double globDimuonDRpos = deltaR<LeafCandidate,LeafCandidate>( globMuons_position[glob_gen[0]], globMuons_position[glob_gen[secondMuon]] ); ME["globDimuon_recoEtaPt"]->Fill( globDimuonEta, globDimuonPt ); ME["globDimuon_recoRapPt"]->Fill( globDimuonRap, globDimuonPt ); if(highPt) ME["globDimuon_recoPtDR"]->Fill( globDimuonPt, globDimuonDR ); if(highPt) ME["globDimuon_recoPtDRpos"]->Fill( globDimuonPt, globDimuonDRpos ); //two filter objects for(size_t f=0; f<filterNamesLevels.size(); f++){ if(filt_glob[f][glob_gen[0]] != -1 && filt_glob[f][glob_gen[secondMuon]] != -1){ ME[TString::Format("diFilt%dDimuon_recoEtaPt",int(f+1))]->Fill( globDimuonEta, globDimuonPt ); ME[TString::Format("diFilt%dDimuon_recoRapPt",int(f+1))]->Fill( globDimuonRap, globDimuonPt ); if(highPt) ME[TString::Format("diFilt%dDimuon_recoPtDR",int(f+1))]->Fill( globDimuonPt, globDimuonDR ); if(highPt) ME[TString::Format("diFilt%dDimuon_recoPtDRpos",int(f+1))]->Fill( globDimuonPt, globDimuonDRpos ); }else{ break; } } //one filter object for(size_t f=0; f<filterNamesLevels.size(); f++){ if(filt_glob[f][glob_gen[0]] != -1 || filt_glob[f][glob_gen[secondMuon]] != -1){ ME[TString::Format("filt%dDimuon_recoEtaPt",int(f+1))]->Fill( globDimuonEta, globDimuonPt ); ME[TString::Format("filt%dDimuon_recoRapPt",int(f+1))]->Fill( globDimuonRap, globDimuonPt ); if(highPt) ME[TString::Format("filt%dDimuon_recoPtDR",int(f+1))]->Fill( globDimuonPt, globDimuonDR ); if(highPt) ME[TString::Format("filt%dDimuon_recoPtDRpos",int(f+1))]->Fill( globDimuonPt, globDimuonDRpos ); }else{ break; } } //two path objects if(path_glob[glob_gen[0]] != -1 && path_glob[glob_gen[secondMuon]] != -1){ ME["diPathDimuon_recoEtaPt"]->Fill( globDimuonEta, globDimuonPt ); ME["diPathDimuon_recoRapPt"]->Fill( globDimuonRap, globDimuonPt ); if(highPt) ME["diPathDimuon_recoPtDR"]->Fill( globDimuonPt, globDimuonDR ); if(highPt) ME["diPathDimuon_recoPtDRpos"]->Fill( globDimuonPt, globDimuonDRpos ); } //one path object if(path_glob[glob_gen[0]] != -1 || path_glob[glob_gen[secondMuon]] != -1){ ME["pathDimuon_recoEtaPt"]->Fill( globDimuonEta, globDimuonPt ); ME["pathDimuon_recoRapPt"]->Fill( globDimuonRap, globDimuonPt ); if(highPt) ME["pathDimuon_recoPtDR"]->Fill( globDimuonPt, globDimuonDR ); if(highPt) ME["pathDimuon_recoPtDRpos"]->Fill( globDimuonPt, globDimuonDRpos ); } //trigger result if( triggerFired ){ ME["resultDimuon_recoEtaPt"]->Fill( globDimuonEta, globDimuonPt ); ME["resultDimuon_recoRapPt"]->Fill( globDimuonRap, globDimuonPt ); if(highPt) ME["resultDimuon_recoPtDR"]->Fill( globDimuonPt, globDimuonDR ); if(highPt) ME["resultDimuon_recoPtDRpos"]->Fill( globDimuonPt, globDimuonDRpos ); } } } }
void HeavyFlavorValidation::beginRun | ( | const Run & | iRun, |
const EventSetup & | iSetup | ||
) | [private, virtual] |
Reimplemented from edm::EDAnalyzer.
Definition at line 127 of file HeavyFlavorValidation.cc.
References deltaEtaBins, deltaPhiBins, dimuonDRBins, dimuonEtaBins, dimuonPtBins, dqmFolder, dqmStore, filterNamesLevels, first, HltComparatorCreateWorkflow::hltConfig, i, HLTConfigProvider::init(), j, testEve_cfg::level, LogDebug, HLTConfigProvider::moduleLabels(), muonEtaBins, muonPhiBins, muonPtBins, myBook1D(), myBook2D(), myBookProfile2D(), mergeVDriftHistosByStation::name, cmsCodeRules::cppFunctionSkipper::operator, DQMStore::setCurrentFolder(), DQMStore::setVerbose(), HLTConfigProvider::triggerNames(), triggerPathName, and triggerProcessName.
{ //discover HLT configuration HLTConfigProvider hltConfig; bool isChanged; if(hltConfig.init(iRun, iSetup, triggerProcessName, isChanged)){ LogDebug("HLTriggerOfflineHeavyFlavor") << "Successfully initialized HLTConfigProvider with process name: "<<triggerProcessName<<endl; }else{ LogWarning("HLTriggerOfflineHeavyFlavor") << "Could not initialize HLTConfigProvider with process name: "<<triggerProcessName<<endl; return; } stringstream os; vector<string> triggerNames = hltConfig.triggerNames(); for( size_t i = 0; i < triggerNames.size(); i++) { TString triggerName = triggerNames[i]; if (triggerName.Contains(triggerPathName)){ vector<string> moduleNames = hltConfig.moduleLabels( triggerNames[i] ); for( size_t j = 0; j < moduleNames.size(); j++) { TString name = moduleNames[j]; if(name.Contains("Filtered")){ int level = 0; if(name.Contains("L1")) level = 1; else if(name.Contains("L2")) level = 2; else if(name.Contains("L3")) level = 3; filterNamesLevels.push_back( pair<string,int>(moduleNames[j],level) ); os<<" "<<moduleNames[j]; } } break; } } if(filterNamesLevels.size()==0){ LogDebug("HLTriggerOfflineHeavyFlavor")<<"Bad Trigger Path: "<<triggerPathName<<endl; return; }else{ LogDebug("HLTriggerOfflineHeavyFlavor")<<"Trigger Path: "<<triggerPathName<<" has filters:"<<os.str(); } //create Monitor Elements dqmStore = Service<DQMStore>().operator->(); if( !dqmStore ){ LogError("HLTriggerOfflineHeavyFlavor") << "Could not find DQMStore service\n"; return; } dqmStore->setVerbose(0); dqmStore->setCurrentFolder((dqmFolder+"/")+triggerProcessName+"/"+triggerPathName); // Eta Pt Single myBook2D( "genMuon_genEtaPt", muonEtaBins, "#mu eta", muonPtBins, " #mu pT (GeV)"); myBook2D( "globMuon_genEtaPt", muonEtaBins, "#mu eta", muonPtBins, " #mu pT (GeV)"); myBook2D( "globMuon_recoEtaPt", muonEtaBins, "#mu eta", muonPtBins, " #mu pT (GeV)"); for(size_t i=0; i<filterNamesLevels.size(); i++){ myBook2D( TString::Format("filt%dMuon_recoEtaPt",int(i+1)), muonEtaBins, "#mu eta", muonPtBins, " #mu pT (GeV)", filterNamesLevels[i].first); } myBook2D( "pathMuon_recoEtaPt", muonEtaBins, "#mu eta", muonPtBins, " #mu pT (GeV)", triggerPathName); myBook2D( "resultMuon_recoEtaPt", muonEtaBins, "#mu eta", muonPtBins, " #mu pT (GeV)"); // Eta Pt Single Resolution myBookProfile2D( "resGlobGen_genEtaPt", muonEtaBins, "#mu eta", muonPtBins, " #mu pT (GeV)"); for(size_t i=0; i<filterNamesLevels.size(); i++){ myBookProfile2D( TString::Format("resFilt%dGlob_recoEtaPt",int(i+1)), muonEtaBins, "#mu eta", muonPtBins, " #mu pT (GeV)", filterNamesLevels[i].first); } myBookProfile2D( "resPathGlob_recoEtaPt", muonEtaBins, "#mu eta", muonPtBins, " #mu pT (GeV)", triggerPathName); // Eta Pt Double myBook2D( "genDimuon_genEtaPt", dimuonEtaBins, "#mu#mu eta", dimuonPtBins, " #mu#mu pT (GeV)"); myBook2D( "globDimuon_genEtaPt", dimuonEtaBins, "#mu#mu eta", dimuonPtBins, " #mu#mu pT (GeV)"); myBook2D( "globDimuon_recoEtaPt", dimuonEtaBins, "#mu#mu eta", dimuonPtBins, " #mu#mu pT (GeV)"); for(size_t i=0; i<filterNamesLevels.size(); i++){ myBook2D( TString::Format("filt%dDimuon_recoEtaPt",int(i+1)), dimuonEtaBins, "#mu#mu eta", dimuonPtBins, " #mu#mu pT (GeV)", filterNamesLevels[i].first); } myBook2D( "pathDimuon_recoEtaPt", dimuonEtaBins, "#mu#mu eta", dimuonPtBins, " #mu#mu pT (GeV)", triggerPathName); myBook2D( "resultDimuon_recoEtaPt", dimuonEtaBins, "#mu#mu eta", dimuonPtBins, " #mu#mu pT (GeV)"); for(size_t i=0; i<filterNamesLevels.size(); i++){ myBook2D( TString::Format("diFilt%dDimuon_recoEtaPt",int(i+1)), dimuonEtaBins, "#mu#mu eta", dimuonPtBins, " #mu#mu pT (GeV)", filterNamesLevels[i].first); } myBook2D( "diPathDimuon_recoEtaPt", dimuonEtaBins, "#mu#mu eta", dimuonPtBins, " #mu#mu pT (GeV)", triggerPathName); // Eta Phi Single myBook2D( "genMuon_genEtaPhi", muonEtaBins, "#mu eta", muonPhiBins, "#mu phi"); myBook2D( "globMuon_genEtaPhi", muonEtaBins, "#mu eta", muonPhiBins, "#mu phi"); myBook2D( "globMuon_recoEtaPhi", muonEtaBins, "#mu eta", muonPhiBins, "#mu phi"); for(size_t i=0; i<filterNamesLevels.size(); i++){ myBook2D( TString::Format("filt%dMuon_recoEtaPhi",int(i+1)), muonEtaBins, "#mu eta", muonPhiBins, "#mu phi", filterNamesLevels[i].first); } myBook2D( "pathMuon_recoEtaPhi", muonEtaBins, "#mu eta", muonPhiBins, "#mu phi", triggerPathName); myBook2D( "resultMuon_recoEtaPhi", muonEtaBins, "#mu eta", muonPhiBins, "#mu phi"); // Rap Pt Double myBook2D( "genDimuon_genRapPt", dimuonEtaBins, "#mu#mu rapidity", dimuonPtBins, " #mu#mu pT (GeV)"); myBook2D( "globDimuon_genRapPt", dimuonEtaBins, "#mu#mu rapidity", dimuonPtBins, " #mu#mu pT (GeV)"); myBook2D( "globDimuon_recoRapPt", dimuonEtaBins, "#mu#mu rapidity", dimuonPtBins, " #mu#mu pT (GeV)"); for(size_t i=0; i<filterNamesLevels.size(); i++){ myBook2D( TString::Format("filt%dDimuon_recoRapPt",int(i+1)), dimuonEtaBins, "#mu#mu rapidity", dimuonPtBins, " #mu#mu pT (GeV)", filterNamesLevels[i].first); } myBook2D( "pathDimuon_recoRapPt", dimuonEtaBins, "#mu#mu rapidity", dimuonPtBins, " #mu#mu pT (GeV)", triggerPathName); myBook2D( "resultDimuon_recoRapPt", dimuonEtaBins, "#mu#mu rapidity", dimuonPtBins, " #mu#mu pT (GeV)"); for(size_t i=0; i<filterNamesLevels.size(); i++){ myBook2D( TString::Format("diFilt%dDimuon_recoRapPt",int(i+1)), dimuonEtaBins, "#mu#mu rapidity", dimuonPtBins, " #mu#mu pT (GeV)", filterNamesLevels[i].first); } myBook2D( "diPathDimuon_recoRapPt", dimuonEtaBins, "#mu#mu rapidity", dimuonPtBins, " #mu#mu pT (GeV)", triggerPathName); // Pt DR Double myBook2D( "genDimuon_genPtDR", dimuonPtBins, " #mu#mu pT (GeV)", dimuonDRBins, "#mu#mu #Delta R at IP"); myBook2D( "globDimuon_genPtDR", dimuonPtBins, " #mu#mu pT (GeV)", dimuonDRBins, "#mu#mu #Delta R at IP"); myBook2D( "globDimuon_recoPtDR", dimuonPtBins, " #mu#mu pT (GeV)", dimuonDRBins, "#mu#mu #Delta R at IP"); for(size_t i=0; i<filterNamesLevels.size(); i++){ myBook2D( TString::Format("filt%dDimuon_recoPtDR",int(i+1)), dimuonPtBins, " #mu#mu pT (GeV)", dimuonDRBins, "#mu#mu #Delta R at IP", filterNamesLevels[i].first); } myBook2D( "pathDimuon_recoPtDR", dimuonPtBins, " #mu#mu pT (GeV)", dimuonDRBins, "#mu#mu #Delta R at IP", triggerPathName); for(size_t i=0; i<filterNamesLevels.size(); i++){ myBook2D( TString::Format("diFilt%dDimuon_recoPtDR",int(i+1)), dimuonPtBins, " #mu#mu pT (GeV)", dimuonDRBins, "#mu#mu #Delta R at IP", filterNamesLevels[i].first); } myBook2D( "diPathDimuon_recoPtDR", dimuonPtBins, " #mu#mu pT (GeV)", dimuonDRBins, "#mu#mu #Delta R at IP", triggerPathName); myBook2D( "resultDimuon_recoPtDR", dimuonPtBins, " #mu#mu pT (GeV)", dimuonDRBins, "#mu#mu #Delta R at IP"); // Pt DRpos Double // myBook2D( "genDimuon_genPtDRpos", dimuonPtBins, " #mu#mu pT (GeV)", dimuonDRBins, "#mu#mu #Delta R in MS"); // myBook2D( "globDimuon_genPtDRpos", dimuonPtBins, " #mu#mu pT (GeV)", dimuonDRBins, "#mu#mu #Delta R in MS"); myBook2D( "globDimuon_recoPtDRpos", dimuonPtBins, " #mu#mu pT (GeV)", dimuonDRBins, "#mu#mu #Delta R in MS"); for(size_t i=0; i<filterNamesLevels.size(); i++){ myBook2D( TString::Format("filt%dDimuon_recoPtDRpos",int(i+1)), dimuonPtBins, " #mu#mu pT (GeV)", dimuonDRBins, "#mu#mu #Delta R in MS", filterNamesLevels[i].first); } myBook2D( "pathDimuon_recoPtDRpos", dimuonPtBins, " #mu#mu pT (GeV)", dimuonDRBins, "#mu#mu #Delta R in MS", triggerPathName); for(size_t i=0; i<filterNamesLevels.size(); i++){ myBook2D( TString::Format("diFilt%dDimuon_recoPtDRpos",int(i+1)), dimuonPtBins, " #mu#mu pT (GeV)", dimuonDRBins, "#mu#mu #Delta R in MS", filterNamesLevels[i].first); } myBook2D( "diPathDimuon_recoPtDRpos", dimuonPtBins, " #mu#mu pT (GeV)", dimuonDRBins, "#mu#mu #Delta R in MS", triggerPathName); myBook2D( "resultDimuon_recoPtDRpos", dimuonPtBins, " #mu#mu pT (GeV)", dimuonDRBins, "#mu#mu #Delta R in MS"); /* ME["genDimuon_genPt+Pt-"] = myBook2D( "genDimuon_genPt+Pt-", muonPtBins, "#mu+ pt (GeV)", muonPtBins, "#mu- pT (GeV)"); ME["genGlobDimuon_genPt+Pt-"] = myBook2D( "genGlobDimuon_genPt+Pt-", muonPtBins, "#mu+ pt (GeV)", muonPtBins, "#mu- pT (GeV)"); ME["genGlobDimuon_recoPt+Pt-"] = myBook2D( "genGlobDimuon_recoPt+Pt-", muonPtBins, "#mu+ pt (GeV)", muonPtBins, "#mu- pT (GeV)"); ME["genGlobL1Dimuon_recoPt+Pt-"] = myBook2D( "genGlobL1Dimuon_recoPt+Pt-", muonPtBins, "#mu+ pt (GeV)", muonPtBins, "#mu- pT (GeV)"); ME["genGlobL1L2Dimuon_recoPt+Pt-"] = myBook2D( "genGlobL1L2Dimuon_recoPt+Pt-", muonPtBins, "#mu+ pt (GeV)", muonPtBins, "#mu- pT (GeV)"); ME["genGlobL1L2L3Dimuon_recoPt+Pt-"] = myBook2D( "genGlobL1L2L3Dimuon_recoPt+Pt-", muonPtBins, "#mu+ pt (GeV)", muonPtBins, "#mu- pT (GeV)");*/ // Matching myBook2D( "globGen_deltaEtaDeltaPhi", deltaEtaBins, "#Delta eta", deltaPhiBins, "#Delta phi"); for(size_t i=0; i<filterNamesLevels.size(); i++){ myBook2D( TString::Format("filt%dGlob_deltaEtaDeltaPhi",int(i+1)), deltaEtaBins, "#Delta eta", deltaPhiBins, "#Delta phi", filterNamesLevels[i].first); } myBook2D( "pathGlob_deltaEtaDeltaPhi", deltaEtaBins, "#Delta eta", deltaPhiBins, "#Delta phi", triggerPathName); // Size of containers vector<double> sizeBins; sizeBins.push_back(10); sizeBins.push_back(0); sizeBins.push_back(10); myBook1D( "genMuon_size", sizeBins, "container size" ); myBook1D( "globMuon_size", sizeBins, "container size" ); for(size_t i=0; i<filterNamesLevels.size(); i++){ myBook1D( TString::Format("filt%dMuon_size",int(i+1)), sizeBins, "container size", filterNamesLevels[i].first); } myBook1D( "pathMuon_size", sizeBins, "container size", triggerPathName ); }
void HeavyFlavorValidation::endJob | ( | void | ) | [private, virtual] |
int HeavyFlavorValidation::getMotherId | ( | const Candidate * | p | ) | [private] |
Definition at line 535 of file HeavyFlavorValidation.cc.
References reco::Candidate::mother(), and reco::Candidate::pdgId().
Referenced by analyze().
void HeavyFlavorValidation::match | ( | MonitorElement * | me, |
vector< LeafCandidate > & | from, | ||
vector< LeafCandidate > & | to, | ||
double | deltaRMatchingCut, | ||
vector< int > & | map | ||
) | [private] |
Definition at line 548 of file HeavyFlavorValidation.cc.
References eta(), MonitorElement::Fill(), i, j, gen::k, and phi.
Referenced by analyze().
{ vector<double> dR(from.size()); for(size_t i=0; i<from.size(); i++){ map[i] = -1; dR[i] = 10.; //find closest for(size_t j=0; j<to.size(); j++){ double dRtmp = deltaR<double>(from[i].eta(), from[i].phi(), to[j].eta(), to[j].phi()); if( dRtmp < dR[i] ){ dR[i] = dRtmp; map[i] = j; } } //fill matching histo if( map[i] != -1 ){ me->Fill( to[map[i]].eta()-from[i].eta(), deltaPhi<double>(to[map[i]].phi(), from[i].phi()) ); } //apply matching cut if( dR[i] > dRMatchingCut ){ map[i] = -1; } //remove duplication if( map[i] != -1 ){ for(size_t k=0; k<i; k++){ if( map[k] != -1 && map[i] == map[k] ){ if( dR[i] < dR[k] ){ map[k] = -1; }else{ map[i] = -1; } break; } } } } }
void HeavyFlavorValidation::myBook1D | ( | TString | name, |
vector< double > & | xBins, | ||
TString | label | ||
) | [inline, private] |
void HeavyFlavorValidation::myBook1D | ( | TString | name, |
vector< double > & | xBins, | ||
TString | label, | ||
TString | title | ||
) | [private] |
Definition at line 627 of file HeavyFlavorValidation.cc.
References DQMStore::book1D(), dqmStore, h, i, and mergeVDriftHistosByStation::name.
Referenced by beginRun().
{ // dqmStore->setCurrentFolder(dqmFolder+"/"+folder); int binsN = bins.size()==3 ? (int)bins[0]+1 : bins.size(); Double_t *myBins = new Double_t[ binsN ]; for(int i=0; i<binsN; i++){ myBins[i] = bins.size()==3 ? bins[1] + i*(bins[2]-bins[1])/bins[0] : bins[i] ; } TH1F *h = new TH1F( name, name, binsN-1, myBins ); h->SetXTitle(label); h->SetTitle(title); ME[name] = dqmStore->book1D( name.Data(), h ); delete h; }
void HeavyFlavorValidation::myBook2D | ( | TString | name, |
vector< double > & | xBins, | ||
TString | xLabel, | ||
vector< double > & | yBins, | ||
TString | yLabel | ||
) | [inline, private] |
Definition at line 63 of file HeavyFlavorValidation.cc.
void HeavyFlavorValidation::myBook2D | ( | TString | name, |
vector< double > & | xBins, | ||
TString | xLabel, | ||
vector< double > & | yBins, | ||
TString | yLabel, | ||
TString | title | ||
) | [private] |
Definition at line 585 of file HeavyFlavorValidation.cc.
References DQMStore::book2D(), dqmStore, eta(), h, i, and mergeVDriftHistosByStation::name.
Referenced by beginRun().
{ // dqmStore->setCurrentFolder(dqmFolder+"/"+folder); int ptN = ptBins.size()==3 ? (int)ptBins[0]+1 : ptBins.size(); Double_t *pt = new Double_t[ ptN ]; for(int i=0; i<ptN; i++){ pt[i] = ptBins.size()==3 ? ptBins[1] + i*(ptBins[2]-ptBins[1])/ptBins[0] : ptBins[i] ; } int etaN = etaBins.size()==3 ? (int)etaBins[0]+1 : etaBins.size(); Double_t *eta = new Double_t[ etaN ]; for(int i=0; i<etaN; i++){ eta[i] = etaBins.size()==3 ? etaBins[1] + i*(etaBins[2]-etaBins[1])/etaBins[0] : etaBins[i] ; } TH2F *h = new TH2F( name, name, ptN-1, pt, etaN-1, eta ); h->SetXTitle(ptLabel); h->SetYTitle(etaLabel); h->SetTitle(title); ME[name] = dqmStore->book2D( name.Data(), h ); delete h; }
void HeavyFlavorValidation::myBookProfile2D | ( | TString | name, |
vector< double > & | xBins, | ||
TString | xLabel, | ||
vector< double > & | yBins, | ||
TString | yLabel, | ||
TString | title | ||
) | [private] |
Definition at line 606 of file HeavyFlavorValidation.cc.
References DQMStore::bookProfile2D(), dqmStore, eta(), h, i, and mergeVDriftHistosByStation::name.
Referenced by beginRun().
{ // dqmStore->setCurrentFolder(dqmFolder+"/"+folder); int ptN = ptBins.size()==3 ? (int)ptBins[0]+1 : ptBins.size(); Double_t *pt = new Double_t[ ptN ]; for(int i=0; i<ptN; i++){ pt[i] = ptBins.size()==3 ? ptBins[1] + i*(ptBins[2]-ptBins[1])/ptBins[0] : ptBins[i] ; } int etaN = etaBins.size()==3 ? (int)etaBins[0]+1 : etaBins.size(); Double_t *eta = new Double_t[ etaN ]; for(int i=0; i<etaN; i++){ eta[i] = etaBins.size()==3 ? etaBins[1] + i*(etaBins[2]-etaBins[1])/etaBins[0] : etaBins[i] ; } TProfile2D *h = new TProfile2D( name, name, ptN-1, pt, etaN-1, eta ); h->SetXTitle(ptLabel); h->SetYTitle(etaLabel); h->SetTitle(title); ME[name] = dqmStore->bookProfile2D( name.Data(), h ); delete h; }
void HeavyFlavorValidation::myBookProfile2D | ( | TString | name, |
vector< double > & | xBins, | ||
TString | xLabel, | ||
vector< double > & | yBins, | ||
TString | yLabel | ||
) | [inline, private] |
Definition at line 67 of file HeavyFlavorValidation.cc.
{ myBookProfile2D( name, xBins, xLabel, yBins, yLabel, name); }
vector<double> HeavyFlavorValidation::deltaEtaBins [private] |
Definition at line 87 of file HeavyFlavorValidation.cc.
Referenced by beginRun().
vector<double> HeavyFlavorValidation::deltaPhiBins [private] |
Definition at line 88 of file HeavyFlavorValidation.cc.
Referenced by beginRun().
vector<double> HeavyFlavorValidation::dimuonDRBins [private] |
Definition at line 94 of file HeavyFlavorValidation.cc.
Referenced by beginRun().
vector<double> HeavyFlavorValidation::dimuonEtaBins [private] |
Definition at line 93 of file HeavyFlavorValidation.cc.
Referenced by beginRun().
vector<double> HeavyFlavorValidation::dimuonPtBins [private] |
Definition at line 92 of file HeavyFlavorValidation.cc.
Referenced by beginRun().
string HeavyFlavorValidation::dqmFolder [private] |
Definition at line 74 of file HeavyFlavorValidation.cc.
Referenced by beginRun().
DQMStore* HeavyFlavorValidation::dqmStore [private] |
Definition at line 95 of file HeavyFlavorValidation.cc.
Referenced by analyze(), beginRun(), myBook1D(), myBook2D(), and myBookProfile2D().
vector<pair<string,int> > HeavyFlavorValidation::filterNamesLevels [private] |
Definition at line 97 of file HeavyFlavorValidation.cc.
Referenced by analyze(), and beginRun().
double HeavyFlavorValidation::genGlobDeltaRMatchingCut [private] |
Definition at line 83 of file HeavyFlavorValidation.cc.
Referenced by analyze().
Definition at line 81 of file HeavyFlavorValidation.cc.
Referenced by analyze().
double HeavyFlavorValidation::globL1DeltaRMatchingCut [private] |
Definition at line 84 of file HeavyFlavorValidation.cc.
Referenced by analyze().
double HeavyFlavorValidation::globL2DeltaRMatchingCut [private] |
Definition at line 85 of file HeavyFlavorValidation.cc.
Referenced by analyze().
double HeavyFlavorValidation::globL3DeltaRMatchingCut [private] |
Definition at line 86 of file HeavyFlavorValidation.cc.
Referenced by analyze().
map<TString, MonitorElement *> HeavyFlavorValidation::ME [private] |
Definition at line 96 of file HeavyFlavorValidation.cc.
vector<int> HeavyFlavorValidation::motherIDs [private] |
Definition at line 82 of file HeavyFlavorValidation.cc.
Referenced by analyze().
vector<double> HeavyFlavorValidation::muonEtaBins [private] |
Definition at line 90 of file HeavyFlavorValidation.cc.
Referenced by beginRun().
const double HeavyFlavorValidation::muonMass [private] |
Definition at line 98 of file HeavyFlavorValidation.cc.
Referenced by analyze().
vector<double> HeavyFlavorValidation::muonPhiBins [private] |
Definition at line 91 of file HeavyFlavorValidation.cc.
Referenced by beginRun().
vector<double> HeavyFlavorValidation::muonPtBins [private] |
Definition at line 89 of file HeavyFlavorValidation.cc.
Referenced by beginRun().
InputTag HeavyFlavorValidation::recoMuonsTag [private] |
Definition at line 80 of file HeavyFlavorValidation.cc.
Referenced by analyze().
string HeavyFlavorValidation::triggerPathName [private] |
Definition at line 76 of file HeavyFlavorValidation.cc.
Referenced by analyze(), and beginRun().
string HeavyFlavorValidation::triggerProcessName [private] |
Definition at line 75 of file HeavyFlavorValidation.cc.
Referenced by analyze(), and beginRun().
Definition at line 79 of file HeavyFlavorValidation.cc.
Referenced by analyze().
Definition at line 78 of file HeavyFlavorValidation.cc.
Referenced by analyze().
Definition at line 77 of file HeavyFlavorValidation.cc.
Referenced by analyze().