Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add offline DQM for MET plus track EXO triggers #19490

Merged
merged 8 commits into from
Jul 28, 2017
461 changes: 461 additions & 0 deletions DQMOffline/Trigger/plugins/METplusTrackMonitor.cc

Large diffs are not rendered by default.

145 changes: 145 additions & 0 deletions DQMOffline/Trigger/plugins/METplusTrackMonitor.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
#ifndef DQMOFFLINE_TRIGGER_METPLUSTRACKMONITOR_H
#define DQMOFFLINE_TRIGGER_METPLUSTRACKMONITOR_H

#include <string>
#include <vector>
#include <map>

#include "FWCore/Utilities/interface/EDGetToken.h"
#include "FWCore/Framework/interface/Frameworkfwd.h"
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/MakerMacros.h"
#include "FWCore/Framework/interface/ESHandle.h"
#include "FWCore/Framework/interface/EventSetup.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "FWCore/ServiceRegistry/interface/Service.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
#include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
#include "FWCore/ParameterSet/interface/Registry.h"

#include "DQMServices/Core/interface/MonitorElement.h"
#include <DQMServices/Core/interface/DQMEDAnalyzer.h>
#include "DQM/TrackingMonitor/interface/GetLumi.h"

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

// DataFormats
#include "DataFormats/METReco/interface/CaloMET.h"
#include "DataFormats/METReco/interface/CaloMETCollection.h"
#include "DataFormats/MuonReco/interface/Muon.h"
#include "DataFormats/MuonReco/interface/MuonFwd.h"
#include "DataFormats/JetReco/interface/PFJet.h"
#include "DataFormats/JetReco/interface/PFJetCollection.h"
#include "DataFormats/HLTReco/interface/TriggerObject.h"
#include "DataFormats/HLTReco/interface/TriggerEvent.h"
#include "DataFormats/VertexReco/interface/Vertex.h"
#include "DataFormats/VertexReco/interface/VertexFwd.h"


class GenericTriggerEventFlag;

//
// class declaration
//

class METplusTrackMonitor : public DQMEDAnalyzer
{
public:

struct MEbinning {
unsigned int nbins;
double xmin;
double xmax;
};

struct METplusTrackME {
MonitorElement * numerator;
MonitorElement * denominator;
};

METplusTrackMonitor( const edm::ParameterSet& );
~METplusTrackMonitor();
static void fillDescriptions(edm::ConfigurationDescriptions & descriptions);
static void fillHistoPSetDescription(edm::ParameterSetDescription & pset);
static void fillHistoLSPSetDescription(edm::ParameterSetDescription & pset);

protected:

void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override;
void bookME(DQMStore::IBooker &, METplusTrackME& me, const std::string& histname, const std::string& histtitle, int nbins, double xmin, double xmax);
void bookME(DQMStore::IBooker &, METplusTrackME& me, const std::string& histname, const std::string& histtitle, const std::vector<double>& binningX);
void bookME(DQMStore::IBooker &, METplusTrackME& me, const std::string& histname, const std::string& histtitle, int nbinsX, double xmin, double xmax, double ymin, double ymax);
void bookME(DQMStore::IBooker &, METplusTrackME& me, const std::string& histname, const std::string& histtitle, int nbinsX, double xmin, double xmax, int nbinsY, double ymin, double ymax, bool bookNumerator);
void bookME(DQMStore::IBooker &, METplusTrackME& me, const std::string& histname, const std::string& histtitle, const std::vector<double>& binningX, const std::vector<double>& binningY);
void setMETitle(METplusTrackME& me, std::string titleX, std::string titleY, bool bookNumerator);

void analyze(edm::Event const& iEvent, edm::EventSetup const& iSetup) override;

private:

static MEbinning getHistoPSet (edm::ParameterSet pset);
static MEbinning getHistoLSPSet (edm::ParameterSet pset);

bool getHLTObj(const edm::Handle<trigger::TriggerEvent> &trigSummary, const edm::InputTag filterTag, trigger::TriggerObject &obj) const;

std::string folderName_;
std::string histoSuffix_;

edm::EDGetTokenT<reco::CaloMETCollection> metToken_;
edm::EDGetTokenT<reco::CaloMETCollection> hltMetToken_;
edm::EDGetTokenT<reco::CaloMETCollection> hltMetCleanToken_;
edm::EDGetTokenT<reco::MuonCollection> muonToken_;
edm::EDGetTokenT<reco::PFJetCollection> jetToken_;
edm::EDGetTokenT<reco::VertexCollection> vtxToken_;
edm::EDGetTokenT<trigger::TriggerEvent> theTrigSummary_;

edm::InputTag hltTrk50FilterTag_;

std::vector<double> met_variable_binning_;
std::vector<double> muonPt_variable_binning_;

MEbinning met_binning_;
MEbinning ls_binning_;
MEbinning pt_binning_;
MEbinning eta_binning_;
MEbinning phi_binning_;

METplusTrackME metME_;
METplusTrackME metME_variableBinning_;
METplusTrackME metVsLS_;
METplusTrackME metPhiME_;
METplusTrackME deltaphimetj1ME_;
METplusTrackME metVsHltMet_;
METplusTrackME metVsHltMetClean_;

METplusTrackME muonPtME_;
METplusTrackME muonPtME_variableBinning_;
METplusTrackME muonPtVsLS_;
METplusTrackME muonEtaME_;
METplusTrackME deltaphimetmuonME_;
METplusTrackME mTmuonMetME_;

std::unique_ptr<GenericTriggerEventFlag> num_genTriggerEventFlag_;
std::unique_ptr<GenericTriggerEventFlag> den_genTriggerEventFlag_;

StringCutObjectSelector<reco::CaloMET, true> metSelection_;
StringCutObjectSelector<reco::CaloMET, true> hltMetSelection_;
StringCutObjectSelector<reco::CaloMET, true> hltMetCleanSelection_;

StringCutObjectSelector<reco::Muon, true> muonSelection_;
StringCutObjectSelector<reco::PFJet, true> jetSelection_;
StringCutObjectSelector<reco::Vertex, true> vtxSelection_;
unsigned nmuons_;
unsigned njets_;

double leadJetEtaCut_;
double hltMetCut_;
double hltMetCleanCut_;

};


#endif // DQMOFFLINE_TRIGGER_METPLUSTRACKMONITOR_H

20 changes: 20 additions & 0 deletions DQMOffline/Trigger/python/ExoticaMonitoring_Client_cff.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,27 @@
),
)

METplusTrackEfficiency = DQMEDHarvester("DQMGenericClient",
subDirs = cms.untracked.vstring("HLT/MET/MET105_IsoTrk50/", "HLT/MET/MET120_IsoTrk50/"),
verbose = cms.untracked.uint32(0), # Set to 2 for all messages
resolution = cms.vstring(),
efficiency = cms.vstring(
"effic_met 'MET leg turnON; CaloMET [GeV]; efficiency' met_numerator met_denominator",
"effic_met_variable 'MET leg turnON; CaloMET [GeV]; efficiency' met_variable_numerator met_variable_denominator",
"effic_metPhi 'MET leg efficiency vs phi; CaloMET phi [rad]; efficiency' metPhi_numerator metPhi_denominator",
"effic_muonPt 'Track leg turnON; Muon p_{T} [GeV]; efficiency' muonPt_numerator muonPt_denominator",
"effic_muonPt_variable 'Track leg turnON; Muon p_{T} [GeV]; efficiency' muonPt_variable_numerator muonPt_variable_denominator",
"effic_muonEta 'Track leg efficiency vs eta; Muon #eta; efficiency' muonEta_numerator muonEta_denominator",
),
efficiencyProfile = cms.untracked.vstring(
"effic_met_vs_LS 'MET leg efficiency vs LS; LS; CaloMET leg efficiency' metVsLS_numerator metVsLS_denominator",
"effic_muonPt_vs_LS 'Track leg efficiency vs LS; LS; Track leg efficiency' muonPtVsLS_numerator muonPtVsLS_denominator",
),

)

exoticaClient = cms.Sequence(
metEfficiency
+ NoBPTXEfficiency
+ METplusTrackEfficiency
)
2 changes: 2 additions & 0 deletions DQMOffline/Trigger/python/ExoticaMonitoring_cff.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@

from DQMOffline.Trigger.METMonitor_cff import *
from DQMOffline.Trigger.NoBPTXMonitor_cff import *
from DQMOffline.Trigger.METplusTrackMonitor_cff import *

exoticaMonitorHLT = cms.Sequence(
exoHLTMETmonitoring
+ exoHLTNoBPTXmonitoring
+ exoHLTMETplusTrackMonitoring
)
23 changes: 23 additions & 0 deletions DQMOffline/Trigger/python/METplusTrackMonitor_cff.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import FWCore.ParameterSet.Config as cms

from DQMOffline.Trigger.METplusTrackMonitor_cfi import hltMETplusTrackMonitoring

# HLT_MET105_IsoTrk50
MET105_IsoTrk50monitoring = hltMETplusTrackMonitoring.clone()
MET105_IsoTrk50monitoring.FolderName = cms.string('HLT/MET/MET105_IsoTrk50/')
MET105_IsoTrk50monitoring.numGenericTriggerEventPSet.hltPaths = cms.vstring("HLT_MET105_IsoTrk50_v")
MET105_IsoTrk50monitoring.hltMetSelection = cms.string("pt > 105")
MET105_IsoTrk50monitoring.hltMetCleanSelection = cms.string("pt > 65")

# HLT_MET120_IsoTrk50
MET120_IsoTrk50monitoring = hltMETplusTrackMonitoring.clone()
MET120_IsoTrk50monitoring.FolderName = cms.string('HLT/MET/MET120_IsoTrk50/')
MET120_IsoTrk50monitoring.numGenericTriggerEventPSet.hltPaths = cms.vstring("HLT_MET120_IsoTrk50_v")
MET105_IsoTrk50monitoring.hltMetSelection = cms.string("pt > 120")
MET105_IsoTrk50monitoring.hltMetCleanSelection = cms.string("pt > 65")

exoHLTMETplusTrackMonitoring = cms.Sequence(
MET105_IsoTrk50monitoring
+ MET120_IsoTrk50monitoring
)

65 changes: 65 additions & 0 deletions DQMOffline/Trigger/python/METplusTrackMonitor_cfi.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
import FWCore.ParameterSet.Config as cms

from DQMOffline.Trigger.metPlusTrackMonitoring_cfi import metPlusTrackMonitoring

hltMETplusTrackMonitoring = metPlusTrackMonitoring.clone()
hltMETplusTrackMonitoring.FolderName = cms.string('HLT/MET/MET105_IsoTrk50/')
hltMETplusTrackMonitoring.histoPSet.metPSet = cms.PSet(
nbins = cms.uint32 (200),
xmin = cms.double(-0.5),
xmax = cms.double(999.5),
)
hltMETplusTrackMonitoring.histoPSet.ptPSet = cms.PSet(
nbins = cms.uint32 (200),
xmin = cms.double(-0.5),
xmax = cms.double(999.5),
)
hltMETplusTrackMonitoring.histoPSet.etaPSet = cms.PSet(
nbins = cms.uint32 (24),
xmin = cms.double(-2.4),
xmax = cms.double(2.4),
)
hltMETplusTrackMonitoring.histoPSet.phiPSet = cms.PSet(
nbins = cms.uint32(32),
xmin = cms.double(-3.2),
xmax = cms.double(3.2),
)

# Define 100 logarithmic bins from 10^0 to 10^3 GeV
binsLogX_METplusTrack = []
nBinsLogX_METplusTrack = 100
powerLo_METplusTrack = 0.0
powerHi_METplusTrack = 3.0
binPowerWidth_METplusTrack = (powerHi_METplusTrack - powerLo_METplusTrack) / nBinsLogX_METplusTrack
for ibin in range(nBinsLogX_METplusTrack + 1):
binsLogX_METplusTrack.append( pow(10, powerLo_METplusTrack + ibin * binPowerWidth_METplusTrack) )

hltMETplusTrackMonitoring.histoPSet.metBinning = cms.vdouble(binsLogX_METplusTrack)
hltMETplusTrackMonitoring.histoPSet.ptBinning = cms.vdouble(binsLogX_METplusTrack)

hltMETplusTrackMonitoring.met = cms.InputTag("caloMet") # caloMet
hltMETplusTrackMonitoring.jets = cms.InputTag("pfJetsEI") # ak4PFJets, ak4PFJetsCHS
hltMETplusTrackMonitoring.muons = cms.InputTag("muons") # while pfIsolatedMuonsEI are reco::PFCandidate !

hltMETplusTrackMonitoring.muonSelection = cms.string('pt>26 && abs(eta)<2.1')
hltMETplusTrackMonitoring.vtxSelection = cms.string('ndof>=4 && abs(z)<24.0 && position.Rho<2.0')
hltMETplusTrackMonitoring.njets = cms.uint32(1)
hltMETplusTrackMonitoring.nmuons = cms.uint32(1)
hltMETplusTrackMonitoring.leadJetEtaCut = cms.double(2.4)

hltMETplusTrackMonitoring.numGenericTriggerEventPSet.andOr = cms.bool( False )
#hltMETplusTrackMonitoring.numGenericTriggerEventPSet.dbLabel = cms.string("ExoDQMTrigger") # it does not exist yet, we should consider the possibility of using the DB, but as it is now it will need a label per path !
hltMETplusTrackMonitoring.numGenericTriggerEventPSet.andOrHlt = cms.bool(True)# True:=OR; False:=AND
hltMETplusTrackMonitoring.numGenericTriggerEventPSet.hltInputTag = cms.InputTag( "TriggerResults::HLT" )
hltMETplusTrackMonitoring.numGenericTriggerEventPSet.hltPaths = cms.vstring("HLT_MET105_IsoTrk50_v") # HLT_ZeroBias_v
#hltMETplusTrackMonitoring.numGenericTriggerEventPSet.hltDBKey = cms.string("EXO_HLT_MET")
hltMETplusTrackMonitoring.numGenericTriggerEventPSet.errorReplyHlt = cms.bool( False )
hltMETplusTrackMonitoring.numGenericTriggerEventPSet.verbosityLevel = cms.uint32(0)

hltMETplusTrackMonitoring.denGenericTriggerEventPSet.andOr = cms.bool( False )
hltMETplusTrackMonitoring.denGenericTriggerEventPSet.dcsInputTag = cms.InputTag( "scalersRawToDigi" )
hltMETplusTrackMonitoring.denGenericTriggerEventPSet.dcsPartitions = cms.vint32 ( 24, 25, 26, 27, 28, 29 ) # 24-27: strip, 28-29: pixel, we should add all other detectors !
hltMETplusTrackMonitoring.denGenericTriggerEventPSet.andOrDcs = cms.bool( False )
hltMETplusTrackMonitoring.denGenericTriggerEventPSet.errorReplyDcs = cms.bool( True )
hltMETplusTrackMonitoring.denGenericTriggerEventPSet.verbosityLevel = cms.uint32(1)
hltMETplusTrackMonitoring.denGenericTriggerEventPSet.hltPaths = cms.vstring("HLT_IsoMu27_v", "HLT_IsoTkMu27_v")