22 #ifdef DO_TPCCATRACKER_EFF_PERFORMANCE
31 #ifndef HLTCA_STANDALONE
42 #include "Riostream.h"
50 PndFTSCATrackPerformanceBase::PndFTSCATrackPerformanceBase()
54 const int NHisto_tmp = NTracksPulls + NHitsPulls + NHits2DPulls
55 + NAllHisto + NAllProfiles + NAll2DHisto
56 + NGhostsHisto + NGhostsProfiles + NGhosts2DHisto
57 + NRecoTracksHisto + NRecoTracksProfiles + NRecoTracks2DHisto;
60 fHistosInfo =
new THistoInfo[NHisto];
61 fHistos =
new TH1*[NHisto];
63 const double MaxMomentum = 5.;
64 const double MaxPt = 5.;
65 const double MaxPhi = 180.;
66 const int MaxNHits = 50.;
67 const double MaxChi2 = 10.;
68 const double PullWidth = 7.;
69 const THistoInfo tmp[NHisto_tmp]=
72 THistoInfo(
"resX1",
"track y residual [cm]", 30, -0.012, 0.012, 0,0,0,
"Residual (y^{reco} - y^{mc}) [cm]",
"Entries" ),
73 THistoInfo(
"resX2",
"track z residual [cm]", 30, -0.03, 0.03, 0,0,0,
"Residual (z^{reco} - z^{mc}) [cm]",
"Entries" ),
74 THistoInfo(
"resSinPhi",
"track sin#phi residual ", 30, -0.005, 0.005, 0,0,0,
"Residual (sin#phi^{reco} - sin#phi^{mc}) [rad]",
"Entries" ),
75 THistoInfo(
"resDzDs",
"track dz/ds residual ", 30, -0.005, 0.005, 0,0,0,
"Residual (dz/ds^{reco} - dz/ds^{mc})",
"Entries" ),
76 THistoInfo(
"resPt",
"track p_{t} resolution", 30, -0.3, 0.3, 0,0,0,
"Resolution (p_{t}^{reco} - p_{t}^{mc})/p_{t}^{mc}",
"Entries" ),
78 THistoInfo(
"resX1",
"track y residual [cm]", 30, -0.01, 0.01, 0,0,0,
"Residual (y^{reco} - y^{mc}) [cm]",
"Entries" ),
79 THistoInfo(
"resX2",
"track z residual [cm]", 30, -0.03, 0.03, 0,0,0,
"Residual (z^{reco} - z^{mc}) [cm]",
"Entries" ),
80 THistoInfo(
"resSinPhi",
"track sin#phi residual ", 30, -0.03, 0.03, 0,0,0,
"Residual (sin#phi^{reco} - sin#phi^{mc}) [rad]",
"Entries" ),
81 THistoInfo(
"resDzDs",
"track dz/ds residual ", 30, -0.03, 0.03, 0,0,0,
"Residual (dz/ds^{reco} - dz/ds^{mc})",
"Entries" ),
82 THistoInfo(
"resPt",
"track p_{t} resolution", 30, -1.0, 1.0, 0,0,0,
"Resolution (p_{t}^{reco} - p_{t}^{mc})/p_{t}^{mc}",
"Entries" ),
83 #elif defined(PANDA_STT)
84 THistoInfo(
"resX1",
"track y residual [cm]", 30, -.05, .05, 0,0,0,
"Residual (y^{reco} - y^{mc}) [cm]",
"Entries" ),
85 THistoInfo(
"resX2",
"track z residual [cm]", 30, -2.5, 2.5, 0,0,0,
"Residual (z^{reco} - z^{mc}) [cm]",
"Entries" ),
86 THistoInfo(
"resSinPhi",
"track sin#phi residual ", 30, -0.01, 0.01, 0,0,0,
"Residual (sin#phi^{reco} - sin#phi^{mc}) [rad]",
"Entries" ),
87 THistoInfo(
"resDzDs",
"track dz/ds residual ", 30, -0.25, 0.25, 0,0,0,
"Residual (dz/ds^{reco} - dz/ds^{mc})",
"Entries" ),
88 THistoInfo(
"resPt",
"track p_{t} resolution", 30, -0.3, 0.3, 0,0,0,
"Resolution (p_{t}^{reco} - p_{t}^{mc})/p_{t}^{mc}",
"Entries" ),
89 #elif defined(PANDA_FTS)
90 THistoInfo(
"resX1",
"track x residual [cm]", 100, -0.1, 0.1, 0,0,0,
"Residual (x^{reco} - x^{mc}) [cm]",
"Entries" ),
91 THistoInfo(
"resX2",
"track y residual [cm]", 100, -0.7, 0.7, 0,0,0,
"Residual (y^{reco} - y^{mc}) [cm]",
"Entries" ),
92 THistoInfo(
"resTx1",
"track Tx residual ", 100, -0.01, 0.01, 0,0,0,
"Residual (T_{x}^{reco} - T_{x}^{mc}) [rad]",
"Entries" ),
93 THistoInfo(
"resTx2",
"track Ty residual ", 100, -0.05, 0.05, 0,0,0,
"Residual (T_{y}^{reco} - T_{y}^{mc})",
"Entries" ),
94 THistoInfo(
"resP",
"track p resolution", 100, -0.2, 0.2, 0,0,0,
"Resolution (p^{reco} - p^{mc})/p^{mc}",
"Entries" ),
98 THistoInfo(
"pullX1",
"track x pull", 30, -PullWidth, PullWidth, 0,0,0,
"Pull x" ),
99 THistoInfo(
"pullX2",
"track y pull", 30, -PullWidth, PullWidth, 0,0,0,
"Pull y" ),
100 THistoInfo(
"pullTx1",
"track Tx pull", 30, -PullWidth, PullWidth, 0,0,0,
"Pull Tx" ),
101 THistoInfo(
"pullTx2",
"track Ty pull", 30, -PullWidth, PullWidth, 0,0,0,
"Pull Ty" ),
102 THistoInfo(
"pullQP",
"track q/p pull", 30, -PullWidth, PullWidth, 0,0,0,
"Pull q/p" ),
104 THistoInfo(
"pullX1",
"track y pull", 30, -PullWidth, PullWidth, 0,0,0,
"Pull y" ),
105 THistoInfo(
"pullX2",
"track z pull", 30, -PullWidth, PullWidth, 0,0,0,
"Pull z" ),
106 THistoInfo(
"pullSinPhi",
"track sin#phi pull", 30, -PullWidth, PullWidth, 0,0,0,
"Pull sin#phi" ),
107 THistoInfo(
"pullDzDs",
"track dz/ds pull", 30, -PullWidth, PullWidth, 0,0,0,
"Pull dz/ds" ),
108 THistoInfo(
"pullQPt",
"track q/p_{t} pull", 30, -PullWidth, PullWidth, 0,0,0,
"Pull q/p_{t}" ),
111 #if defined(DRIFT_TUBES)
112 THistoInfo(
"resXHit",
"hits X resolution [cm]", 100, -3, 3, 0,0,0,
"Residual (x^{reco} - x^{mc}) [cm]",
"Entries" ),
113 THistoInfo(
"resYHit",
"hits Y resolution [cm]", 100, -0.6, 0.6, 0,0,0,
"Residual (y^{reco} - y^{mc}) [cm]",
"Entries" ),
114 THistoInfo(
"resZHit",
"hits Z resolution [cm]", 100, -100., 100., 0,0,0,
"Residual (z^{reco} - z^{mc}) [cm]",
"Entries" ),
115 THistoInfo(
"resRHit",
"hits R resolution [cm]", 100, -0.1, 0.1, 0,0,0,
"Residual (r^{reco} - r^{mc}) [cm]",
"Entries" ),
116 THistoInfo(
"pullRHit",
"hits R pull", 30, -PullWidth, PullWidth, 0,0,0,
"Pull r" ),
118 THistoInfo(
"resXHit",
"hits X resolution [cm]", 1000, -1.25, 1.25, 0,0,0,
"Residual (x^{reco} - x^{mc}) [cm]",
"Entries" ),
119 THistoInfo(
"resYHit",
"hits Y resolution [cm]", 100, -0.02, 0.02, 0,0,0,
"Residual (y^{reco} - y^{mc}) [cm]",
"Entries" ),
120 THistoInfo(
"resZHit",
"hits Z resolution [cm]", 100, -0.1, 0.1, 0,0,0,
"Residual (z^{reco} - z^{mc}) [cm]",
"Entries" ),
122 THistoInfo(
"pullYHit",
"hits Y pull", 30, -PullWidth, PullWidth, 0,0,0,
"Pull y" ),
123 THistoInfo(
"pullZHit",
"hits Z pull", 30, -PullWidth, PullWidth, 0,0,0,
"Pull z" ),
125 THistoInfo(
"xMCPoint",
"MCPoint X position [cm]", 120, 0, 60, 0,0,0,
"x^{mc} [cm]",
"Entries" ),
126 THistoInfo(
"rMCPoint",
"MCPoint R position [cm]", 120, 0, 60, 0,0,0,
"r^{mc} [cm]",
"Entries" ),
128 THistoInfo(
"resPtVsP",
"track p_{t} resolution vs p", 20, 0, 10, 30, -0.5, 0.5,
"p [GeV/c]",
"Resolution (p_{t}^{reco} - p_{t}^{mc})/p_{t}^{mc}" ),
129 THistoInfo(
"resPVsP",
"track p resolution vs p", 20, 0, 10, 30, -0.5, 0.5,
"p [GeV/c]",
"Resolution (p^{reco} - p^{mc})/p^{mc}" ),
130 THistoInfo(
"resXHitVsZ",
"hits X resolution [cm] vs Z", 50, -220, 220, 100, -1.25, 1.25,
"z [cm]",
"Residual (x^{reco} - x^{mc}) [cm]" ),
131 THistoInfo(
"resYHitVsZ",
"hits Y resolution [cm] vs Z", 50, -220, 220, 100, -0.25, 0.25,
"z [cm]",
"Residual (y^{reco} - y^{mc}) [cm]" ),
132 THistoInfo(
"resZHitVsZ",
"hits Z resolution [cm] vs Z", 50, -220, 220, 100, -1.00, 1.00,
"z [cm]",
"Residual (z^{reco} - z^{mc}) [cm]" ),
133 THistoInfo(
"resXHitVsX",
"hits X resolution [cm] vs X", 50, 50, 200, 100, -1.25, 1.25,
"x [cm]",
"Residual (x^{reco} - x^{mc}) [cm]" ),
134 THistoInfo(
"resYHitVsX",
"hits Y resolution [cm] vs X", 50, 50, 200, 100, -0.25, 0.25,
"x [cm]",
"Residual (y^{reco} - y^{mc}) [cm]" ),
135 THistoInfo(
"resZHitVsX",
"hits Z resolution [cm] vs X", 50, 50, 200, 100, -1., 1.,
"x [cm]",
"Residual (z^{reco} - z^{mc}) [cm]" ),
136 THistoInfo(
"resXHitVsIS",
"hits X resolution [cm] vs IS", 52, 0, 25, 100, -1.25, 1.25,
"i Slice",
"Residual (x^{reco} - x^{mc}) [cm]" ),
137 THistoInfo(
"resYHitVsIS",
"hits Y resolution [cm] vs IS", 52, 0, 25, 100, -0.25, 0.25,
"i Slice",
"Residual (y^{reco} - y^{mc}) [cm]" ),
138 THistoInfo(
"resZHitVsIS",
"hits Z resolution [cm] vs IS", 52, 0, 25, 100, -1., 1.,
"i Slice",
"Residual (z^{reco} - z^{mc}) [cm]" ),
141 THistoInfo(
"purity",
"Purity of tracks", 101, 0.005, 1.005,
142 0,0,0,
"Purity",
"Entries" ),
143 THistoInfo(
"mcTrackNRecoHits",
"NRecoHits on MCTrack", MaxNHits+1, 0, MaxNHits,
144 0,0,0,
"Purity",
"Entries" ),
145 THistoInfo(
"mcTracksVsP",
"MCTracks p^{mc} distribution, MCTrack has >= 1 hit", 50, 0., MaxMomentum,
146 0,0,0,
"p^{mc} [GeV/c]",
"Entries" ),
147 THistoInfo(
"recoAbleMCTracksVsP",
"Reconstructable MCTracks p^{mc} distribution", 50, 0., MaxMomentum,
148 0,0,0,
"p^{mc} [GeV/c]",
"Entries" ),
149 THistoInfo(
"nHitsOverNMCPointsVsRow",
"nHits / NMCPoints Vs Row", MaxNHits+1, 0, MaxNHits,
150 0,0,0,
"Row",
"NHits / NMCPoints" ),
151 THistoInfo(
"nHitsOverNMCPointsVsMCMom",
"nHits / NMCPoints Vs MCMomentum", 50, 0, MaxMomentum,
152 0,0,0,
"MCMomentum",
"NHits / NMCPoints" ),
153 THistoInfo(
"nHitsOverNMCPointsVsMCDzDs",
"nHits / NMCPoints Vs MCTrack DzDs", 50, -10, 10,
154 0,0,0,
"MCMomentum",
"NHits / NMCPoints" ),
155 THistoInfo(
"nHitsOverNMCPointsVsNMCTracks",
"nHits / NMCPoints Vs NMCTracks", 20, 0, 5000,
156 0,0,0,
"NMCTracks",
"NHits / NMCPoints" ),
157 THistoInfo(
"nMCPointsVsMCMom",
"NMCPoints Vs MCMomentum", 50, 0, MaxMomentum,
158 MaxNHits*3+1,0,MaxNHits*3,
"MCMomentum",
"NMCPoints" ),
161 THistoInfo(
"ghostsLength",
"N_{hits} distribution, ghost tracks", MaxNHits+1, 0., MaxNHits,
162 0,0,0,
"Number of hits",
"Entries" ),
163 THistoInfo(
"ghostsRMom",
"p^{reco} distribution, ghost tracks", 50, 0., MaxMomentum,
164 0,0,0,
"p^{reco} [GeV/c]",
"Entries" ),
165 THistoInfo(
"ghostsMCMom",
"p^{MC} distribution, ghost tracks", 50, 0., MaxMomentum,
166 0,0,0,
"p^{MC} [GeV/c]",
"Entries" ),
167 THistoInfo(
"ghostsRPt",
"p_{t}^{reco} distribution, ghost tracks", 50, 0., MaxPt,
168 0,0,0,
"p_{t}^{reco} [GeV/c]",
"Entries" ),
169 THistoInfo(
"ghostsMCPt",
"p_{t}^{MC} distribution, ghost tracks", 50, 0., MaxPt,
170 0,0,0,
"p_{t}^{MC} [GeV/c]",
"Entries" ),
171 THistoInfo(
"ghostsChi2",
"#chi^{2} distribution, ghost tracks", 50, 0., MaxChi2*10,
172 0,0,0,
"#chi^{2}",
"Entries" ),
173 THistoInfo(
"ghostsProb",
"prob distribution, ghost tracks", 100, 0., 1,
174 0,0,0,
"prob",
"Entries" ),
175 THistoInfo(
"ghostsLengthAndRMom",
"N Ghosts vs N Hits and Momentum", MaxNHits+1, 0., MaxNHits, 50, 0., MaxMomentum,
176 "Number of hits",
"p^{reco} [GeV/c]" ),
177 THistoInfo(
"ghostsLengthAndMCMom",
"N Ghosts vs N Hits and Momentum", MaxNHits+1, 0., MaxNHits, 50, 0., MaxMomentum,
178 "Number of hits",
"p^{MC} [GeV/c]" ),
179 THistoInfo(
"ghostsLengthAndChi2",
"N Ghosts vs N Hits and Chi2", MaxNHits+1, 0., MaxNHits, 50, 0., MaxChi2*10,
180 "Number of hits",
"p^{reco} [GeV/c]" ),
182 THistoInfo(
"recosLength",
"N_{hits} distribution, reco tracks", MaxNHits+1, 0., MaxNHits,
183 0,0,0,
"Number of hits",
"Entries" ),
184 THistoInfo(
"recosRMom",
"p^{reco} distribution, reco tracks", 50, 0., MaxMomentum,
185 0,0,0,
"p^{reco} [GeV/c]",
"Entries" ),
186 THistoInfo(
"recosMCMom",
"p^{MC} distribution, reco tracks", 50, 0., MaxMomentum,
187 0,0,0,
"p^{MC} [GeV/c]",
"Entries" ),
188 THistoInfo(
"recosRPt",
"p_{t}^{reco} distribution, reco tracks", 50, 0., MaxPt,
189 0,0,0,
"p_{t}^{reco} [GeV/c]",
"Entries" ),
190 THistoInfo(
"recosMCPt",
"p_{t}^{MC} distribution, reco tracks", 50, 0., MaxPt,
191 0,0,0,
"p_{t}^{MC} [GeV/c]",
"Entries" ),
192 THistoInfo(
"recosChi2",
"#chi^{2} distribution, reco tracks", 50, 0., MaxChi2,
193 0,0,0,
"#chi^{2}",
"Entries" ),
194 THistoInfo(
"recosProb",
"prob distribution, reco tracks", 100, 0., 1,
195 0,0,0,
"prob",
"Entries" ),
196 THistoInfo(
"recosRefProb",
"prob distribution, reference reco tracks", 100, 0., 1,
197 0,0,0,
"prob",
"Entries" ),
198 THistoInfo(
"nHitsRecoTOverNHitsMCT",
"nHitsRecoTOverNHitsMCT", 50, 0., 2,
199 0,0,0,
"NHits^{reco} / NHits^{mc}",
"Entries" ),
200 THistoInfo(
"recosEffVsMCNHits",
"Reconstruction Efficiency vs N Hits", MaxNHits+1, 0., MaxNHits,
201 0,0,0,
"Number of hits",
"Efficiency [%]" ),
202 THistoInfo(
"recosEffVsMCMom",
"Reconstruction Efficiency vs Momentum, All tracks", 50, 0., MaxMomentum,
203 0,0,100,
"p^{MC} [GeV/c]",
"Efficiency [%]"),
204 THistoInfo(
"recosEffVsMCMomPrim",
"Reconstruction Efficiency vs Momentum, Primary Tracks", 50, 0., MaxMomentum,
205 0,0,100,
"p^{MC} [GeV/c]",
"Efficiency [%]"),
206 THistoInfo(
"recosEffVsMCMomRefPrim",
"Reconstruction Efficiency vs Momentum, Reference Primary Tracks", 50, 0., MaxMomentum,
207 0,0,100,
"p^{MC} [GeV/c]",
"Efficiency [%]"),
208 THistoInfo(
"recosEffVsMCMomSec",
"Reconstruction Efficiency vs Momentum, Secondary Tracks", 50, 0., MaxMomentum,
209 0,0,100,
"p^{MC} [GeV/c]",
"Efficiency [%]"),
210 THistoInfo(
"recosEffVsMCPtAll",
"Reconstruction Efficiency vs Pt, All Tracks", 50, 0., MaxPt,
211 0,0,100,
"p_{t}^{MC} [GeV/c]",
"Efficiency [%]"),
212 THistoInfo(
"recosEffVsMCPtPrim",
"Reconstruction Efficiency vs Pt, Primary", 50, 0., MaxPt,
213 0,0,100,
"p_{t}^{MC} [GeV/c]",
"Efficiency [%]"),
214 THistoInfo(
"recosEffVsMCPtRefPrim",
"Reconstruction Efficiency vs Pt, Ref Primary", 50, 0., MaxPt,
215 0,0,100,
"p_{t}^{MC} [GeV/c]",
"Efficiency [%]"),
216 THistoInfo(
"recosEffVsMCPtSec",
"Reconstruction Efficiency vs Pt, Secondary", 50, 0., MaxPt,
217 0,0,100,
"p_{t}^{MC} [GeV/c]",
"Efficiency [%]"),
218 THistoInfo(
"recosEffVsMCPhiAll",
"Reconstruction Efficiency vs Phi, All Tracks", 120, -MaxPhi, MaxPhi,
219 0,0,100,
"#phi",
"Efficiency [%]"),
220 THistoInfo(
"recosEffVsMCPhiPrim",
"Reconstruction Efficiency vs Phi, Primary Tracks", 120, -MaxPhi, MaxPhi,
221 0,0,100,
"#phi",
"Efficiency [%]"),
222 THistoInfo(
"recosEffVsMCPhiRefPrim",
"Reconstruction Efficiency vs Phi, Ref Primary Tracks", 120, -MaxPhi, MaxPhi,
223 0,0,100,
"#phi",
"Efficiency [%]"),
224 THistoInfo(
"recosEffVsMCPhiSec",
"Reconstruction Efficiency vs Phi, Secondary Tracks", 120, -MaxPhi, MaxPhi,
225 0,0,100,
"#phi",
"Efficiency [%]"),
226 THistoInfo(
"recosEffVsNMCTracks",
"Reconstruction Efficiency vs NMCTracks, All tracks", 20, 0., 5000,
227 0,0,100,
"NMCTracks",
"Efficiency [%]"),
228 THistoInfo(
"recosLengthAndRMom",
"N Reco Tracks vs N Hits and Momentum", MaxNHits+1, 0., MaxNHits, 50, 0., MaxMomentum,
229 "Number of hits",
"p^{reco} [GeV/c]" ),
230 THistoInfo(
"recosLengthAndMCMom",
"N Reco Tracks vs N Hits and Momentum", MaxNHits+1, 0., MaxNHits, 50, 0., MaxMomentum,
231 "Number of hits",
"p^{MC} [GeV/c]" ),
232 THistoInfo(
"recosLengthAndChi2",
"N Reco Tracks vs N Hits and Chi2", MaxNHits+1, 0., MaxNHits, 50, 0., MaxChi2,
233 "Number of hits",
"p^{reco} [GeV/c]" )
235 for (
int iHisto = 0; iHisto < NHisto; iHisto++){
236 fHistosInfo[iHisto] = tmp[iHisto];
239 for(
int i=0;
i < NHisto;
i++ ){
245 void PndFTSCATrackPerformanceBase::CreateHistos(
string histoDir, TFile*
outFile)
247 TDirectory *curdir = gDirectory;
248 if ( (histoDir !=
"") && outFile) {
250 fHistoDir = outFile->mkdir(
TString(histoDir) );
252 gDirectory->mkdir(
"TrackFit" );
253 gDirectory->cd(
"TrackFit" );
256 for(
int i = 0;
i < NTracksPulls + NHitsPulls;
i++, ih++ ){
257 fHistos[ih] =
new TH1D(fHistosInfo[ih].
name, fHistosInfo[ih].title, fHistosInfo[ih].nx, fHistosInfo[ih].left, fHistosInfo[ih].right);
258 fHistos[ih]->GetXaxis()->SetTitle(fHistosInfo[ih].XAxisName.Data());
259 fHistos[ih]->GetYaxis()->SetTitle(fHistosInfo[ih].YAxisName.Data());
262 for(
int i = 0;
i < NHits2DPulls;
i++, ih++ ){
263 fHistos[ih] =
new TH2D(fHistosInfo[ih].
name, fHistosInfo[ih].title, fHistosInfo[ih].nx, fHistosInfo[ih].left, fHistosInfo[ih].right, fHistosInfo[ih].ny, fHistosInfo[ih].
low, fHistosInfo[ih].up);
264 fHistos[ih]->GetXaxis()->SetTitle(fHistosInfo[ih].XAxisName.Data());
265 fHistos[ih]->GetYaxis()->SetTitle(fHistosInfo[ih].YAxisName.Data());
268 gDirectory->cd(
".." );
269 gDirectory->mkdir(
"AllTracks" );
270 gDirectory->cd(
"AllTracks" );
272 for(
int i = 0;
i < NAllHisto;
i++, ih++ ){
273 fHistos[ih] =
new TH1D(fHistosInfo[ih].
name, fHistosInfo[ih].title, fHistosInfo[ih].nx, fHistosInfo[ih].left, fHistosInfo[ih].right);
274 fHistos[ih]->GetXaxis()->SetTitle(fHistosInfo[ih].XAxisName.Data());
275 fHistos[ih]->GetYaxis()->SetTitle(fHistosInfo[ih].YAxisName.Data());
277 for(
int i = 0;
i < NAllProfiles;
i++, ih++ ){
278 fHistos[ih] =
new TProfile(fHistosInfo[ih].
name, fHistosInfo[ih].title, fHistosInfo[ih].nx, fHistosInfo[ih].left, fHistosInfo[ih].right, fHistosInfo[ih].
low, fHistosInfo[ih].up);
279 fHistos[ih]->GetXaxis()->SetTitle(fHistosInfo[ih].XAxisName.Data());
280 fHistos[ih]->GetYaxis()->SetTitle(fHistosInfo[ih].YAxisName.Data());
281 fHistos[ih]->SetMarkerColor(2);
282 fHistos[ih]->SetLineColor(2);
284 for(
int i = 0;
i < NAll2DHisto;
i++, ih++ ){
285 fHistos[ih] =
new TH2D(fHistosInfo[ih].
name, fHistosInfo[ih].title, fHistosInfo[ih].nx, fHistosInfo[ih].left, fHistosInfo[ih].right, fHistosInfo[ih].ny, fHistosInfo[ih].
low, fHistosInfo[ih].up);
286 fHistos[ih]->GetXaxis()->SetTitle(fHistosInfo[ih].XAxisName.Data());
287 fHistos[ih]->GetYaxis()->SetTitle(fHistosInfo[ih].YAxisName.Data());
291 gDirectory->cd(
".." );
292 gDirectory->mkdir(
"Ghosts" );
293 gDirectory->cd(
"Ghosts" );
295 for(
int i = 0;
i < NGhostsHisto;
i++, ih++ ){
296 fHistos[ih] =
new TH1D(fHistosInfo[ih].
name, fHistosInfo[ih].title, fHistosInfo[ih].nx, fHistosInfo[ih].left, fHistosInfo[ih].right);
297 fHistos[ih]->GetXaxis()->SetTitle(fHistosInfo[ih].XAxisName.Data());
298 fHistos[ih]->GetYaxis()->SetTitle(fHistosInfo[ih].YAxisName.Data());
300 for(
int i = 0;
i < NGhostsProfiles;
i++, ih++ ){
301 fHistos[ih] =
new TProfile(fHistosInfo[ih].
name, fHistosInfo[ih].title, fHistosInfo[ih].nx, fHistosInfo[ih].left, fHistosInfo[ih].right, fHistosInfo[ih].
low, fHistosInfo[ih].up);
302 fHistos[ih]->GetXaxis()->SetTitle(fHistosInfo[ih].XAxisName.Data());
303 fHistos[ih]->GetYaxis()->SetTitle(fHistosInfo[ih].YAxisName.Data());
304 fHistos[ih]->SetMarkerColor(2);
305 fHistos[ih]->SetLineColor(2);
307 for(
int i = 0;
i < NGhosts2DHisto;
i++, ih++ ){
308 fHistos[ih] =
new TH2D(fHistosInfo[ih].
name, fHistosInfo[ih].title, fHistosInfo[ih].nx, fHistosInfo[ih].left, fHistosInfo[ih].right, fHistosInfo[ih].ny, fHistosInfo[ih].
low, fHistosInfo[ih].up);
309 fHistos[ih]->GetXaxis()->SetTitle(fHistosInfo[ih].XAxisName.Data());
310 fHistos[ih]->GetYaxis()->SetTitle(fHistosInfo[ih].YAxisName.Data());
314 gDirectory->cd(
".." );
315 gDirectory->mkdir(
"RecoTracks" );
316 gDirectory->cd(
"RecoTracks" );
318 for(
int i = 0;
i < NRecoTracksHisto;
i++, ih++ ){
319 fHistos[ih] =
new TH1D(fHistosInfo[ih].
name, fHistosInfo[ih].title, fHistosInfo[ih].nx, fHistosInfo[ih].left, fHistosInfo[ih].right);
320 fHistos[ih]->GetXaxis()->SetTitle(fHistosInfo[ih].XAxisName.Data());
321 fHistos[ih]->GetYaxis()->SetTitle(fHistosInfo[ih].YAxisName.Data());
324 for(
int i = 0;
i < NRecoTracksProfiles;
i++, ih++ ){
325 fHistos[ih] =
new TProfile(fHistosInfo[ih].
name, fHistosInfo[ih].title, fHistosInfo[ih].nx, fHistosInfo[ih].left, fHistosInfo[ih].right, fHistosInfo[ih].
low, fHistosInfo[ih].up );
326 fHistos[ih]->GetXaxis()->SetTitle(fHistosInfo[ih].XAxisName.Data());
327 fHistos[ih]->GetYaxis()->SetTitle(fHistosInfo[ih].YAxisName.Data());
328 fHistos[ih]->SetMarkerColor(2);
329 fHistos[ih]->SetLineColor(2);
331 for(
int i = 0;
i < NRecoTracks2DHisto;
i++, ih++ ){
332 fHistos[ih] =
new TH2D(fHistosInfo[ih].
name, fHistosInfo[ih].title, fHistosInfo[ih].nx, fHistosInfo[ih].left, fHistosInfo[ih].right, fHistosInfo[ih].ny, fHistosInfo[ih].
low, fHistosInfo[ih].up);
333 fHistos[ih]->GetXaxis()->SetTitle(fHistosInfo[ih].XAxisName.Data());
334 fHistos[ih]->GetYaxis()->SetTitle(fHistosInfo[ih].YAxisName.Data());
338 gDirectory->cd(
".." );
342 static int iaddName = 0;
345 for(
int i = 0;
i < NTracksPulls + NHitsPulls;
i++, ih++, addName =
TString(iaddName++) ){
346 fHistos[ih] =
new TH1D(fHistosInfo[ih].
name+addName, fHistosInfo[ih].title, fHistosInfo[ih].nx, fHistosInfo[ih].left, fHistosInfo[ih].right);
347 fHistos[ih]->GetXaxis()->SetTitle(fHistosInfo[ih].XAxisName.Data());
348 fHistos[ih]->GetYaxis()->SetTitle(fHistosInfo[ih].YAxisName.Data());
350 for(
int i = 0;
i < NHits2DPulls;
i++, ih++, addName =
TString(iaddName++) ){
351 fHistos[ih] =
new TH2D(fHistosInfo[ih].
name+addName, fHistosInfo[ih].title, fHistosInfo[ih].nx, fHistosInfo[ih].left, fHistosInfo[ih].right, fHistosInfo[ih].ny, fHistosInfo[ih].
low, fHistosInfo[ih].up);
352 fHistos[ih]->GetXaxis()->SetTitle(fHistosInfo[ih].XAxisName.Data());
353 fHistos[ih]->GetYaxis()->SetTitle(fHistosInfo[ih].YAxisName.Data());
356 for(
int i = 0;
i < NAllHisto;
i++, ih++, addName =
TString(iaddName++) ){
357 fHistos[ih] =
new TH1D(fHistosInfo[ih].
name+addName, fHistosInfo[ih].title, fHistosInfo[ih].nx, fHistosInfo[ih].left, fHistosInfo[ih].right);
358 fHistos[ih]->GetXaxis()->SetTitle(fHistosInfo[ih].XAxisName.Data());
359 fHistos[ih]->GetYaxis()->SetTitle(fHistosInfo[ih].YAxisName.Data());
361 for(
int i = 0;
i < NAllProfiles;
i++, ih++, addName =
TString(iaddName++) ){
362 fHistos[ih] =
new TProfile(fHistosInfo[ih].
name+addName, fHistosInfo[ih].title, fHistosInfo[ih].nx, fHistosInfo[ih].left, fHistosInfo[ih].right);
363 fHistos[ih]->GetXaxis()->SetTitle(fHistosInfo[ih].XAxisName.Data());
364 fHistos[ih]->GetYaxis()->SetTitle(fHistosInfo[ih].YAxisName.Data());
366 for(
int i = 0;
i < NAll2DHisto;
i++, ih++, addName =
TString(iaddName++) ){
367 fHistos[ih] =
new TH2D(fHistosInfo[ih].
name+addName, fHistosInfo[ih].title, fHistosInfo[ih].nx, fHistosInfo[ih].left, fHistosInfo[ih].right, fHistosInfo[ih].ny, fHistosInfo[ih].
low, fHistosInfo[ih].up);
368 fHistos[ih]->GetXaxis()->SetTitle(fHistosInfo[ih].XAxisName.Data());
369 fHistos[ih]->GetYaxis()->SetTitle(fHistosInfo[ih].YAxisName.Data());
372 for(
int i = 0;
i < NGhostsHisto;
i++, ih++, addName =
TString(iaddName++) ){
373 fHistos[ih] =
new TH1D(fHistosInfo[ih].
name+addName, fHistosInfo[ih].title, fHistosInfo[ih].nx, fHistosInfo[ih].left, fHistosInfo[ih].right);
374 fHistos[ih]->GetXaxis()->SetTitle(fHistosInfo[ih].XAxisName.Data());
375 fHistos[ih]->GetYaxis()->SetTitle(fHistosInfo[ih].YAxisName.Data());
377 for(
int i = 0;
i < NGhostsProfiles;
i++, ih++, addName =
TString(iaddName++) ){
378 fHistos[ih] =
new TProfile(fHistosInfo[ih].
name+addName, fHistosInfo[ih].title, fHistosInfo[ih].nx, fHistosInfo[ih].left, fHistosInfo[ih].right);
379 fHistos[ih]->GetXaxis()->SetTitle(fHistosInfo[ih].XAxisName.Data());
380 fHistos[ih]->GetYaxis()->SetTitle(fHistosInfo[ih].YAxisName.Data());
382 for(
int i = 0;
i < NGhosts2DHisto;
i++, ih++, addName =
TString(iaddName++) ){
383 fHistos[ih] =
new TH2D(fHistosInfo[ih].
name+addName, fHistosInfo[ih].title, fHistosInfo[ih].nx, fHistosInfo[ih].left, fHistosInfo[ih].right, fHistosInfo[ih].ny, fHistosInfo[ih].
low, fHistosInfo[ih].up);
384 fHistos[ih]->GetXaxis()->SetTitle(fHistosInfo[ih].XAxisName.Data());
385 fHistos[ih]->GetYaxis()->SetTitle(fHistosInfo[ih].YAxisName.Data());
388 for(
int i = 0;
i < NRecoTracksHisto;
i++, ih++, addName =
TString(iaddName++) ){
389 fHistos[ih] =
new TH1D(fHistosInfo[ih].
name+addName, fHistosInfo[ih].title, fHistosInfo[ih].nx, fHistosInfo[ih].left, fHistosInfo[ih].right);
390 fHistos[ih]->GetXaxis()->SetTitle(fHistosInfo[ih].XAxisName.Data());
391 fHistos[ih]->GetYaxis()->SetTitle(fHistosInfo[ih].YAxisName.Data());
393 for(
int i = 0;
i < NRecoTracksProfiles;
i++, ih++, addName =
TString(iaddName++) ){
394 fHistos[ih] =
new TProfile(fHistosInfo[ih].
name+addName, fHistosInfo[ih].title, fHistosInfo[ih].nx, fHistosInfo[ih].left, fHistosInfo[ih].right);
395 fHistos[ih]->GetXaxis()->SetTitle(fHistosInfo[ih].XAxisName.Data());
396 fHistos[ih]->GetYaxis()->SetTitle(fHistosInfo[ih].YAxisName.Data());
398 for(
int i = 0;
i < NRecoTracks2DHisto;
i++, ih++, addName =
TString(iaddName++) ){
399 fHistos[ih] =
new TH2D(fHistosInfo[ih].
name+addName, fHistosInfo[ih].title, fHistosInfo[ih].nx, fHistosInfo[ih].left, fHistosInfo[ih].right, fHistosInfo[ih].ny, fHistosInfo[ih].
low, fHistosInfo[ih].up);
400 fHistos[ih]->GetXaxis()->SetTitle(fHistosInfo[ih].XAxisName.Data());
401 fHistos[ih]->GetYaxis()->SetTitle(fHistosInfo[ih].YAxisName.Data());
404 for(
int i = 0;
i < NHisto;
i++ ){
405 fHistos[
i]->SetDirectory(0);
412 void PndFTSCATrackPerformanceBase::FillHistos()
414 for (
int iMCTr = 0; iMCTr < nMCTracks; iMCTr++ ) {
418 const int Multiplicity = (*fMCTracks).Size();
420 if( mcTr.
NHits() > 0 )
421 GetHisto(
"mcTracksVsP")->Fill( mcTr.
P() );
428 GetHisto(
"recoAbleMCTracksVsP")->Fill( mcTr.
P() );
433 GetHisto(
"recosEffVsMCPhiAll")->Fill( PhiMC, mcD.
IsReconstructed()*100 );
434 GetHisto(
"recosEffVsNMCTracks")->Fill( Multiplicity, mcD.
IsReconstructed()*100 );
438 GetHisto(
"recosEffVsMCMomPrim") ->Fill( mcTr.
P(), mcD.
IsReconstructed()*100 );
440 GetHisto(
"recosEffVsMCPhiPrim") ->Fill( PhiMC, mcD.
IsReconstructed()*100 );
441 if(mcTr.
Set() == 2) {
443 GetHisto(
"recosEffVsMCMomRefPrim") ->Fill( mcTr.
P(), mcD.
IsReconstructed()*100 );
444 GetHisto(
"recosEffVsMCPtRefPrim") ->Fill( mcTr.
Pt(), mcD.
IsReconstructed()*100 );
445 GetHisto(
"recosEffVsMCPhiRefPrim") ->Fill( PhiMC, mcD.
IsReconstructed()*100 );
450 GetHisto(
"recosEffVsMCMomSec") ->Fill( mcTr.
P(), mcD.
IsReconstructed()*100 );
452 GetHisto(
"recosEffVsMCPhiSec") ->Fill( PhiMC, mcD.
IsReconstructed()*100 );
457 #endif //DO_TPCCATRACKER_EFF_PERFORMANCE
static T ATan2(const T &y, const T &x)