]>
Commit | Line | Data |
---|---|---|
6d1c79ca | 1 | //------------------------------------------------------------------------------\r |
2 | // Implementation of AliComparisonEff class. It keeps information from \r | |
3 | // comparison of reconstructed and MC particle tracks. In addtion, \r | |
4 | // it keeps selection cuts used during comparison. The comparison \r | |
5 | // information is stored in the ROOT histograms. Analysis of these \r | |
6 | // histograms can be done by using Analyse() class function. The result of \r | |
3baa4bfd | 7 | // the analysis (histograms/graphs) are stored in the folder which is \r |
8 | // a data member of AliComparisonEff.\r | |
9 | // \r | |
6d1c79ca | 10 | // Author: J.Otwinowski 04/02/2008 \r |
11 | //------------------------------------------------------------------------------\r | |
12 | \r | |
13 | /*\r | |
3baa4bfd | 14 | \r |
15 | // after running comparison task, read the file, and get component\r | |
b4126c69 | 16 | gROOT->LoadMacro("$ALICE_ROOT/PWG1/Macros/LoadMyLibs.C");\r |
17 | LoadMyLibs();\r | |
6d1c79ca | 18 | TFile f("Output.root");\r |
35771050 | 19 | //AliComparisonEff * compObj = (AliComparisonEff*)f.Get("AliComparisonEff");\r |
20 | AliComparisonEff * compObj = (AliComparisonEff*)cOutput->FindObject("AliComparisonEff");\r | |
6d1c79ca | 21 | \r |
b4126c69 | 22 | // Analyse comparison data\r |
3baa4bfd | 23 | compObj->Analyse();\r |
24 | \r | |
25 | // the output histograms/graphs will be stored in the folder "folderEff" \r | |
26 | compObj->GetAnalysisFolder()->ls("*");\r | |
27 | \r | |
28 | // user can save whole comparison object (or only folder with anlysed histograms) \r | |
29 | // in the seperate output file (e.g.)\r | |
30 | TFile fout("Analysed_Eff.root","recreate");\r | |
31 | compObj->Write(); // compObj->GetAnalysisFolder()->Write();\r | |
32 | fout.Close();\r | |
6d1c79ca | 33 | \r |
6d1c79ca | 34 | */\r |
35 | \r | |
7b392278 | 36 | #include <TAxis.h>\r |
37 | #include <TH1D.h>\r | |
38 | \r | |
6d1c79ca | 39 | // \r |
71a14197 | 40 | #include "AliESDtrack.h"\r |
6d1c79ca | 41 | #include "AliRecInfoCuts.h" \r |
42 | #include "AliMCInfoCuts.h" \r | |
43 | #include "AliLog.h" \r | |
6d1c79ca | 44 | #include "AliESDVertex.h" \r |
45 | #include "AliExternalTrackParam.h" \r | |
46 | #include "AliTracker.h" \r | |
6d1c79ca | 47 | #include "AliMCInfo.h" \r |
48 | #include "AliESDRecInfo.h" \r | |
49 | #include "AliComparisonEff.h" \r | |
50 | \r | |
51 | using namespace std;\r | |
52 | \r | |
6d1c79ca | 53 | ClassImp(AliComparisonEff)\r |
54 | \r | |
55 | //_____________________________________________________________________________\r | |
56 | AliComparisonEff::AliComparisonEff():\r | |
3baa4bfd | 57 | AliComparisonObject("AliComparisonEff"),\r |
6d1c79ca | 58 | \r |
59 | // histograms\r | |
60 | \r | |
71a14197 | 61 | fEffHisto(0),\r |
6d1c79ca | 62 | \r |
63 | // Cuts \r | |
64 | fCutsRC(0), \r | |
65 | fCutsMC(0),\r | |
66 | \r | |
3baa4bfd | 67 | // histogram folder \r |
68 | fAnalysisFolder(0)\r | |
6d1c79ca | 69 | {\r |
71a14197 | 70 | // default consttructor \r |
71 | }\r | |
6d1c79ca | 72 | \r |
71a14197 | 73 | //_____________________________________________________________________________\r |
74 | AliComparisonEff::AliComparisonEff(Char_t* name="AliComparisonEff",Char_t*title="AliComparisonEff",Int_t analysisMode=0, Bool_t hptGenerator=kFALSE):\r | |
75 | AliComparisonObject(name,title),\r | |
6d1c79ca | 76 | \r |
71a14197 | 77 | // histograms\r |
78 | fEffHisto(0),\r | |
6d1c79ca | 79 | \r |
71a14197 | 80 | // Cuts \r |
81 | fCutsRC(0), \r | |
82 | fCutsMC(0),\r | |
6d1c79ca | 83 | \r |
71a14197 | 84 | // histogram folder \r |
85 | fAnalysisFolder(0)\r | |
86 | {\r | |
87 | // named constructor\r | |
88 | //\r | |
89 | SetAnalysisMode(analysisMode);\r | |
90 | SetHptGenerator(hptGenerator);\r | |
b4126c69 | 91 | \r |
3baa4bfd | 92 | Init();\r |
6d1c79ca | 93 | }\r |
94 | \r | |
6d1c79ca | 95 | \r |
71a14197 | 96 | //_____________________________________________________________________________\r |
97 | AliComparisonEff::~AliComparisonEff()\r | |
98 | {\r | |
99 | // destructor\r | |
6d1c79ca | 100 | \r |
71a14197 | 101 | if(fEffHisto) delete fEffHisto; fEffHisto=0;\r |
6d1c79ca | 102 | \r |
71a14197 | 103 | if(fCutsRC) delete fCutsRC; fCutsRC=0;\r |
104 | if(fCutsMC) delete fCutsMC; fCutsMC=0;\r | |
3baa4bfd | 105 | \r |
106 | if(fAnalysisFolder) delete fAnalysisFolder; fAnalysisFolder=0;\r | |
6d1c79ca | 107 | }\r |
108 | \r | |
109 | //_____________________________________________________________________________\r | |
71a14197 | 110 | void AliComparisonEff::Init()\r |
111 | {\r | |
6d1c79ca | 112 | // Init histograms\r |
113 | //\r | |
71a14197 | 114 | Int_t nPtBins = 31;\r |
115 | Double_t binsPt[32] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.7,0.8,0.9,1.0,1.2,1.4,1.6,1.8,2.0,2.25,2.5,2.75,3.,3.5,4.,5.,6.,8.,10.};\r | |
116 | Double_t ptMin = 0., ptMax = 10.;\r | |
6d1c79ca | 117 | \r |
71a14197 | 118 | if(IsHptGenerator() == kTRUE) {\r |
119 | nPtBins = 100;\r | |
120 | ptMin = 0.; ptMax = 100.;\r | |
121 | }\r | |
6d1c79ca | 122 | \r |
71a14197 | 123 | //mceta:mcphi:mcpt:pid:isPrim:recStatus:findable\r |
124 | Int_t binsEffHisto[7]={30,144,nPtBins,5,2,2,2};\r | |
125 | Double_t minEffHisto[7]={-1.5,0.,ptMin,0.,0.,0.,0.};\r | |
126 | Double_t maxEffHisto[7]={ 1.5,2.*TMath::Pi(), ptMax,5.,2.,2.,2.};\r | |
6d1c79ca | 127 | \r |
71a14197 | 128 | fEffHisto = new THnSparseF("fEffHisto","mceta:mcphi:mcpt:pid:isPrim:recStatus:findable",7,binsEffHisto,minEffHisto,maxEffHisto);\r |
129 | if(!IsHptGenerator()) fEffHisto->SetBinEdges(2,binsPt);\r | |
6d1c79ca | 130 | \r |
71a14197 | 131 | fEffHisto->GetAxis(0)->SetTitle("eta");\r |
132 | fEffHisto->GetAxis(1)->SetTitle("phi (rad)");\r | |
133 | fEffHisto->GetAxis(2)->SetTitle("pt (GeV/c)");\r | |
134 | fEffHisto->GetAxis(3)->SetTitle("pid");\r | |
135 | fEffHisto->GetAxis(4)->SetTitle("isPrim");\r | |
136 | fEffHisto->GetAxis(5)->SetTitle("recStatus");\r | |
137 | fEffHisto->GetAxis(6)->SetTitle("findable");\r | |
138 | fEffHisto->Sumw2();\r | |
6d1c79ca | 139 | \r |
3baa4bfd | 140 | // init cuts\r |
6d1c79ca | 141 | if(!fCutsMC) \r |
142 | AliDebug(AliLog::kError, "ERROR: Cannot find AliMCInfoCuts object");\r | |
143 | if(!fCutsRC) \r | |
144 | AliDebug(AliLog::kError, "ERROR: Cannot find AliRecInfoCuts object");\r | |
3baa4bfd | 145 | \r |
146 | // init folder\r | |
147 | fAnalysisFolder = CreateFolder("folderEff","Analysis Efficiency Folder");\r | |
6d1c79ca | 148 | }\r |
149 | \r | |
150 | //_____________________________________________________________________________\r | |
71a14197 | 151 | void AliComparisonEff::ProcessTPC(AliMCInfo* const infoMC, AliESDRecInfo* const infoRC)\r |
6d1c79ca | 152 | {\r |
153 | // Fill efficiency comparison information\r | |
71a14197 | 154 | \r |
6d1c79ca | 155 | AliExternalTrackParam *track = 0;\r |
6d1c79ca | 156 | Double_t field = AliTracker::GetBz(); // nominal Bz field [kG]\r |
157 | Double_t kMaxD = 123456.0; // max distance\r | |
6d1c79ca | 158 | Double_t dca[2], cov[3]; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z\r |
71a14197 | 159 | AliESDVertex vertexMC; // MC primary vertex\r |
6d1c79ca | 160 | \r |
161 | // distance to Prim. vertex \r | |
162 | const Double_t* dv = infoMC->GetVDist(); \r | |
163 | \r | |
164 | Float_t mcpt = infoMC->GetParticle().Pt();\r | |
71a14197 | 165 | Float_t mceta = infoMC->GetParticle().Eta();\r |
166 | Float_t mcphi = infoMC->GetParticle().Phi();\r | |
167 | if(mcphi<0) mcphi += 2.*TMath::Pi();\r | |
168 | \r | |
6d1c79ca | 169 | Bool_t isPrim = TMath::Sqrt(dv[0]*dv[0] + dv[1]*dv[1])<fCutsMC->GetMaxR() && TMath::Abs(dv[2])<fCutsMC->GetMaxVz();\r |
71a14197 | 170 | Bool_t findable = (infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits());\r |
171 | Bool_t recStatus = kFALSE;\r | |
6d1c79ca | 172 | \r |
173 | // calculate and set prim. vertex\r | |
71a14197 | 174 | vertexMC.SetXv( infoMC->GetParticle().Vx() - dv[0] );\r |
175 | vertexMC.SetYv( infoMC->GetParticle().Vy() - dv[1] );\r | |
176 | vertexMC.SetZv( infoMC->GetParticle().Vz() - dv[2] );\r | |
6d1c79ca | 177 | \r |
71a14197 | 178 | // Only 5 charged particle species (e,mu,pi,K,p)\r |
6d1c79ca | 179 | if (fCutsMC->IsPdgParticle(TMath::Abs(infoMC->GetParticle().GetPdgCode())) == kFALSE) return; \r |
180 | \r | |
181 | // transform Pdg to Pid\r | |
182 | // Pdg convension is different for hadrons and leptons \r | |
183 | // (e.g. K+/K- = 321/-321; e+/e- = -11/11 ) \r | |
184 | Double_t pid = -1;\r | |
185 | if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetEM() ) pid = 0; \r | |
186 | if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetMuM() ) pid = 1; \r | |
187 | if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetPiP() ) pid = 2; \r | |
188 | if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetKP() ) pid = 3; \r | |
189 | if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetProt() ) pid = 4; \r | |
190 | \r | |
71a14197 | 191 | if (infoRC->GetESDtrack() && infoRC->GetESDtrack()->GetTPCInnerParam()) \r |
6d1c79ca | 192 | {\r |
71a14197 | 193 | if ((track = new AliExternalTrackParam(*infoRC->GetESDtrack()->GetTPCInnerParam())) != 0)\r |
6d1c79ca | 194 | {\r |
71a14197 | 195 | Bool_t bDCAStatus = track->PropagateToDCA(&vertexMC,field,kMaxD,dca,cov);\r |
196 | if(bDCAStatus) {\r | |
197 | if(TMath::Abs(dca[0])<fCutsRC->GetMaxDCAToVertexXY() && TMath::Abs(dca[1])<fCutsRC->GetMaxDCAToVertexZ())\r | |
198 | {\r | |
199 | recStatus = kTRUE;\r | |
200 | }\r | |
201 | }\r | |
202 | delete track;\r | |
203 | }\r | |
204 | }\r | |
205 | \r | |
206 | // Fill histograms\r | |
207 | Double_t vEffHisto[7] = { mceta, mcphi, mcpt, pid, isPrim, recStatus, findable }; \r | |
208 | fEffHisto->Fill(vEffHisto);\r | |
209 | }\r | |
210 | \r | |
211 | //_____________________________________________________________________________\r | |
212 | void AliComparisonEff::ProcessTPCITS(AliMCInfo* const infoMC, AliESDRecInfo* const infoRC)\r | |
213 | {\r | |
214 | // Fill efficiency comparison information\r | |
215 | \r | |
216 | Int_t clusterITS[200];\r | |
217 | Float_t dca[2], cov[3]; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z\r | |
218 | \r | |
219 | Float_t mcpt = infoMC->GetParticle().Pt();\r | |
220 | Float_t mceta = infoMC->GetParticle().Eta();\r | |
221 | Float_t mcphi = infoMC->GetParticle().Phi();\r | |
222 | if(mcphi<0) mcphi += 2.*TMath::Pi();\r | |
223 | \r | |
224 | // distance to Prim. vertex \r | |
225 | const Double_t* dv = infoMC->GetVDist(); \r | |
226 | \r | |
227 | Bool_t isPrim = TMath::Sqrt(dv[0]*dv[0] + dv[1]*dv[1])<fCutsMC->GetMaxR() && TMath::Abs(dv[2])<fCutsMC->GetMaxVz();\r | |
228 | Bool_t findable = (infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits());\r | |
229 | Bool_t recStatus =kFALSE;\r | |
6d1c79ca | 230 | \r |
71a14197 | 231 | // Only 5 charged particle species (e,mu,pi,K,p)\r |
232 | if (fCutsMC->IsPdgParticle(TMath::Abs(infoMC->GetParticle().GetPdgCode())) == kFALSE) return; \r | |
233 | \r | |
234 | // transform Pdg to Pid\r | |
235 | // Pdg convension is different for hadrons and leptons \r | |
236 | // (e.g. K+/K- = 321/-321; e+/e- = -11/11 ) \r | |
237 | Double_t pid = -1;\r | |
238 | if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetEM() ) pid = 0; \r | |
239 | if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetMuM() ) pid = 1; \r | |
240 | if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetPiP() ) pid = 2; \r | |
241 | if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetKP() ) pid = 3; \r | |
242 | if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetProt() ) pid = 4; \r | |
243 | \r | |
244 | if(!infoRC->GetESDtrack()) return;\r | |
245 | if(infoRC->GetESDtrack()->GetITSclusters(clusterITS)>fCutsRC->GetMinNClustersITS())\r | |
246 | {\r | |
247 | infoRC->GetESDtrack()->GetImpactParameters(dca,cov);\r | |
248 | if(TMath::Abs(dca[0]) < fCutsRC->GetMaxDCAToVertexXY() && TMath::Abs(dca[1]) < fCutsRC->GetMaxDCAToVertexZ()) \r | |
249 | {\r | |
250 | recStatus =(infoRC->GetStatus(1)==3);\r | |
251 | } \r | |
6d1c79ca | 252 | }\r |
253 | \r | |
71a14197 | 254 | // fill histograms\r |
255 | Double_t vEffHisto[7] = { mceta, mcphi, mcpt, pid, isPrim, recStatus, findable }; \r | |
256 | fEffHisto->Fill(vEffHisto);\r | |
257 | }\r | |
6d1c79ca | 258 | \r |
71a14197 | 259 | //_____________________________________________________________________________\r |
260 | void AliComparisonEff::ProcessConstrained(AliMCInfo* const infoMC, AliESDRecInfo* const infoRC)\r | |
261 | {\r | |
262 | // Fill efficiency comparison information\r | |
263 | AliExternalTrackParam *track = 0;\r | |
264 | Double_t field = AliTracker::GetBz(); // nominal Bz field [kG]\r | |
265 | Double_t kMaxD = 123456.0; // max distance\r | |
266 | Double_t dca[2], cov[3]; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z\r | |
267 | AliESDVertex vertexMC; // MC primary vertex\r | |
6d1c79ca | 268 | \r |
71a14197 | 269 | // distance to Prim. vertex \r |
270 | const Double_t* dv = infoMC->GetVDist(); \r | |
271 | \r | |
272 | Float_t mcpt = infoMC->GetParticle().Pt();\r | |
273 | Float_t mceta = infoMC->GetParticle().Eta();\r | |
274 | Float_t mcphi = infoMC->GetParticle().Phi();\r | |
275 | if(mcphi<0) mcphi += 2.*TMath::Pi();\r | |
276 | \r | |
277 | Bool_t isPrim = TMath::Sqrt(dv[0]*dv[0] + dv[1]*dv[1])<fCutsMC->GetMaxR() && TMath::Abs(dv[2])<fCutsMC->GetMaxVz();\r | |
278 | Bool_t findable = (infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits());\r | |
279 | Bool_t recStatus = kFALSE;\r | |
280 | \r | |
281 | // calculate and set prim. vertex\r | |
282 | vertexMC.SetXv( infoMC->GetParticle().Vx() - dv[0] );\r | |
283 | vertexMC.SetYv( infoMC->GetParticle().Vy() - dv[1] );\r | |
284 | vertexMC.SetZv( infoMC->GetParticle().Vz() - dv[2] );\r | |
35771050 | 285 | \r |
71a14197 | 286 | // Only 5 charged particle species (e,mu,pi,K,p)\r |
287 | if (fCutsMC->IsPdgParticle(TMath::Abs(infoMC->GetParticle().GetPdgCode())) == kFALSE) return; \r | |
6d1c79ca | 288 | \r |
71a14197 | 289 | // transform Pdg to Pid\r |
290 | // Pdg convension is different for hadrons and leptons \r | |
291 | // (e.g. K+/K- = 321/-321; e+/e- = -11/11 ) \r | |
292 | Double_t pid = -1;\r | |
293 | if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetEM() ) pid = 0; \r | |
294 | if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetMuM() ) pid = 1; \r | |
295 | if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetPiP() ) pid = 2; \r | |
296 | if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetKP() ) pid = 3; \r | |
297 | if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetProt() ) pid = 4; \r | |
35771050 | 298 | \r |
71a14197 | 299 | // constrained parameters resolution\r |
300 | if (!infoRC->GetESDtrack()) return;\r | |
301 | const AliExternalTrackParam * cparam = infoRC->GetESDtrack()->GetConstrainedParam();\r | |
302 | if(!cparam) return;\r | |
6d1c79ca | 303 | \r |
71a14197 | 304 | if ((track = new AliExternalTrackParam(*cparam)) != 0)\r |
305 | {\r | |
306 | Bool_t bDCAStatus = track->PropagateToDCA(&vertexMC,field,kMaxD,dca,cov);\r | |
307 | if(bDCAStatus) {\r | |
308 | if(TMath::Abs(dca[0])<fCutsRC->GetMaxDCAToVertexXY() && TMath::Abs(dca[1])<fCutsRC->GetMaxDCAToVertexZ())\r | |
309 | {\r | |
310 | recStatus = (infoRC->GetStatus(1)!=3);\r | |
311 | }\r | |
312 | }\r | |
313 | delete track;\r | |
6d1c79ca | 314 | }\r |
71a14197 | 315 | \r |
316 | // Fill histograms\r | |
317 | Double_t vEffHisto[7] = { mceta, mcphi, mcpt, pid, isPrim, recStatus, findable }; \r | |
318 | fEffHisto->Fill(vEffHisto);\r | |
6d1c79ca | 319 | }\r |
320 | \r | |
321 | //_____________________________________________________________________________\r | |
71a14197 | 322 | void AliComparisonEff::Exec(AliMCInfo* const infoMC, AliESDRecInfo* const infoRC)\r |
6d1c79ca | 323 | {\r |
324 | // Process comparison information\r | |
71a14197 | 325 | \r |
326 | if(GetAnalysisMode() == 0) ProcessTPC(infoMC,infoRC);\r | |
327 | else if(GetAnalysisMode() == 1) ProcessTPCITS(infoMC,infoRC);\r | |
328 | else if(GetAnalysisMode() == 2) ProcessConstrained(infoMC,infoRC);\r | |
329 | else {\r | |
330 | printf("ERROR: AnalysisMode %d \n",fAnalysisMode);\r | |
331 | return;\r | |
332 | }\r | |
6d1c79ca | 333 | }\r |
334 | \r | |
335 | //_____________________________________________________________________________\r | |
71a14197 | 336 | Long64_t AliComparisonEff::Merge(TCollection* const list) \r |
6d1c79ca | 337 | {\r |
338 | // Merge list of objects (needed by PROOF)\r | |
339 | \r | |
340 | if (!list)\r | |
341 | return 0;\r | |
342 | \r | |
343 | if (list->IsEmpty())\r | |
344 | return 1;\r | |
345 | \r | |
346 | TIterator* iter = list->MakeIterator();\r | |
347 | TObject* obj = 0;\r | |
348 | \r | |
349 | // collection of generated histograms\r | |
350 | \r | |
351 | Int_t count=0;\r | |
352 | while((obj = iter->Next()) != 0) \r | |
353 | {\r | |
354 | AliComparisonEff* entry = dynamic_cast<AliComparisonEff*>(obj);\r | |
3baa4bfd | 355 | if (entry == 0) continue; \r |
6d1c79ca | 356 | \r |
71a14197 | 357 | fEffHisto->Add(entry->fEffHisto);\r |
6d1c79ca | 358 | count++;\r |
359 | }\r | |
360 | \r | |
361 | return count;\r | |
362 | }\r | |
363 | \r | |
364 | //_____________________________________________________________________________\r | |
365 | void AliComparisonEff::Analyse() \r | |
366 | {\r | |
3baa4bfd | 367 | // Analyse comparison information and store output histograms\r |
368 | // in the folder "folderEff" \r | |
369 | //\r | |
3baa4bfd | 370 | TH1::AddDirectory(kFALSE);\r |
b4126c69 | 371 | TObjArray *aFolderObj = new TObjArray;\r |
6d1c79ca | 372 | \r |
71a14197 | 373 | // efficiency vs pt\r |
374 | fEffHisto->GetAxis(0)->SetRangeUser(-0.9,0.9); // eta range\r | |
375 | fEffHisto->GetAxis(4)->SetRangeUser(1.,1.); // primary tracks\r | |
6d1c79ca | 376 | \r |
71a14197 | 377 | // rec efficiency vs pt\r |
378 | TH1D *ptAll = fEffHisto->Projection(2);\r | |
6d1c79ca | 379 | \r |
71a14197 | 380 | fEffHisto->GetAxis(5)->SetRangeUser(1.,1.); // reconstructed \r |
381 | TH1D *ptRec = fEffHisto->Projection(2);\r | |
382 | ptRec->Divide(ptAll);\r | |
383 | ptRec->SetName("ptRecEff");\r | |
6d1c79ca | 384 | \r |
71a14197 | 385 | aFolderObj->Add(ptRec);\r |
6d1c79ca | 386 | \r |
6d1c79ca | 387 | \r |
71a14197 | 388 | // rec efficiency vs pid vs pt\r |
389 | fEffHisto->GetAxis(5)->SetRangeUser(0.,1.); \r | |
390 | fEffHisto->GetAxis(3)->SetRangeUser(2.,2.); // pions\r | |
391 | TH1D *ptAllPi = fEffHisto->Projection(2);\r | |
6d1c79ca | 392 | \r |
71a14197 | 393 | fEffHisto->GetAxis(5)->SetRangeUser(1.,1.); // reconstructed\r |
394 | TH1D *ptRecPi = fEffHisto->Projection(2);\r | |
395 | ptRecPi->Divide(ptAllPi);\r | |
396 | ptRecPi->SetName("ptRecEffPi");\r | |
6d1c79ca | 397 | \r |
71a14197 | 398 | aFolderObj->Add(ptRecPi);\r |
6d1c79ca | 399 | \r |
71a14197 | 400 | fEffHisto->GetAxis(5)->SetRangeUser(0.,1.); \r |
401 | fEffHisto->GetAxis(3)->SetRangeUser(3.,3.); // kaons\r | |
402 | TH1D *ptAllK = fEffHisto->Projection(2);\r | |
6d1c79ca | 403 | \r |
71a14197 | 404 | fEffHisto->GetAxis(5)->SetRangeUser(1.,1.); // reconstructed\r |
405 | TH1D *ptRecK = fEffHisto->Projection(2);\r | |
406 | ptRecK->Divide(ptAllK);\r | |
407 | ptRecK->SetName("ptRecEffK");\r | |
6d1c79ca | 408 | \r |
71a14197 | 409 | aFolderObj->Add(ptRecK);\r |
410 | \r | |
411 | fEffHisto->GetAxis(5)->SetRangeUser(0.,1.); \r | |
412 | fEffHisto->GetAxis(3)->SetRangeUser(4.,4.); // protons\r | |
413 | TH1D *ptAllP = fEffHisto->Projection(2);\r | |
6d1c79ca | 414 | \r |
71a14197 | 415 | fEffHisto->GetAxis(5)->SetRangeUser(1.,1.); // reconstructed\r |
416 | TH1D *ptRecP = fEffHisto->Projection(2);\r | |
417 | ptRecP->Divide(ptAllP);\r | |
418 | ptRecP->SetName("ptRecEffP");\r | |
419 | \r | |
420 | aFolderObj->Add(ptRecP);\r | |
421 | \r | |
422 | // findable efficiency \r | |
423 | fEffHisto->GetAxis(3)->SetRangeUser(0.,4.); \r | |
424 | fEffHisto->GetAxis(5)->SetRangeUser(0.,1.); \r | |
425 | fEffHisto->GetAxis(6)->SetRangeUser(1.,1.); // findable\r | |
426 | TH1D *ptAllF = fEffHisto->Projection(2);\r | |
427 | \r | |
428 | fEffHisto->GetAxis(5)->SetRangeUser(1.,1.);\r | |
429 | fEffHisto->GetAxis(6)->SetRangeUser(1.,1.);\r | |
430 | TH1D *ptRecF = fEffHisto->Projection(2); // rec findable\r | |
431 | ptRecF->Divide(ptAllF);\r | |
432 | ptRecF->SetName("ptRecFindableEff");\r | |
433 | \r | |
434 | aFolderObj->Add(ptRecF);\r | |
6d1c79ca | 435 | \r |
6d1c79ca | 436 | //\r |
71a14197 | 437 | // efficiency vs eta\r |
6d1c79ca | 438 | //\r |
6d1c79ca | 439 | \r |
71a14197 | 440 | fEffHisto->GetAxis(0)->SetRangeUser(-1.5,1.5); // eta range\r |
441 | fEffHisto->GetAxis(2)->SetRangeUser(0.2,10.); // pt range\r | |
442 | fEffHisto->GetAxis(4)->SetRangeUser(1.,1.); // primary tracks\r | |
443 | fEffHisto->GetAxis(5)->SetRangeUser(0.,1.); // all\r | |
444 | fEffHisto->GetAxis(6)->SetRangeUser(0.,1.); // all\r | |
b4126c69 | 445 | \r |
71a14197 | 446 | // rec efficiency vs eta\r |
447 | TH1D *etaAll = fEffHisto->Projection(0);\r | |
b4126c69 | 448 | \r |
71a14197 | 449 | fEffHisto->GetAxis(5)->SetRangeUser(1.,1.); // reconstructed \r |
450 | TH1D *etaRec = fEffHisto->Projection(0);\r | |
451 | etaRec->Divide(etaAll);\r | |
452 | etaRec->SetName("etaRecEff");\r | |
3baa4bfd | 453 | \r |
71a14197 | 454 | aFolderObj->Add(etaRec);\r |
6d1c79ca | 455 | \r |
71a14197 | 456 | // rec efficiency vs pid vs eta\r |
457 | fEffHisto->GetAxis(5)->SetRangeUser(0.,1.); \r | |
458 | fEffHisto->GetAxis(3)->SetRangeUser(2.,2.); // pions\r | |
459 | TH1D *etaAllPi = fEffHisto->Projection(0);\r | |
6d1c79ca | 460 | \r |
71a14197 | 461 | fEffHisto->GetAxis(5)->SetRangeUser(1.,1.); // reconstructed\r |
462 | TH1D *etaRecPi = fEffHisto->Projection(0);\r | |
463 | etaRecPi->Divide(etaAllPi);\r | |
464 | etaRecPi->SetName("etaRecEffPi");\r | |
b4126c69 | 465 | \r |
71a14197 | 466 | aFolderObj->Add(etaRecPi);\r |
3baa4bfd | 467 | \r |
71a14197 | 468 | fEffHisto->GetAxis(5)->SetRangeUser(0.,1.); \r |
469 | fEffHisto->GetAxis(3)->SetRangeUser(3.,3.); // kaons\r | |
470 | TH1D *etaAllK = fEffHisto->Projection(0);\r | |
6d1c79ca | 471 | \r |
71a14197 | 472 | fEffHisto->GetAxis(5)->SetRangeUser(1.,1.); // reconstructed\r |
473 | TH1D *etaRecK = fEffHisto->Projection(0);\r | |
474 | etaRecK->Divide(etaAllK);\r | |
475 | etaRecK->SetName("etaRecEffK");\r | |
6d1c79ca | 476 | \r |
71a14197 | 477 | aFolderObj->Add(etaRecK);\r |
b4126c69 | 478 | \r |
71a14197 | 479 | fEffHisto->GetAxis(5)->SetRangeUser(0.,1.); \r |
480 | fEffHisto->GetAxis(3)->SetRangeUser(4.,4.); // protons\r | |
481 | TH1D *etaAllP = fEffHisto->Projection(0);\r | |
3baa4bfd | 482 | \r |
71a14197 | 483 | fEffHisto->GetAxis(5)->SetRangeUser(1.,1.); // reconstructed\r |
484 | TH1D *etaRecP = fEffHisto->Projection(0);\r | |
485 | etaRecP->Divide(etaAllP);\r | |
486 | etaRecP->SetName("etaRecEffP");\r | |
487 | \r | |
488 | aFolderObj->Add(etaRecP);\r | |
489 | \r | |
490 | //\r | |
491 | // findable efficiency \r | |
492 | //\r | |
493 | fEffHisto->GetAxis(3)->SetRangeUser(0.,4.); \r | |
494 | fEffHisto->GetAxis(5)->SetRangeUser(0.,1.); \r | |
495 | fEffHisto->GetAxis(6)->SetRangeUser(1.,1.); // findable\r | |
496 | TH1D *etaAllF = fEffHisto->Projection(0);\r | |
497 | \r | |
498 | fEffHisto->GetAxis(5)->SetRangeUser(1.,1.);\r | |
499 | fEffHisto->GetAxis(6)->SetRangeUser(1.,1.);\r | |
500 | TH1D *etaRecF = fEffHisto->Projection(0); // rec findable\r | |
501 | etaRecF->Divide(etaAllF);\r | |
502 | etaRecF->SetName("etaRecFindableEff");\r | |
503 | \r | |
504 | aFolderObj->Add(etaRecF);\r | |
6d1c79ca | 505 | \r |
b4126c69 | 506 | // export objects to analysis folder\r |
507 | fAnalysisFolder = ExportToFolder(aFolderObj);\r | |
3baa4bfd | 508 | \r |
b4126c69 | 509 | // delete only TObjArray\r |
510 | if(aFolderObj) delete aFolderObj;\r | |
3baa4bfd | 511 | }\r |
512 | \r | |
b4126c69 | 513 | //_____________________________________________________________________________\r |
514 | TFolder* AliComparisonEff::ExportToFolder(TObjArray * array) \r | |
515 | {\r | |
516 | // recreate folder avery time and export objects to new one\r | |
517 | //\r | |
518 | AliComparisonEff * comp=this;\r | |
519 | TFolder *folder = comp->GetAnalysisFolder();\r | |
520 | \r | |
521 | TString name, title;\r | |
522 | TFolder *newFolder = 0;\r | |
523 | Int_t i = 0;\r | |
524 | Int_t size = array->GetSize();\r | |
525 | \r | |
526 | if(folder) { \r | |
527 | // get name and title from old folder\r | |
528 | name = folder->GetName(); \r | |
529 | title = folder->GetTitle(); \r | |
530 | \r | |
531 | // delete old one\r | |
532 | delete folder;\r | |
533 | \r | |
534 | // create new one\r | |
535 | newFolder = CreateFolder(name.Data(),title.Data());\r | |
536 | newFolder->SetOwner();\r | |
537 | \r | |
538 | // add objects to folder\r | |
539 | while(i < size) {\r | |
540 | newFolder->Add(array->At(i));\r | |
541 | i++;\r | |
542 | }\r | |
543 | }\r | |
544 | \r | |
545 | return newFolder;\r | |
546 | }\r | |
547 | \r | |
548 | \r | |
3baa4bfd | 549 | //_____________________________________________________________________________\r |
550 | TFolder* AliComparisonEff::CreateFolder(TString name,TString title) { \r | |
551 | // create folder for analysed histograms\r | |
552 | //\r | |
553 | TFolder *folder = 0;\r | |
554 | folder = new TFolder(name.Data(),title.Data());\r | |
555 | \r | |
556 | return folder;\r | |
6d1c79ca | 557 | }\r |