ATLAS Offline Software
Loading...
Searching...
No Matches
RecoMuonPlots.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
7
9#include "xAODTracking/TrackingPrimitives.h" //for MuonSummaryType enum
11
12#include <TH2.h>
13#include <vector>
14#include <cmath> //for abs, sqrt
15
18
19RecoMuonPlots::RecoMuonPlots(PlotBase* pParent, const std::string& sDir, bool detail):PlotBase(pParent, sDir)
20
21, m_oAllPlots(this, "/", "Reco Muon")
22, m_oMuRecoInfoPlots(this, "/")
23, m_oImpactPlots(this, "/")
24, m_oMomentumPullPlots(this, "/")
25, m_origin_eta_phi(nullptr)
26, m_eff_tight(nullptr)
27, m_eff_medium(nullptr)
28, m_tight_eta_phi(nullptr)
29, m_medium_eta_phi(nullptr)
30, m_pt_broad(nullptr)
31, m_eta_phi_broad(nullptr)
32, m_eff_nPrec(nullptr)
33, m_eff_nPhi(nullptr)
34, m_eff_nTrigEta(nullptr)
35, m_eff_ndof(nullptr)
36, m_eff_chi2(nullptr)
37, m_ID_eff_ndof(nullptr)
38, m_ID_eff_chi2(nullptr)
39, m_MS_eff_ndof(nullptr)
40, m_MS_eff_chi2(nullptr)
41{
42 Detail = detail;
43}
44
46 //be very careful here, bin size is the same as the defult value
47 std::vector<HistData> hists = m_oAllPlots.retrieveBookedHistograms(); // HistData -> std::pair<TH1*, std::string>
48 int xbins = 52;
49 int ybins = 64;
50 float xmin = -2.6;
51 float xmax = 2.6;
52 float ymin = -3.2;
53 float ymax = 3.2;
54
55 //now register!
56 m_origin_eta_phi= Book2D("_Origin_eta_phi", "Original Distribution;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax);
57 m_eff_tight = Book2D("_Tight_eff", "Tight Quality Efficiency;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax);
58 m_eff_medium = Book2D("_Medium_eff", "Medium Quality Efficiency;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax);
59 m_tight_eta_phi = Book2D("_Tight_eta_phi", "Tight Muon #eta #phi Distribution;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax);
60 m_medium_eta_phi = Book2D("_Medium_eta_phi", "Medium Muon #eta #phi Distribution;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax);
61 if (Detail){
62 m_pt_broad = Book1D("_pt_broad", "High p_{T} Distribution;p_{T} [GeV]", 70, 100, 1500);
63 m_eta_phi_broad = Book2D("_eta_phi_broad", "High p_{T} Muon #eta #phi Distribution;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax);
64
65 m_eff_nPrec = Book2D("_eff_nPrec", "average number of Precision Layers;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax);
66 m_eff_nPhi = Book2D("_eff_nPhi", "average number of Phi Layers;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax);
67 m_eff_nTrigEta = Book2D("_eff_nTrigEta","average number of Trigger Eta Layers;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax);
68 m_eff_ndof = Book2D("_eff_ndof", "average number of hits;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax);
69 m_eff_chi2 = Book2D("_eff_chi2", "average #chi^{2} per DOF;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax);
70 m_ID_eff_ndof = Book2D("_ID_eff_ndof", "ID track average number of hits;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax);
71 m_ID_eff_chi2 = Book2D("_ID_eff_chi2", "ID track average #chi^{2} per DOF;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax);
72 m_MS_eff_ndof = Book2D("_MS_eff_ndof", "MS track average number of hits;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax);
73 m_MS_eff_chi2 = Book2D("_MS_eff_chi2", "MS track average #chi^{2} per DOF;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax);
74
75 m_avg_hits_precision_inner = Book2D("_avg_hits_precision_inner", "avg. precision hits, inner;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax);
76 m_avg_hits_precision_middle = Book2D("_avg_hits_precision_middle", "avg. precision hits, middle;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax);
77 m_avg_hits_precision_outer = Book2D("_avg_hits_precision_outer", "avg. precision hits, outer;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax);
78 m_avg_hits_precision_extended = Book2D("_avg_hits_precision_extended", "avg. precision hits, extended;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax);
79
80 m_avg_hits_trigger_layer1 = Book2D("_avg_hits_trigger_layer1", "avg. trigger hits, layer 1;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax);
81 m_avg_hits_trigger_layer2 = Book2D("_avg_hits_trigger_layer2", "avg. trigger hits, layer 2;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax);
82 m_avg_hits_trigger_layer3 = Book2D("_avg_hits_trigger_layer3", "avg. trigger hits, layer 3;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax);
83 m_avg_hits_trigger_layer4 = Book2D("_avg_hits_trigger_layer4", "avg. trigger hits, layer 4;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax);
84
85 m_avg_hits_ibl = Book2D("_avg_hits_ibl", "avg. IBL hits;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax);
86 m_avg_hits_pix = Book2D("_avg_hits_pix", "avg. Pix hits;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax);
87 m_avg_hits_sct = Book2D("_avg_hits_sct", "avg. SCT hits;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax);
88 m_avg_hits_trt = Book2D("_avg_hits_trt", "avg. TRT hits;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax);
89
90 m_avg_ddpt_idme = Book2D("_avg_ddpt_idme", "avg. |pt_{ID} - pt_{ME}| / pt_{CB};#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax);
91 m_avg_dptsignif = Book2D("_avg_dptsignif", "avg. momentum diff. signif.;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax);
92
93 }
94}
95
97 //General Plots
98 m_oAllPlots.fill(mu);
99 m_oMuRecoInfoPlots.fill(mu);
100 m_oMomentumPullPlots.fill(mu);
101
102 const xAOD::TrackParticle* primaryTrk = mu.trackParticle(xAOD::Muon::Primary);
103 // tracking related plots
104 if (!primaryTrk) return;
105 m_oImpactPlots.fill(*primaryTrk);
106 //m_oMSHitPlots.fill(*primaryTrk);
107
108}
109
110void RecoMuonPlots::fill(const xAOD::Muon& mu, xAOD::Muon::Quality my_quality){
111
112 //always fill the origin plot
113 m_origin_eta_phi->Fill(mu.eta(), mu.phi());
114
115 //General Plots; inclusive
116 {
117 using enum xAOD::Muon::Quality;
118 if (my_quality <= Tight) m_tight_eta_phi->Fill(mu.eta(), mu.phi());
119 if (my_quality <= Medium) m_medium_eta_phi->Fill(mu.eta(), mu.phi());
120 }
121 if(!Detail) return;
122 if (mu.pt()/1000.0 > 100) {//ony for high pt muons
123 m_pt_broad->Fill(mu.pt()/1000.0);
124 m_eta_phi_broad->Fill(mu.eta(), mu.phi());
125 }
126 using enum xAOD::Muon::TrackParticleType;
127 const xAOD::TrackParticle* primaryTrk = mu.trackParticle(Primary);
128 const xAOD::TrackParticle* inDetTrk = mu.trackParticle(InnerDetectorTrackParticle);
129
130 const xAOD::TrackParticle* msExtrapTrk = mu.trackParticle(ExtrapolatedMuonSpectrometerTrackParticle);
131 if (!msExtrapTrk) {
132 msExtrapTrk = mu.trackParticle(MuonSpectrometerTrackParticle);
133 }
134
135 if (!primaryTrk) {
136 return;
137 }
138
139 //fill the ndof and chi2 as eta phi map; to calculate efficiencies in post processing
140 //if necessary, can use a quality cut here
141 m_eff_ndof->Fill(primaryTrk->eta(), primaryTrk->phi(), primaryTrk->numberDoF());
142 m_eff_chi2->Fill(primaryTrk->eta(), primaryTrk->phi(), primaryTrk->chiSquared()/(primaryTrk->numberDoF() * 1.0));
143 if (inDetTrk) {
144 m_ID_eff_ndof->Fill(inDetTrk->eta(), inDetTrk->phi(), inDetTrk->numberDoF());
145 m_ID_eff_chi2->Fill(inDetTrk->eta(), inDetTrk->phi(), inDetTrk->chiSquared()/(inDetTrk->numberDoF() * 1.0));
146 }
147 if (msExtrapTrk) {
148 m_MS_eff_ndof->Fill(msExtrapTrk->eta(), msExtrapTrk->phi(), msExtrapTrk->numberDoF());
149 m_MS_eff_chi2->Fill(msExtrapTrk->eta(), msExtrapTrk->phi(), msExtrapTrk->chiSquared()/(msExtrapTrk->numberDoF() * 1.0));
150 }
151
152
156
157 if (!mu.summaryValue(hitval_innerSmallHits, xAOD::MuonSummaryType::innerSmallHits)) return;
158 if (!mu.summaryValue(hitval_innerLargeHits, xAOD::MuonSummaryType::innerLargeHits)) return;
161 if (!mu.summaryValue(hitval_outerSmallHits, xAOD::MuonSummaryType::outerSmallHits)) return;
162 if (!mu.summaryValue(hitval_outerLargeHits, xAOD::MuonSummaryType::outerLargeHits)) return;
165
166 if (!mu.summaryValue(hitval_etaLayer1Hits, xAOD::MuonSummaryType::etaLayer1Hits)) return;
167 if (!mu.summaryValue(hitval_etaLayer2Hits, xAOD::MuonSummaryType::etaLayer2Hits)) return;
168 if (!mu.summaryValue(hitval_etaLayer3Hits, xAOD::MuonSummaryType::etaLayer3Hits)) return;
169 if (!mu.summaryValue(hitval_etaLayer4Hits, xAOD::MuonSummaryType::etaLayer4Hits)) return;
170
173 if (!mu.summaryValue(hitval_numberOfSCTHits, xAOD::SummaryType::numberOfSCTHits)) return;
174 if (!mu.summaryValue(hitval_numberOfTRTHits, xAOD::SummaryType::numberOfTRTHits)) return;
175
176 m_eff_nPrec -> Fill(mu.eta(), mu.phi(), hitval_numberOfPrecisionLayers);
177 m_eff_nPhi -> Fill(mu.eta(), mu.phi(), hitval_numberOfPhiLayers);
178 m_eff_nTrigEta -> Fill(mu.eta(), mu.phi(), hitval_numberOfTriggerEtaLayers);
179
184
185 m_avg_hits_trigger_layer1 -> Fill(mu.eta(), mu.phi(), hitval_etaLayer1Hits);
186 m_avg_hits_trigger_layer2 -> Fill(mu.eta(), mu.phi(), hitval_etaLayer2Hits);
187 m_avg_hits_trigger_layer3 -> Fill(mu.eta(), mu.phi(), hitval_etaLayer3Hits);
188 m_avg_hits_trigger_layer4 -> Fill(mu.eta(), mu.phi(), hitval_etaLayer4Hits);
189
190 m_avg_hits_ibl -> Fill(mu.eta(), mu.phi(), hitval_numberOfBLayerHits);
191 m_avg_hits_pix -> Fill(mu.eta(), mu.phi(), hitval_numberOfPixelHits);
192 m_avg_hits_sct -> Fill(mu.eta(), mu.phi(), hitval_numberOfSCTHits);
193 m_avg_hits_trt -> Fill(mu.eta(), mu.phi(), hitval_numberOfTRTHits);
194
195 if (inDetTrk && msExtrapTrk) {
196 qoverp_diff = std::abs(inDetTrk->qOverP() - msExtrapTrk->qOverP());
197 qoverp_sigma = std::sqrt(inDetTrk->definingParametersCovMatrix()(4,4) + msExtrapTrk->definingParametersCovMatrix()(4,4));
199 ddpt_idme = (primaryTrk->pt() > 0) ? std::abs(inDetTrk->pt() - msExtrapTrk->pt()) / primaryTrk->pt() : -999;
200
201 m_avg_ddpt_idme -> Fill(mu.eta(), mu.phi(), ddpt_idme);
202 m_avg_dptsignif -> Fill(mu.eta(), mu.phi(), qoverp_signif);
203 }
204
205}
ElementLink< xAOD::MuonContainer > MuonLink
Helper class to provide constant type-safe access to aux data.
ElementLink< xAOD::TrackParticleContainer > TrackLink
TH1D * Book1D(std::string_view name, std::string_view labels, int nBins, float start, float end, bool prependDir=true)
Book a TH1D histogram.
Definition PlotBase.cxx:94
PlotBase(PlotBase *parent, std::string_view sDir)
Definition PlotBase.cxx:29
TH2F * Book2D(std::string_view name, std::string_view labels, int nBinsX, float startX, float endX, int nBinsY, float startY, float endY, bool prependDir=true)
Book a TH2F histogram.
Definition PlotBase.cxx:123
TH2 * m_tight_eta_phi
uint8_t hitval_middleSmallHits
uint8_t hitval_numberOfSCTHits
TH2 * m_avg_ddpt_idme
RecoMuonPlots(PlotBase *pParent, const std::string &sDir, bool detail=false)
uint8_t hitval_numberOfTRTHits
TH2 * m_avg_hits_trigger_layer3
uint8_t hitval_outerSmallHits
void fill(const xAOD::Muon &mu)
TH2 * m_origin_eta_phi
Muon::MomentumPullPlots m_oMomentumPullPlots
uint8_t hitval_etaLayer1Hits
TH2 * m_avg_hits_trigger_layer1
uint8_t hitval_extendedSmallHits
Trk::ImpactPlots m_oImpactPlots
TH2 * m_avg_hits_precision_extended
uint8_t hitval_numberOfPrecisionLayers
Muon::RecoInfoPlots m_oMuRecoInfoPlots
uint8_t hitval_outerLargeHits
TH2 * m_avg_hits_precision_outer
TH2 * m_avg_dptsignif
uint8_t hitval_innerSmallHits
TH2 * m_avg_hits_trigger_layer4
Trk::ParamPlots m_oAllPlots
uint8_t hitval_extendedLargeHits
uint8_t hitval_etaLayer4Hits
TH2 * m_avg_hits_trigger_layer2
uint8_t hitval_numberOfPixelHits
uint8_t hitval_numberOfBLayerHits
uint8_t hitval_numberOfTriggerEtaLayers
TH2 * m_eta_phi_broad
uint8_t hitval_numberOfPhiLayers
TH2 * m_medium_eta_phi
TH2 * m_avg_hits_precision_inner
uint8_t hitval_innerLargeHits
uint8_t hitval_etaLayer3Hits
uint8_t hitval_etaLayer2Hits
uint8_t hitval_middleLargeHits
TH2 * m_avg_hits_precision_middle
float numberDoF() const
Returns the number of degrees of freedom of the overall track or vertex fit as float.
virtual double phi() const override final
The azimuthal angle ( ) of the particle (has range to .).
const ParametersCovMatrix_t definingParametersCovMatrix() const
Returns the 5x5 symmetric matrix containing the defining parameters covariance matrix.
bool summaryValue(uint8_t &value, const SummaryType &information) const
Accessor for TrackSummary values.
float qOverP() const
Returns the parameter.
virtual double pt() const override final
The transverse momentum ( ) of the particle.
float chiSquared() const
Returns the of the overall track fit.
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
double xmax
Definition listroot.cxx:61
double ymin
Definition listroot.cxx:63
double xmin
Definition listroot.cxx:60
double ymax
Definition listroot.cxx:64
TrackParticle_v1 TrackParticle
Reference the current persistent version:
Muon_v1 Muon
Reference the current persistent version:
@ numberOfPrecisionLayers
layers with at least 3 hits [unit8_t].
@ numberOfTRTHits
number of TRT hits [unit8_t].
@ numberOfTriggerEtaLayers
layers with trigger eta hits [unit8_t].
@ numberOfPhiLayers
layers with a trigger phi hit [unit8_t].
@ numberOfSCTHits
number of hits in SCT [unit8_t].
@ numberOfInnermostPixelLayerHits
these are the hits in the 0th pixel barrel layer
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].
@ outerSmallHits
number of precision hits in the outer small layer
@ middleSmallHits
number of precision hits in the middle small layer
@ outerLargeHits
number of precision hits in the outer large layer
@ etaLayer3Hits
number of eta hits in the third trigger layer (BOL1 ot T2)
@ middleLargeHits
number of precision hits in the middle large layer
@ etaLayer1Hits
number of eta hits in the first trigger layer (BML1 ot T4)
@ extendedSmallHits
number of precision hits in the extended small layer
@ extendedLargeHits
number of precision hits in the extended large layer
@ innerLargeHits
number of precision hits in the inner large layer
@ etaLayer4Hits
number of eta hits in the fourth trigger layer (T3)
@ etaLayer2Hits
number of eta hits in the second trigger layer (BML2 ot T1)
@ innerSmallHits
number of precision hits in the inner small layer