FairRoot/PandaRoot
PndFTSCATrackPerformanceBase.cxx
Go to the documentation of this file.
1 // $Id: PndFTSCAPerformanceBase.cxx,v 1.11 2010/08/26 15:05:50 ikulakov Exp $
2 // **************************************************************************
3 // This file is property of and copyright by the ALICE HLT Project *
4 // ALICE Experiment at CERN, All rights reserved. *
5 // *
6 // Primary Authors: Sergey Gorbunov <sergey.gorbunov@kip.uni-heidelberg.de> *
7 // Ivan Kisel <kisel@kip.uni-heidelberg.de> *
8 // for The ALICE HLT Project. *
9 // *
10 // Developed by: Igor Kulakov <I.Kulakov@gsi.de> *
11 // Maksym Zyzak <M.Zyzak@gsi.de> *
12 // *
13 // Permission to use, copy, modify and distribute this software and its *
14 // documentation strictly for non-commercial purposes is hereby granted *
15 // without fee, provided that the above copyright notice appears in all *
16 // copies and that both the copyright notice and this permission notice *
17 // appear in the supporting documentation. The authors make no claims *
18 // about the suitability of this software for any purpose. It is *
19 // provided "as is" without express or implied warranty. *
20 // *
21 //***************************************************************************
22 #ifdef DO_TPCCATRACKER_EFF_PERFORMANCE
23 
24 #include "PndFTSCounters.h"
25 
27 #include "PndFTSPerformanceBase.h"
28 
29 #include "PndFTSCAGBHit.h"
30 #include "PndFTSCAMCTrack.h"
31 #ifndef HLTCA_STANDALONE
32 #include "PndFTSCAMCPoint.h"
33 #endif
34 #include "PndFTSCAGBTrack.h"
35 #include "PndFTSCAGBTracker.h"
36 
37 #include "PndFTSCADisplay.h"
38 
39 
40 #include "TMath.h"
41 #include "TROOT.h"
42 #include "Riostream.h"
43 #include "TFile.h"
44 #include "TH1.h"
45 #include "TH2.h"
46 #include "TProfile.h"
47 #include "TStyle.h"
48 
49 
50 PndFTSCATrackPerformanceBase::PndFTSCATrackPerformanceBase()
51 {
52  //* representation of Histos
53 
54  const int NHisto_tmp = NTracksPulls + NHitsPulls + NHits2DPulls
55  + NAllHisto + NAllProfiles + NAll2DHisto
56  + NGhostsHisto + NGhostsProfiles + NGhosts2DHisto
57  + NRecoTracksHisto + NRecoTracksProfiles + NRecoTracks2DHisto;
58 
59  NHisto = NHisto_tmp;
60  fHistosInfo = new THistoInfo[NHisto];
61  fHistos = new TH1*[NHisto];
62 
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]=
70  {
71 #ifdef STAR_HFT
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" ),
77 #elif ALICE_ITS
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" ),
95 #endif
96 
97 #ifdef PANDA_FTS
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" ),
103 #else
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}" ),
109 #endif
110 
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" ),
117 #else
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" ),
121 #endif
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" ),
124 
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" ),
127 
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]" ),
139 
140 
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" ),
159 
160 
161  THistoInfo( "ghostsLength", "N_{hits} distribution, ghost tracks", MaxNHits+1, 0., MaxNHits,
162  0,0,0, "Number of hits", "Entries" ), // nGhosts vs nHits in reco track
163  THistoInfo( "ghostsRMom", "p^{reco} distribution, ghost tracks", 50, 0., MaxMomentum,
164  0,0,0, "p^{reco} [GeV/c]", "Entries" ), // nGhosts vs momentum of reco track
165  THistoInfo( "ghostsMCMom", "p^{MC} distribution, ghost tracks", 50, 0., MaxMomentum,
166  0,0,0, "p^{MC} [GeV/c]", "Entries" ), // nGhosts vs momentum of MC track
167  THistoInfo( "ghostsRPt", "p_{t}^{reco} distribution, ghost tracks", 50, 0., MaxPt,
168  0,0,0, "p_{t}^{reco} [GeV/c]", "Entries" ), // nGhosts vs Pt of reco track
169  THistoInfo( "ghostsMCPt", "p_{t}^{MC} distribution, ghost tracks", 50, 0., MaxPt,
170  0,0,0, "p_{t}^{MC} [GeV/c]", "Entries" ), // nGhosts vs Pt of MC track
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]" ),
181 
182  THistoInfo( "recosLength", "N_{hits} distribution, reco tracks", MaxNHits+1, 0., MaxNHits,
183  0,0,0, "Number of hits", "Entries" ), // vs nHits in reco track
184  THistoInfo( "recosRMom", "p^{reco} distribution, reco tracks", 50, 0., MaxMomentum,
185  0,0,0, "p^{reco} [GeV/c]", "Entries" ), // vs momentum of reco track
186  THistoInfo( "recosMCMom", "p^{MC} distribution, reco tracks", 50, 0., MaxMomentum,
187  0,0,0, "p^{MC} [GeV/c]", "Entries" ), // vs momentum of MC track
188  THistoInfo( "recosRPt", "p_{t}^{reco} distribution, reco tracks", 50, 0., MaxPt,
189  0,0,0, "p_{t}^{reco} [GeV/c]", "Entries" ), // vs Pt of reco track
190  THistoInfo( "recosMCPt", "p_{t}^{MC} distribution, reco tracks", 50, 0., MaxPt,
191  0,0,0, "p_{t}^{MC} [GeV/c]", "Entries" ), // vs Pt of MC track
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 [%]" ), // eff vs nHits in MC track
202  THistoInfo( "recosEffVsMCMom", "Reconstruction Efficiency vs Momentum, All tracks", 50, 0., MaxMomentum,
203  0,0,100, "p^{MC} [GeV/c]", "Efficiency [%]"),// eff vs mom in MC track
204  THistoInfo( "recosEffVsMCMomPrim", "Reconstruction Efficiency vs Momentum, Primary Tracks", 50, 0., MaxMomentum,
205  0,0,100, "p^{MC} [GeV/c]", "Efficiency [%]"),// eff vs mom in MC track
206  THistoInfo( "recosEffVsMCMomRefPrim","Reconstruction Efficiency vs Momentum, Reference Primary Tracks", 50, 0., MaxMomentum,
207  0,0,100, "p^{MC} [GeV/c]", "Efficiency [%]"),// eff vs mom in MC track
208  THistoInfo( "recosEffVsMCMomSec", "Reconstruction Efficiency vs Momentum, Secondary Tracks", 50, 0., MaxMomentum,
209  0,0,100, "p^{MC} [GeV/c]", "Efficiency [%]"),// eff vs mom in MC track
210  THistoInfo( "recosEffVsMCPtAll", "Reconstruction Efficiency vs Pt, All Tracks", 50, 0., MaxPt,
211  0,0,100, "p_{t}^{MC} [GeV/c]", "Efficiency [%]"),// eff vs pt of all MC tracks
212  THistoInfo( "recosEffVsMCPtPrim", "Reconstruction Efficiency vs Pt, Primary", 50, 0., MaxPt,
213  0,0,100, "p_{t}^{MC} [GeV/c]", "Efficiency [%]"),// eff vs pt of primary MC tracks
214  THistoInfo( "recosEffVsMCPtRefPrim", "Reconstruction Efficiency vs Pt, Ref Primary", 50, 0., MaxPt,
215  0,0,100, "p_{t}^{MC} [GeV/c]", "Efficiency [%]"),// eff vs pt of ref primary MC tracks
216  THistoInfo( "recosEffVsMCPtSec", "Reconstruction Efficiency vs Pt, Secondary", 50, 0., MaxPt,
217  0,0,100, "p_{t}^{MC} [GeV/c]", "Efficiency [%]"),// eff vs pt of secondary MC tracks
218  THistoInfo( "recosEffVsMCPhiAll", "Reconstruction Efficiency vs Phi, All Tracks", 120, -MaxPhi, MaxPhi,
219  0,0,100, "#phi", "Efficiency [%]"),// eff vs Phi of all tracks
220  THistoInfo( "recosEffVsMCPhiPrim", "Reconstruction Efficiency vs Phi, Primary Tracks", 120, -MaxPhi, MaxPhi,
221  0,0,100, "#phi", "Efficiency [%]"),// eff vs Phi of primary tracks
222  THistoInfo( "recosEffVsMCPhiRefPrim", "Reconstruction Efficiency vs Phi, Ref Primary Tracks", 120, -MaxPhi, MaxPhi,
223  0,0,100, "#phi", "Efficiency [%]"),// eff vs Phi of ref primary
224  THistoInfo( "recosEffVsMCPhiSec", "Reconstruction Efficiency vs Phi, Secondary Tracks", 120, -MaxPhi, MaxPhi,
225  0,0,100, "#phi", "Efficiency [%]"),// eff vs Phi of secondary
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]" )
234  };
235  for (int iHisto = 0; iHisto < NHisto; iHisto++){
236  fHistosInfo[iHisto] = tmp[iHisto];
237  }
238 
239  for( int i=0; i < NHisto; i++ ){
240  fHistos[i] = 0;
241  }
242 }
243 
244 
245 void PndFTSCATrackPerformanceBase::CreateHistos(string histoDir, TFile* outFile)
246 {
247  TDirectory *curdir = gDirectory;
248  if ( (histoDir != "") && outFile) { // create in file
249  outFile->cd();
250  fHistoDir = outFile->mkdir( TString(histoDir) );
251  fHistoDir->cd();
252  gDirectory->mkdir( "TrackFit" );
253  gDirectory->cd( "TrackFit" );
254 
255  int ih = 0; // i of Histo
256  for( int i = 0; i < NTracksPulls + NHitsPulls; i++, ih++ ){ // TODO separate Track & Hits pulls
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());
260  }
261 
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());
266  }
267 
268  gDirectory->cd( ".." );
269  gDirectory->mkdir( "AllTracks" );
270  gDirectory->cd( "AllTracks" );
271 
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());
276  }
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);
283  }
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());
288  // fHistos[ih]->SetDrawOption("colz"); doesn't help
289  }
290 
291  gDirectory->cd( ".." );
292  gDirectory->mkdir( "Ghosts" );
293  gDirectory->cd( "Ghosts" );
294 
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());
299  }
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);
306  }
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());
311  // fHistos[ih]->SetDrawOption("colz"); doesn't help
312  }
313 
314  gDirectory->cd( ".." );
315  gDirectory->mkdir( "RecoTracks" );
316  gDirectory->cd( "RecoTracks" );
317 
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());
322  }
323 
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);
330  }
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());
335  // fHistos[ih]->SetDrawOption("colz"); doesn't help
336  }
337 
338  gDirectory->cd( ".." );
339  curdir->cd();
340  }
341  else{ // create not in file
342  static int iaddName = 0; // haven't any subfolders so create with different names
343  TString addName = TString(iaddName);
344  int ih = 0; // i of Histo
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());
349  }
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());
354  }
355 
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());
360  }
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());
365  }
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());
370  }
371 
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());
376  }
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());
381  }
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());
386  }
387 
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());
392  }
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());
397  }
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());
402  }
403 
404  for( int i = 0; i < NHisto; i++ ){
405  fHistos[i]->SetDirectory(0);
406  }
407  }
408  SetHistoCreated();
409 }
410 
411 
412 void PndFTSCATrackPerformanceBase::FillHistos()
413 {
414  for ( int iMCTr = 0; iMCTr < nMCTracks; iMCTr++ ) {
415  PndFTSCAPerformanceMCTrackData &mcD = mcData[iMCTr];
416  PndFTSCAMCTrack &mcTr = (*fMCTracks)[iMCTr];
417 
418  const int Multiplicity = (*fMCTracks).Size();
419 
420  if( mcTr.NHits() > 0 )
421  GetHisto("mcTracksVsP")->Fill( mcTr.P() );
422 
423  if ( mcD.IsReconstructable() ) {
424  //all reconstructed tracks
425 
426  double PhiMC = TMath::RadToDeg()*TMath::ATan2(mcTr.Py(),mcTr.Px());
427 
428  GetHisto("recoAbleMCTracksVsP")->Fill( mcTr.P() );
429 
430  GetHisto("recosEffVsMCMom") ->Fill( mcTr.P(), mcD.IsReconstructed()*100 );
431  GetHisto("recosEffVsMCNHits") ->Fill( mcTr.NHits(), mcD.IsReconstructed()*100 );
432  GetHisto("recosEffVsMCPtAll") ->Fill( mcTr.Pt(), mcD.IsReconstructed()*100 );
433  GetHisto("recosEffVsMCPhiAll")->Fill( PhiMC, mcD.IsReconstructed()*100 );
434  GetHisto("recosEffVsNMCTracks")->Fill( Multiplicity, mcD.IsReconstructed()*100 );
435 
436  if(mcTr.MotherId() == -1) {
437  //all reconstructed primary tracks
438  GetHisto("recosEffVsMCMomPrim") ->Fill( mcTr.P(), mcD.IsReconstructed()*100 );
439  GetHisto("recosEffVsMCPtPrim") ->Fill( mcTr.Pt(), mcD.IsReconstructed()*100 );
440  GetHisto("recosEffVsMCPhiPrim") ->Fill( PhiMC, mcD.IsReconstructed()*100 );
441  if(mcTr.Set() == 2) {
442  //reconstructed reference primary tracks
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 );
446  }
447  }
448  else if(mcTr.MotherId() > -1) {
449  //reconstructed secondary tracks
450  GetHisto("recosEffVsMCMomSec") ->Fill( mcTr.P(), mcD.IsReconstructed()*100 );
451  GetHisto("recosEffVsMCPtSec") ->Fill( mcTr.Pt(), mcD.IsReconstructed()*100 );
452  GetHisto("recosEffVsMCPhiSec") ->Fill( PhiMC, mcD.IsReconstructed()*100 );
453  }
454  }
455  }
456 } // void PndFTSCATrackPerformanceBase::FillHistos()
457 #endif //DO_TPCCATRACKER_EFF_PERFORMANCE
458 
Int_t i
Definition: run_full.C:25
int low
Definition: anaMvdDigi.C:51
TString outFile
Definition: hit_dirc.C:17
float P() const
int MotherId() const
static T ATan2(const T &y, const T &x)
float Py() const
TString name
int NHits() const
float Px() const
float Pt() const
Information about reconstruction of MCTrack.
int Set() const