ATLAS Offline Software
Loading...
Searching...
No Matches
MuonInsideOutAnalysisPlots.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
3*/
4
7
8#include "TH1.h"
9#include "TH2.h"
10#include "TDirectory.h"
11#include <string>
13
14namespace Muon {
15 using namespace MuonStationIndex;
16 float mstau = 431000.;
17
18 void ResPlots::book( const TString& prefix ) {
19 res = new TH1F(prefix+"res","res",100,-100.,100.);
20 pull = new TH1F(prefix+"pull","pull",100,-10.,10.);
21 exerr = new TH1F(prefix+"exerr","exerr",100,0,100.);
22 }
23 void ResPlots::fill( float res_, float pull_, float exerr_ ) {
24 res->Fill(res_);
25 pull->Fill(pull_);
26 exerr->Fill(exerr_);
27 }
28
29 void ResPlotsPt::book( const TString& prefix ) {
30 res_p = new TH2F(prefix+"res_p","res_p",100,-100.,100.,100,0.,300.);
31 pull_p = new TH2F(prefix+"pull_p","pull_p",100,-10.,10.,100,0.,300.);
32 exerr_p = new TH2F(prefix+"exerr_p","exerr_p",100,0.,100.,100,0.,300.);
33 }
34 void ResPlotsPt::fill( float res_, float pull_, float exerr_, float p_ ) {
35 res_p->Fill(res_,p_);
36 pull_p->Fill(pull_,p_);
37 exerr_p->Fill(exerr_,p_);
38 }
39
40 void ChamberResPlots::book( TDirectory* dir, const TString& prefix ) {
41 TDirectory* ndir = dir->mkdir(prefix+"Chamber");
42 ndir->cd();
43 plots.resize(toInt(ChIndex::ChIndexMax));
44 plots_p.resize(toInt(ChIndex::ChIndexMax));
45 for( unsigned int i=0;i<plots.size();++i ){
46 TString name = prefix + "chIndex_" + std::to_string(i).c_str() + "_";
47 plots[i].book(name);
48 plots_p[i].book(name);
49 }
50 dir->cd();
51 }
52
53 void ChamberResPlots::fill( int chIndex_, float res_, float pull_, float exerr_, float p_ ) {
54 if( chIndex_ <0 || static_cast<unsigned>(chIndex_) >= plots.size() ) return;
55
56 plots[chIndex_].fill(res_,pull_,exerr_);
57 plots_p[chIndex_].fill(res_,pull_,exerr_,p_);
58
59 }
60
61
62 void HitPlots::book( TDirectory* dir, const TString& prefix ) {
63 all.book(prefix);
64 all_p.book(prefix);
65 chamber.book(dir,prefix);
66 }
67
68 void HitPlots::fill( const MuonValidationHitBlock& hits, int index, float p_ ) {
69 fill( (*hits.id.chIndex)[index], (*hits.residuals.residual)[index],
70 (*hits.residuals.pull)[index], (*hits.residuals.expos_err)[index], p_);
71 }
72
73
74 void HitPlots::fill( int chIndex_, float res_, float pull_, float exerr_, float p_ ) {
75 all.fill(res_,pull_,exerr_);
76 all_p.fill(res_,pull_,exerr_,p_);
77 chamber.fill(chIndex_,res_,pull_,exerr_,p_);
78 }
79
80 void TimePlots::book( TDirectory*, const TString& prefix, int type ) {
81 type = type % 1000; // truncate anything above 1000
82 bool isMDT = (type == 1 || type == 10);
83 float tmin = -15;
84 float tmax = 15;
85 float timeRange = 5;
86 if( isMDT ){
87 tmin = -30;
88 tmax = 30;
89 if( type == 10 ) timeRange = 800;
90 }
91 time = new TH1F(prefix+"time","time",100,-20.,100.);
92 error = new TH1F(prefix+"error","error",100,0.,15.);
93 timeRes = new TH1F(prefix+"timeRes","timeRes",200,tmin,tmax);
94 timePull = new TH1F(prefix+"pullRes","pullRes",200,-7,7);
95 beta = new TH1F(prefix+"beta","beta",100,.0,2.);
96 betaRes = new TH1F(prefix+"betaRes","betaRes",200,-1.2,1.2);
97 betaPull = new TH1F(prefix+"betaPull","betaPull",200,-7,7);
98 invBetaRes = new TH1F(prefix+"invBetaRes","invBetaRes",200,-1.2,1.2);
99 invBetaPull = new TH1F(prefix+"invBetaPull","invBetaPull",200,-7,7);
100
101
102 if( type == 10 ){
103 timeResScat = new TH2F(prefix+"timeResScat","timeResScat",100,tmin,timeRange,100,tmin,tmax);
104 timePullScat = new TH2F(prefix+"pullResScat","pullResScat",100,tmin,timeRange,100,-7.,7.);
105
106 error_time = new TH2F(prefix+"error_time","error_time",100,tmin,timeRange,100,0.,15.);
107 errorRT = new TH1F(prefix+"errorRT","errorRT",100,-20.,100.);
108 errorTrack = new TH1F(prefix+"errorTrack","errorTrack",100,-20.,100.);
109 errorRT_Track = new TH2F(prefix+"errorRT_Track","errorRT_Track",100,-20.,100.,100,-20.,100.);
110 timeResCor = new TH1F(prefix+"timeResCor","timeResCor",200,tmin,tmax);
111 timePullCor = new TH1F(prefix+"timePullCor","timePullCor",200,-7,7);
112 timeRes0_10 = new TH1F(prefix+"timeRes0_10","timeRes0_10",200,tmin,tmax);
113 timeRes10_70 = new TH1F(prefix+"timeRes10_70","timeRes10_70",200,tmin,tmax);
114 timeRes70_150 = new TH1F(prefix+"timeRes70_150","timeRes70_150",200,tmin,tmax);
115 timeRes150_350 = new TH1F(prefix+"timeRes150_350","timeRes150_350",200,tmin,tmax);
116 timeRes350_800 = new TH1F(prefix+"timeRes350_800","timeRes350_800",200,tmin,tmax);
117
118 timePull0_10 = new TH1F(prefix+"timePull0_10","timePull0_10",200,-7,7);
119 timePull10_70 = new TH1F(prefix+"timePull10_70","timePull10_70",200,-7,7);
120 timePull70_150 = new TH1F(prefix+"timePull70_150","timePull70_150",200,-7,7);
121 timePull150_350 = new TH1F(prefix+"timePull150_350","timePull150_350",200,-7,7);
122 timePull350_800 = new TH1F(prefix+"timePull350_800","timePull350_800",200,-7,7);
123 }else if( type == 1 ){
124 timeResCor = new TH1F(prefix+"timeResLargeError","timeResLargeError",200,tmin,tmax);
125 timePullCor = new TH1F(prefix+"timePullLargError","timePullLargError",200,-7,7);
126 }
127 }
128
129 void TimePlots::fill( const MuonValidationTimeBlock& times, int index, float betaTrack ) {
130 float dist = (*times.d)[index];
131 int type = (*times.type)[index];
132 float err = (*times.err)[index];
133 float t = (*times.time)[index];
134 MuonBetaCalculationUtils betaUtils(0.);
135 float tof = betaUtils.calculateTof(1.,dist);
136 float timeTrack = betaUtils.calculateTof(betaTrack,dist);
137 float t0_ = (*times.time)[index]+tof;
138 float betaMeas = betaUtils.calculateBeta(t0_,dist);
139 float betaError = betaUtils.calculateBetaError(t0_,err,dist);
140 float invBetaMeas = betaUtils.calculateInverseBeta(t0_,dist);
141 float invBetaError = betaUtils.calculateInverseBetaError(err,dist);
142 time->Fill(t);
143 error->Fill(err);
144 beta->Fill(betaMeas);
145 float res = t0_-timeTrack;
146 float pull = res/err;
147 if( type != 1 || err < 7 ){
148 timeRes->Fill(res);
149 timePull->Fill(pull);
150 }
151 float betaResidual = betaMeas-betaTrack;
152 betaRes->Fill(betaResidual);
153 betaPull->Fill(betaResidual/betaError);
154 float invBetaResidual = invBetaMeas-1./betaTrack;
155 invBetaRes->Fill(invBetaResidual);
156 invBetaPull->Fill(invBetaResidual/invBetaError);
157
158 float fullTime = (*times.timeProp)[index];
159 if( type == 10 ){
160 error_time->Fill(fullTime,err);
161 timeResScat->Fill(fullTime,res);
162 timePullScat->Fill(fullTime,pull);
163 float errTrk = (*times.avTimeProp)[index];
164 errorTrack->Fill(errTrk);
165 float errRT = sqrt(err*err-errTrk*errTrk);
166 errorRT->Fill(errRT);
167 errorRT_Track->Fill(errRT,errTrk);
168 float rescor = res-(*times.timeCor)[index];
169 float pullcor = rescor/err;
170 timeResCor->Fill(rescor);
171 timePullCor->Fill(pullcor);
172 if( fullTime < 10 ) timeRes0_10->Fill(res);
173 else if( fullTime < 50 ) timeRes10_70->Fill(res);
174 else if( fullTime < 150 ) timeRes70_150->Fill(res);
175 else if( fullTime < 350 ) timeRes150_350->Fill(res);
176 else timeRes350_800->Fill(res);
177
178 if( fullTime < 10 ) timePull0_10->Fill(pull);
179 else if( fullTime < 50 ) timePull10_70->Fill(pull);
180 else if( fullTime < 150 ) timePull70_150->Fill(pull);
181 else if( fullTime < 350 ) timePull150_350->Fill(pull);
182 else timePull350_800->Fill(pull);
183
184 }else if( type == 1 && err > 7 ){
185 timeResCor->Fill(res);
186 timePullCor->Fill(pull);
187 }
188 }
189
190 void HoughPlots::book( TDirectory* dir, const TString& prefix ) {
191
192 max = new TH1F(prefix+"max","max",100,0.,30.);
193 max_pull = new TH2F(prefix+"max_pull","max_pull",100,0.,30.,100,-10.,10.);
194 all.book(prefix);
195 chamber.book(dir,prefix);
196 }
197
198 void HoughPlots::fill( const MuonValidationHoughBlock& hough, int index, float p_ ) {
199 fill( (*hough.id.chIndex)[index], (*hough.residuals.residual)[index],
200 (*hough.residuals.pull)[index], (*hough.residuals.expos_err)[index], p_, (*hough.maximum)[index]);
201 }
202
203 void HoughPlots::fill( int chIndex_, float res_, float pull_, float exerr_, float p_, float max_ ){
204 max->Fill(max_);
205 max_pull->Fill(max_,pull_);
206 all.fill(res_,pull_,exerr_);
207 chamber.fill(chIndex_,res_,pull_,exerr_,p_);
208 }
209
210 void SegmentPlots::book( TDirectory* dir, const TString& prefix ){
211 t0 = new TH1F(prefix+"t0","t0",100,-20.,50.);
212 t0Trig = new TH1F(prefix+"t0Trig","t0Trig",100,-20.,50.);
213 beta = new TH1F(prefix+"beta","beta",100,.0,2.);
214 beta2 = new TH2F(prefix+"betaTrack","betaTrack",100,.0,2.,100,.0,2.);
215 betaTrig = new TH1F(prefix+"betaTrig","betaTrig",100,.0,2.);
216 t0Res = new TH1F(prefix+"t0Res","t0Res",200,-15,15);
217 t0ResTrig = new TH1F(prefix+"t0TrigRes","t0TrigRes",200,-15,15);
218 betaRes = new TH1F(prefix+"betaRes","betaRes",200,-1.2,1.2);
219 betaResTrig = new TH1F(prefix+"betaTrigRes","betaTrigRes",200,-1.2,1.2);
220 quality = new TH1F(prefix+"quality","quality",6,-0.5,5.5);
221 quality_chIndex = new TH2F(prefix+"quality_chIndex","quality_chIndex",6,-0.5,5.5,toInt(ChIndex::ChIndexMax),-0.5,-0.5+toInt(ChIndex::ChIndexMax));
222 quality_sector = new TH2F(prefix+"quality_sector","quality_sector",6,-0.5,5.5,16,0.5,16.5);
223
224 allx.book(prefix+"x_");
225 chamberx.book(dir,prefix+"x_");
226
227 ally.book(prefix+"y_");
228 chambery.book(dir,prefix+"y_");
229
230 allxz.book(prefix+"xz_");
231 chamberxz.book(dir,prefix+"xz_");
232
233 allyz.book(prefix+"yz_");
234 chamberyz.book(dir,prefix+"yz_");
235
236 allcy.book(prefix+"cy_");
237 chambercy.book(dir,prefix+"cy_");
238 }
239
240
241 void SegmentPlots::fill( const MuonValidationSegmentBlock& segments, int index, float p_, float betaTrack ) {
242
243 allx.fill( (*segments.xresiduals.residual)[index],
244 (*segments.xresiduals.pull)[index], (*segments.xresiduals.expos_err)[index]);
245 chamberx.fill( (*segments.id.chIndex)[index], (*segments.xresiduals.residual)[index],
246 (*segments.xresiduals.pull)[index], (*segments.xresiduals.expos_err)[index], p_);
247
248 ally.fill( (*segments.yresiduals.residual)[index],
249 (*segments.yresiduals.pull)[index], (*segments.yresiduals.expos_err)[index]);
250 chambery.fill( (*segments.id.chIndex)[index], (*segments.yresiduals.residual)[index],
251 (*segments.yresiduals.pull)[index], (*segments.yresiduals.expos_err)[index], p_);
252
253 allxz.fill( (*segments.angleXZ.residual)[index],
254 (*segments.angleXZ.pull)[index], (*segments.angleXZ.expos_err)[index]);
255 chamberxz.fill( (*segments.id.chIndex)[index], (*segments.angleXZ.residual)[index],
256 (*segments.angleXZ.pull)[index], (*segments.angleXZ.expos_err)[index], p_);
257
258 allyz.fill( (*segments.angleYZ.residual)[index],
259 (*segments.angleYZ.pull)[index], (*segments.angleYZ.expos_err)[index]);
260 chamberyz.fill( (*segments.id.chIndex)[index], (*segments.angleYZ.residual)[index],
261 (*segments.angleYZ.pull)[index], (*segments.angleYZ.expos_err)[index], p_);
262
263 allcy.fill( (*segments.combinedYZ.residual)[index],
264 (*segments.combinedYZ.pull)[index], (*segments.combinedYZ.expos_err)[index]);
265 chambercy.fill( (*segments.id.chIndex)[index], (*segments.combinedYZ.residual)[index],
266 (*segments.combinedYZ.pull)[index], (*segments.combinedYZ.expos_err)[index], p_);
267
268 fill( (*segments.id.chIndex)[index], (*segments.id.sector)[index], (*segments.quality)[index] );
269
270 float dist = sqrt( (*segments.r)[index]*(*segments.r)[index] + (*segments.z)[index]*(*segments.z)[index] );
271 MuonBetaCalculationUtils betaUtils(0.);
272 float tof = betaUtils.calculateTof(1.,dist);
273 float t0_ = (*segments.t0)[index]+tof;
274 float t0Trig_ = (*segments.t0Trig)[index]+tof;
275 float t0Track = betaUtils.calculateTof(betaTrack,dist);
276 float betaSeg = betaUtils.calculateBeta(t0_,dist);
277 float betaSegTrig = betaUtils.calculateBeta(t0Trig_,dist);
278 t0->Fill((*segments.t0)[index]);
279 t0Trig->Fill((*segments.t0Trig)[index]);
280 beta->Fill(betaSeg);
281 beta2->Fill(betaSeg,betaTrack);
282 betaTrig->Fill(betaSegTrig);
283 t0Res->Fill(t0_-t0Track);
284 t0ResTrig->Fill(t0Trig_-t0Track);
285 betaRes->Fill(betaSeg-betaTrack);
286 betaResTrig->Fill(betaSegTrig-betaTrack);
287 }
288
289 void SegmentPlots::fill( int chIndex_, int sector_, int quality_ ){
290 quality->Fill(quality_);
291 quality_chIndex->Fill(quality_,chIndex_);
292 quality_sector->Fill(quality_,sector_);
293 }
294
295 void BetaFitPlots::book( TDirectory* , const TString& prefix ) {
296 beta = new TH1F(prefix+"beta","beta",100,0,1.5);
297 chi2Ndof = new TH1F(prefix+"chi2Ndof","chi2Ndof",100,0,50.);
298 ndof = new TH1F(prefix+"ndof","ndof",51,-0.5,50.5);
299 res = new TH1F(prefix+"res","res",500,-1.,1.);
300 }
301
302 void BetaFitPlots::fill( float beta_, float betaTruth_, float chi2_, int ndof_ ) {
303 beta->Fill(beta_);
304 if( ndof_ > 0 ) chi2Ndof->Fill(chi2_/ndof_);
305 ndof->Fill(ndof_);
306 res->Fill(beta_-betaTruth_);
307 }
308
309 void BetaFitRegionPlots::book( TDirectory* dir, const TString& prefix, bool isBarrel ) {
310 mdt.book(dir,prefix+"mdt_");
311 mdtt.book(dir,prefix+"mdtt_");
312 mdtt_good.book(dir,prefix+"mdtt_good_");
313 if( isBarrel ){
314 rpc.book(dir,prefix+"rpc_");
315 rpct.book(dir,prefix+"rpcr_");
316 all.book(dir,prefix+"all_");
317 allt.book(dir,prefix+"allt_");
318 allt_good.book(dir,prefix+"allt_good_");
319 }
320 }
321
323 void CandidatePlots::book( TDirectory* dir, const TString& prefix ) {
324 pt = new TH1F(prefix+"pt","pt",100,0,300.);
325 eta = new TH1F(prefix+"eta","eta",100,-3,3);
326 phi = new TH1F(prefix+"phi","phi",100,-3,3);
327 beta = new TH1F(prefix+"beta","beta",100,0,1);
328 nseg = new TH1F(prefix+"nseg","nseg",10,-0.5,9.5);
329
330 betaCandidates.book(dir,prefix+"all_");
331 betaBestCandidate.book(dir,prefix+"best_");
332 }
333
335 pt->Fill( (*tracks.pt)[index]*0.001 );
336 eta->Fill( (*tracks.eta)[index] );
337 phi->Fill( (*tracks.phi)[index] );
338 beta->Fill( (*tracks.truth.beta)[index] );
339 }
340
341
343 void StageSummaryPlots::book( TDirectory* dir, const TString& prefix ) {
344 etaMissed = new TH1F(prefix+"etaMissed","etaMissed",100,-3,3);
345 etaMissedCombined = new TH1F(prefix+"etaMissedCombined","etaMissedCombined",100,-3,3);
346 etaBetaMissed = new TH2F(prefix+"etaBetaMissed","etaBetaMissed",100,-3,3,100,0.,1.);
347 betaMissed = new TH1F(prefix+"betaMissed","betaMissed",100,0.,1.);
348 betaMissedCombined = new TH1F(prefix+"betaMissedCombined","betaMissedCombined",100,0.,1.);
349 ncandidates = new TH1F(prefix+"ncandidates","ncandidates",10,-0.5,9.5);
350 ncombinedCandidates = new TH1F(prefix+"ncombinedCandidates","ncombinedCandidates",10,-0.5,9.5);
351 allCandidates.book(dir,prefix+"allCandidates_");
352 tagCandidates.book(dir,prefix+"tagCandidates_");
353 combinedCandidates.book(dir,prefix+"combinedCandidates_");
354 }
355
356 void TrackPlots::book( TDirectory* dir, const TString& prefix ) {
357 pt = new TH1F(prefix+"pt","pt",100,0,300.);
358 eta = new TH1F(prefix+"eta","eta",100,-3,3);
359 phi = new TH1F(prefix+"phi","phi",100,-3,3);
360 beta = new TH1F(prefix+"beta","beta",100,0,1);
361 pdg = new TH1F(prefix+"pdg","pdg",31,-15.5,15.5);
362 ntruth = new TH1F(prefix+"ntruth","ntruth",10,-0.5,9.5);
363 nseg = new TH1F(prefix+"nseg","nseg",10,-0.5,9.5);
364 nseg1 = new TH1F(prefix+"nseg1","nseg",10,-0.5,9.5);
365 nseg2 = new TH1F(prefix+"nseg2","nseg",10,-0.5,9.5);
366 nseg3 = new TH1F(prefix+"nseg3","nseg",10,-0.5,9.5);
367 nhough = new TH1F(prefix+"nhough","nhough",10,-0.5,9.5);
368 ntruth_seg = new TH2F(prefix+"ntruth_seg","ntruth_seg",10,-0.5,9.5,10,-0.5,9.5);
369 ntruth_seg1 = new TH2F(prefix+"ntruth_seg1","ntruth_seg",10,-0.5,9.5,10,-0.5,9.5);
370 ntruth_hough = new TH2F(prefix+"ntruth_hough","ntruth_hough",10,-0.5,9.5,10,-0.5,9.5);
371
372 TDirectory* ldir = dir->mkdir("hits");
373 ldir->cd();
374 hits.book(ldir,prefix+"h_");
375
376 ldir = dir->mkdir("hough");
377 ldir->cd();
378 hough.book(ldir,prefix+"ho_");
379
380 ldir = dir->mkdir("segments");
381 ldir->cd();
382 segments.book(ldir,prefix+"s0_");
383 segments1.book(ldir,prefix+"s1_");
384 segments2.book(ldir,prefix+"s2_");
385 segments3.book(ldir,prefix+"s3_");
386
387 ldir = dir->mkdir("times");
388 ldir->cd();
389 std::vector<int> types = { 1,2,10,12,1001,1010};
390 std::vector<std::string> typeNames = { "BarrelMDT","BarrelRPC","BarrelMDTT","BarrelRPCT","EndcapMDT","EndcapMDTT"};
391 for( unsigned int i=0;i<types.size();++i ){
392 auto type = types[i];
393 TString name = typeNames[i].c_str();
394 name += "_";
395 timePlots.push_back(TimePlots());
396 timePlots.back().book(ldir,name,type);
397 timePlots.back().typeIndex = type;
398 }
399
400
401 ldir = dir->mkdir("betaFits");
402 ldir->cd();
403 barrel.book(ldir,prefix+"barrel_",true);
404 endcap.book(ldir,prefix+"endcap_",false);
405
406 ldir = dir->mkdir("candidates");
407 ldir->cd();
408 for( unsigned int i=0;i<4;++i ){
409 TString name = "stage";
410 name += i;
412 candidateStages.back().book(ldir,name);
413 }
414 dir->cd();
415 }
416
418 pt->Fill( (*tracks.pt)[index]*0.001 );
419 eta->Fill( (*tracks.eta)[index] );
420 phi->Fill( (*tracks.phi)[index] );
421 beta->Fill( (*tracks.truth.beta)[index] );
422 }
423
424 void TrackPlots::fill( int ntruth_, int nseg_, int nseg1_, int nseg2_, int nseg3_, int nhough_ ) {
425 ntruth->Fill(ntruth_);
426 nseg->Fill(nseg_);
427 nseg1->Fill(nseg1_);
428 nseg2->Fill(nseg2_);
429 nseg3->Fill(nseg3_);
430 nhough->Fill(nhough_);
431 ntruth_seg->Fill(ntruth_,nseg_);
432 ntruth_seg1->Fill(ntruth_,nseg1_);
433 ntruth_hough->Fill(ntruth_,nhough_);
434 }
435
436
437 void MuonInsideOutAnalysisPlots::book( TDirectory* dir, const TString& prefix ) {
438 TDirectory* ndir = dir->mkdir("Muon");
439 ndir->cd();
440 muon.book(ndir,prefix);
441 ndir = dir->mkdir("Stau");
442 ndir->cd();
443 stau.book(ndir,prefix);
444 ndir = dir->mkdir("Rest");
445 ndir->cd();
446 rest.book(ndir,prefix);
447 dir->cd();
448 }
449}
std::pair< std::vector< unsigned int >, bool > res
static const std::vector< std::string > types
float calculateTof(float beta, float dist)
float calculateInverseBetaError(float error, float dist)
float calculateBeta(float time, float dist)
float calculateBetaError(float time, float error, float dist)
float calculateInverseBeta(float time, float dist)
constexpr int toInt(const EnumType enumVal)
bool isBarrel(const ChIndex index)
Returns true if the chamber index points to a barrel chamber.
NRpcCablingAlg reads raw condition data and writes derived condition data to the condition store.
Definition index.py:1
void fill(float beta_, float betaTruth_, float chi2_, int ndof_)
void book(TDirectory *dir, const TString &prefix)
void book(TDirectory *dir, const TString &prefix, bool isBarrel)
void book(TDirectory *dir, const TString &prefix)
candidate based plots
void fill(int ntruth_, int nseg_, int nseg1_, int nhough_)
std::vector< ResPlotsPt > plots_p
std::vector< ResPlots > plots
void fill(int chIndex_, float res_, float pull_, float exerr_, float p_)
void book(TDirectory *dir, const TString &prefix)
void fill(const MuonValidationHitBlock &hits, int index, float p_)
void book(TDirectory *dir, const TString &prefix)
void fill(const MuonValidationHoughBlock &hough, int index, float p_)
void book(TDirectory *dir, const TString &prefix)
void book(TDirectory *dir, const TString &prefix)
Block with hough maxima information.
Block with information on the incoming track particle.
void book(const TString &prefix)
void fill(float res_, float pull_, float exerr_, float pt)
void fill(float res_, float pull_, float exerr_)
void book(const TString &prefix)
void fill(int chIndex_, int sector_, int quality_)
void book(TDirectory *dir, const TString &prefix)
void book(TDirectory *dir, const TString &prefix)
candidates based plots
void book(TDirectory *dir, const TString &prefix, int type)
void fill(const MuonValidationTimeBlock &times, int index, float betaTrack)
void fill(int ntruth_, int nseg_, int nseg1_, int nseg2_, int nseg3_, int nhough_)
std::vector< StageSummaryPlots > candidateStages
void book(TDirectory *dir, const TString &prefix)
std::vector< TimePlots > timePlots