Skip to content

Commit

Permalink
Merge pull request #17231 from mtosi/METmonitoring
Browse files Browse the repository at this point in the history
first DQM based HLT MET monitoring code
  • Loading branch information
davidlange6 committed Feb 8, 2017
2 parents 6ca2283 + a1881cd commit fd0f60d
Show file tree
Hide file tree
Showing 10 changed files with 498 additions and 2 deletions.
1 change: 1 addition & 0 deletions DQMOffline/Configuration/python/DQMOfflineHeavyIons_cff.py
Expand Up @@ -46,6 +46,7 @@


triggerOfflineDQMSource.remove(jetMETHLTOfflineAnalyzer)
triggerOfflineDQMSource.remove(exoticaMonitorHLT)

#egammaDQMOffline.remove(electronAnalyzerSequence)
egammaDQMOffline.remove(zmumugammaAnalysis)
Expand Down
3 changes: 3 additions & 0 deletions DQMOffline/Trigger/plugins/BuildFile.xml
Expand Up @@ -6,6 +6,7 @@
<use name="DataFormats/HLTReco"/>
<use name="DataFormats/MuonReco"/>
<use name="DataFormats/EgammaReco"/>
<use name="DataFormats/EgammaCandidates"/>
<use name="DataFormats/TrackReco"/>
<use name="DataFormats/TrajectorySeed"/>
<use name="DataFormats/BTauReco"/>
Expand All @@ -17,6 +18,8 @@
<use name="HLTrigger/HLTcore"/>
<use name="CondFormats/DataRecord"/>
<use name="DQMServices/Core"/>
<use name="CommonTools/Utils"/>
<use name="CommonTools/TriggerUtils"/>
<use name="root"/>
<use name="roofit"/>
<use name="boost"/>
Expand Down
278 changes: 278 additions & 0 deletions DQMOffline/Trigger/plugins/METMonitor.cc
@@ -0,0 +1,278 @@
#include "DQMOffline/Trigger/plugins/METMonitor.h"

#include "FWCore/MessageLogger/interface/MessageLogger.h"

#include "DQM/TrackingMonitor/interface/GetLumi.h"

#include "CommonTools/TriggerUtils/interface/GenericTriggerEventFlag.h"


double MAX_PHI = 3.2;
int N_PHI = 64;
MEbinning phi_binning_{
N_PHI, -MAX_PHI, MAX_PHI
};
// -----------------------------
// constructors and destructor
// -----------------------------

METMonitor::METMonitor( 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") ) )
, met_variable_binning_ ( iConfig.getParameter<edm::ParameterSet>("histoPSet").getParameter<std::vector<double> >("metBinning") )
, met_binning_ ( getHistoPSet (iConfig.getParameter<edm::ParameterSet>("histoPSet").getParameter<edm::ParameterSet> ("metPSet") ) )
, 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") )
, njets_ ( iConfig.getParameter<int>("njets" ) )
, nelectrons_ ( iConfig.getParameter<int>("nelectrons" ) )
, nmuons_ ( iConfig.getParameter<int>("nmuons" ) )
{

metME_.numerator = nullptr;
metME_.denominator = nullptr;
metME_variableBinning_.numerator = nullptr;
metME_variableBinning_.denominator = nullptr;
metVsLS_.numerator = nullptr;
metVsLS_.denominator = nullptr;
metPhiME_.numerator = nullptr;
metPhiME_.denominator = nullptr;

}

METMonitor::~METMonitor()
{
if (num_genTriggerEventFlag_) delete num_genTriggerEventFlag_;
if (den_genTriggerEventFlag_) delete den_genTriggerEventFlag_;
}

MEbinning METMonitor::getHistoPSet(edm::ParameterSet pset)
{
return MEbinning{
pset.getParameter<int32_t>("nbins"),
pset.getParameter<double>("xmin"),
pset.getParameter<double>("xmax"),
};
}

MEbinning METMonitor::getHistoLSPSet(edm::ParameterSet pset)
{
return MEbinning{
pset.getParameter<int32_t>("nbins"),
0.,
double(pset.getParameter<int32_t>("nbins"))
};
}

void METMonitor::setMETitle(METME& 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 METMonitor::bookME(DQMStore::IBooker &ibooker, METME& me, std::string& histname, 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 METMonitor::bookME(DQMStore::IBooker &ibooker, METME& me, std::string& histname, std::string& histtitle, 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 METMonitor::bookME(DQMStore::IBooker &ibooker, METME& me, std::string& histname, 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 METMonitor::bookME(DQMStore::IBooker &ibooker, METME& me, std::string& histname, 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 METMonitor::bookME(DQMStore::IBooker &ibooker, METME& me, std::string& histname, std::string& histtitle, std::vector<double> binningX, 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 METMonitor::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 = "met"; histtitle = "PFMET";
bookME(ibooker,metME_,histname,histtitle,met_binning_.nbins,met_binning_.xmin, met_binning_.xmax);
setMETitle(metME_,"PF MET [GeV]","events / [GeV]");

histname = "met_variable"; histtitle = "PFMET";
bookME(ibooker,metME_variableBinning_,histname,histtitle,met_variable_binning_);
setMETitle(metME_variableBinning_,"PF MET [GeV]","events / [GeV]");

histname = "metVsLS"; histtitle = "PFMET vs LS";
bookME(ibooker,metVsLS_,histname,histtitle,ls_binning_.nbins, ls_binning_.xmin, ls_binning_.xmax,met_binning_.xmin, met_binning_.xmax);
setMETitle(metVsLS_,"LS","PF MET [GeV]");

histname = "metPhi"; histtitle = "PFMET phi";
bookME(ibooker,metPhiME_,histname,histtitle, phi_binning_.nbins, phi_binning_.xmin, phi_binning_.xmax);
setMETitle(metPhiME_,"PF MET #phi","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 METMonitor::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 met = pfmet.pt();
float phi = pfmet.phi();

edm::Handle<reco::PFJetCollection> jetHandle;
iEvent.getByToken( jetToken_, jetHandle );
std::vector<reco::PFJet> jets;
if ( int(jetHandle->size()) < njets_ ) return;
for ( auto const & j : *jetHandle ) {
if ( jetSelection_( j ) ) jets.push_back(j);
}
if ( int(jets.size()) < njets_ ) return;

edm::Handle<reco::GsfElectronCollection> eleHandle;
iEvent.getByToken( eleToken_, eleHandle );
std::vector<reco::GsfElectron> electrons;
if ( int(eleHandle->size()) < nelectrons_ ) return;
for ( auto const & e : *eleHandle ) {
if ( eleSelection_( e ) ) electrons.push_back(e);
}
if ( int(electrons.size()) < nelectrons_ ) return;

edm::Handle<reco::MuonCollection> muoHandle;
iEvent.getByToken( muoToken_, muoHandle );
if ( int(muoHandle->size()) < nmuons_ ) return;
std::vector<reco::Muon> muons;
for ( auto const & m : *muoHandle ) {
if ( muoSelection_( m ) ) muons.push_back(m);
}
if ( int(muons.size()) < nmuons_ ) return;

// filling histograms (denominator)
metME_.denominator -> Fill(met);
metME_variableBinning_.denominator -> Fill(met);
metPhiME_.denominator -> Fill(phi);

int ls = iEvent.id().luminosityBlock();
metVsLS_.denominator -> Fill(ls, met);

// applying selection for numerator
if (num_genTriggerEventFlag_->on() && ! num_genTriggerEventFlag_->accept( iEvent, iSetup) ) return;

// filling histograms (num_genTriggerEventFlag_)
metME_.numerator -> Fill(met);
metME_variableBinning_.numerator -> Fill(met);
metPhiME_.numerator -> Fill(phi);
metVsLS_.numerator -> Fill(ls, met);

}

void METMonitor::fillHistoPSetDescription(edm::ParameterSetDescription & pset)
{
pset.add<int> ( "nbins");
pset.add<double>( "xmin" );
pset.add<double>( "xmax" );
}

void METMonitor::fillHistoLSPSetDescription(edm::ParameterSetDescription & pset)
{
pset.add<int> ( "nbins", 2500);
}

void METMonitor::fillDescriptions(edm::ConfigurationDescriptions & descriptions)
{
edm::ParameterSetDescription desc;
desc.add<std::string> ( "FolderName", "HLT/MET" );

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<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<int>("njets", 0);
desc.add<int>("nelectrons", 0);
desc.add<int>("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 metPSet;
fillHistoPSetDescription(metPSet);
histoPSet.add<edm::ParameterSetDescription>("metPSet", metPSet);
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.,1000.};
histoPSet.add<std::vector<double> >("metBinning", bins);

edm::ParameterSetDescription lsPSet;
fillHistoLSPSetDescription(lsPSet);
histoPSet.add<edm::ParameterSetDescription>("lsPSet", lsPSet);

desc.add<edm::ParameterSetDescription>("histoPSet",histoPSet);

descriptions.add("metMonitoring", desc);
}

// Define this as a plug-in
#include "FWCore/Framework/interface/MakerMacros.h"
DEFINE_FWK_MODULE(METMonitor);

0 comments on commit fd0f60d

Please sign in to comment.