Skip to content

Commit

Permalink
Merge pull request #23279 from thomreis/l1t_dqm_offline_muon_res_upgr…
Browse files Browse the repository at this point in the history
…ades

L1T offline DQM changes for muon resolution plots
  • Loading branch information
cmsbuild committed May 28, 2018
2 parents 0536110 + 8d47af0 commit 209e185
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 17 deletions.
5 changes: 3 additions & 2 deletions DQMOffline/L1Trigger/interface/L1TMuonDQMOffline.h
Expand Up @@ -43,6 +43,7 @@
#include "DataFormats/VertexReco/interface/VertexFwd.h"
#include "DataFormats/BeamSpot/interface/BeamSpot.h"
#include "DataFormats/Math/interface/deltaR.h"
#include "DataFormats/Math/interface/deltaPhi.h"
#include "HLTrigger/HLTcore/interface/HLTConfigProvider.h"
#include "DataFormats/Common/interface/TriggerResults.h"
#include "DataFormats/HLTReco/interface/TriggerEvent.h"
Expand All @@ -62,7 +63,7 @@ class MuonGmtPair;

class L1TMuonDQMOffline : public DQMEDAnalyzer {
public:
enum Control {kCtrlTagPt, kCtrlTagEta, kCtrlTagPhi, kCtrlProbePt, kCtrlProbeEta, kCtrlProbePhi, kCtrlTagProbeDr, kCtrlMuonGmtDeltaR, kCtrlNTightVsAll, kCtrlNProbesVsTight};
enum Control {kCtrlTagPt, kCtrlTagEta, kCtrlTagPhi, kCtrlProbePt, kCtrlProbeEta, kCtrlProbePhi, kCtrlTagProbeDr, kCtrlTagHltDr, kCtrlMuonGmtDeltaR, kCtrlNTightVsAll, kCtrlNProbesVsTight};
enum EffType {kEffPt, kEffPhi, kEffEta, kEffVtx};
enum ResType {kResPt, kRes1OverPt, kResQOverPt, kResPhi, kResEta, kResCh};
enum EtaRegion {kEtaRegionAll, kEtaRegionBmtf, kEtaRegionOmtf, kEtaRegionEmtf, kEtaRegionOut};
Expand All @@ -85,7 +86,7 @@ class L1TMuonDQMOffline : public DQMEDAnalyzer {
// Helper Functions
const unsigned int getNVertices(edm::Handle<reco::VertexCollection> & vertex);
const reco::Vertex getPrimaryVertex(edm::Handle<reco::VertexCollection> & vertex,edm::Handle<reco::BeamSpot> & beamSpot);
bool matchHlt(edm::Handle<trigger::TriggerEvent> & triggerEvent, const reco::Muon * mu);
double matchHlt(edm::Handle<trigger::TriggerEvent> & triggerEvent, const reco::Muon * mu);

// Cut and Matching
void getMuonGmtPairs(edm::Handle<l1t::MuonBxCollection> & gmtCands);
Expand Down
7 changes: 5 additions & 2 deletions DQMOffline/L1Trigger/python/L1TMuonDQMOffline_cfi.py
Expand Up @@ -2,13 +2,16 @@

# define binning for efficiency plots
# pt
effVsPtBins = range(0, 50, 2)
effVsPtBins = range(0, 30, 1)
effVsPtBins += range(30, 50, 2)
effVsPtBins += range(50, 70, 5)
effVsPtBins += range(70, 100, 10)
effVsPtBins += range(100, 200, 25)
effVsPtBins += range(200, 300, 50)
effVsPtBins += range(300, 500, 100)
effVsPtBins.append(500)
effVsPtBins += range(500, 700, 200)
effVsPtBins += range(700, 1000, 300)
effVsPtBins.append(1000)

# phi
nPhiBins = 34
Expand Down
29 changes: 16 additions & 13 deletions DQMOffline/L1Trigger/src/L1TMuonDQMOffline.cc
Expand Up @@ -90,10 +90,10 @@ L1TMuonDQMOffline::EtaRegion MuonGmtPair::etaRegion() const {
}

double MuonGmtPair::getDeltaVar(const L1TMuonDQMOffline::ResType type) const {
if (type == L1TMuonDQMOffline::kResPt) return gmtPt() - pt();
if (type == L1TMuonDQMOffline::kRes1OverPt) return 1/gmtPt() - 1/pt();
if (type == L1TMuonDQMOffline::kResQOverPt) return gmtCharge()/gmtPt() - charge()/pt();
if (type == L1TMuonDQMOffline::kResPhi) return gmtPhi() - phi();
if (type == L1TMuonDQMOffline::kResPt) return (gmtPt() - pt()) / pt();
if (type == L1TMuonDQMOffline::kRes1OverPt) return (pt() - gmtPt()) / gmtPt(); // (1/gmtPt - 1/pt) / (1/pt)
if (type == L1TMuonDQMOffline::kResQOverPt) return (gmtCharge()*charge()*pt() - gmtPt()) / gmtPt(); // (gmtCharge/gmtPt - charge/pt) / (charge/pt) with gmtCharge/charge = gmtCharge*charge
if (type == L1TMuonDQMOffline::kResPhi) return reco::deltaPhi(gmtPhi(), phi());
if (type == L1TMuonDQMOffline::kResEta) return gmtEta() - eta();
if (type == L1TMuonDQMOffline::kResCh) return gmtCharge() - charge();
return -999.;
Expand Down Expand Up @@ -147,13 +147,13 @@ FreeTrajectoryState MuonGmtPair::freeTrajStateMuon(TrackRef track)
//__________DQM_base_class_______________________________________________
L1TMuonDQMOffline::L1TMuonDQMOffline(const ParameterSet & ps) :
m_effTypes({kEffPt, kEffPhi, kEffEta, kEffVtx}),
m_resTypes({kResPt, kRes1OverPt, kResQOverPt, kResPhi, kResEta}),
m_resTypes({kResPt, kResQOverPt, kResPhi, kResEta}),
m_etaRegions({kEtaRegionAll, kEtaRegionBmtf, kEtaRegionOmtf, kEtaRegionEmtf}),
m_qualLevelsRes({kQualAll}),
m_effStrings({ {kEffPt, "pt"}, {kEffPhi, "phi"}, {kEffEta, "eta"}, {kEffVtx, "vtx"} }),
m_effLabelStrings({ {kEffPt, "p_{T} (GeV)"}, {kEffPhi, "#phi"}, {kEffEta, "#eta"}, {kEffVtx, "# vertices"} }),
m_resStrings({ {kResPt, "pt"}, {kRes1OverPt, "1overpt"}, {kResQOverPt, "qoverpt"}, {kResPhi, "phi"}, {kResEta, "eta"}, {kResCh, "charge"} }),
m_resLabelStrings({ {kResPt, "p_{T}^{L1} - p_{T}^{reco}"}, {kRes1OverPt, "1/p_{T}^{L1} - 1/p_{T}^{reco}"}, {kResQOverPt, "q^{L1}/p_{T}^{L1} - q^{reco}/p_{T}^{reco}"}, {kResPhi, "#phi_{L1} - #phi_{reco}"}, {kResEta, "#eta_{L1} - #eta_{reco}"}, {kResCh, "charge^{L1} - charge^{reco}"} }),
m_resLabelStrings({ {kResPt, "(p_{T}^{L1} - p_{T}^{reco})/p_{T}^{reco}"}, {kRes1OverPt, "(p_{T}^{reco} - p_{T}^{L1})/p_{T}^{L1}"}, {kResQOverPt, "(q^{L1}*q^{reco}*p_{T}^{reco} - p_{T}^{L1})/p_{T}^{L1}"}, {kResPhi, "#phi_{L1} - #phi_{reco}"}, {kResEta, "#eta_{L1} - #eta_{reco}"}, {kResCh, "charge^{L1} - charge^{reco}"} }),
m_etaStrings({ {kEtaRegionAll, "etaMin0_etaMax2p4"}, {kEtaRegionBmtf, "etaMin0_etaMax0p83"}, {kEtaRegionOmtf, "etaMin0p83_etaMax1p24"}, {kEtaRegionEmtf, "etaMin1p24_etaMax2p4"} }),
m_qualStrings({ {kQualAll, "qualAll"}, {kQualOpen, "qualOpen"}, {kQualDouble, "qualDouble"}, {kQualSingle, "qualSingle"} }),
m_verbose(ps.getUntrackedParameter<bool>("verbose")),
Expand All @@ -176,7 +176,7 @@ L1TMuonDQMOffline::L1TMuonDQMOffline(const ParameterSet & ps) :
m_useAtVtxCoord(ps.getUntrackedParameter<bool>("useL1AtVtxCoord")),
m_maxGmtMuonDR(0.3),
m_minTagProbeDR(0.5),
m_maxHltMuonDR(0.3)
m_maxHltMuonDR(0.1)
{
if (m_verbose) cout << "[L1TMuonDQMOffline:] ____________ Storage initialization ____________ " << endl;

Expand Down Expand Up @@ -384,6 +384,7 @@ void L1TMuonDQMOffline::bookControlHistos(DQMStore::IBooker& ibooker) {
m_ControlHistos[kCtrlProbeEta] = ibooker.book1D("ProbeMuonEta", "ProbeMuonEta; #eta", 50, -2.5, 2.5);

m_ControlHistos[kCtrlTagProbeDr] = ibooker.book1D("TagMuonProbeMuonDeltaR", "TagMuonProbeMuonDeltaR; #DeltaR", 50, 0.,5.0);
m_ControlHistos[kCtrlTagHltDr] = ibooker.book1D("TagMuonHltDeltaR", "TagMuonHltDeltaR;#DeltaR", 55, 0., 0.11);
}

//_____________________________________________________________________
Expand Down Expand Up @@ -538,7 +539,8 @@ void L1TMuonDQMOffline::getProbeMuons(Handle<edm::TriggerResults> & trigResults,
deltar = sqrt(dEta*dEta + dPhi*dPhi);

if ( (*tagCandIt) == (*probeCandIt) || deltar<m_minTagProbeDR ) continue; // CB has a little bias for closed-by muons
tagHasTrig = matchHlt(trigEvent,(*tagCandIt)) && (pt > m_TagPtCut);
auto matchHltDeltaR = matchHlt(trigEvent,(*tagCandIt));
tagHasTrig = (matchHltDeltaR < m_maxHltMuonDR) && (pt > m_TagPtCut);
isProbe |= tagHasTrig;
if (tagHasTrig) {
if (std::distance(m_TightMuons.begin(), m_TightMuons.end()) > 2 ) {
Expand All @@ -555,6 +557,7 @@ void L1TMuonDQMOffline::getProbeMuons(Handle<edm::TriggerResults> & trigResults,
m_ControlHistos[kCtrlTagPhi]->Fill(phi);
m_ControlHistos[kCtrlTagPt]->Fill(pt);
m_ControlHistos[kCtrlTagProbeDr]->Fill(deltar);
m_ControlHistos[kCtrlTagHltDr]->Fill(matchHltDeltaR);
}
}
}
Expand Down Expand Up @@ -599,7 +602,7 @@ void L1TMuonDQMOffline::getMuonGmtPairs(edm::Handle<l1t::MuonBxCollection> & gmt
}

//_____________________________________________________________________
bool L1TMuonDQMOffline::matchHlt(edm::Handle<TriggerEvent> & triggerEvent, const reco::Muon * mu) {
double L1TMuonDQMOffline::matchHlt(edm::Handle<TriggerEvent> & triggerEvent, const reco::Muon * mu) {

double matchDeltaR = 9999;

Expand All @@ -624,7 +627,7 @@ bool L1TMuonDQMOffline::matchHlt(edm::Handle<TriggerEvent> & triggerEvent, cons
}
}
}
return (matchDeltaR < m_maxHltMuonDR);
return matchDeltaR;
}

std::vector<float> L1TMuonDQMOffline::getHistBinsEff(EffType eff) {
Expand All @@ -648,9 +651,9 @@ std::vector<float> L1TMuonDQMOffline::getHistBinsEff(EffType eff) {
}

std::tuple<int, double, double> L1TMuonDQMOffline::getHistBinsRes(ResType res){
if (res == kResPt) return {100, -50., 50.};
if (res == kRes1OverPt) return {50, -0.05, 0.05};
if (res == kResQOverPt) return {50, -0.05, 0.05};
if (res == kResPt) return {50, -2., 2.};
if (res == kRes1OverPt) return {50, -2., 2.};
if (res == kResQOverPt) return {50, -2., 2.};
if (res == kResPhi) return {96, -0.2, 0.2};
if (res == kResEta) return {100, -0.1, 0.1};
if (res == kResCh) return {5, -2, 3};
Expand Down

0 comments on commit 209e185

Please sign in to comment.