-
Notifications
You must be signed in to change notification settings - Fork 4.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #19779 from davidlange6/HLTDQMv2minusBPH
Hlt dqm take 3
- Loading branch information
Showing
32 changed files
with
4,119 additions
and
109 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,285 @@ | ||
#include "DQMOffline/Trigger/plugins/HTMonitor.h" | ||
|
||
#include "CommonTools/TriggerUtils/interface/GenericTriggerEventFlag.h" | ||
|
||
#include "DataFormats/Math/interface/deltaPhi.h" | ||
|
||
// ----------------------------- | ||
// constructors and destructor | ||
// ----------------------------- | ||
|
||
HTMonitor::HTMonitor( const edm::ParameterSet& iConfig ) : | ||
folderName_ ( iConfig.getParameter<std::string>("FolderName") ) | ||
, metToken_ ( consumes<reco::PFMETCollection> (iConfig.getParameter<edm::InputTag>("met") ) ) | ||
, jetToken_ ( mayConsume<reco::PFJetCollection> (iConfig.getParameter<edm::InputTag>("jets") ) ) | ||
, eleToken_ ( mayConsume<reco::GsfElectronCollection>(iConfig.getParameter<edm::InputTag>("electrons") ) ) | ||
, muoToken_ ( mayConsume<reco::MuonCollection> (iConfig.getParameter<edm::InputTag>("muons") ) ) | ||
, vtxToken_ ( mayConsume<reco::VertexCollection> (iConfig.getParameter<edm::InputTag>("vertices") ) ) | ||
, ht_variable_binning_ ( iConfig.getParameter<edm::ParameterSet>("histoPSet").getParameter<std::vector<double> >("htBinning") ) | ||
, ht_binning_ ( getHistoPSet (iConfig.getParameter<edm::ParameterSet>("histoPSet").getParameter<edm::ParameterSet> ("htPSet") ) ) | ||
, ls_binning_ ( getHistoLSPSet (iConfig.getParameter<edm::ParameterSet>("histoPSet").getParameter<edm::ParameterSet> ("lsPSet") ) ) | ||
, num_genTriggerEventFlag_(new GenericTriggerEventFlag(iConfig.getParameter<edm::ParameterSet>("numGenericTriggerEventPSet"),consumesCollector(), *this)) | ||
, den_genTriggerEventFlag_(new GenericTriggerEventFlag(iConfig.getParameter<edm::ParameterSet>("denGenericTriggerEventPSet"),consumesCollector(), *this)) | ||
, metSelection_ ( iConfig.getParameter<std::string>("metSelection") ) | ||
, jetSelection_ ( iConfig.getParameter<std::string>("jetSelection") ) | ||
, eleSelection_ ( iConfig.getParameter<std::string>("eleSelection") ) | ||
, muoSelection_ ( iConfig.getParameter<std::string>("muoSelection") ) | ||
, jetSelection_HT_ ( iConfig.getParameter<std::string>("jetSelection_HT") ) | ||
, njets_ ( iConfig.getParameter<unsigned>("njets" ) ) | ||
, nelectrons_ ( iConfig.getParameter<unsigned>("nelectrons" ) ) | ||
, nmuons_ ( iConfig.getParameter<unsigned>("nmuons" ) ) | ||
{ | ||
} | ||
|
||
HTMonitor::~HTMonitor() | ||
{ | ||
} | ||
|
||
HTMonitor::MEHTbinning HTMonitor::getHistoPSet(edm::ParameterSet pset) | ||
{ | ||
return HTMonitor::MEHTbinning{ | ||
pset.getParameter<unsigned>("nbins"), | ||
pset.getParameter<double>("xmin"), | ||
pset.getParameter<double>("xmax"), | ||
}; | ||
} | ||
|
||
HTMonitor::MEHTbinning HTMonitor::getHistoLSPSet(edm::ParameterSet pset) | ||
{ | ||
return HTMonitor::MEHTbinning{ | ||
pset.getParameter<unsigned>("nbins"), | ||
0., | ||
double(pset.getParameter<unsigned>("nbins")) | ||
}; | ||
} | ||
|
||
void HTMonitor::setHTitle(HTME& me, std::string titleX, std::string titleY) | ||
{ | ||
me.numerator->setAxisTitle(titleX,1); | ||
me.numerator->setAxisTitle(titleY,2); | ||
me.denominator->setAxisTitle(titleX,1); | ||
me.denominator->setAxisTitle(titleY,2); | ||
|
||
} | ||
|
||
void HTMonitor::bookME(DQMStore::IBooker &ibooker, HTME& me, const std::string& histname, const std::string& histtitle, int nbins, double min, double max) | ||
{ | ||
me.numerator = ibooker.book1D(histname+"_numerator", histtitle+" (numerator)", nbins, min, max); | ||
me.denominator = ibooker.book1D(histname+"_denominator", histtitle+" (denominator)", nbins, min, max); | ||
} | ||
void HTMonitor::bookME(DQMStore::IBooker &ibooker, HTME& me, const std::string& histname, const std::string& histtitle, const std::vector<double>& binning) | ||
{ | ||
int nbins = binning.size()-1; | ||
std::vector<float> fbinning(binning.begin(),binning.end()); | ||
float* arr = &fbinning[0]; | ||
me.numerator = ibooker.book1D(histname+"_numerator", histtitle+" (numerator)", nbins, arr); | ||
me.denominator = ibooker.book1D(histname+"_denominator", histtitle+" (denominator)", nbins, arr); | ||
} | ||
void HTMonitor::bookME(DQMStore::IBooker &ibooker, HTME& me, const std::string& histname, const std::string& histtitle, int nbinsX, double xmin, double xmax, double ymin, double ymax) | ||
{ | ||
me.numerator = ibooker.bookProfile(histname+"_numerator", histtitle+" (numerator)", nbinsX, xmin, xmax, ymin, ymax); | ||
me.denominator = ibooker.bookProfile(histname+"_denominator", histtitle+" (denominator)", nbinsX, xmin, xmax, ymin, ymax); | ||
} | ||
void HTMonitor::bookME(DQMStore::IBooker &ibooker, HTME& me, const std::string& histname, const std::string& histtitle, int nbinsX, double xmin, double xmax, int nbinsY, double ymin, double ymax) | ||
{ | ||
me.numerator = ibooker.book2D(histname+"_numerator", histtitle+" (numerator)", nbinsX, xmin, xmax, nbinsY, ymin, ymax); | ||
me.denominator = ibooker.book2D(histname+"_denominator", histtitle+" (denominator)", nbinsX, xmin, xmax, nbinsY, ymin, ymax); | ||
} | ||
void HTMonitor::bookME(DQMStore::IBooker &ibooker, HTME& me, const std::string& histname, const std::string& histtitle, const std::vector<double>& binningX, const std::vector<double>& binningY) | ||
{ | ||
int nbinsX = binningX.size()-1; | ||
std::vector<float> fbinningX(binningX.begin(),binningX.end()); | ||
float* arrX = &fbinningX[0]; | ||
int nbinsY = binningY.size()-1; | ||
std::vector<float> fbinningY(binningY.begin(),binningY.end()); | ||
float* arrY = &fbinningY[0]; | ||
|
||
me.numerator = ibooker.book2D(histname+"_numerator", histtitle+" (numerator)", nbinsX, arrX, nbinsY, arrY); | ||
me.denominator = ibooker.book2D(histname+"_denominator", histtitle+" (denominator)", nbinsX, arrX, nbinsY, arrY); | ||
} | ||
|
||
void HTMonitor::bookHistograms(DQMStore::IBooker & ibooker, | ||
edm::Run const & iRun, | ||
edm::EventSetup const & iSetup) | ||
{ | ||
|
||
std::string histname, histtitle; | ||
|
||
std::string currentFolder = folderName_ ; | ||
ibooker.setCurrentFolder(currentFolder.c_str()); | ||
|
||
histname = "ht_variable"; histtitle = "HT"; | ||
bookME(ibooker,htME_variableBinning_,histname,histtitle,ht_variable_binning_); | ||
setHTitle(htME_variableBinning_,"HT [GeV]","events / [GeV]"); | ||
|
||
histname = "htVsLS"; histtitle = "HT vs LS"; | ||
bookME(ibooker,htVsLS_,histname,histtitle,ls_binning_.nbins, ls_binning_.xmin, ls_binning_.xmax,ht_binning_.xmin, ht_binning_.xmax); | ||
setHTitle(htVsLS_,"LS","HT [GeV]"); | ||
|
||
histname = "deltaphi_metjet1"; histtitle = "DPHI_METJ1"; | ||
bookME(ibooker,deltaphimetj1ME_,histname,histtitle,phi_binning_.nbins, phi_binning_.xmin, phi_binning_.xmax); | ||
setHTitle(deltaphimetj1ME_,"delta phi (met, j1)","events / 0.1 rad"); | ||
|
||
histname = "deltaphi_jet1jet2"; histtitle = "DPHI_J1J2"; | ||
bookME(ibooker,deltaphij1j2ME_,histname,histtitle,phi_binning_.nbins, phi_binning_.xmin, phi_binning_.xmax); | ||
setHTitle(deltaphij1j2ME_,"delta phi (j1, j2)","events / 0.1 rad"); | ||
|
||
// Initialize the GenericTriggerEventFlag | ||
if ( num_genTriggerEventFlag_ && num_genTriggerEventFlag_->on() ) num_genTriggerEventFlag_->initRun( iRun, iSetup ); | ||
if ( den_genTriggerEventFlag_ && den_genTriggerEventFlag_->on() ) den_genTriggerEventFlag_->initRun( iRun, iSetup ); | ||
|
||
} | ||
|
||
#include "FWCore/Framework/interface/ESHandle.h" | ||
#include "FWCore/Framework/interface/EventSetup.h" | ||
#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" | ||
#include "Geometry/Records/interface/TrackerTopologyRcd.h" | ||
void HTMonitor::analyze(edm::Event const& iEvent, edm::EventSetup const& iSetup) { | ||
|
||
// Filter out events if Trigger Filtering is requested | ||
if (den_genTriggerEventFlag_->on() && ! den_genTriggerEventFlag_->accept( iEvent, iSetup) ) return; | ||
|
||
edm::Handle<reco::PFMETCollection> metHandle; | ||
iEvent.getByToken( metToken_, metHandle ); | ||
reco::PFMET pfmet = metHandle->front(); | ||
if ( ! metSelection_( pfmet ) ) return; | ||
|
||
float ht = 0.0; | ||
|
||
edm::Handle<reco::PFJetCollection> jetHandle; //add a configurable jet collection & jet pt selection | ||
iEvent.getByToken( jetToken_, jetHandle ); | ||
std::vector<reco::PFJet> jets; | ||
if ( jetHandle->size() < njets_ ) return; | ||
for ( auto const & j : *jetHandle ) { | ||
if ( jetSelection_( j ) ) { | ||
jets.push_back(j); | ||
} | ||
} | ||
for ( auto const & j : *jetHandle ) { | ||
if ( jetSelection_HT_(j)) ht += j.pt(); | ||
} | ||
if ( jets.size() < njets_ ) return; | ||
|
||
float deltaPhi_met_j1 = 10.0; | ||
float deltaPhi_j1_j2 = 10.0; | ||
|
||
if (jets.size() >= 1) deltaPhi_met_j1 = fabs( deltaPhi( pfmet.phi(), jets[0].phi() )); | ||
if (jets.size() >= 2) deltaPhi_j1_j2 = fabs( deltaPhi( jets[0].phi(), jets[1].phi() )); | ||
|
||
edm::Handle<reco::GsfElectronCollection> eleHandle; | ||
iEvent.getByToken( eleToken_, eleHandle ); | ||
std::vector<reco::GsfElectron> electrons; | ||
if ( eleHandle->size() < nelectrons_ ) return; | ||
for ( auto const & e : *eleHandle ) { | ||
if ( eleSelection_( e ) ) electrons.push_back(e); | ||
} | ||
if ( electrons.size() < nelectrons_ ) return; | ||
|
||
edm::Handle<reco::VertexCollection> vtxHandle; | ||
iEvent.getByToken(vtxToken_, vtxHandle); | ||
|
||
reco::Vertex vtx; | ||
for (vector<reco::Vertex>::const_iterator v = vtxHandle->begin(); v != vtxHandle->end(); ++v) { | ||
bool isFake = v->isFake() ; | ||
|
||
if (!isFake) { | ||
vtx = *v; | ||
break; | ||
} | ||
} | ||
|
||
edm::Handle<reco::MuonCollection> muoHandle; | ||
iEvent.getByToken( muoToken_, muoHandle ); | ||
if ( muoHandle->size() < nmuons_ ) return; | ||
std::vector<reco::Muon> muons; | ||
for ( auto const & m : *muoHandle ) { | ||
if ( muoSelection_( m ) && m.isGlobalMuon() && m.isPFMuon() && m.globalTrack()->normalizedChi2() < 10. && m.globalTrack()->hitPattern().numberOfValidMuonHits() > 0 && m.numberOfMatchedStations() > 1 && fabs(m.muonBestTrack()->dxy(vtx.position())) < 0.2 && fabs(m.muonBestTrack()->dz(vtx.position())) < 0.5 && m.innerTrack()->hitPattern().numberOfValidPixelHits() > 0 && m.innerTrack()->hitPattern().trackerLayersWithMeasurement() > 5 ) muons.push_back(m); | ||
} | ||
if ( muons.size() < nmuons_ ) return; | ||
|
||
// filling histograms (denominator) | ||
htME_variableBinning_.denominator -> Fill(ht); | ||
deltaphimetj1ME_.denominator -> Fill(deltaPhi_met_j1); | ||
deltaphij1j2ME_.denominator -> Fill(deltaPhi_j1_j2); | ||
|
||
int ls = iEvent.id().luminosityBlock(); | ||
htVsLS_.denominator -> Fill(ls, ht); | ||
|
||
// applying selection for numerator | ||
if (num_genTriggerEventFlag_->on() && ! num_genTriggerEventFlag_->accept( iEvent, iSetup) ) return; | ||
|
||
// filling histograms (num_genTriggerEventFlag_) | ||
htME_variableBinning_.numerator -> Fill(ht); | ||
htVsLS_.numerator -> Fill(ls, ht); | ||
deltaphimetj1ME_.numerator -> Fill(deltaPhi_met_j1); | ||
deltaphij1j2ME_.numerator -> Fill(deltaPhi_j1_j2); | ||
|
||
} | ||
|
||
void HTMonitor::fillHistoPSetDescription(edm::ParameterSetDescription & pset) | ||
{ | ||
pset.add<unsigned> ( "nbins"); | ||
pset.add<double>( "xmin" ); | ||
pset.add<double>( "xmax" ); | ||
} | ||
|
||
void HTMonitor::fillHistoLSPSetDescription(edm::ParameterSetDescription & pset) | ||
{ | ||
pset.add<unsigned> ( "nbins", 2500); | ||
} | ||
|
||
void HTMonitor::fillDescriptions(edm::ConfigurationDescriptions & descriptions) | ||
{ | ||
edm::ParameterSetDescription desc; | ||
desc.add<std::string> ( "FolderName", "HLT/HT" ); | ||
|
||
desc.add<edm::InputTag>( "met", edm::InputTag("pfMet") ); | ||
desc.add<edm::InputTag>( "jets", edm::InputTag("ak4PFJetsCHS") ); | ||
desc.add<edm::InputTag>( "electrons",edm::InputTag("gedGsfElectrons") ); | ||
desc.add<edm::InputTag>( "muons", edm::InputTag("muons") ); | ||
desc.add<edm::InputTag>( "vertices",edm::InputTag("offlinePrimaryVertices") ); | ||
desc.add<std::string>("metSelection", "pt > 0"); | ||
desc.add<std::string>("jetSelection", "pt > 0"); | ||
desc.add<std::string>("eleSelection", "pt > 0"); | ||
desc.add<std::string>("muoSelection", "pt > 0"); | ||
desc.add<std::string>("jetSelection_HT", "pt > 30 && eta < 2.5"); | ||
desc.add<unsigned>("njets", 0); | ||
desc.add<unsigned>("nelectrons", 0); | ||
desc.add<unsigned>("nmuons", 0); | ||
|
||
edm::ParameterSetDescription genericTriggerEventPSet; | ||
genericTriggerEventPSet.add<bool>("andOr"); | ||
genericTriggerEventPSet.add<edm::InputTag>("dcsInputTag", edm::InputTag("scalersRawToDigi") ); | ||
genericTriggerEventPSet.add<std::vector<int> >("dcsPartitions",{}); | ||
genericTriggerEventPSet.add<bool>("andOrDcs", false); | ||
genericTriggerEventPSet.add<bool>("errorReplyDcs", true); | ||
genericTriggerEventPSet.add<std::string>("dbLabel",""); | ||
genericTriggerEventPSet.add<bool>("andOrHlt", true); | ||
genericTriggerEventPSet.add<edm::InputTag>("hltInputTag", edm::InputTag("TriggerResults::HLT") ); | ||
genericTriggerEventPSet.add<std::vector<std::string> >("hltPaths",{}); | ||
genericTriggerEventPSet.add<std::string>("hltDBKey",""); | ||
genericTriggerEventPSet.add<bool>("errorReplyHlt",false); | ||
genericTriggerEventPSet.add<unsigned int>("verbosityLevel",1); | ||
|
||
desc.add<edm::ParameterSetDescription>("numGenericTriggerEventPSet", genericTriggerEventPSet); | ||
desc.add<edm::ParameterSetDescription>("denGenericTriggerEventPSet", genericTriggerEventPSet); | ||
|
||
edm::ParameterSetDescription histoPSet; | ||
edm::ParameterSetDescription htPSet; | ||
fillHistoPSetDescription(htPSet); | ||
histoPSet.add<edm::ParameterSetDescription>("htPSet", htPSet); | ||
std::vector<double> bins = {0.,20.,40.,60.,80.,90.,100.,110.,120.,130.,140.,150.,160.,170.,180.,190.,200.,220.,240.,260.,280.,300.,350.,400.,450.,500.,550.,600.,650.,700.,750.,800.,850.,900.,950.,1000.,1050.,1100.,1200.,1300.,1400.,1500.,2000.,2500.}; | ||
histoPSet.add<std::vector<double> >("htBinning", bins); | ||
|
||
edm::ParameterSetDescription lsPSet; | ||
fillHistoLSPSetDescription(lsPSet); | ||
histoPSet.add<edm::ParameterSetDescription>("lsPSet", lsPSet); | ||
|
||
desc.add<edm::ParameterSetDescription>("histoPSet",histoPSet); | ||
|
||
descriptions.add("htMonitoring", desc); | ||
} | ||
|
||
// Define this as a plug-in | ||
#include "FWCore/Framework/interface/MakerMacros.h" | ||
DEFINE_FWK_MODULE(HTMonitor); |
Oops, something went wrong.