CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
trackingPlots.py
Go to the documentation of this file.
1 from plotting import FakeDuplicate, AggregateBins, Plot, PlotGroup, Plotter, AlgoOpt
2 import validation
3 
4 _maxEff = [0.2, 0.5, 0.8, 1.025]
5 _maxFake = [0.2, 0.5, 0.8, 1.025]
6 
7 _effandfake1 = PlotGroup("effandfake1", [
8  Plot("effic", xtitle="#eta", ytitle="efficiency vs #eta", ymax=_maxEff),
9  Plot(FakeDuplicate("fakeduprate_vs_eta", assoc="num_assoc(recoToSim)_eta", dup="num_duplicate_eta", reco="num_reco_eta", title="fake+duplicates vs #eta"),
10  xtitle="#eta", ytitle="fake+duplicates vs #eta", ymax=_maxFake),
11  Plot("efficPt", title="", xtitle="p_{t}", ytitle="efficiency vs p_{t}", xmax=300, xlog=True),
12  Plot(FakeDuplicate("fakeduprate_vs_pT", assoc="num_assoc(recoToSim)_pT", dup="num_duplicate_pT", reco="num_reco_pT", title=""),
13  xtitle="p_{t}", ytitle="fake+duplicates rate vs p_{t}", ymax=_maxFake, xmin=0.2, xmax=300, xlog=True),
14  Plot("effic_vs_hit", xtitle="hits", ytitle="efficiency vs hits"),
15  Plot(FakeDuplicate("fakeduprate_vs_hit", assoc="num_assoc(recoToSim)_hit", dup="num_duplicate_hit", reco="num_reco_hit", title="fake+duplicates vs hit"),
16  xtitle="hits", ytitle="fake+duplicates rate vs hits", ymax=_maxFake),
17 ])
18 _effandfake2 = PlotGroup("effandfake2", [
19  Plot("effic_vs_phi", xtitle="#phi", ytitle="efficiency vs #phi", ymax=_maxEff),
20  Plot(FakeDuplicate("fakeduprate_vs_phi", assoc="num_assoc(recoToSim)_phi", dup="num_duplicate_phi", reco="num_reco_phi", title="fake+duplicates vs #phi"),
21  xtitle="#phi", ytitle="fake+duplicates rate vs #phi", ymax=_maxFake),
22  Plot("effic_vs_dxy", title="", xtitle="dxy", ytitle="efficiency vs dxy", ymax=_maxEff),
23  Plot(FakeDuplicate("fakeduprate_vs_dxy", assoc="num_assoc(recoToSim)_dxy", dup="num_duplicate_dxy", reco="num_reco_dxy", title=""),
24  xtitle="dxy", ytitle="fake+duplicates rate vs dxy", ymax=_maxFake),
25  Plot("effic_vs_dz", xtitle="dz", ytitle="efficiency vs dz", ymax=_maxEff),
26  Plot(FakeDuplicate("fakeduprate_vs_dz", assoc="num_assoc(recoToSim)_dz", dup="num_duplicate_dz", reco="num_reco_dz", title="fake+duplicates vs dz"),
27  xtitle="dz", ytitle="fake+duplicates rate vs dz", ymax=_maxFake),
28 ])
29 
30 _dupandfake1 = PlotGroup("dupandfake1", [
31  Plot("fakerate", xtitle="#eta", ytitle="fakerate vs #eta", ymax=_maxFake),
32  Plot("duplicatesRate", xtitle="#eta", ytitle="duplicates rate vs #eta", ymax=_maxFake),
33  Plot("fakeratePt", xtitle="p_{t}", ytitle="fakerate vs p_{t}", xmax=300, xlog=True, ymax=_maxFake),
34  Plot("duplicatesRate_Pt", title="", xtitle="p_{t}", ytitle="duplicates rate vs p_{t}", xmin=0.2, xmax=300, ymax=_maxFake, xlog=True),
35  Plot("fakerate_vs_hit", xtitle="hits", ytitle="fakerate vs hits", ymax=_maxFake),
36  Plot("duplicatesRate_hit", xtitle="hits", ytitle="duplicates rate vs hits", ymax=_maxFake)
37 ])
38 _dupandfake2 = PlotGroup("dupandfake2", [
39  Plot("fakerate_vs_phi", xtitle="#phi", ytitle="fakerate vs #phi", ymax=_maxFake),
40  Plot("duplicatesRate_phi", xtitle="#phi", ytitle="duplicates rate vs #phi", ymax=_maxFake),
41  Plot("fakerate_vs_dxy", xtitle="dxy", ytitle="fakerate vs dxy", ymax=_maxFake),
42  Plot("duplicatesRate_dxy", title="", xtitle="dxy", ytitle="duplicates rate vs dxy", ymax=_maxFake),
43  Plot("fakerate_vs_dz", xtitle="dz", ytitle="fakerate vs dz", ymax=_maxFake),
44  Plot("duplicatesRate_dz", xtitle="dz", ytitle="duplicates rate vs dz", ymax=_maxFake),
45 ])
46 
47 _common = {"ymin": 0, "ymax": 1.025}
48 _effvspos = PlotGroup("effvspos", [
49  Plot("effic_vs_vertpos", xtitle="TP vert xy pos", ytitle="efficiency vs vert xy pos", **_common),
50  Plot("effic_vs_zpos", xtitle="TP vert z pos", ytitle="efficiency vs vert z pos", **_common),
51  Plot("effic_vs_dr", xlog=True, xtitle="#DeltaR", ytitle="efficiency vs #DeltaR", **_common),
52  Plot("fakerate_vs_dr", xlog=True, title="", xtitle="#DeltaR", ytitle="Fake rate vs #DeltaR", ymin=0, ymax=_maxFake)
53 ],
54  legendDy=-0.025
55 )
56 
57 _common = {"stat": True, "drawStyle": "hist"}
58 _dedx = PlotGroup("dedx", [
59  Plot("h_dedx_estim1", normalizeToUnitArea=True, xtitle="dE/dx, harm2", **_common),
60  Plot("h_dedx_estim2", normalizeToUnitArea=True, xtitle="dE/dx, trunc40", **_common),
61  Plot("h_dedx_nom1", **_common),
62  Plot("h_dedx_sat1", **_common),
63  ],
64  legendDy=-0.35
65 )
66 
67 _chargemisid = PlotGroup("chargemisid", [
68  Plot("chargeMisIdRate", xtitle="#eta", ytitle="charge mis-id rate vs #eta", ymax=0.05),
69  Plot("chargeMisIdRate_Pt", xtitle="p_{t}", ytitle="charge mis-id rate vs p_{t}", xmax=300, ymax=0.1, xlog=True),
70  Plot("chargeMisIdRate_hit", xtitle="hits", ytitle="charge mis-id rate vs hits", title=""),
71  Plot("chargeMisIdRate_phi", xtitle="#phi", ytitle="charge mis-id rate vs #phi", title="", ymax=0.01),
72  Plot("chargeMisIdRate_dxy", xtitle="dxy", ytitle="charge mis-id rate vs dxy", ymax=0.1),
73  Plot("chargeMisIdRate_dz", xtitle="dz", ytitle="charge mis-id rate vs dz", ymax=0.1)
74 ])
75 _hitsAndPt = PlotGroup("hitsAndPt", [
76  Plot("missing_inner_layers", stat=True, normalizeToUnitArea=True, drawStyle="hist"),
77  Plot("missing_outer_layers", stat=True, normalizeToUnitArea=True, drawStyle="hist"),
78  Plot("nhits_vs_eta", stat=True, statx=0.38, profileX=True, xtitle="#eta", ytitle="<hits> vs #eta", ymin=8, ymax=24, statyadjust=[0,0,-0.15]),
79  Plot("hits", stat=True, xtitle="hits", xmin=0, xmax=40, drawStyle="hist"),
80  Plot("num_simul_pT", stat=True, normalizeToUnitArea=True, xtitle="p_{t}", xmin=0, xmax=10, drawStyle="hist"),
81  Plot("num_reco_pT", stat=True, normalizeToUnitArea=True, xtitle="p_{t}", xmin=0, xmax=10, drawStyle="hist")
82 ])
83 _common = {"stat": True, "normalizeToUnitArea": True, "drawStyle": "hist"}
84 _ntracks = PlotGroup("ntracks", [
85 # Plot("num_simul_eta", xtitle="#eta", **_common),
86 # Plot("num_reco_eta", xtitle="#eta", **_common),
87  Plot("num_simul_dr", xtitle="#DeltaR", **_common),
88  Plot("num_reco_dr", xtitle="#DeltaR", **_common),
89  Plot("num_simul_dxy", xtitle="dxy", **_common),
90  Plot("num_reco_dxy", xtitle="dxy", **_common),
91  Plot("num_simul_dz", xtitle="dz", **_common),
92  Plot("num_reco_dz", xtitle="dz", **_common),
93 ],
94 # legendDy=-0.025
95  legendDy=-0.02, legendDh=-0.01
96 )
97 _tuning = PlotGroup("tuning", [
98  Plot("chi2", stat=True, normalizeToUnitArea=True, drawStyle="hist", xtitle="#chi^{2}"),
99  Plot("chi2_prob", stat=True, normalizeToUnitArea=True, drawStyle="hist", xtitle="Prob(#chi^{2})"),
100  Plot("chi2_vs_eta", stat=True, profileX=True, title="", xtitle="#eta", ytitle="< #chi^{2} / ndf >", ymax=2.5),
101  Plot("ptres_vs_eta_Mean", stat=True, scale=100, title="", xtitle="#eta", ytitle="< #delta p_{t} / p_{t} > [%]", ymin=-1.5, ymax=1.5)
102 ])
103 _common = {"stat": True, "fit": True, "normalizeToUnitArea": True, "drawStyle": "hist", "drawCommand": "", "xmin": -10, "xmax": 10, "ylog": True, "ymin": 5e-5, "ymax": [0.01, 0.05, 0.1, 0.2, 0.5, 0.8, 1.025]}
104 _pulls = PlotGroup("pulls", [
105  Plot("pullPt", **_common),
106  Plot("pullQoverp", **_common),
107  Plot("pullPhi", **_common),
108  Plot("pullTheta", **_common),
109  Plot("pullDxy", **_common),
110  Plot("pullDz", **_common),
111 ],
112  legendDx=0.1, legendDw=-0.1, legendDh=-0.015
113 )
114 _common = {"title": "", "ylog": True, "xtitle": "#eta"}
115 _resolutionsEta = PlotGroup("resolutionsEta", [
116  Plot("phires_vs_eta_Sigma", ytitle="#sigma(#delta #phi) [rad]", ymin=0.000009, ymax=0.01, **_common),
117  Plot("cotThetares_vs_eta_Sigma", ytitle="#sigma(#delta cot(#theta))", ymin=0.00009, ymax=0.03, **_common),
118  Plot("dxyres_vs_eta_Sigma", ytitle="#sigma(#delta d_{0}) [cm]", ymin=0.00009, ymax=0.05, **_common),
119  Plot("dzres_vs_eta_Sigma", ytitle="#sigma(#delta z_{0}) [cm]", ymin=0.0009, ymax=0.1, **_common),
120  Plot("ptres_vs_eta_Sigma", ytitle="#sigma(#delta p_{t}/p_{t})", ymin=0.0059, ymax=0.08, **_common),
121 ],
122  legendDy=-0.02, legendDh=-0.01
123 )
124 _common = {"title": "", "ylog": True, "xlog": True, "xtitle": "p_{t}", "xmin": 0.1, "xmax": 1000}
125 _resolutionsPt = PlotGroup("resolutionsPt", [
126  Plot("phires_vs_pt_Sigma", ytitle="#sigma(#delta #phi) [rad]", ymin=0.000009, ymax=0.01, **_common),
127  Plot("cotThetares_vs_pt_Sigma", ytitle="#sigma(#delta cot(#theta))", ymin=0.00009, ymax=0.03, **_common),
128  Plot("dxyres_vs_pt_Sigma", ytitle="#sigma(#delta d_{0}) [cm]", ymin=0.00009, ymax=0.05, **_common),
129  Plot("dzres_vs_pt_Sigma", ytitle="#sigma(#delta z_{0}) [cm]", ymin=0.0009, ymax=0.1, **_common),
130  Plot("ptres_vs_pt_Sigma", ytitle="#sigma(#delta p_{t}/p_{t})", ymin=0.003, ymax=2.2, **_common),
131 ],
132  legendDy=-0.02, legendDh=-0.01
133 )
134 
135 plotter = Plotter([
136  "DQMData/Run 1/Tracking/Run summary/Track",
137  "DQMData/Tracking/Track",
138  "DQMData/Run 1/RecoTrackV/Run summary/Track",
139  "DQMData/RecoTrackV/Track",
140 ],[
141  _effandfake1,
142  _effandfake2,
143  _dupandfake1,
144  _dupandfake2,
145  _effvspos,
146  _dedx,
147  _chargemisid,
148  _hitsAndPt,
149  _ntracks,
150  _tuning,
151  _pulls,
152  _resolutionsEta,
153  _resolutionsPt,
154 ])
155 
156 import collections
157 _iterModuleMap = collections.OrderedDict([
158  ("initialStepPreSplitting", ["initialStepSeedLayersPreSplitting",
159  "initialStepSeedsPreSplitting",
160  "initialStepTrackCandidatesPreSplitting",
161  "initialStepTracksPreSplitting",
162  "firstStepPrimaryVerticesPreSplitting",
163  "iter0TrackRefsForJetsPreSplitting",
164  "caloTowerForTrkPreSplitting",
165  "ak4CaloJetsForTrkPreSplitting",
166  "jetsForCoreTrackingPreSplitting",
167  "siPixelClusters",
168  "siPixelRecHits",
169  "MeasurementTrackerEvent",
170  "siPixelClusterShapeCache"]),
171  ("initialStep", ['initialStepClusters',
172  'initialStepSeedLayers',
173  'initialStepSeeds',
174  'initialStepTrackCandidates',
175  'initialStepTracks',
176  'initialStepSelector',
177  'initialStep']),
178  ("lowPtTripletStep", ['lowPtTripletStepClusters',
179  'lowPtTripletStepSeedLayers',
180  'lowPtTripletStepSeeds',
181  'lowPtTripletStepTrackCandidates',
182  'lowPtTripletStepTracks',
183  'lowPtTripletStepSelector']),
184  ("pixelPairStep", ['pixelPairStepClusters',
185  'pixelPairStepSeedLayers',
186  'pixelPairStepSeeds',
187  'pixelPairStepTrackCandidates',
188  'pixelPairStepTracks',
189  'pixelPairStepSelector']),
190  ("detachedTripletStep", ['detachedTripletStepClusters',
191  'detachedTripletStepSeedLayers',
192  'detachedTripletStepSeeds',
193  'detachedTripletStepTrackCandidates',
194  'detachedTripletStepTracks',
195  'detachedTripletStepSelector',
196  'detachedTripletStep']),
197  ("mixedTripletStep", ['mixedTripletStepClusters',
198  'mixedTripletStepSeedLayersA',
199  'mixedTripletStepSeedLayersB',
200  'mixedTripletStepSeedsA',
201  'mixedTripletStepSeedsB',
202  'mixedTripletStepSeeds',
203  'mixedTripletStepTrackCandidates',
204  'mixedTripletStepTracks',
205  'mixedTripletStepSelector',
206  'mixedTripletStep']),
207  ("pixelLessStep", ['pixelLessStepClusters',
208  'pixelLessStepSeedClusters',
209  'pixelLessStepSeedLayers',
210  'pixelLessStepSeeds',
211  'pixelLessStepTrackCandidates',
212  'pixelLessStepTracks',
213  'pixelLessStepSelector',
214  'pixelLessStep']),
215  ("tobTecStep", ['tobTecStepClusters',
216  'tobTecStepSeedClusters',
217  'tobTecStepSeedLayersTripl',
218  'tobTecStepSeedLayersPair',
219  'tobTecStepSeedsTripl',
220  'tobTecStepSeedsPair',
221  'tobTecStepSeeds',
222  'tobTecStepTrackCandidates',
223  'tobTecStepTracks',
224  'tobTecStepSelector']),
225  ("jetCoreRegionalStep", ['iter0TrackRefsForJets',
226  'caloTowerForTrk',
227  'ak4CaloJetsForTrk',
228  'jetsForCoreTracking',
229  'firstStepPrimaryVertices',
230  'firstStepGoodPrimaryVertices',
231  'jetCoreRegionalStepSeedLayers',
232  'jetCoreRegionalStepSeeds',
233  'jetCoreRegionalStepTrackCandidates',
234  'jetCoreRegionalStepTracks',
235  'jetCoreRegionalStepSelector']),
236  ("muonSeededStep", ['earlyMuons',
237  'muonSeededSeedsInOut',
238  'muonSeededSeedsInOut',
239  'muonSeededTracksInOut',
240  'muonSeededSeedsOutIn',
241  'muonSeededTrackCandidatesOutIn',
242  'muonSeededTracksOutIn',
243  'muonSeededTracksInOutSelector',
244  'muonSeededTracksOutInSelector']),
245 ])
246 
247 
248 _timing = PlotGroup("timing", [
249  Plot(AggregateBins("iterative", "reconstruction_step_module_average", _iterModuleMap), ytitle="Average processing time [ms]", title="Average processing time / event", drawStyle="HIST", xbinlabelsize=0.03),
250 # Plot(AggregateBins("iterative_norm", "reconstruction_step_module_average", _iterModuleMap), ytitle="Average processing time", title="Average processing time / event (normalized)", drawStyle="HIST", xbinlabelsize=0.03, normalizeToUnitArea=True)
251  Plot(AggregateBins("iterative_norm", "reconstruction_step_module_average", _iterModuleMap, normalizeTo="ak7CaloJets"), ytitle="Average processing time / ak7CaloJets", title="Average processing time / event (normalized to ak7CaloJets)", drawStyle="HIST", xbinlabelsize=0.03)
252 
253  ],
254  legendDx=-0.1, legendDw=-0.35, legendDy=0.39,
255 )
256 _pixelTiming = PlotGroup("pixelTiming", [
257  Plot(AggregateBins("pixel", "reconstruction_step_module_average", {"pixelTracks": ["pixelTracks"]}), ytitle="Average processing time [ms]", title="Average processing time / event", drawStyle="HIST")
258 ])
259 
260 timePlotter = Plotter([
261  "DQMData/Run 1/DQM/Run summary/TimerService/Paths",
262  "DQMData/Run 1/DQM/Run summary/TimerService/process RECO/Paths",
263 ],[
264  _timing
265 # _pixelTiming
266 ]
267 )
268 
269 _common = {"stat": True, "normalizeToUnitArea": True, "drawStyle": "hist"}
270 _tplifetime = PlotGroup("tplifetime", [
271  Plot("TPlip", xtitle="TP lip", **_common),
272  Plot("TPtip", xtitle="TP tip", **_common),
273 ])
274 
275 tpPlotter = Plotter([
276  "DQMData/Run 1/Tracking/Run summary/TrackingMCTruth/TrackingParticle",
277  "DQMData/Tracking/TrackingMCTruth/TrackingParticle",
278 ], [
279  _tplifetime,
280 ])
281 
282 
283 _tracks_map = {
284  '': { # all tracks
285  'ootb' : 'general_trackingParticleRecoAsssociation',
286  'initialStep' : 'cutsRecoInitialStep_trackingParticleRecoAsssociation',
287  'lowPtTripletStep' : 'cutsRecoLowPtTripletStep_trackingParticleRecoAsssociation',
288  'pixelPairStep' : 'cutsRecoPixelPairStep_trackingParticleRecoAsssociation',
289  'detachedTripletStep' : 'cutsRecoDetachedTripletStep_trackingParticleRecoAsssociation',
290  'mixedTripletStep' : 'cutsRecoMixedTripletStep_trackingParticleRecoAsssociation',
291  'pixelLessStep' : 'cutsRecoPixelLessStep_trackingParticleRecoAsssociation',
292  'tobTecStep' : 'cutsRecoTobTecStep_trackingParticleRecoAsssociation',
293  'jetCoreRegionalStep' : 'cutsRecoJetCoreRegionalStep_trackingParticleRecoAsssociation',
294  'muonSeededStepInOut' : 'cutsRecoMuonSeededStepInOut_trackingParticleRecoAsssociation',
295  'muonSeededStepOutIn' : 'cutsRecoMuonSeededStepOutIn_trackingParticleRecoAsssociation'
296  },
297  "highPurity": {
298  'ootb' : 'cutsRecoHp_trackingParticleRecoAsssociation',
299  'initialStep' : 'cutsRecoInitialStepHp_trackingParticleRecoAsssociation',
300  'lowPtTripletStep' : 'cutsRecoLowPtTripletStepHp_trackingParticleRecoAsssociation',
301  'pixelPairStep' : 'cutsRecoPixelPairStepHp_trackingParticleRecoAsssociation',
302  'detachedTripletStep' : 'cutsRecoDetachedTripletStepHp_trackingParticleRecoAsssociation',
303  'mixedTripletStep' : 'cutsRecoMixedTripletStepHp_trackingParticleRecoAsssociation',
304  'pixelLessStep' : 'cutsRecoPixelLessStepHp_trackingParticleRecoAsssociation',
305  'tobTecStep' : 'cutsRecoTobTecStepHp_trackingParticleRecoAsssociation',
306  'jetCoreRegionalStep' : 'cutsRecoJetCoreRegionalStepHp_trackingParticleRecoAsssociation',
307  'muonSeededStepInOut' : 'cutsRecoMuonSeededStepInOutHp_trackingParticleRecoAsssociation',
308  'muonSeededStepOutIn' : 'cutsRecoMuonSeededStepOutInHp_trackingParticleRecoAsssociation'
309  }
310 }
311 
312 
314  def _init__(self, *args, **kwargs):
315  super(TrackingValidation, self).__init__(*args, **kwargs)
316 
317  def _getDirectoryName(self, quality, algo):
318  return _tracks_map[quality][algo]
319 
320  def _getSelectionName(self, quality, algo):
321  ret = ""
322  if quality != "":
323  ret += "_"+quality
324  if not (algo == "ootb" and quality != ""):
325  ret += "_"+algo
326 
327  return ret