ATLAS Offline Software
DQTMuonIDTrackTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // ********************************************************************
6 //
7 // NAMEABILITY: DQTMuonIDTrackTool.cxx
8 // PACKAGE: DataQualityTools
9 //
10 // AUTHORS: Jahred Adelman (jahred.adelman@cern.ch)
11 // and Max Baak (mbaakcern.ch)
12 // Updated by:
13 // Simon Viel (svielcern.ch)
14 // Suvayu Ali (sali@cern.ch)
15 //
16 // ********************************************************************
17 
19 
20 #include "GaudiKernel/MsgStream.h"
21 #include "GaudiKernel/ITHistSvc.h"
22 
23 #include "xAODMuon/Muon.h"
26 
28 
29 #include "TProfile.h"
30 #include "TMath.h"
31 #include <cmath>
32 //#include "TLorentzVector.h"
33 //#include "CommissionEvent/ComTime.h"
34 
35 
36 //----------------------------------------------------------------------------------
38  const std::string & name,
39  const IInterface* parent)
41  , m_trkEtasGM(0)
42  , m_trkThetasGM(0)
43  , m_trkPhi0sGM(0)
44  , m_trkd0sGM(0)
45  , m_trkz0sGM(0)
46  , m_trkpOverQsGM(0)
47  , m_trkEtaDiff(0)
48  , m_trkThetaDiff(0)
49  , m_trkPhi0Diff(0)
50  , m_trkd0Diff(0)
51  , m_trkz0Diff(0)
52  , m_trkpOverQDiff(0)
53  , m_trkPxDiff(0)
54  , m_trkPyDiff(0)
55  , m_trkPzDiff(0)
56  , m_trkPDiff(0)
57  , m_trkPtDiff(0)
58  , m_trkChargeDiff(0)
59  , m_trkXDiff(0)
60  , m_trkYDiff(0)
61  , m_trkZDiff(0)
62  , m_ntrkMS(0)
63  , m_ntrkID(0)
64  , m_ntrkComb(0)
65  , m_trkEtaIDTag(0)
66  , m_trkPhi0IDTag(0)
67  , m_trkEtaMSProbe(0)
68  , m_trkPhi0MSProbe(0)
69  , m_trkEtaID(0)
70  , m_trkThetaID(0)
71  , m_trkPhi0ID(0)
72  , m_trkd0ID(0)
73  , m_trkd0IDZOOM(0)
74  , m_trkz0ID(0)
75  , m_trkpOverQID(0)
76  , m_trkPxID(0)
77  , m_trkPyID(0)
78  , m_trkPzID(0)
79  , m_trkPID(0)
80  , m_trkPtID(0)
81  , m_trkChargeID(0)
82  , m_trkXID(0)
83  , m_trkYID(0)
84  , m_trkZID(0)
85  , m_trkd0vsPhi0ID(0)
86  , m_trkeffvsphi(0)
87  , m_trkeffvseta(0)
88  , m_trkeffvsLumi(0)
89  , m_fwdetatrkeffvsLumi(0)
90  , m_bkwdetatrkeffvsLumi(0)
91  , m_MS2ID_MuontrkeffvsPhi(0)
92  , m_ID2MS_MuontrkeffvsEta(0)
93  , m_trkEtaMuon(0)
94  , m_trkThetaMuon(0)
95  , m_trkPhi0Muon(0)
96  , m_trkd0Muon(0)
97  , m_trkz0Muon(0)
98  , m_trkpOverQMuon(0)
99  , m_trkPxMuon(0)
100  , m_trkPyMuon(0)
101  , m_trkPzMuon(0)
102  , m_trkPMuon(0)
103  , m_trkPtMuon(0)
104  , m_trkChargeMuon(0)
105  , m_trkXMuon(0)
106  , m_trkYMuon(0)
107  , m_trkZMuon(0)
108  , m_JPsiMassID(0)
109  , m_JPsiMassMuon(0)
110  , m_JPsiMassDiff(0)
111  , m_JPsiMass2D(0)
112  , m_UpsilonMassID(0)
113  , m_UpsilonMassMuon(0)
114  , m_UpsilonMassDiff(0)
115  , m_UpsilonMass2D(0)
116  , m_ZMassID(0)
117  , m_ZMassMuon(0)
118  , m_ZMassDiff(0)
119  , m_ZMass2D(0)
120  , m_JPsiMassID_broad(0)
121  , m_UpsilonMassID_broad(0)
122  , m_CombinedInDetTracksName("CombinedInDetTracks")
123  , m_MooreTracksName("MooreTracks")
124  , m_CombinedTracksName("CombinedTracks")
125  , m_extrapolator("Trk::Extrapolator/InDetExtrapolator")
126  , m_z0DiffCutID(200)
127  , m_d0DiffCutID(500)
128  , m_z0DiffCutMuon(200)
129  , m_d0DiffCutMuon(500)
130  , m_nMinSCTHits(5)
131  , m_minPtCut(4000)
132  , m_muonPtCut(6000)
133  , m_JPsiCounter(0)
134  , m_printedErrorID(false)
135  , m_printedErrorMuon(false)
136  , m_printedErrorCombined(false)
137  , m_printedErrorMuonColl(false)
138 //----------------------------------------------------------------------------------
139 
140 {
142  declareProperty("MuonTracks", m_MooreTracksName);
143  declareProperty("CombinedTracks", m_CombinedTracksName);
144  declareProperty("ExtrapolationTool", m_extrapolator);
145  declareProperty("z0DiffCutID", m_z0DiffCutID);
146  declareProperty("d0DiffCutID", m_d0DiffCutID);
147  declareProperty("z0DiffCutMuon", m_z0DiffCutMuon);
148  declareProperty("d0DiffCutMuon", m_d0DiffCutMuon);
149  declareProperty("MinSCTHits", m_nMinSCTHits);
150  declareProperty("MinPtCut", m_minPtCut);
151  declareProperty("muonPtCut", m_muonPtCut);
152  //declareProperty("doRunCosmics", m_doRunCosmics = 1);
153  //declareProperty("doRunBeam", m_doRunBeam = 1);
154  //declareProperty("doOfflineHists", m_doOfflineHists = 1);
155  //declareProperty("doOnlineHists", m_doOnlineHists = 1);
156  declareInterface<IMonitorToolBase>(this);
157  m_path = "GLOBAL/DQTMuonIDTrack";
158 
159 }
160 
161 
162 //----------------------------------------------------------------------------------
164 //----------------------------------------------------------------------------------
165 {
166 }
167 
168 //----------------------------------------------------------------------------------
170 //----------------------------------------------------------------------------------
171 {
173  ATH_CHECK( m_MuonContainerKey.initialize() );
175 }
176 
177 //----------------------------------------------------------------------------------
179 //StatusCode DQTMuonIDTrackTool::bookHistograms( bool isNewEventsBlock, bool isNewLumiBlock, bool isNewRun )
180 //----------------------------------------------------------------------------------
181 {
182  bool failure(false);
183  m_printedErrorID = false;
184  m_printedErrorMuon = false;
185  m_printedErrorCombined = false;
186  m_printedErrorMuonColl = false;
187 
188  //if (newRun) {
189  ATH_MSG_DEBUG( "in bookHistograms() and m_doRunCosmics = " << m_doRunCosmics << " and m_doRunBeam = " << m_doRunBeam );
190  ATH_MSG_DEBUG( "Using base path " << m_path );
191 
192  failure = bookMuons();
193  //}
194  //else if (newEventsBlock || newLumiBlock) {
195  // return StatusCode::SUCCESS;
196  //}
197  if (failure) {return StatusCode::FAILURE;}
198  else {return StatusCode::SUCCESS;}
199 }
200 
201 
202 
203 //----------------------------------------------------------------------------------
205 //----------------------------------------------------------------------------------
206 {
207  bool failure(false);
208  // if (isNewEventsBlock || isNewLumiBlock || isNewRun) {
209 
210 
211  if(m_extrapolator.retrieve().isFailure()) {
212  ATH_MSG_FATAL( "Could not get " << m_extrapolator.type() );
213  return false;
214  }
215 
216 
217 
218  std::string fullPathMuons=m_path+"/Trk";
219 
220  // Booking!
221  failure = failure | registerHist(fullPathMuons, m_trkEtasGM = TH2F_LW::create("m_trk_EtasGM", "Trk Etas", 100, -3.5, 3.5, 100, -3.5, 3.5)).isFailure();
222  failure = failure | registerHist(fullPathMuons, m_trkThetasGM = TH2F_LW::create("m_trk_ThetasGM", "Trk Thetas", 100, 0, TMath::Pi(), 100, 0, TMath::Pi())).isFailure();
223  failure = failure | registerHist(fullPathMuons, m_trkPhi0sGM = TH2F_LW::create("m_trk_Phi0sGM", "Trk Phi0s", 200, -TMath::Pi(), TMath::Pi(), 200, -TMath::Pi(), TMath::Pi())).isFailure();
224  failure = failure | registerHist(fullPathMuons, m_trkd0sGM = TH2F_LW::create("m_trk_d0sGM", "Trk d0s", 100, -2000, 2000, 100, -2000, 2000)).isFailure();
225  failure = failure | registerHist(fullPathMuons, m_trkz0sGM = TH2F_LW::create("m_trk_z0sGM", "Trk z0s", 100, -2000, 2000, 100, -2000, 2000)).isFailure();
226  failure = failure | registerHist(fullPathMuons, m_trkpOverQsGM = TH2F_LW::create("m_trk_pOverQsGM", "Trk pOverQs", 100, -1E5, 1E5, 100, -1E5, 1E5)).isFailure();
227 
228 
229  failure = failure | registerHist(fullPathMuons, m_trkEtaDiff = TH1F_LW::create("m_trk_EtaDiff", "Diff Trk Etas", 100, -0.5, 0.5)).isFailure();
230  failure = failure | registerHist(fullPathMuons, m_trkThetaDiff = TH1F_LW::create("m_trk_ThetaDiff", "Diff Trk Thetas", 100, -TMath::Pi(), TMath::Pi())).isFailure();
231  failure = failure | registerHist(fullPathMuons, m_trkPhi0Diff = TH1F_LW::create("m_trk_Phi0Diff", "Diff Trk Phi0s", 200, -1., 1.)).isFailure();
232  failure = failure | registerHist(fullPathMuons, m_trkd0Diff = TH1F_LW::create("m_trk_d0Diff", "Diff Trk d0s", 100, -500, 500)).isFailure();
233  failure = failure | registerHist(fullPathMuons, m_trkz0Diff = TH1F_LW::create("m_trk_z0Diff", "Diff Trk z0s", 100, -500, 500)).isFailure();
234  failure = failure | registerHist(fullPathMuons, m_trkpOverQDiff = TH1F_LW::create("m_trk_pOverQDiff", "Diff Trk pOverQs", 100, -5E3, 5E3)).isFailure();
235  failure = failure | registerHist(fullPathMuons, m_trkPxDiff = TH1F_LW::create("m_trk_PxDiff", "Diff Trk Px", 100, -5E3, 5E3)).isFailure();
236  failure = failure | registerHist(fullPathMuons, m_trkPyDiff = TH1F_LW::create("m_trk_PyDiff", "Diff Trk Py", 100, -5E3, 5E3)).isFailure();
237  failure = failure | registerHist(fullPathMuons, m_trkPzDiff = TH1F_LW::create("m_trk_PzDiff", "Diff Trk Pz", 100, -5E3, 5E3)).isFailure();
238  failure = failure | registerHist(fullPathMuons, m_trkPDiff = TH1F_LW::create("m_trk_PDiff", "Diff Trk P", 100, -25E3, 25E3)).isFailure();
239  failure = failure | registerHist(fullPathMuons, m_trkPtDiff = TH1F_LW::create("m_trk_PtDiff", "Diff Trk Pt", 100, -25E3, 25E3)).isFailure();
240  failure = failure | registerHist(fullPathMuons, m_trkChargeDiff = TH1F_LW::create("m_trk_ChargeDiff", "Diff Trk Charge", 100, -3, 3)).isFailure();
241  failure = failure | registerHist(fullPathMuons, m_trkXDiff = TH1F_LW::create("m_trk_XDiff", "Diff Trk X perigee", 100, -2000, 2000)).isFailure();
242  failure = failure | registerHist(fullPathMuons, m_trkYDiff = TH1F_LW::create("m_trk_YDiff", "Diff Trk Y perigee", 100, -2000, 2000)).isFailure();
243  failure = failure | registerHist(fullPathMuons, m_trkZDiff = TH1F_LW::create("m_trk_ZDiff", "Diff Trk Z perigee", 100, -2000, 2000)).isFailure();
244 
245  failure = failure | registerHist(fullPathMuons, m_ntrkMS = TH1F_LW::create("m_trk_ntrkMS", "Number of Muon tracks", 10, 0, 10)).isFailure();
246  failure = failure | registerHist(fullPathMuons, m_ntrkID = TH1F_LW::create("m_trk_ntrkID", "Number of ID tracks", 10, 0, 10)).isFailure();
247  failure = failure | registerHist(fullPathMuons, m_ntrkComb = TH1F_LW::create("m_trk_ntrkComb", "Number of Combined tracks", 10, 0, 10)).isFailure();
248 
249  failure = failure | registerHist(fullPathMuons, m_trkEtaIDTag = TH1F_LW::create("m_trk_EtaIDTag", "ID Tag Trk Etas", 100, -3.0, 3.0)).isFailure();
250  failure = failure | registerHist(fullPathMuons, m_trkPhi0IDTag = TH1F_LW::create("m_trk_Phi0IDTag", "ID Tag Trk Phi0s", 200, -TMath::Pi(), TMath::Pi())).isFailure();
251  failure = failure | registerHist(fullPathMuons, m_trkEtaMSProbe = TH1F_LW::create("m_trk_EtaMSProbe", "MS Probe Trk Etas", 100, -3.0, 3.0)).isFailure();
252  failure = failure | registerHist(fullPathMuons, m_trkPhi0MSProbe = TH1F_LW::create("m_trk_Phi0MSProbe", "MS Probe Trk Phi0s", 200, -TMath::Pi(), TMath::Pi())).isFailure();
253 
254 
255  failure = failure | registerHist(fullPathMuons, m_trkEtaID = TH1F_LW::create("m_trk_EtaID", "ID Trk Etas", 100, -3.0, 3.0)).isFailure();
256  failure = failure | registerHist(fullPathMuons, m_trkThetaID = TH1F_LW::create("m_trk_ThetaID", "ID Trk Thetas", 100, 0, TMath::Pi() )).isFailure();
257  failure = failure | registerHist(fullPathMuons, m_trkPhi0ID = TH1F_LW::create("m_trk_Phi0ID", "ID Trk Phi0s", 200, -TMath::Pi(), TMath::Pi())).isFailure();
258  failure = failure | registerHist(fullPathMuons, m_trkd0ID = TH1F_LW::create("m_trk_d0ID", "ID Trk d0s", 100, -2000, 2000)).isFailure();
259  failure = failure | registerHist(fullPathMuons, m_trkd0IDZOOM = TH1F_LW::create("m_trk_d0IDZOOM", "ID Trk d0s zoom", 400, -20, 20)).isFailure();
260  failure = failure | registerHist(fullPathMuons, m_trkz0ID = TH1F_LW::create("m_trk_z0ID", "ID Trk z0s", 100, -2000, 2000)).isFailure();
261  failure = failure | registerHist(fullPathMuons, m_trkpOverQID = TH1F_LW::create("m_trk_pOverQID", "ID Trk pOverQs", 100, -1E5, 1E5)).isFailure();
262  failure = failure | registerHist(fullPathMuons, m_trkPxID = TH1F_LW::create("m_trk_PxID", "ID Trk Px", 100, -1E5, 1E5)).isFailure();
263  failure = failure | registerHist(fullPathMuons, m_trkPyID = TH1F_LW::create("m_trk_PyID", "ID Trk Py", 100, -1E5, 1E5)).isFailure();
264  failure = failure | registerHist(fullPathMuons, m_trkPzID = TH1F_LW::create("m_trk_PzID", "ID Trk Pz", 100, -1E5, 1E5)).isFailure();
265  failure = failure | registerHist(fullPathMuons, m_trkPID = TH1F_LW::create("m_trk_PID", "ID Trk P", 100, 0, 5E5)).isFailure();
266  failure = failure | registerHist(fullPathMuons, m_trkPtID = TH1F_LW::create("m_trk_PtID", "ID Trk Pt", 100, 0, 5E5)).isFailure();
267  failure = failure | registerHist(fullPathMuons, m_trkChargeID = TH1F_LW::create("m_trk_ChargeID", "ID Trk Charge", 100, -2, 2)).isFailure();
268  failure = failure | registerHist(fullPathMuons, m_trkXID = TH1F_LW::create("m_trk_XID", "ID Trk X perigee", 100, -2000, 2000)).isFailure();
269  failure = failure | registerHist(fullPathMuons, m_trkYID = TH1F_LW::create("m_trk_YID", "ID Trk Y perigee", 100, -2000, 2000)).isFailure();
270  failure = failure | registerHist(fullPathMuons, m_trkZID = TH1F_LW::create("m_trk_ZID", "ID Trk Z perigee", 100, -2000, 2000)).isFailure();
271 
272  //TProfile
273  failure = failure | registerHist(fullPathMuons, m_trkd0vsPhi0ID = new TProfile("m_trk_d0vsPhi0ID", "ID Trk d0 vs Phi0", 20, -TMath::Pi(), TMath::Pi(), -2000, 2000)).isFailure();
274  failure = failure | registerHist(fullPathMuons, m_trkeffvsphi = new TProfile("m_trk_trkeffvsphi", "Trk eff vs Phi0", 20, -TMath::Pi(), TMath::Pi(), 0, 1)).isFailure();
275  failure = failure | registerHist(fullPathMuons, m_trkeffvseta = new TProfile("m_trk_trkeffvseta", "Trk eff vs Eta", 20, -2.5, 2.5, 0, 1)).isFailure();
276 
277  failure = failure | registerHist(fullPathMuons, m_trkeffvsLumi = new TProfile("m_trk_trkeffvsLumi", "Trk eff per Lumi block", 1000, 0, 1000, 0, 1)).isFailure();
278  failure = failure | registerHist(fullPathMuons, m_fwdetatrkeffvsLumi = new TProfile("m_trk_fwdetatrkeffvsLumi", "Forward Eta eff per Lumi block", 1000, 0, 1000, 0, 1)).isFailure();
279  failure = failure | registerHist(fullPathMuons, m_bkwdetatrkeffvsLumi = new TProfile("m_trk_bkwdetatrkeffvsLumi", "Backward Eta eff per Lumi block", 1000, 0, 1000, 0, 1)).isFailure();
280 
281  failure = failure | registerHist(fullPathMuons, m_MS2ID_MuontrkeffvsPhi = new TProfile("m_trk_MS2ID_MuontrkeffvsPhi", "Muon Trk #phi matching eff (MS to ID) vs #phi", 100, -TMath::Pi(), TMath::Pi(), 0, 1)).isFailure();
282  failure = failure | registerHist(fullPathMuons, m_ID2MS_MuontrkeffvsEta = new TProfile("m_trk_ID2MS_MuontrkeffvsEta", "Muon Trk #eta eff (ID to MS) vs #eta", 100, -4, 4, 0, 1)).isFailure();
283 
284  failure = failure | registerHist(fullPathMuons, m_trkEtaMuon = TH1F_LW::create("m_trk_EtaMuon", "Muon Trk Etas", 100, -3.0, 3.0)).isFailure();
285  failure = failure | registerHist(fullPathMuons, m_trkThetaMuon = TH1F_LW::create("m_trk_ThetaMuon", "Muon Trk Thetas", 100, 0, TMath::Pi())).isFailure();
286  failure = failure | registerHist(fullPathMuons, m_trkPhi0Muon = TH1F_LW::create("m_trk_Phi0Muon", "Muon Trk Phi0s", 200, -TMath::Pi(), TMath::Pi())).isFailure();
287  failure = failure | registerHist(fullPathMuons, m_trkd0Muon = TH1F_LW::create("m_trk_d0Muon", "Muon Trk d0s", 100, -2000, 2000)).isFailure();
288  failure = failure | registerHist(fullPathMuons, m_trkz0Muon = TH1F_LW::create("m_trk_z0Muon", "Muon Trk z0s", 100, -2000, 2000)).isFailure();
289  failure = failure | registerHist(fullPathMuons, m_trkpOverQMuon = TH1F_LW::create("m_trk_pOverQMuon", "Muon Trk pOverQs", 100, -1E5, 1E5)).isFailure();
290  failure = failure | registerHist(fullPathMuons, m_trkPxMuon = TH1F_LW::create("m_trk_PxMuon", "Muon Trk Px", 100, -1E5, 1E5)).isFailure();
291  failure = failure | registerHist(fullPathMuons, m_trkPyMuon = TH1F_LW::create("m_trk_PyMuon", "Muon Trk Py", 100, -1E5, 1E5)).isFailure();
292  failure = failure | registerHist(fullPathMuons, m_trkPzMuon = TH1F_LW::create("m_trk_PzMuon", "Muon Trk Pz", 100, -1E5, 1E5)).isFailure();
293  failure = failure | registerHist(fullPathMuons, m_trkPMuon = TH1F_LW::create("m_trk_PMuon", "Muon Trk P", 100, 0, 5E5)).isFailure();
294  failure = failure | registerHist(fullPathMuons, m_trkPtMuon = TH1F_LW::create("m_trk_PtMuon", "Muon Trk Pt", 100, 0, 5E5)).isFailure();
295  failure = failure | registerHist(fullPathMuons, m_trkChargeMuon = TH1F_LW::create("m_trk_ChargeMuon", "Muon Trk Charge", 100, -2, 2)).isFailure();
296  failure = failure | registerHist(fullPathMuons, m_trkXMuon = TH1F_LW::create("m_trk_XMuon", "Muon Trk X perigee", 100, -2000, 2000)).isFailure();
297  failure = failure | registerHist(fullPathMuons, m_trkYMuon = TH1F_LW::create("m_trk_YMuon", "Muon Trk Y perigee", 100, -2000, 2000)).isFailure();
298  failure = failure | registerHist(fullPathMuons, m_trkZMuon = TH1F_LW::create("m_trk_ZMuon", "Muon Trk Z perigee", 100, -2000, 2000)).isFailure();
299 
300 
301  if (m_doRunBeam) {
302 
303  failure = failure | registerHist(fullPathMuons, m_JPsiMassID = TH1F_LW::create("m_JPsi_MassID", "JPsi Mass ID", 50, 2600, 3600)).isFailure();
304  failure = failure | registerHist(fullPathMuons, m_JPsiMassMuon = TH1F_LW::create("m_JPsi_MassMuon", "JPsi Mass Muon", 50, 0, 6300)).isFailure();
305  failure = failure | registerHist(fullPathMuons, m_JPsiMassDiff = TH1F_LW::create("m_JPsi_MassDiff", "JPsi Mass Diff", 50, -3000, 3000)).isFailure();
306  failure = failure | registerHist(fullPathMuons, m_JPsiMass2D = TH2F_LW::create("m_JPsi_Mass2D", "JPsi Mass 2D", 100, 2600, 3600, 100, 0, 6300)).isFailure();
307 
308  failure = failure | registerHist(fullPathMuons, m_UpsilonMassID = TH1F_LW::create("m_Upsilon_MassID", "Upsilon Mass ID", 50, 8000, 11000)).isFailure();
309  failure = failure | registerHist(fullPathMuons, m_UpsilonMassMuon = TH1F_LW::create("m_Upsilon_MassMuon", "Upsilon Mass Muon", 50, 0, 19000)).isFailure();
310  failure = failure | registerHist(fullPathMuons, m_UpsilonMassDiff = TH1F_LW::create("m_Upsilon_MassDiff", "Upsilon Mass Diff", 50, -10000, 10000)).isFailure();
311  failure = failure | registerHist(fullPathMuons, m_UpsilonMass2D = TH2F_LW::create("m_Upsilon_Mass2D", "Upsilon Mass 2D", 100, 8000, 11000, 100, 0, 19000)).isFailure();
312 
313  failure = failure | registerHist(fullPathMuons, m_ZMassID = TH1F_LW::create("m_Z_MassID", "Z Mass ID", 50, 50000, 130000)).isFailure();
314  failure = failure | registerHist(fullPathMuons, m_ZMassMuon = TH1F_LW::create("m_Z_MassMuon", "Z Mass Muon", 50, 50000, 130000)).isFailure();
315  failure = failure | registerHist(fullPathMuons, m_ZMassDiff = TH1F_LW::create("m_Z_MassDiff", "Z Mass Diff", 50, -10000, 10000)).isFailure();
316  failure = failure | registerHist(fullPathMuons, m_ZMass2D = TH2F_LW::create("m_Z_Mass2D", "Z Mass 2D", 100, 50000, 130000, 100, 50000, 130000)).isFailure();
317 
318 
319  failure = failure | registerHist(fullPathMuons, m_JPsiMassID_broad = TH1F_LW::create("m_JPsi_MassID_broad", "JPsi Mass ID Broad", 300, 0, 6300)).isFailure();
320  failure = failure | registerHist(fullPathMuons, m_UpsilonMassID_broad = TH1F_LW::create("m_Upsilon_MassID_broad", "Upsilon Mass ID Broad", 150, 5000, 14000)).isFailure();
321 
322 
323  failure = failure | registerHist(fullPathMuons, m_JPsiCounter = TH1F_LW::create("m_JPsi_Counter", "JPsi Count per Lumi Block", 1000, 0, 1000)).isFailure();
324  }
325 
326  if (failure) {
327  ATH_MSG_ERROR( "Error Booking histograms " );
328  }
329  return failure;
330 
331 }
332 
333 
334 //----------------------------------------------------------------------------------
336 //----------------------------------------------------------------------------------
337 {
338  ATH_MSG_DEBUG("in fillHists()");
339  StatusCode sc;
340  const EventContext& ctx = Gaudi::Hive::currentContext();
341 
343 
345  if(! muons.isValid()) {
346  ATH_MSG_WARNING( "No Container with name " << "Muons" << " found in evtStore" );
347  return StatusCode::SUCCESS;
348  }
349 
350  ATH_MSG_DEBUG( "Muons" << " Collection size : " << muons->size() );
351 
352 
353  // iterators over the muon container and retrieve ID tracks only
355  std::vector<const xAOD::TrackParticle* > idtracks;
356  std::vector<const xAOD::TrackParticle* > muontracks;
357  std::vector<const xAOD::TrackParticle*>::const_iterator idtracksItr;
358  std::vector<const xAOD::TrackParticle*>::const_iterator muontracksItr;
359 
360  std::vector<const xAOD::TrackParticle*>::const_iterator idtracksItr2;
361  std::vector<const xAOD::TrackParticle*>::const_iterator muontracksItr2;
362 
363  // Muon trk eff
364  std::vector<const xAOD::Muon* > MSMuons;
365  std::vector<const xAOD::Muon* >::const_iterator MSMuonsItr;
366  std::vector<const xAOD::Muon* > IDMuons;
367  std::vector<const xAOD::Muon* >::const_iterator IDMuonsItr;
368 
369  int nms = 0;
370  int nid = 0;
371  int ncomb = 0;
372 
374  uint32_t LumiBlockNumber = thisEventInfo->lumiBlock();
375 
376  for (muonItr=muons->begin(); muonItr != muons->end(); ++muonItr) {
377 
378  ATH_MSG_DEBUG( "Muons Container track pointers (primary, inDet, muonSpect, comb, calo) "
379  << (*muonItr)->primaryTrackParticleLink().isValid() << " "
380  << (*muonItr)->inDetTrackParticleLink().isValid() << " "
381  << (*muonItr)->muonSpectrometerTrackParticleLink().isValid() << " "
382  << (*muonItr)->combinedTrackParticleLink().isValid() << " "
383  << (*muonItr)->clusterLink().isValid() << " "
384  );
385 
386  uint8_t NumOfPixHits = 0;
387  uint8_t NumOfSCTHits = 0;
388  if ((*muonItr)->summaryValue(NumOfSCTHits, xAOD::numberOfSCTHits) ) {
389  ATH_MSG_DEBUG( "Could not retrieve number of SCT hits" );
390  }
391  if ((*muonItr)->summaryValue(NumOfPixHits, xAOD::numberOfPixelHits) ) {
392  ATH_MSG_DEBUG( "Could not retrieve number of Pixel hits" );
393  }
394 
395  if ((*muonItr)->combinedTrackParticleLink().isValid() &&
396  (*muonItr)->inDetTrackParticleLink().isValid() &&
397  (*muonItr)->muonSpectrometerTrackParticleLink().isValid() &&
398  (NumOfSCTHits>=m_nMinSCTHits) &&
399  ((*muonItr)->pt()>m_minPtCut) ) {
400  idtracks.push_back( *((*muonItr)->inDetTrackParticleLink()) );
401  muontracks.push_back( *((*muonItr)->muonSpectrometerTrackParticleLink()) );
402  ncomb++;
403  }
404 
405  if (((*muonItr)->inDetTrackParticleLink().isValid()) &&
406  (NumOfSCTHits>=m_nMinSCTHits) &&
407  ((*muonItr)->pt()>m_minPtCut) ) {
408  m_trkPhi0IDTag->Fill((*muonItr)->phi());
409  m_trkEtaIDTag->Fill((*muonItr)->eta());
410  nid++;
411 
412  int eveff = 0;
413  if ((*muonItr)->muonSpectrometerTrackParticleLink().isValid()) {
414  m_trkPhi0MSProbe->Fill((*muonItr)->phi());
415  m_trkEtaMSProbe->Fill((*muonItr)->eta());
416  eveff = 1;
417  }
418  m_trkeffvsphi->Fill((*muonItr)->phi(),eveff);
419  m_trkeffvseta->Fill((*muonItr)->eta(),eveff);
420 
421  //Eff vs LumiBlocks
422  m_trkeffvsLumi->Fill( LumiBlockNumber, eveff);
423 
424  if ( (*muonItr)->eta() >= 0 )
425  m_fwdetatrkeffvsLumi->Fill(LumiBlockNumber, eveff);
426  else
427  m_bkwdetatrkeffvsLumi->Fill(LumiBlockNumber, eveff);
428  }
429 
430  if ((*muonItr)->muonSpectrometerTrackParticleLink().isValid() && (*muonItr)->pt()>m_minPtCut) nms++;
431 
432  // Muon trk eff
433  //if ( ((*muonItr)->isStandAloneMuon()) && //EP-->StandAlone is not a link! TODO
434  if ( ((*muonItr)->muonSpectrometerTrackParticleLink().isValid()) &&
435  ((*muonItr)->pt() > m_muonPtCut) &&
436 // ((*muonItr)->allAuthors() == 8 )) // for MuonParameters::MuidSA --> NOT COMPATIBLE WITH REL18
437  ((*muonItr)->allAuthors() == 5 )) // for MuonParameters::Muonboy
438  MSMuons.push_back( *muonItr);
439 
440  if ( (*muonItr)->inDetTrackParticleLink().isValid() )
441  IDMuons.push_back( *muonItr);
442  }
443 
444  m_ntrkMS->Fill(nms);
445  m_ntrkID->Fill(nid);
446  m_ntrkComb->Fill(ncomb);
447 
448  for (idtracksItr=idtracks.begin(), muontracksItr = muontracks.begin(); idtracksItr!=idtracks.end();
449  ++idtracksItr, ++muontracksItr) {
450 
451  const Trk::Perigee *idPerigee = &((*idtracksItr)->perigeeParameters());
452  const Trk::Perigee *premeasPerigee = &((*muontracksItr)->perigeeParameters());
453  const Trk::TrackParameters *measPerigee(0);
454 
455  if (premeasPerigee) {
456  ATH_MSG_WARNING("idPerigee? " << idPerigee << " "
457  << idPerigee->associatedSurface());
458  ATH_MSG_WARNING("premeasPerigee? "
459  << premeasPerigee->associatedSurface());
460  measPerigee =
461  m_extrapolator->extrapolate(ctx,
462  (*muontracksItr)->perigeeParameters(),
463  (idPerigee->associatedSurface()),
465  true,
466  Trk::pion).release();
467  ATH_MSG_WARNING("measPerigee? " << measPerigee);
468  if (!measPerigee) {
469  ATH_MSG_WARNING("Extrapolation failed 1!!");
470  }
471  }
472 
473  if (idPerigee!=0 && measPerigee!=0) {
474 
475  float measEta = measPerigee->eta();
476  float measPhi = measPerigee->parameters()[Trk::phi0];
477  float measTheta = measPerigee->parameters()[Trk::theta];
478 /*
479  // id track and ms track point in opposite directions
480  if (idPerigee->parameters()[Trk::phi0] * measPerigee->parameters()[Trk::phi0] < 0) {
481  measPhi += TMath::Pi();
482  if (measPhi < -TMath::Pi()) measPhi+=2.*TMath::Pi();
483  if (measPhi > +TMath::Pi()) measPhi-=2.*TMath::Pi();
484  measTheta = TMath::Pi() - measTheta ;
485  measEta = -measEta;
486  }
487 */
488  // Now loop over second set of tracks and muons to form inv. masses
489  // but do this only if beam!
490  if (m_doRunBeam) {
491  for (idtracksItr2=idtracksItr+1, muontracksItr2=muontracksItr+1; idtracksItr2!=idtracks.end();
492  ++idtracksItr2, ++muontracksItr2) {
493 
494 
495  const Trk::Perigee *idPerigee2 = &((*idtracksItr2)->perigeeParameters());
496  const Trk::Perigee *measPerigee2 = &((*muontracksItr2)->perigeeParameters());
497 
498  if (measPerigee2) {
499  std::unique_ptr<const Trk::TrackParameters> tmp = m_extrapolator->extrapolate(
500  ctx, *measPerigee2, (idPerigee2->associatedSurface()), Trk::anyDirection, false, Trk::muon);
501 
502  //release ownership if of the right type
503  if (tmp && tmp->associatedSurface().type() == Trk::SurfaceType::Perigee) {
504  measPerigee2 = static_cast<const Trk::Perigee*>(tmp.release());
505  }
506 
507  if (!measPerigee2) {
508  ATH_MSG_WARNING("Extrapolation failed 2!!");
509  }
510  }
511 
512  if (idPerigee2!=0 && measPerigee2!=0) {
513 
514  // We should pay attention only to opposite sign tracks for forming masses
515  if (measPerigee->parameters()[Trk::qOverP]*measPerigee2->parameters()[Trk::qOverP] < 0) {
516 
517 /* float measEta2 = measPerigee2->eta();
518  float measPhi2 = measPerigee2->parameters()[Trk::phi0];
519  float measTheta2 = measPerigee2->parameters()[Trk::theta];
520 
521  // id track and ms track point in opposite directions
522  if (idPerigee2->parameters()[Trk::phi0] * measPerigee2->parameters()[Trk::phi0] < 0) {
523  measPhi2 += TMath::Pi();
524  if (measPhi2 < -TMath::Pi()) measPhi2+=2.*TMath::Pi();
525  if (measPhi2 > +TMath::Pi()) measPhi2-=2.*TMath::Pi();
526  measTheta2 = TMath::Pi() - measTheta2 ;
527  measEta2 = -measEta2;
528  }
529 */
530  Float_t diffz0ID = TMath::Abs(idPerigee->parameters()[Trk::z0]-idPerigee2->parameters()[Trk::z0]);
531  Float_t diffz0Muon = TMath::Abs(measPerigee->parameters()[Trk::z0]-measPerigee2->parameters()[Trk::z0]);
532 
533  Float_t diffd0ID = TMath::Abs(idPerigee->parameters()[Trk::d0]-idPerigee2->parameters()[Trk::d0]);
534  Float_t diffd0Muon = TMath::Abs(measPerigee->parameters()[Trk::d0]-measPerigee2->parameters()[Trk::d0]);
535 
536  ATH_MSG_DEBUG( " diffz0id = " << diffz0ID << " diffz0Muon = " << diffz0Muon );
537  ATH_MSG_DEBUG( " diffd0id = " << diffz0ID << " diffd0Muon = " << diffz0Muon );
538 
539  CLHEP::HepLorentzVector xvec;
540 
541  if (diffz0ID < m_z0DiffCutID && diffz0Muon < m_z0DiffCutMuon && diffd0ID < m_d0DiffCutID && diffd0Muon < m_d0DiffCutMuon) {
542  CLHEP::HepLorentzVector muonid1(idPerigee->momentum().x(),idPerigee->momentum().y(),idPerigee->momentum().z(),
543  TMath::Sqrt(idPerigee->momentum().x()*idPerigee->momentum().x()+
544  idPerigee->momentum().y()*idPerigee->momentum().y()+
545  idPerigee->momentum().z()*idPerigee->momentum().z()+105.7*105.7));
546 
547  CLHEP::HepLorentzVector muonid2(idPerigee2->momentum().x(),idPerigee2->momentum().y(),idPerigee2->momentum().z(),
548  TMath::Sqrt(idPerigee2->momentum().x()*idPerigee2->momentum().x()+
549  idPerigee2->momentum().y()*idPerigee2->momentum().y()+
550  idPerigee2->momentum().z()*idPerigee2->momentum().z()+105.7*105.7));
551 
552  CLHEP::HepLorentzVector muonmuon1(measPerigee->momentum().x(),measPerigee->momentum().y(),measPerigee->momentum().z(),
553  TMath::Sqrt(measPerigee->momentum().x()*measPerigee->momentum().x()+
554  measPerigee->momentum().y()*measPerigee->momentum().y()+
555  measPerigee->momentum().z()*measPerigee->momentum().z()+105.7*105.7));
556 
557  CLHEP::HepLorentzVector muonmuon2(measPerigee2->momentum().x(),measPerigee2->momentum().y(),measPerigee2->momentum().z(),
558  TMath::Sqrt(measPerigee2->momentum().x()*measPerigee2->momentum().x()+
559  measPerigee2->momentum().y()*measPerigee2->momentum().y()+
560  measPerigee2->momentum().z()*measPerigee2->momentum().z()+105.7*105.7));
561 
562 
563  if (muonid1.perp() > 1000 && muonid2.perp() > 1000 && muonmuon1.perp() > 1000 && muonmuon2.perp() > 1000) {
564  CLHEP::HepLorentzVector idvec = muonid1+muonid2;
565  CLHEP::HepLorentzVector muonvec = muonmuon1+muonmuon2;
566 
567 
568  m_JPsiMassID->Fill(idvec.m());
569  m_JPsiMassMuon->Fill(muonvec.m());
570  m_JPsiMass2D->Fill(idvec.m(), muonvec.m());
571  if (idvec.m() > 2600 && idvec.m() < 3600 && muonvec.m() > 0 && muonvec.m() < 6300)
572  m_JPsiMassDiff->Fill(idvec.m()-muonvec.m());
573 
574  m_UpsilonMassID->Fill(idvec.m());
575  m_UpsilonMassMuon->Fill(muonvec.m());
576  m_UpsilonMass2D->Fill(idvec.m(), muonvec.m());
577  if (idvec.m() > 8000 && idvec.m() < 11000 && muonvec.m() > 0 && muonvec.m() < 19000)
578  m_UpsilonMassDiff->Fill(idvec.m()-muonvec.m());
579 
582 
583 
584  if (muonid1.perp() > 20000 && muonid2.perp() > 20000 && muonmuon1.perp() > 20000 && muonmuon2.perp() > 20000) {
585 
586  m_ZMassID->Fill(idvec.m());
587  m_ZMassMuon->Fill(muonvec.m());
588  m_ZMass2D->Fill(idvec.m(), muonvec.m());
589  if (idvec.m() > 50000 && idvec.m() < 130000 && muonvec.m() > 50000 && muonvec.m() < 130000)
590  m_ZMassDiff->Fill(idvec.m()-muonvec.m());
591  }
592 
593  //---JPsiCounter ---//
594  if ((idvec.m() > 2400 && idvec.m() < 2800) || (idvec.m() > 3400 && idvec.m() < 3800))
595  m_JPsiCounter->Fill(LumiBlockNumber, -0.5);
596  if (idvec.m() > 2900 && idvec.m() < 3300)
597  m_JPsiCounter->Fill(LumiBlockNumber, 1.0);
598 
599  }
600  }
601  }
602  }
603 
604  if (idPerigee2) idPerigee2 = NULL;
605  if (measPerigee2) measPerigee2 = NULL;
606  }
607  }
608 
609  ATH_MSG_DEBUG( idPerigee->parameters()[Trk::theta] << " "
610  << measTheta
611  << "\n"
612  << idPerigee->parameters()[Trk::phi0] << " "
613  << measPhi
614  << "\n"
615  << idPerigee->parameters()[Trk::d0] << " "
616  << measPerigee->parameters()[Trk::d0]
617  << "\n"
618  << idPerigee->parameters()[Trk::z0] << " "
619  << measPerigee->parameters()[Trk::z0]
620  << "\n"
621  << idPerigee->parameters()[Trk::qOverP] << " "
622  << measPerigee->parameters()[Trk::qOverP]
623  << "\n"
624  << idPerigee->momentum().perp() << " "
625  << measPerigee->momentum().perp()
626  );
627 
628  m_trkEtasGM->Fill(idPerigee->eta(),measEta);
629  m_trkThetasGM->Fill(idPerigee->parameters()[Trk::theta],measTheta);
630  m_trkPhi0sGM->Fill(idPerigee->parameters()[Trk::phi0],measPhi);
631  m_trkd0sGM->Fill(idPerigee->parameters()[Trk::d0],measPerigee->parameters()[Trk::d0]);
632  m_trkz0sGM->Fill(idPerigee->parameters()[Trk::z0],measPerigee->parameters()[Trk::z0]);
633  m_trkpOverQsGM->Fill(1./idPerigee->parameters()[Trk::qOverP],1./measPerigee->parameters()[Trk::qOverP]);
634  m_trkEtaDiff->Fill(idPerigee->eta() - measEta);
635  m_trkThetaDiff->Fill(idPerigee->parameters()[Trk::theta] - measTheta);
636  m_trkPhi0Diff->Fill(idPerigee->parameters()[Trk::phi0] - measPhi);
637  m_trkd0Diff->Fill(idPerigee->parameters()[Trk::d0] - measPerigee->parameters()[Trk::d0]);
638  m_trkz0Diff->Fill(idPerigee->parameters()[Trk::z0] - measPerigee->parameters()[Trk::z0]);
639  m_trkpOverQDiff->Fill(1./idPerigee->parameters()[Trk::qOverP] - 1./measPerigee->parameters()[Trk::qOverP]);
640  m_trkPxDiff->Fill(idPerigee->momentum().x()-measPerigee->momentum().x());
641  m_trkPyDiff->Fill(idPerigee->momentum().y()-measPerigee->momentum().y());
642  m_trkPzDiff->Fill(idPerigee->momentum().z()-measPerigee->momentum().z());
643  m_trkPDiff->Fill(idPerigee->momentum().mag()-measPerigee->momentum().mag());
644  m_trkPtDiff->Fill(idPerigee->momentum().perp()-measPerigee->momentum().perp());
645  m_trkChargeDiff->Fill(idPerigee->charge()-measPerigee->charge());
646  m_trkXDiff->Fill(idPerigee->position().x()-measPerigee->position().x());
647  m_trkYDiff->Fill(idPerigee->position().y()-measPerigee->position().y());
648  m_trkZDiff->Fill(idPerigee->position().z()-measPerigee->position().z());
649 
650  m_trkd0vsPhi0ID->Fill(idPerigee->parameters()[Trk::phi0],idPerigee->parameters()[Trk::d0]);
651 
652  m_trkEtaID->Fill(idPerigee->eta());
653  m_trkThetaID->Fill(idPerigee->parameters()[Trk::theta]);
654  m_trkPhi0ID->Fill(idPerigee->parameters()[Trk::phi0]);
655  m_trkd0ID->Fill(idPerigee->parameters()[Trk::d0]);
656  m_trkd0IDZOOM->Fill(idPerigee->parameters()[Trk::d0]);
657  m_trkz0ID->Fill(idPerigee->parameters()[Trk::z0]);
658  m_trkpOverQID->Fill(1./idPerigee->parameters()[Trk::qOverP]);
659  m_trkPxID->Fill(idPerigee->momentum().x());
660  m_trkPyID->Fill(idPerigee->momentum().y());
661  m_trkPzID->Fill(idPerigee->momentum().z());
662  m_trkPID->Fill(idPerigee->momentum().mag());
663  m_trkPtID->Fill(idPerigee->momentum().perp());
664  m_trkChargeID->Fill(idPerigee->charge());
665  m_trkXID->Fill(idPerigee->position().x());
666  m_trkYID->Fill(idPerigee->position().y());
667  m_trkZID->Fill(idPerigee->position().z());
668 
669  m_trkEtaMuon->Fill(measEta);
670  m_trkThetaMuon->Fill(measTheta);
671  m_trkPhi0Muon->Fill(measPhi);
672  m_trkd0Muon->Fill(measPerigee->parameters()[Trk::d0]);
673  m_trkz0Muon->Fill(measPerigee->parameters()[Trk::z0]);
674  m_trkpOverQMuon->Fill(1./measPerigee->parameters()[Trk::qOverP]);
675  m_trkPxMuon->Fill(measPerigee->momentum().x());
676  m_trkPyMuon->Fill(measPerigee->momentum().y());
677  m_trkPzMuon->Fill(measPerigee->momentum().z());
678  //m_trkEMuon->Fill(idPerigee->momentum().t()-measPerigee->momentum().t());
679  m_trkPMuon->Fill(measPerigee->momentum().mag());
680  m_trkPtMuon->Fill(measPerigee->momentum().perp());
681  m_trkChargeMuon->Fill(measPerigee->charge());
682  m_trkXMuon->Fill(measPerigee->position().x());
683  m_trkYMuon->Fill(measPerigee->position().y());
684  m_trkZMuon->Fill(measPerigee->position().z());
685  }
686  if (measPerigee) measPerigee = NULL;
687  if (idPerigee) idPerigee = NULL;
688  }
689 
690  // Muon trk eff
691  std::vector<const xAOD::Muon* >::const_iterator MSMuonsItrE = MSMuons.end();
692  std::vector<const xAOD::Muon* >::const_iterator IDMuonsItrE = IDMuons.end();
693 
694  // MS --> ID phi matching
695  for ( MSMuonsItr = MSMuons.begin(); MSMuonsItr != MSMuonsItrE; ++MSMuonsItr)
696  {
697  float delta = 1.0;
698  int eff = 0;
699 
700  // accessing track collections
701  float muon_phi = (*MSMuonsItr)->phi();
702  uint8_t RPCphiLayers = 0;
703  uint8_t MDTLayers = 0;
704  if ((*MSMuonsItr)->summaryValue(RPCphiLayers, xAOD::numberOfPhiLayers) )
705  ATH_MSG_DEBUG( "Could not retrieve number of (RPC) Phi layers with a trigger phi hit" );
706  if ((*MSMuonsItr)->summaryValue(MDTLayers, xAOD::numberOfPrecisionLayers) )
707  ATH_MSG_DEBUG( "Could not retrieve number of MDT layers with at least 3 hits" );
708 
709  for (IDMuonsItr = IDMuons.begin(); IDMuonsItr != IDMuonsItrE; ++IDMuonsItr)
710  {
711  // calculating efficiency
712  float muon_ID_phi = (*IDMuonsItr)->phi();
713  float delta_phi = fabs(muon_phi - muon_ID_phi);
714 
715  float delta_phi2 = fabs(2*TMath::Pi() - delta_phi);
716  delta_phi = delta_phi > delta_phi2 ? delta_phi2 : delta_phi;
717 
718  if (( delta_phi < delta ) && (delta_phi <= 0.2))
719  {
720  delta = delta_phi;
721  eff = 1;
722  }
723  else
724  eff = 0;
725  }
726 
727  // cutting on MS
728  if (( RPCphiLayers > 2 ) && ( MDTLayers >= 3 )) // was 10 MDT hits -> 3 MDT layers with at least 3 hits each?
729  m_MS2ID_MuontrkeffvsPhi->Fill( muon_phi, eff);
730  }
731 
732  // ID --> MS eta matching
733  for (IDMuonsItr = IDMuons.begin(); IDMuonsItr != IDMuonsItrE; ++IDMuonsItr)
734  {
735  float delta = 1.0;
736  int eff = 0;
737 
738  // accessing track containers
739  float muon_ID_eta = (*IDMuonsItr)->eta();
740  uint8_t TRThits = 0;
741  uint8_t SCThits = 0;
742  if ((*IDMuonsItr)->summaryValue(SCThits, xAOD::numberOfSCTHits) )
743  ATH_MSG_DEBUG( "Could not retrieve number of SCT hits" );
744  if ((*IDMuonsItr)->summaryValue(TRThits, xAOD::numberOfTRTHits) )
745  ATH_MSG_DEBUG( "Could not retrieve number of TRT hits" );
746 
747  for ( MSMuonsItr = MSMuons.begin(); MSMuonsItr != MSMuonsItrE; ++MSMuonsItr)
748  {
749  // calculating efficiency
750  float muon_eta = (*MSMuonsItr)->eta();
751  float delta_eta = fabs(muon_eta - muon_ID_eta);
752 
753  if (( delta_eta < delta ) && (delta_eta <= 0.2))
754  {
755  delta = delta_eta;
756  eff = 1;
757  }
758  else
759  eff = 0;
760  }
761 
762  // cutting on ID
763  if ((SCThits > 7) && (TRThits >= 10))
764  m_ID2MS_MuontrkeffvsEta->Fill( muon_ID_eta, eff);
765  }
766 
767  return StatusCode::SUCCESS;
768 }
769 
770 //----------------------------------------------------------------------------------
772 //StatusCode DQTMuonIDTrackTool::procHistograms( bool isEndOfEventsBlock, bool isEndOfLumiBlock, bool isEndOfRun )
773 //----------------------------------------------------------------------------------
774 {
775  //if ( endOfEventsBlock || endOfLumiBlock || endOfRun ) {
776  if ( endOfLumiBlockFlag() || endOfRunFlag() ) {
777 
778  ATH_MSG_DEBUG( "in finalHists()" );
779  }
780 
781  return StatusCode::SUCCESS;
782 }
783 
784 //----------------------------------------------------------------------------------
786 //----------------------------------------------------------------------------------
787 {
788  ATH_MSG_DEBUG( "in checkHists()" );
789 
790  return StatusCode::SUCCESS;
791 }
792 
TH2F_LW::Fill
virtual void Fill(const double &x, const double &y) override
Definition: TH2F_LW.cxx:329
DQTMuonIDTrackTool::m_EventInfoKey
SG::ReadHandleKey< xAOD::EventInfo > m_EventInfoKey
Definition: DQTMuonIDTrackTool.h:178
Trk::anyDirection
@ anyDirection
Definition: PropDirection.h:22
DQTMuonIDTrackTool::m_trkd0IDZOOM
TH1F_LW * m_trkd0IDZOOM
Definition: DQTMuonIDTrackTool.h:91
DQTMuonIDTrackTool::m_CombinedInDetTracksName
std::string m_CombinedInDetTracksName
Definition: DQTMuonIDTrackTool.h:151
ManagedMonitorToolBase::m_path
std::string m_path
Definition: ManagedMonitorToolBase.h:915
DQTMuonIDTrackTool::m_trkPtID
TH1F_LW * m_trkPtID
Definition: DQTMuonIDTrackTool.h:98
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
DQTMuonIDTrackTool::m_trkPID
TH1F_LW * m_trkPID
Definition: DQTMuonIDTrackTool.h:97
DQTMuonIDTrackTool::fillHistograms
StatusCode fillHistograms()
An inheriting class should either override this function or fillHists().
Definition: DQTMuonIDTrackTool.cxx:335
DQTMuonIDTrackTool::m_printedErrorMuonColl
bool m_printedErrorMuonColl
Definition: DQTMuonIDTrackTool.h:174
DataQualityFatherMonTool::m_doRunCosmics
bool m_doRunCosmics
Definition: DataQualityFatherMonTool.h:77
DQTMuonIDTrackTool::m_trkPtDiff
TH1F_LW * m_trkPtDiff
Definition: DQTMuonIDTrackTool.h:73
TrackParameters.h
TH1F_LW::Fill
virtual void Fill(const double &x) override
Definition: TH1F_LW.cxx:246
DQTMuonIDTrackTool::DQTMuonIDTrackTool
DQTMuonIDTrackTool(const std::string &type, const std::string &name, const IInterface *parent)
Definition: DQTMuonIDTrackTool.cxx:37
xAOD::uint8_t
uint8_t
Definition: Muon_v1.cxx:575
Trk::ParametersBase::charge
double charge() const
Returns the charge.
DQTMuonIDTrackTool::m_trkZMuon
TH1F_LW * m_trkZMuon
Definition: DQTMuonIDTrackTool.h:131
DQTMuonIDTrackTool::m_trkPxID
TH1F_LW * m_trkPxID
Definition: DQTMuonIDTrackTool.h:94
DQTMuonIDTrackTool::m_trkXMuon
TH1F_LW * m_trkXMuon
Definition: DQTMuonIDTrackTool.h:129
TH1F_LW::create
static TH1F_LW * create(const char *name, const char *title, unsigned nbinsx, const double &xlow, const double &xup)
Definition: TH1F_LW.cxx:33
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
DQTMuonIDTrackTool::m_trkPMuon
TH1F_LW * m_trkPMuon
Definition: DQTMuonIDTrackTool.h:126
Muon.h
DataQualityFatherMonTool::registerHist
StatusCode registerHist(const std::string &path, TH1 *h1, Interval_t interval=run, MgmtAttr_t histo_mgmt=ATTRIB_MANAGED, const std::string &merge_algo="")
Definition: DataQualityFatherMonTool.cxx:245
Trk::ParametersBase::position
const Amg::Vector3D & position() const
Access method for the position.
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
Trk::ParametersT
Dummy class used to allow special convertors to be called for surfaces owned by a detector element.
Definition: EMErrorDetail.h:25
ManagedMonitorToolBase::endOfLumiBlockFlag
bool endOfLumiBlockFlag() const
Definition: ManagedMonitorToolBase.h:858
DQTMuonIDTrackTool::m_ZMass2D
TH2F_LW * m_ZMass2D
Definition: DQTMuonIDTrackTool.h:146
DQTMuonIDTrackTool::m_z0DiffCutID
Float_t m_z0DiffCutID
Definition: DQTMuonIDTrackTool.h:157
DQTMuonIDTrackTool::m_CombinedTracksName
std::string m_CombinedTracksName
Definition: DQTMuonIDTrackTool.h:153
DQTMuonIDTrackTool::m_trkz0sGM
TH2F_LW * m_trkz0sGM
Definition: DQTMuonIDTrackTool.h:60
DQTMuonIDTrackTool::initialize
StatusCode initialize()
Definition: DQTMuonIDTrackTool.cxx:169
DQTMuonIDTrackTool::m_trkPhi0sGM
TH2F_LW * m_trkPhi0sGM
Definition: DQTMuonIDTrackTool.h:58
DQTMuonIDTrackTool::m_trkThetaID
TH1F_LW * m_trkThetaID
Definition: DQTMuonIDTrackTool.h:88
DQTMuonIDTrackTool::bookMuons
bool bookMuons()
Definition: DQTMuonIDTrackTool.cxx:204
DQTMuonIDTrackTool::m_trkEtaMuon
TH1F_LW * m_trkEtaMuon
Definition: DQTMuonIDTrackTool.h:117
Trk::z0
@ z0
Definition: ParamDefs.h:70
DQTMuonIDTrackTool::m_UpsilonMassMuon
TH1F_LW * m_UpsilonMassMuon
Definition: DQTMuonIDTrackTool.h:139
DQTMuonIDTrackTool::m_MS2ID_MuontrkeffvsPhi
TProfile * m_MS2ID_MuontrkeffvsPhi
Definition: DQTMuonIDTrackTool.h:114
DQTMuonIDTrackTool::m_trkPyDiff
TH1F_LW * m_trkPyDiff
Definition: DQTMuonIDTrackTool.h:70
xAOD::numberOfPixelHits
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].
Definition: TrackingPrimitives.h:259
DQTMuonIDTrackTool::m_trkThetasGM
TH2F_LW * m_trkThetasGM
Definition: DQTMuonIDTrackTool.h:57
DQTMuonIDTrackTool::m_trkPxDiff
TH1F_LW * m_trkPxDiff
Definition: DQTMuonIDTrackTool.h:69
DQTMuonIDTrackTool::m_trkPyMuon
TH1F_LW * m_trkPyMuon
Definition: DQTMuonIDTrackTool.h:124
xAOD::numberOfTRTHits
@ numberOfTRTHits
number of TRT hits [unit8_t].
Definition: TrackingPrimitives.h:275
DQTMuonIDTrackTool::m_trkPyID
TH1F_LW * m_trkPyID
Definition: DQTMuonIDTrackTool.h:95
DQTMuonIDTrackTool::m_ZMassMuon
TH1F_LW * m_ZMassMuon
Definition: DQTMuonIDTrackTool.h:144
DQTMuonIDTrackTool::m_trkeffvsphi
TProfile * m_trkeffvsphi
Definition: DQTMuonIDTrackTool.h:105
DQTMuonIDTrackTool::m_trkYID
TH1F_LW * m_trkYID
Definition: DQTMuonIDTrackTool.h:101
DQTMuonIDTrackTool::procHistograms
StatusCode procHistograms()
An inheriting class should either override this function or finalHists().
Definition: DQTMuonIDTrackTool.cxx:771
DQTMuonIDTrackTool::m_trkPzID
TH1F_LW * m_trkPzID
Definition: DQTMuonIDTrackTool.h:96
DQTMuonIDTrackTool::m_trkz0ID
TH1F_LW * m_trkz0ID
Definition: DQTMuonIDTrackTool.h:92
DQTMuonIDTrackTool::m_trkEtaID
TH1F_LW * m_trkEtaID
Definition: DQTMuonIDTrackTool.h:87
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
DQTMuonIDTrackTool::m_trkYDiff
TH1F_LW * m_trkYDiff
Definition: DQTMuonIDTrackTool.h:76
DQTMuonIDTrackTool::m_fwdetatrkeffvsLumi
TProfile * m_fwdetatrkeffvsLumi
Definition: DQTMuonIDTrackTool.h:110
DQTMuonIDTrackTool::m_UpsilonMassDiff
TH1F_LW * m_UpsilonMassDiff
Definition: DQTMuonIDTrackTool.h:140
DQTMuonIDTrackTool::m_bkwdetatrkeffvsLumi
TProfile * m_bkwdetatrkeffvsLumi
Definition: DQTMuonIDTrackTool.h:111
DQTMuonIDTrackTool::m_trkChargeDiff
TH1F_LW * m_trkChargeDiff
Definition: DQTMuonIDTrackTool.h:74
Trk::ParametersT::associatedSurface
virtual const S & associatedSurface() const override final
Access to the Surface method.
DQTMuonIDTrackTool::m_JPsiMass2D
TH2F_LW * m_JPsiMass2D
Definition: DQTMuonIDTrackTool.h:136
DQTMuonIDTrackTool::m_trkPhi0IDTag
TH1F_LW * m_trkPhi0IDTag
Definition: DQTMuonIDTrackTool.h:83
DQTMuonIDTrackTool::m_trkThetaMuon
TH1F_LW * m_trkThetaMuon
Definition: DQTMuonIDTrackTool.h:118
DQTMuonIDTrackTool::m_ID2MS_MuontrkeffvsEta
TProfile * m_ID2MS_MuontrkeffvsEta
Definition: DQTMuonIDTrackTool.h:115
DQTMuonIDTrackTool::m_trkeffvsLumi
TProfile * m_trkeffvsLumi
Definition: DQTMuonIDTrackTool.h:109
DQTMuonIDTrackTool::checkHists
StatusCode checkHists(bool fromFinalize)
This implementation does nothing; equivalent functionality may be provided by procHists(....
Definition: DQTMuonIDTrackTool.cxx:785
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
DQTMuonIDTrackTool::m_MooreTracksName
std::string m_MooreTracksName
Definition: DQTMuonIDTrackTool.h:152
DQTMuonIDTrackTool::m_d0DiffCutMuon
Float_t m_d0DiffCutMuon
Definition: DQTMuonIDTrackTool.h:161
DQTMuonIDTrackTool::m_UpsilonMass2D
TH2F_LW * m_UpsilonMass2D
Definition: DQTMuonIDTrackTool.h:141
DQTMuonIDTrackTool::m_trkPxMuon
TH1F_LW * m_trkPxMuon
Definition: DQTMuonIDTrackTool.h:123
DQTMuonIDTrackTool::m_UpsilonMassID
TH1F_LW * m_UpsilonMassID
Definition: DQTMuonIDTrackTool.h:138
DQTMuonIDTrackTool::m_trkPhi0ID
TH1F_LW * m_trkPhi0ID
Definition: DQTMuonIDTrackTool.h:89
DQTMuonIDTrackTool::m_ZMassID
TH1F_LW * m_ZMassID
Definition: DQTMuonIDTrackTool.h:143
DataQualityFatherMonTool
Definition: DataQualityFatherMonTool.h:38
python.TrigEgammaMonitorHelper.TProfile
def TProfile(*args, **kwargs)
Definition: TrigEgammaMonitorHelper.py:81
DQTMuonIDTrackTool::m_trkEtaMSProbe
TH1F_LW * m_trkEtaMSProbe
Definition: DQTMuonIDTrackTool.h:84
Trk::theta
@ theta
Definition: ParamDefs.h:72
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
DQTMuonIDTrackTool::m_trkPtMuon
TH1F_LW * m_trkPtMuon
Definition: DQTMuonIDTrackTool.h:127
DQTMuonIDTrackTool::m_JPsiMassID
TH1F_LW * m_JPsiMassID
Definition: DQTMuonIDTrackTool.h:133
DQTMuonIDTrackTool::m_printedErrorMuon
bool m_printedErrorMuon
Definition: DQTMuonIDTrackTool.h:172
DQTMuonIDTrackTool.h
Trk::pion
@ pion
Definition: ParticleHypothesis.h:29
DQTMuonIDTrackTool::m_MuonContainerKey
SG::ReadHandleKey< xAOD::MuonContainer > m_MuonContainerKey
Definition: DQTMuonIDTrackTool.h:180
DQTMuonIDTrackTool::m_d0DiffCutID
Float_t m_d0DiffCutID
Definition: DQTMuonIDTrackTool.h:158
test_pyathena.parent
parent
Definition: test_pyathena.py:15
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
DQTMuonIDTrackTool::m_trkXDiff
TH1F_LW * m_trkXDiff
Definition: DQTMuonIDTrackTool.h:75
Trk::ParametersBase
Definition: ParametersBase.h:55
DQTMuonIDTrackTool::m_trkZDiff
TH1F_LW * m_trkZDiff
Definition: DQTMuonIDTrackTool.h:77
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
DQTMuonIDTrackTool::m_trkPhi0Muon
TH1F_LW * m_trkPhi0Muon
Definition: DQTMuonIDTrackTool.h:119
DeMoUpdate.tmp
string tmp
Definition: DeMoUpdate.py:1167
Trk::muon
@ muon
Definition: ParticleHypothesis.h:28
DQTMuonIDTrackTool::m_trkd0Diff
TH1F_LW * m_trkd0Diff
Definition: DQTMuonIDTrackTool.h:66
xAOD::EventInfo_v1::lumiBlock
uint32_t lumiBlock() const
The current event's luminosity block number.
DQTMuonIDTrackTool::m_minPtCut
Float_t m_minPtCut
Definition: DQTMuonIDTrackTool.h:164
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
DQTMuonIDTrackTool::m_trkXID
TH1F_LW * m_trkXID
Definition: DQTMuonIDTrackTool.h:100
DQTMuonIDTrackTool::m_UpsilonMassID_broad
TH1F_LW * m_UpsilonMassID_broad
Definition: DQTMuonIDTrackTool.h:149
DQTMuonIDTrackTool::m_trkpOverQID
TH1F_LW * m_trkpOverQID
Definition: DQTMuonIDTrackTool.h:93
DQTMuonIDTrackTool::m_ntrkComb
TH1F_LW * m_ntrkComb
Definition: DQTMuonIDTrackTool.h:81
DQTMuonIDTrackTool::m_JPsiMassMuon
TH1F_LW * m_JPsiMassMuon
Definition: DQTMuonIDTrackTool.h:134
DQTMuonIDTrackTool::m_trkChargeID
TH1F_LW * m_trkChargeID
Definition: DQTMuonIDTrackTool.h:99
DQTMuonIDTrackTool::m_z0DiffCutMuon
Float_t m_z0DiffCutMuon
Definition: DQTMuonIDTrackTool.h:160
Trk::SurfaceType::Perigee
@ Perigee
DQTMuonIDTrackTool::m_trkPhi0Diff
TH1F_LW * m_trkPhi0Diff
Definition: DQTMuonIDTrackTool.h:65
DQTMuonIDTrackTool::m_trkZID
TH1F_LW * m_trkZID
Definition: DQTMuonIDTrackTool.h:102
DQTMuonIDTrackTool::m_JPsiCounter
TH1F_LW * m_JPsiCounter
Definition: DQTMuonIDTrackTool.h:168
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
Trk::d0
@ d0
Definition: ParamDefs.h:69
DQTMuonIDTrackTool::m_trkPzMuon
TH1F_LW * m_trkPzMuon
Definition: DQTMuonIDTrackTool.h:125
DataQualityFatherMonTool::m_doRunBeam
bool m_doRunBeam
Definition: DataQualityFatherMonTool.h:78
TH2F_LW::create
static TH2F_LW * create(const char *name, const char *title, unsigned nbinsx, const double &xmin, const double &xmax, unsigned nbinsy, const double &ymin, const double &ymax)
Definition: TH2F_LW.cxx:33
DataQualityFatherMonTool::initialize
virtual StatusCode initialize()
Definition: DataQualityFatherMonTool.cxx:43
DQTMuonIDTrackTool::m_trkPzDiff
TH1F_LW * m_trkPzDiff
Definition: DQTMuonIDTrackTool.h:71
DQTMuonIDTrackTool::m_muonPtCut
Float_t m_muonPtCut
Definition: DQTMuonIDTrackTool.h:165
DetDescrDictionaryDict::idvec
DataVector< Identifier > idvec
Definition: DetDescrDictionaryDict.h:14
DQTMuonIDTrackTool::m_trkd0sGM
TH2F_LW * m_trkd0sGM
Definition: DQTMuonIDTrackTool.h:59
DQTMuonIDTrackTool::m_trkThetaDiff
TH1F_LW * m_trkThetaDiff
Definition: DQTMuonIDTrackTool.h:64
DQTMuonIDTrackTool::m_JPsiMassID_broad
TH1F_LW * m_JPsiMassID_broad
Definition: DQTMuonIDTrackTool.h:148
DQTMuonIDTrackTool::m_printedErrorID
bool m_printedErrorID
Definition: DQTMuonIDTrackTool.h:171
DQTMuonIDTrackTool::m_trkpOverQMuon
TH1F_LW * m_trkpOverQMuon
Definition: DQTMuonIDTrackTool.h:122
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
TrackParticle.h
Trk::ParametersBase::momentum
const Amg::Vector3D & momentum() const
Access method for the momentum.
DQTMuonIDTrackTool::~DQTMuonIDTrackTool
~DQTMuonIDTrackTool()
Definition: DQTMuonIDTrackTool.cxx:163
DQTMuonIDTrackTool::m_extrapolator
ToolHandle< Trk::IExtrapolator > m_extrapolator
Definition: DQTMuonIDTrackTool.h:155
TProfile::Fill
int Fill(double, double)
Definition: rootspy.cxx:523
DQTMuonIDTrackTool::m_trkChargeMuon
TH1F_LW * m_trkChargeMuon
Definition: DQTMuonIDTrackTool.h:128
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
ManagedMonitorToolBase::endOfRunFlag
bool endOfRunFlag() const
Definition: ManagedMonitorToolBase.h:859
eFEXNTuple.delta_phi
def delta_phi(phi1, phi2)
Definition: eFEXNTuple.py:15
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
DQTMuonIDTrackTool::m_trkd0ID
TH1F_LW * m_trkd0ID
Definition: DQTMuonIDTrackTool.h:90
DQTMuonIDTrackTool::m_ntrkID
TH1F_LW * m_ntrkID
Definition: DQTMuonIDTrackTool.h:80
Trk::qOverP
@ qOverP
perigee
Definition: ParamDefs.h:73
DQTMuonIDTrackTool::m_trkEtasGM
TH2F_LW * m_trkEtasGM
Definition: DQTMuonIDTrackTool.h:56
DQTMuonIDTrackTool::m_printedErrorCombined
bool m_printedErrorCombined
Definition: DQTMuonIDTrackTool.h:173
xAOD::numberOfSCTHits
@ numberOfSCTHits
number of hits in SCT [unit8_t].
Definition: TrackingPrimitives.h:268
DQTMuonIDTrackTool::m_ZMassDiff
TH1F_LW * m_ZMassDiff
Definition: DQTMuonIDTrackTool.h:145
DQTMuonIDTrackTool::bookHistograms
StatusCode bookHistograms()
An inheriting class should either override this function or bookHists().
Definition: DQTMuonIDTrackTool.cxx:178
Trk::ParametersBase::eta
double eta() const
Access method for pseudorapidity - from momentum.
DQTMuonIDTrackTool::m_trkz0Diff
TH1F_LW * m_trkz0Diff
Definition: DQTMuonIDTrackTool.h:67
dqt_zlumi_alleff_HIST.eff
int eff
Definition: dqt_zlumi_alleff_HIST.py:113
DQTMuonIDTrackTool::m_ntrkMS
TH1F_LW * m_ntrkMS
Definition: DQTMuonIDTrackTool.h:79
DQTMuonIDTrackTool::m_trkPDiff
TH1F_LW * m_trkPDiff
Definition: DQTMuonIDTrackTool.h:72
DQTMuonIDTrackTool::m_JPsiMassDiff
TH1F_LW * m_JPsiMassDiff
Definition: DQTMuonIDTrackTool.h:135
xAOD::numberOfPhiLayers
@ numberOfPhiLayers
layers with a trigger phi hit [unit8_t].
Definition: TrackingPrimitives.h:290
DQTMuonIDTrackTool::m_trkPhi0MSProbe
TH1F_LW * m_trkPhi0MSProbe
Definition: DQTMuonIDTrackTool.h:85
DQTMuonIDTrackTool::m_trkd0vsPhi0ID
TProfile * m_trkd0vsPhi0ID
Definition: DQTMuonIDTrackTool.h:104
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
DQTMuonIDTrackTool::m_trkpOverQsGM
TH2F_LW * m_trkpOverQsGM
Definition: DQTMuonIDTrackTool.h:61
DQTMuonIDTrackTool::m_trkpOverQDiff
TH1F_LW * m_trkpOverQDiff
Definition: DQTMuonIDTrackTool.h:68
DQTMuonIDTrackTool::m_nMinSCTHits
Int_t m_nMinSCTHits
Definition: DQTMuonIDTrackTool.h:163
DQTMuonIDTrackTool::m_trkeffvseta
TProfile * m_trkeffvseta
Definition: DQTMuonIDTrackTool.h:106
Trk::phi0
@ phi0
Definition: ParamDefs.h:71
TrackParticleContainer.h
DQTMuonIDTrackTool::m_trkYMuon
TH1F_LW * m_trkYMuon
Definition: DQTMuonIDTrackTool.h:130
DQTMuonIDTrackTool::m_trkEtaIDTag
TH1F_LW * m_trkEtaIDTag
Definition: DQTMuonIDTrackTool.h:82
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
DQTMuonIDTrackTool::m_trkEtaDiff
TH1F_LW * m_trkEtaDiff
Definition: DQTMuonIDTrackTool.h:63
DQTMuonIDTrackTool::m_trkd0Muon
TH1F_LW * m_trkd0Muon
Definition: DQTMuonIDTrackTool.h:120
DQTMuonIDTrackTool::m_trkz0Muon
TH1F_LW * m_trkz0Muon
Definition: DQTMuonIDTrackTool.h:121
xAOD::numberOfPrecisionLayers
@ numberOfPrecisionLayers
layers with at least 3 hits [unit8_t].
Definition: TrackingPrimitives.h:288