PWGUD/dNdPt -> PWGLF/SPECTRA/ChargedHadrons/dNdPt
[u/mrichter/AliRoot.git] / PWGLF / SPECTRA / ChargedHadrons / dNdPt / AlidNdPtCutAnalysisPbPb.cxx
CommitLineData
dac20c1b 1/**************************************************************************\r
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *\r
3 * *\r
4 * Author: The ALICE Off-line Project. *\r
5 * Contributors are mentioned in the code where appropriate. *\r
6 * *\r
7 * Permission to use, copy, modify and distribute this software and its *\r
8 * documentation strictly for non-commercial purposes is hereby granted *\r
9 * without fee, provided that the above copyright notice appears in all *\r
10 * copies and that both the copyright notice and this permission notice *\r
11 * appear in the supporting documentation. The authors make no claims *\r
12 * about the suitability of this software for any purpose. It is *\r
13 * provided "as is" without express or implied warranty. *\r
14 **************************************************************************/\r
15//------------------------------------------------------------------------------\r
16// AlidNdPtCutAnalysisPbPb class. \r
17//\r
18// a. functionality:\r
19// - fills generic cut histograms\r
20// - generates cuts (selection criteria)\r
21//\r
22// b. data members:\r
23// - generic cut histograms\r
24// - control histograms\r
25//\r
26// Author: J.Otwinowski 04/11/2008 \r
27//------------------------------------------------------------------------------\r
28#include "TH1.h"\r
29#include "TH2.h"\r
a26e43aa 30#include "TH3.h"\r
31#include "TMatrixD.h"\r
32\r
33#include <TPDGCode.h>\r
dac20c1b 34\r
35#include "AliHeader.h" \r
36#include "AliGenEventHeader.h" \r
10360c58 37#include "AliInputEventHandler.h" \r
38#include "AliCentrality.h" \r
dac20c1b 39#include "AliStack.h" \r
40#include "AliESDEvent.h" \r
41#include "AliMCEvent.h" \r
42#include "AliESDtrackCuts.h" \r
43#include "AliLog.h" \r
44#include "AliTracker.h" \r
45\r
46#include "AlidNdPtEventCuts.h"\r
47#include "AlidNdPtAcceptanceCuts.h"\r
48#include "AlidNdPtBackgroundCuts.h"\r
49#include "AlidNdPtAnalysis.h"\r
50#include "AliPhysicsSelection.h"\r
51\r
52#include "AliPWG0Helper.h"\r
53#include "AlidNdPtHelper.h"\r
54#include "AlidNdPtCutAnalysisPbPb.h"\r
55\r
56using namespace std;\r
57\r
58ClassImp(AlidNdPtCutAnalysisPbPb)\r
59\r
60//_____________________________________________________________________________\r
61 AlidNdPtCutAnalysisPbPb::AlidNdPtCutAnalysisPbPb(): AlidNdPt(),\r
62 fAnalysisFolder(0),\r
63 fEventCount(0),\r
64 fRecEventHist(0),\r
65 fMCEventHist(0),\r
66 fRecMCEventHist(0),\r
10360c58 67 fRecMCTrackHist(0),\r
a26e43aa 68 fCentralityEstimator(0),\r
69 fFolderObj(0)\r
dac20c1b 70{\r
71 // default constructor\r
72 Init();\r
73}\r
74\r
75//_____________________________________________________________________________\r
76AlidNdPtCutAnalysisPbPb::AlidNdPtCutAnalysisPbPb(Char_t* name, Char_t* title): AlidNdPt(name,title),\r
77 fAnalysisFolder(0),\r
78 fEventCount(0),\r
79 fRecEventHist(0),\r
80 fMCEventHist(0),\r
81 fRecMCEventHist(0),\r
10360c58 82 fRecMCTrackHist(0),\r
a26e43aa 83 fCentralityEstimator(0),\r
84 fFolderObj(0)\r
dac20c1b 85{\r
86 // constructor\r
87 Init();\r
88}\r
89\r
90//_____________________________________________________________________________\r
91AlidNdPtCutAnalysisPbPb::~AlidNdPtCutAnalysisPbPb() {\r
92 // \r
93 if(fEventCount) delete fEventCount; fEventCount=0;\r
94 if(fRecEventHist) delete fRecEventHist; fRecEventHist=0;\r
95 if(fMCEventHist) delete fMCEventHist; fMCEventHist=0;\r
96 if(fRecMCEventHist) delete fRecMCEventHist; fRecMCEventHist=0;\r
97 if(fRecMCTrackHist) delete fRecMCTrackHist; fRecMCTrackHist=0;\r
98\r
99 if(fAnalysisFolder) delete fAnalysisFolder; fAnalysisFolder=0;\r
a26e43aa 100 if(fFolderObj) delete fFolderObj; fFolderObj=0;\r
dac20c1b 101}\r
102\r
103//_____________________________________________________________________________\r
104void AlidNdPtCutAnalysisPbPb::Init(){\r
105 //\r
106 // Init histograms\r
107 //\r
10360c58 108 //const Int_t ptNbins = 58; \r
109 //const Double_t ptMin = 0.; \r
110 //const Double_t ptMax = 20.; \r
111 /*\r
dffe2c06 112 Double_t binsPt[ptNbins+1] = {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.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,2.8,3.0,3.2,3.4,3.6,3.8,4.0,4.5,5.0,5.5,6.0,6.5,7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,18.0, 20.};\r
10360c58 113 */\r
114\r
115 // set pt bins\r
116 const Int_t ptNbins = 50;\r
a26e43aa 117 const Double_t ptMin = 1.e-2, ptMax = 100.;\r
10360c58 118 Double_t *binsPt = CreateLogAxis(ptNbins,ptMin,ptMax);\r
119\r
120 // centrality bins\r
121 const Int_t centrNbins = 3;\r
122 const Double_t centrMin = 0, centrMax = 1;\r
a26e43aa 123 Double_t binsCentr[centrNbins+1] = {0.0, 20., 50., 100.};\r
dac20c1b 124\r
125 // \r
126 Int_t binsEventCount[2]={2,2};\r
127 Double_t minEventCount[2]={0,0}; \r
128 Double_t maxEventCount[2]={2,2}; \r
129 fEventCount = new THnSparseF("fEventCount","trig vs trig+vertex",2,binsEventCount,minEventCount,maxEventCount);\r
130 fEventCount->GetAxis(0)->SetTitle("trig");\r
131 fEventCount->GetAxis(1)->SetTitle("trig+vert");\r
132 fEventCount->Sumw2();\r
133\r
134 //Xv:Yv:Zv:ResZv:Mult\r
10360c58 135 Double_t kFact = 0.1;\r
dac20c1b 136\r
137 Int_t binsRecEventHist[5]={80,80,100,80,150};\r
10360c58 138 Double_t minRecEventHist[5]={-1.*kFact,-1.*kFact,-35.,0.,0.}; \r
a26e43aa 139 Double_t maxRecEventHist[5]={1.*kFact,1.*kFact,35.,10.,3000.}; \r
dac20c1b 140 fRecEventHist = new THnSparseF("fRecEventHist","Xv:Yv:Zv:ResZv:Mult",5,binsRecEventHist,minRecEventHist,maxRecEventHist);\r
141 fRecEventHist->GetAxis(0)->SetTitle("Xv (cm)");\r
142 fRecEventHist->GetAxis(1)->SetTitle("Yv (cm)");\r
143 fRecEventHist->GetAxis(2)->SetTitle("Zv (cm)");\r
144 fRecEventHist->GetAxis(3)->SetTitle("ResZv (cm)");\r
145 fRecEventHist->GetAxis(4)->SetTitle("Mult");\r
146 fRecEventHist->Sumw2();\r
147\r
148 //Xv:Yv:Zv\r
149 Int_t binsMCEventHist[3]={80,80,100};\r
150 Double_t minMCEventHist[3]={-0.1,-0.1,-35.}; \r
151 Double_t maxMCEventHist[3]={0.1,0.1,35.}; \r
152 fMCEventHist = new THnSparseF("fMCEventHist","mcXv:mcYv:mcZv",3,binsMCEventHist,minMCEventHist,maxMCEventHist);\r
153 fMCEventHist->GetAxis(0)->SetTitle("mcXv (cm)");\r
154 fMCEventHist->GetAxis(1)->SetTitle("mcYv (cm)");\r
155 fMCEventHist->GetAxis(2)->SetTitle("mcZv (cm)");\r
156 fMCEventHist->Sumw2();\r
157\r
158 //Xv-mcXv:Yv-mcYv:Zv-mcZv:Mult\r
159 Int_t binsRecMCEventHist[4]={100,100,100,150};\r
160 Double_t minRecMCEventHist[4]={-1.0*kFact,-1.0*kFact,-1.0*kFact,0.}; \r
a26e43aa 161 Double_t maxRecMCEventHist[4]={1.0*kFact,1.0*kFact,1.0*kFact,3000.}; \r
dac20c1b 162 fRecMCEventHist = new THnSparseF("fRecMCEventHist","Xv-mcXv:Yv-mcYv:Zv-mcZv:Mult",4,binsRecMCEventHist,minRecMCEventHist,maxRecMCEventHist);\r
163 fRecMCEventHist->GetAxis(0)->SetTitle("Xv-mcXv (cm)");\r
164 fRecMCEventHist->GetAxis(1)->SetTitle("Yv-mcYv (cm)");\r
165 fRecMCEventHist->GetAxis(2)->SetTitle("Zv-mcZv (cm)");\r
166 fRecMCEventHist->GetAxis(3)->SetTitle("Mult");\r
167 fRecMCEventHist->Sumw2();\r
168\r
169 //\r
170 // THnSparse track histograms\r
171 //\r
10360c58 172 //\r
173 //\r
a26e43aa 174 //nCrossRows:chi2PerClust:chi2PerClustITS:nCrossRows/nFindableClust:fracSharedClust:DCAy:DCAz:eta:phi:pt:hasStrangeMother:isFromConversion:isFromMaterial:isPrim:charge:centr:chi2ToTPCc\r
175 Int_t binsRecMCTrackHist[17]= {160, 10, 70, 30, 20, 50, 50, 20, 90, ptNbins, 2, 2, 2, 2, 3, centrNbins,100};\r
176 Double_t minRecMCTrackHist[17]={0., 0., 0., 0., 0.,-0.5,-2.5,-1.0, 0., ptMin, 0., 0., 0., 0.,-1., centrMin, 0.};\r
177 Double_t maxRecMCTrackHist[17]={160.,10.,70.,1.5, 1., 0.5, 2.5, 1.0, 2.*TMath::Pi(), ptMax, 2., 2., 2., 2., 2., centrMax, 100.};\r
10360c58 178\r
a26e43aa 179 fRecMCTrackHist = new THnSparseF("fRecMCTrackHist","nCrossRows:chi2PerClust:chi2PerClustITS:nCrossRows/nFindableClust:fracSharedClust:DCAy:DCAz:eta:phi:pt:hasStrangeMother:isFromConversion:isFromMaterial:isPrim:charge:centr:chi2ToTPCc",17,binsRecMCTrackHist,minRecMCTrackHist,maxRecMCTrackHist);\r
180 fRecMCTrackHist->SetBinEdges(9,binsPt);\r
181 fRecMCTrackHist->SetBinEdges(15,binsCentr);\r
10360c58 182\r
183 fRecMCTrackHist->GetAxis(0)->SetTitle("nCrossRows");\r
184 fRecMCTrackHist->GetAxis(1)->SetTitle("chi2PerClust");\r
a26e43aa 185 fRecMCTrackHist->GetAxis(2)->SetTitle("chi2PerClustITS");\r
186 fRecMCTrackHist->GetAxis(3)->SetTitle("nCrossRows/nFindableClust");\r
187 fRecMCTrackHist->GetAxis(4)->SetTitle("fracSharedClust");\r
188 fRecMCTrackHist->GetAxis(5)->SetTitle("DCAy (cm)");\r
189 fRecMCTrackHist->GetAxis(6)->SetTitle("DCAz (cm)");\r
190 fRecMCTrackHist->GetAxis(7)->SetTitle("#eta");\r
191 fRecMCTrackHist->GetAxis(8)->SetTitle("#phi (rad)");\r
192 fRecMCTrackHist->GetAxis(9)->SetTitle("p_{T} (GeV/c)");\r
193 fRecMCTrackHist->GetAxis(10)->SetTitle("hasStrangeMother");\r
194 fRecMCTrackHist->GetAxis(11)->SetTitle("isFromConversion");\r
195 fRecMCTrackHist->GetAxis(12)->SetTitle("isFromMaterial");\r
196 fRecMCTrackHist->GetAxis(13)->SetTitle("isPrim");\r
197 fRecMCTrackHist->GetAxis(14)->SetTitle("charge");\r
198 fRecMCTrackHist->GetAxis(15)->SetTitle("centrality");\r
199 fRecMCTrackHist->GetAxis(16)->SetTitle("chi2ToTPCc");\r
10360c58 200 fRecMCTrackHist->Sumw2();\r
201\r
dac20c1b 202 // init output folder\r
203 fAnalysisFolder = CreateFolder("folderdNdPt","Analysis dNdPt Folder");\r
204\r
205}\r
206\r
207//_____________________________________________________________________________\r
208void AlidNdPtCutAnalysisPbPb::Process(AliESDEvent *const esdEvent, AliMCEvent * const mcEvent)\r
209{\r
210 //\r
211 // Process real and/or simulated events\r
212 //\r
213 if(!esdEvent) {\r
214 AliDebug(AliLog::kError, "esdEvent not available");\r
215 return;\r
216 }\r
217\r
218 // get selection cuts\r
219 AlidNdPtEventCuts *evtCuts = GetEventCuts(); \r
220 AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts(); \r
221 AliESDtrackCuts *esdTrackCuts = GetTrackCuts(); \r
222\r
223 if(!evtCuts || !accCuts || !esdTrackCuts) {\r
224 AliDebug(AliLog::kError, "cuts not available");\r
225 return;\r
226 }\r
227\r
228 // trigger selection\r
10360c58 229\r
dac20c1b 230 Bool_t isEventTriggered = kTRUE;\r
10360c58 231 AliPhysicsSelection *physicsSelection = NULL;\r
232 AliTriggerAnalysis* triggerAnalysis = NULL;\r
233\r
234 // \r
235 AliInputEventHandler* inputHandler = (AliInputEventHandler*) AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();\r
236 if (!inputHandler)\r
237 {\r
238 Printf("ERROR: Could not receive input handler");\r
239 return;\r
240 }\r
dac20c1b 241\r
242 if(evtCuts->IsTriggerRequired()) \r
243 {\r
10360c58 244 // always MB\r
245 isEventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB;\r
246\r
247 physicsSelection = static_cast<AliPhysicsSelection*> (inputHandler->GetEventSelection());\r
248 if(!physicsSelection) return;\r
249 //SetPhysicsTriggerSelection(physicsSelection);\r
250\r
251 if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) {\r
252 // set trigger (V0AND)\r
253 triggerAnalysis = physicsSelection->GetTriggerAnalysis();\r
254 if(!triggerAnalysis) return;\r
255 isEventTriggered = triggerAnalysis->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
dac20c1b 256 }\r
10360c58 257 }\r
dac20c1b 258\r
10360c58 259 // centrality determination\r
260 Float_t centralityF = -1;\r
261 AliCentrality *esdCentrality = esdEvent->GetCentrality();\r
262 centralityF = esdCentrality->GetCentralityPercentile(fCentralityEstimator.Data());\r
dac20c1b 263\r
264 // use MC information\r
265 AliHeader* header = 0;\r
266 AliGenEventHeader* genHeader = 0;\r
267 AliStack* stack = 0;\r
268 TArrayF vtxMC(3);\r
269\r
270 Int_t multMCTrueTracks = 0;\r
271 if(IsUseMCInfo())\r
272 {\r
273 //\r
274 if(!mcEvent) {\r
275 AliDebug(AliLog::kError, "mcEvent not available");\r
276 return;\r
277 }\r
278 // get MC event header\r
279 header = mcEvent->Header();\r
280 if (!header) {\r
281 AliDebug(AliLog::kError, "Header not available");\r
282 return;\r
283 }\r
284 // MC particle stack\r
285 stack = mcEvent->Stack();\r
286 if (!stack) {\r
287 AliDebug(AliLog::kError, "Stack not available");\r
288 return;\r
289 }\r
290\r
291 // get MC vertex\r
292 genHeader = header->GenEventHeader();\r
293 if (!genHeader) {\r
294 AliDebug(AliLog::kError, "Could not retrieve genHeader from Header");\r
295 return;\r
296 }\r
297 genHeader->PrimaryVertex(vtxMC);\r
298\r
299 Double_t vMCEventHist[3]={vtxMC[0],vtxMC[1],vtxMC[2]};\r
300 fMCEventHist->Fill(vMCEventHist);\r
301\r
302 // multipliticy of all MC primary tracks\r
303 // in Zv, pt and eta ranges)\r
304 multMCTrueTracks = AlidNdPtHelper::GetMCTrueTrackMult(mcEvent,evtCuts,accCuts);\r
305\r
306 } // end bUseMC\r
307\r
308 // get reconstructed vertex \r
309 const AliESDVertex* vtxESD = 0; \r
62e3b4b6 310 if(GetAnalysisMode() == AlidNdPtHelper::kTPC) {\r
dffe2c06 311 vtxESD = esdEvent->GetPrimaryVertexTPC();\r
62e3b4b6 312 }\r
313 else if(GetAnalysisMode() == AlidNdPtHelper::kTPCITS) {\r
314 vtxESD = esdEvent->GetPrimaryVertexTracks();\r
315 }\r
316 else {\r
82292e7f 317 return;\r
dac20c1b 318 }\r
62e3b4b6 319\r
320 if(!vtxESD) return;\r
321\r
82292e7f 322 Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD); \r
dac20c1b 323 //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered);\r
324 //printf("GetAnalysisMode() %d \n",GetAnalysisMode());\r
325\r
326 TObjArray *allChargedTracks=0;\r
327 Int_t multAll=0;\r
328 \r
329 //\r
330 // event counter\r
331 // \r
332 //printf("isEventOK %d, isEventTriggered %d \n",isEventOK,isEventTriggered);\r
333\r
334 Bool_t isTrigAndVertex = isEventTriggered && isEventOK;\r
335 Double_t vEventCount[2] = { isEventTriggered, isTrigAndVertex};\r
336 fEventCount->Fill(vEventCount);\r
337\r
dac20c1b 338 // check event cuts\r
339 if(isEventOK && isEventTriggered)\r
340 {\r
341 // get all charged tracks\r
342 allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode());\r
343 if(!allChargedTracks) return;\r
344\r
345 Int_t entries = allChargedTracks->GetEntries();\r
346 for(Int_t i=0; i<entries;++i) \r
347 {\r
348 AliESDtrack *track = (AliESDtrack*)allChargedTracks->At(i);\r
349 if(!track) continue;\r
350\r
82292e7f 351 if(!esdTrackCuts->AcceptTrack(track)) continue;\r
a26e43aa 352 if(!accCuts->AcceptTrack(track)) continue;\r
353\r
354 FillHistograms(esdEvent, track, stack, centralityF);\r
dac20c1b 355 multAll++;\r
a26e43aa 356\r
dac20c1b 357 }\r
358\r
359 Double_t vRecEventHist[5] = {vtxESD->GetXv(),vtxESD->GetYv(),vtxESD->GetZv(),vtxESD->GetZRes(),multAll};\r
360 fRecEventHist->Fill(vRecEventHist);\r
361\r
362 if(IsUseMCInfo()) {\r
363 Double_t vRecMCEventHist[5] = {vtxESD->GetXv()-vtxMC[0],vtxESD->GetYv()-vtxMC[1],vtxESD->GetZv()-vtxMC[2],multAll};\r
364 fRecMCEventHist->Fill(vRecMCEventHist);\r
365 }\r
366 }\r
367\r
368 if(allChargedTracks) delete allChargedTracks; allChargedTracks = 0;\r
369\r
370}\r
371\r
372//_____________________________________________________________________________\r
a26e43aa 373void AlidNdPtCutAnalysisPbPb::FillHistograms(AliESDEvent *const esdEvent, AliESDtrack *const esdTrack, AliStack *const stack, Float_t centralityF) const\r
dac20c1b 374{\r
375 //\r
376 // Fill ESD track and MC histograms \r
377 //\r
378 if(!esdTrack) return;\r
379 if(esdTrack->Charge() == 0.) return;\r
380\r
381 Float_t pt = esdTrack->Pt();\r
382 Float_t eta = esdTrack->Eta();\r
383 Float_t phi = esdTrack->Phi();\r
d1c6e451 384\r
385 Int_t nClust = 0;\r
386 if(GetAnalysisMode() == AlidNdPtHelper::kTPC) { \r
387 nClust = esdTrack->GetTPCNclsIter1();\r
388 } else {\r
389 nClust = esdTrack->GetTPCclusters(0);\r
390 }\r
dac20c1b 391\r
392 Float_t chi2PerCluster = 0.;\r
d1c6e451 393 if(GetAnalysisMode() == AlidNdPtHelper::kTPC) { \r
394 if(nClust>0.) chi2PerCluster = esdTrack->GetTPCchi2Iter1()/Float_t(nClust);\r
395 } else {\r
396 chi2PerCluster = esdTrack->GetTPCchi2()/Float_t(nClust);\r
397 }\r
dac20c1b 398\r
a26e43aa 399 Int_t nClustersITS = esdTrack->GetITSclusters(0);\r
400 Float_t chi2PerClusterITS = -1;\r
401 if (nClustersITS!=0) {\r
402 chi2PerClusterITS = esdTrack->GetITSchi2()/Float_t(nClustersITS);\r
403 }\r
404\r
dac20c1b 405 Float_t clustPerFindClust = 0.;\r
d1c6e451 406 Int_t nFindableClust = esdTrack->GetTPCNclsF();\r
dac20c1b 407 if(nFindableClust>0.) clustPerFindClust = Float_t(nClust)/nFindableClust;\r
408\r
409 Float_t b[2], bCov[3];\r
410 esdTrack->GetImpactParameters(b,bCov);\r
411\r
10360c58 412 // \r
413 Float_t nCrossedRowsTPC = esdTrack->GetTPCClusterInfo(2,1);\r
414\r
415 Float_t ratioCrossedRowsOverFindableClustersTPC = 1.0;\r
416 if (esdTrack->GetTPCNclsF()>0) {\r
417 ratioCrossedRowsOverFindableClustersTPC = esdTrack->GetTPCClusterInfo(2,1)/esdTrack->GetTPCNclsF();\r
418 }\r
419\r
420 //\r
421 Int_t nClustersTPCShared = esdTrack->GetTPCnclsS();\r
422 Float_t fracClustersTPCShared = -1.;\r
423 fracClustersTPCShared = Float_t(nClustersTPCShared)/Float_t(nClust);\r
424\r
425 // \r
dac20c1b 426 // kink idx\r
427 Int_t kinkIdx = 0;\r
428 //if(esdTrack->GetKinkIndex(0) > 0.) isKink = kTRUE;\r
429 if(esdTrack->GetKinkIndex(0) > 0) kinkIdx = 1; // kink daughter\r
430 else if(esdTrack->GetKinkIndex(0) < 0) kinkIdx = -1; // kink mother\r
431 else kinkIdx = 0; // not kink\r
432\r
433 //printf("esdTrack->GetKinkIndex(0) %d \n", esdTrack->GetKinkIndex(0));\r
434 //printf("esdTrack->GetKinkIndex(1) %d \n", esdTrack->GetKinkIndex(1));\r
435 //printf("esdTrack->GetKinkIndex(2) %d \n", esdTrack->GetKinkIndex(2));\r
436 //printf("kinkIdx %d \n", kinkIdx);\r
437\r
a26e43aa 438 Bool_t isOK = kTRUE;\r
439 AliExternalTrackParam * tpcInner = (AliExternalTrackParam *)(esdTrack->GetTPCInnerParam());\r
440 if (!tpcInner) return;\r
441 tpcInner->Rotate(esdTrack->GetAlpha());\r
442 tpcInner->PropagateTo(esdTrack->GetX(),esdEvent->GetMagneticField());\r
443 \r
444 // tpc constrained\r
445 AliExternalTrackParam * tpcInnerC = (AliExternalTrackParam *)(esdTrack->GetTPCInnerParam()->Clone());\r
446 if (!tpcInnerC) return;\r
447 tpcInnerC->Rotate(esdTrack->GetAlpha());\r
448 tpcInnerC->PropagateTo(esdTrack->GetX(),esdEvent->GetMagneticField());\r
449 Double_t dz[2],cov[3];\r
450 AliESDVertex *vtx= (AliESDVertex *)esdEvent->GetPrimaryVertex();\r
451\r
452 if (!tpcInnerC->PropagateToDCA(vtx, esdEvent->GetMagneticField(), 3, dz, cov)) \r
453 { \r
454 if(tpcInnerC) delete tpcInnerC; \r
455 return;\r
456 }\r
457 Double_t covar[6]; vtx->GetCovMatrix(covar);\r
458 Double_t p[2]={tpcInnerC->GetParameter()[0]-dz[0],tpcInnerC->GetParameter()[1]-dz[1]};\r
459 Double_t c[3]={covar[2],0.,covar[5]};\r
460 Double_t chi2C=tpcInnerC->GetPredictedChi2(p,c);\r
461 isOK = tpcInnerC->Update(p,c);\r
462 isOK = tpcInnerC->Rotate(esdTrack->GetAlpha());\r
463 isOK = tpcInnerC->Propagate(esdTrack->GetAlpha(),esdTrack->GetX(),esdEvent->GetMagneticField());\r
464\r
465 if(!isOK || chi2C>kVeryBig) { \r
466 if(tpcInnerC) delete tpcInnerC; \r
467 return;\r
468 }\r
469\r
470 //\r
471 // calculate chi2 between vi and vj vectors\r
472 // with covi and covj covariance matrices\r
473 // chi2ij = (vi-vj)^(T)*(covi+covj)^(-1)*(vi-vj)\r
474 //\r
475 TMatrixD deltaT(5,1);\r
476 TMatrixD delta(1,5);\r
477 TMatrixD covarM(5,5);\r
478\r
479 for (Int_t ipar=0; ipar<5; ipar++) deltaT(ipar,0)=tpcInnerC->GetParameter()[ipar]-esdTrack->GetParameter()[ipar];\r
480 for (Int_t ipar=0; ipar<5; ipar++) delta(0,ipar)=tpcInnerC->GetParameter()[ipar]-esdTrack->GetParameter()[ipar];\r
481\r
482 for (Int_t ipar=0; ipar<5; ipar++) {\r
483 for (Int_t jpar=0; jpar<5; jpar++) {\r
484 Int_t index=esdTrack->GetIndex(ipar,jpar);\r
485 covarM(ipar,jpar)=esdTrack->GetCovariance()[index]+tpcInnerC->GetCovariance()[index];\r
486 }\r
487 }\r
488 TMatrixD covarMInv = covarM.Invert();\r
489 TMatrixD mat2 = covarMInv*deltaT;\r
490 TMatrixD chi2 = delta*mat2; \r
491\r
dac20c1b 492 //\r
493 // Fill rec vs MC information\r
494 //\r
495 Bool_t isPrim = kTRUE;\r
dffe2c06 496 Bool_t hasStrangeMother = kFALSE;\r
6a01c05f 497 Bool_t isFromMaterial = kFALSE;\r
a26e43aa 498 Bool_t isFromConversion = kFALSE;\r
dac20c1b 499\r
a26e43aa 500 if(IsUseMCInfo()) \r
501 {\r
dac20c1b 502 if(!stack) return;\r
503 Int_t label = TMath::Abs(esdTrack->GetLabel()); \r
504 TParticle* particle = stack->Particle(label);\r
505 if(!particle) return;\r
506 if(particle->GetPDG() && particle->GetPDG()->Charge()==0.) return;\r
507 isPrim = stack->IsPhysicalPrimary(label);\r
508\r
e84b59cb 509 // check whether has stange mother\r
510 //\r
511 Int_t motherPdg = -1; \r
512 TParticle* mother = 0; \r
513 \r
514 Int_t motherLabel = particle->GetMother(0); \r
515 if(motherLabel>0) mother = stack->Particle(motherLabel); \r
516 if(mother) motherPdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only \r
517 Int_t mech = particle->GetUniqueID(); // production mechanism \r
dffe2c06 518\r
a26e43aa 519 // K+-, lambda, antilambda, K0s decays\r
520 if(!isPrim && mech==4 && \r
521 (TMath::Abs(motherPdg)==kKPlus || TMath::Abs(motherPdg)==kLambda0 || motherPdg==kK0Short))\r
522 {\r
523 hasStrangeMother = kTRUE;\r
524 } \r
525\r
526 if(!isPrim && mech==5 && motherPdg==kGamma) { \r
527 isFromConversion=kTRUE; \r
528 }\r
529\r
530 if(!isPrim && mech==13) { \r
531 isFromMaterial=kTRUE; \r
532 }\r
dac20c1b 533 }\r
534 \r
535 // fill histo\r
6a01c05f 536 Int_t charge = esdTrack->Charge();\r
a26e43aa 537 Double_t vRecMCTrackHist[17] = { nCrossedRowsTPC, chi2PerCluster, chi2PerClusterITS,ratioCrossedRowsOverFindableClustersTPC, fracClustersTPCShared, b[0], b[1], eta, phi, pt, hasStrangeMother, isFromConversion, isFromMaterial, isPrim, charge, centralityF, chi2(0,0) }; \r
dac20c1b 538 fRecMCTrackHist->Fill(vRecMCTrackHist);\r
a26e43aa 539\r
540 if(tpcInnerC) delete tpcInnerC;\r
dac20c1b 541}\r
542\r
543//_____________________________________________________________________________\r
544Long64_t AlidNdPtCutAnalysisPbPb::Merge(TCollection* const list) \r
545{\r
546 // Merge list of objects (needed by PROOF)\r
547\r
548 if (!list)\r
549 return 0;\r
550\r
551 if (list->IsEmpty())\r
552 return 1;\r
553\r
554 TIterator* iter = list->MakeIterator();\r
555 TObject* obj = 0;\r
a26e43aa 556 TObjArray* objArrayList = 0;\r
557 objArrayList = new TObjArray();\r
dac20c1b 558\r
559 //TList *collPhysSelection = new TList;\r
560\r
561 // collection of generated histograms\r
562 Int_t count=0;\r
563 while((obj = iter->Next()) != 0) {\r
564 AlidNdPtCutAnalysisPbPb* entry = dynamic_cast<AlidNdPtCutAnalysisPbPb*>(obj);\r
565 if (entry == 0) continue; \r
566 \r
567 // event histo\r
a26e43aa 568 if(GetMergeTHnSparse()) \r
569 {\r
570 fEventCount->Add(entry->fEventCount);\r
571 fRecEventHist->Add(entry->fRecEventHist);\r
572 fRecMCEventHist->Add(entry->fRecMCEventHist);\r
573 fMCEventHist->Add(entry->fMCEventHist);\r
dac20c1b 574\r
a26e43aa 575 // track histo\r
576 fRecMCTrackHist->Add(entry->fRecMCTrackHist);\r
577 }\r
dac20c1b 578\r
a26e43aa 579 if (entry->fFolderObj) { objArrayList->Add(entry->fFolderObj); }\r
dac20c1b 580 \r
581 count++;\r
582 }\r
a26e43aa 583 if (fFolderObj) { fFolderObj->Merge(objArrayList); } \r
584\r
585 // to signal that track histos were not merged: reset\r
586 if (!GetMergeTHnSparse()) \r
587 { \r
588 // reset content \r
589 // save memory\r
590 fEventCount->Reset();\r
591 fRecEventHist->Reset();\r
592 fRecMCEventHist->Reset();\r
593 fMCEventHist->Reset();\r
dac20c1b 594\r
a26e43aa 595 // track histo\r
596 fRecMCTrackHist->Reset();\r
597 }\r
dac20c1b 598\r
a26e43aa 599 // delete\r
600 if (objArrayList) delete objArrayList; objArrayList=0;\r
dac20c1b 601\r
602return count;\r
603}\r
604\r
605//_____________________________________________________________________________\r
606void AlidNdPtCutAnalysisPbPb::Analyse() \r
607{\r
608 //\r
609 // Analyse histograms\r
610 //\r
611 TH1::AddDirectory(kFALSE);\r
612 TObjArray *aFolderObj = new TObjArray;\r
b4cdc39d 613 if(!aFolderObj) return;\r
614\r
dac20c1b 615 TH1D *h1D = 0; \r
616 TH2D *h2D = 0; \r
a26e43aa 617 TH3D *h3D = 0; \r
618 \r
dac20c1b 619 //\r
a26e43aa 620 // make event level projection\r
dac20c1b 621 //\r
a26e43aa 622 //THnSparseF *fEventCount; //-> trig, trig + vertex\r
623 //THnSparseF *fRecEventHist; //-> Xv:Yv:Zv:ResZv:Mult\r
624 //THnSparseF *fMCEventHist; //-> mcXv:mcYv:mcZv\r
625 //THnSparseF *fRecMCEventHist; //-> Xv-mcXv:Yv-mcYv:Zv-mcZv:Mult\r
dac20c1b 626\r
627 //\r
628 // Event counters\r
629 //\r
630 h2D = (TH2D*)fEventCount->Projection(0,1);\r
631 h2D->SetName("trig_vs_trigANDvertex");\r
a26e43aa 632 h2D->SetTitle("trig_vs_trigANDvertex");\r
dac20c1b 633 aFolderObj->Add(h2D);\r
634\r
635 fEventCount->GetAxis(0)->SetRange(2,2); // triggered\r
636 h1D = (TH1D*)fEventCount->Projection(1);\r
637 h1D->SetTitle("rec. vertex for triggered events");\r
638 h1D->SetName("trigANDvertex");\r
a26e43aa 639 h1D->SetTitle("trigANDvertex");\r
dac20c1b 640 aFolderObj->Add(h1D);\r
641\r
642 //\r
643 // Create rec. event histograms\r
644 //\r
645 h1D = (TH1D *)fRecEventHist->Projection(0);\r
646 h1D->SetName("rec_xv");\r
a26e43aa 647 h1D->SetTitle("rec_xv");\r
dac20c1b 648 aFolderObj->Add(h1D);\r
649\r
650 h1D = (TH1D *)fRecEventHist->Projection(1);\r
651 h1D->SetName("rec_yv");\r
a26e43aa 652 h1D->SetTitle("rec_yv");\r
dac20c1b 653 aFolderObj->Add(h1D);\r
654\r
655 h1D = (TH1D *)fRecEventHist->Projection(2);\r
656 h1D->SetName("rec_zv");\r
a26e43aa 657 h1D->SetTitle("rec_zv");\r
dac20c1b 658 aFolderObj->Add(h1D);\r
659\r
dac20c1b 660 h2D = (TH2D *)fRecEventHist->Projection(0,1);\r
661 h2D->SetName("rec_xv_vs_yv");\r
a26e43aa 662 h2D->SetTitle("rec_xv_vs_yv");\r
663 aFolderObj->Add(h2D);\r
664\r
665 h2D = (TH2D *)fRecEventHist->Projection(1,2);\r
666 h2D->SetName("rec_yv_vs_zv");\r
667 h2D->SetTitle("rec_yv_vs_zv");\r
dac20c1b 668 aFolderObj->Add(h2D);\r
669\r
670 h2D = (TH2D *)fRecEventHist->Projection(0,2);\r
671 h2D->SetName("rec_xv_vs_zv");\r
a26e43aa 672 h2D->SetTitle("rec_xv_vs_zv");\r
dac20c1b 673 aFolderObj->Add(h2D);\r
674\r
675 h2D = (TH2D *)fRecEventHist->Projection(3,4);\r
676 h2D->SetName("rec_resZv_vs_Mult");\r
a26e43aa 677 h2D->SetTitle("rec_resZv_vs_Mult");\r
dac20c1b 678 aFolderObj->Add(h2D);\r
679\r
680 //\r
681 // MC available\r
682 //\r
683 if(IsUseMCInfo()) {\r
684\r
685 //\r
686 // Create mc event histograms\r
687 //\r
a26e43aa 688\r
689 h1D = (TH1D *)fMCEventHist->Projection(0);\r
690 h1D->SetName("mc_xv");\r
691 h1D->SetTitle("mc_xv");\r
692 aFolderObj->Add(h1D);\r
693\r
694 h1D = (TH1D *)fMCEventHist->Projection(1);\r
695 h1D->SetName("mc_yv");\r
696 h1D->SetTitle("mc_yv");\r
697 aFolderObj->Add(h1D);\r
698\r
699 h1D = (TH1D *)fMCEventHist->Projection(2);\r
700 h1D->SetName("mc_zv");\r
701 h1D->SetTitle("mc_zv");\r
702 aFolderObj->Add(h1D);\r
703\r
704\r
dac20c1b 705 h2D = (TH2D *)fMCEventHist->Projection(0,1);\r
706 h2D->SetName("mc_xv_vs_yv");\r
a26e43aa 707 h2D->SetTitle("mc_xv_vs_yv");\r
708 aFolderObj->Add(h2D);\r
709\r
710 h2D = (TH2D *)fMCEventHist->Projection(1,2);\r
711 h2D->SetName("mc_yv_vs_zv");\r
712 h2D->SetTitle("mc_yv_vs_zv");\r
dac20c1b 713 aFolderObj->Add(h2D);\r
714\r
715 h2D = (TH2D *)fMCEventHist->Projection(0,2);\r
716 h2D->SetName("mc_xv_vs_zv");\r
a26e43aa 717 h2D->SetTitle("mc_xv_vs_zv");\r
dac20c1b 718 aFolderObj->Add(h2D);\r
719\r
720 //\r
721 // Create rec-mc event histograms\r
722 //\r
723 h2D = (TH2D *)fRecMCEventHist->Projection(0,3);\r
724 h2D->SetName("rec_mc_deltaXv_vs_mult");\r
a26e43aa 725 h2D->SetTitle("rec_mc_deltaXv_vs_mult");\r
dac20c1b 726 aFolderObj->Add(h2D);\r
727\r
728 h2D = (TH2D *)fRecMCEventHist->Projection(1,3);\r
729 h2D->SetName("rec_mc_deltaYv_vs_mult");\r
a26e43aa 730 h2D->SetTitle("rec_mc_deltaYv_vs_mult");\r
dac20c1b 731 aFolderObj->Add(h2D);\r
732\r
733 h2D = (TH2D *)fRecMCEventHist->Projection(2,3);\r
734 h2D->SetName("rec_mc_deltaZv_vs_mult");\r
a26e43aa 735 h2D->SetTitle("rec_mc_deltaZv_vs_mult");\r
dac20c1b 736 aFolderObj->Add(h2D);\r
737\r
738 } // end use MC info \r
739\r
a26e43aa 740 //\r
741 // make track level projection\r
742 //\r
743 // THnSparse track histograms\r
744 // nCrossRows:chi2PerClust:chi2PerClustITS:nCrossRows/nFindableClust:fracSharedClust:DCAy:DCAz:eta:phi:pt:hasStrangeMother:isFromConversion:isFromMaterial:isPrim:charge:centr:chi2ToTPCc\r
745 //\r
746\r
747 // only TH3 histograms\r
748 // x : pT : centr\r
749 Double_t minNCrossRows = 120.;\r
750 Double_t maxChi2PerClust = 4.;\r
751 Double_t maxChi2PerClustITS = 36.;\r
752 Double_t minNCrossRowsOverFindable = 0.8;\r
753 Double_t maxFracSharedClust = 0.4;\r
754 Double_t minDCAr = -0.2, maxDCAr = 0.2;\r
755 Double_t minDCAz = -2., maxDCAz = 2.;\r
756 Double_t minEta = -0.8, maxEta = 0.8;\r
757 Double_t maxChi2ToTPCc = 50;\r
758\r
759 // only TH3 histograms\r
760 // x : pT : centr\r
761\r
762 // set all cuts\r
763 fRecMCTrackHist->GetAxis(0)->SetRangeUser(minNCrossRows,160);\r
764 fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,maxChi2PerClust-0.0001);\r
765 fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,maxChi2PerClustITS-0.0001);\r
766 fRecMCTrackHist->GetAxis(3)->SetRangeUser(minNCrossRowsOverFindable,1.4999);\r
767 fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,maxFracSharedClust-0.0001);\r
768 fRecMCTrackHist->GetAxis(5)->SetRangeUser(minDCAr,maxDCAr-0.0001);\r
769 fRecMCTrackHist->GetAxis(6)->SetRangeUser(minDCAz,maxDCAz-0.0001);\r
770 fRecMCTrackHist->GetAxis(7)->SetRangeUser(minEta,maxEta-0.0001);\r
771 fRecMCTrackHist->GetAxis(16)->SetRangeUser(0.,maxChi2ToTPCc-0.0001);\r
772\r
773 // nCrossRows \r
774 fRecMCTrackHist->GetAxis(0)->SetRangeUser(0,160);\r
775\r
776 h3D = (TH3D *)fRecMCTrackHist->Projection(0,9,15);\r
777 h3D->SetName("rec_nCrossRows_pT_centr");\r
778 h3D->SetTitle("rec_nCrossRows_pT_centr");\r
779 aFolderObj->Add(h3D);\r
780\r
781\r
782 // Chi2PerClust \r
783 fRecMCTrackHist->GetAxis(0)->SetRangeUser(minNCrossRows,160);\r
784 fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,10);\r
785\r
786 h3D = (TH3D *)fRecMCTrackHist->Projection(1,9,15);\r
787 h3D->SetName("rec_Chi2PerClust_pT_centr");\r
788 h3D->SetTitle("rec_Chi2PerClust_pT_centr");\r
789 aFolderObj->Add(h3D);\r
790\r
791\r
792 // Chi2PerClustITS \r
793 fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,maxChi2PerClust-0.0001);\r
794 fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,100);\r
795\r
796 h3D = (TH3D *)fRecMCTrackHist->Projection(2,9,15);\r
797 h3D->SetName("rec_Chi2PerClustITS_pT_centr");\r
798 h3D->SetTitle("rec_Chi2PerClustITS_pT_centr");\r
799 aFolderObj->Add(h3D);\r
800\r
801\r
802 // NCrossRowsOverFindable \r
803 fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,maxChi2PerClustITS-0.0001);\r
804 fRecMCTrackHist->GetAxis(3)->SetRangeUser(0,1.4999);\r
805\r
806 h3D = (TH3D *)fRecMCTrackHist->Projection(3,9,15);\r
807 h3D->SetName("rec_NCrossRowsOverFindable_pT_centr");\r
808 h3D->SetTitle("rec_NCrossRowsOverFindable_pT_centr");\r
809 aFolderObj->Add(h3D);\r
810\r
dac20c1b 811\r
a26e43aa 812 // FracSharedClust\r
813 fRecMCTrackHist->GetAxis(3)->SetRangeUser(minNCrossRowsOverFindable,1.4999);\r
814 fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,0.9999);\r
dac20c1b 815\r
a26e43aa 816 h3D = (TH3D *)fRecMCTrackHist->Projection(4,9,15);\r
817 h3D->SetName("rec_FracSharedClust_pT_centr");\r
818 h3D->SetTitle("rec_FracSharedClust_pT_centr");\r
819 aFolderObj->Add(h3D);\r
820\r
821\r
822 // DCAr\r
823 fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,maxFracSharedClust-0.0001);\r
824 fRecMCTrackHist->GetAxis(5)->SetRangeUser(-10.,9.9999);\r
825\r
826 h3D = (TH3D *)fRecMCTrackHist->Projection(5,9,15);\r
827 h3D->SetName("rec_DCAr_pT_centr");\r
828 h3D->SetTitle("rec_DCAr_pT_centr");\r
829 aFolderObj->Add(h3D);\r
830\r
831 // DCAz\r
832 fRecMCTrackHist->GetAxis(5)->SetRangeUser(minDCAr,maxDCAr-0.0001);\r
833 fRecMCTrackHist->GetAxis(6)->SetRangeUser(-10.,9.9999);\r
834\r
835 h3D = (TH3D *)fRecMCTrackHist->Projection(6,9,15);\r
836 h3D->SetName("rec_DCAz_pT_centr");\r
837 h3D->SetTitle("rec_DCAz_pT_centr");\r
838 aFolderObj->Add(h3D);\r
839\r
840 // chi2ToTPCc\r
841 fRecMCTrackHist->GetAxis(6)->SetRangeUser(minDCAz,maxDCAz-0.0001);\r
842 fRecMCTrackHist->GetAxis(16)->SetRangeUser(0,100);\r
843\r
844 h3D = (TH3D *)fRecMCTrackHist->Projection(16,9,15);\r
845 h3D->SetName("rec_chi2ToTPCc_pT_centr");\r
846 h3D->SetTitle("rec_chi2ToTPCc_pT_centr");\r
847 aFolderObj->Add(h3D);\r
848\r
849\r
850 //\r
851 // MC available\r
852 //\r
853 // nCrossRows:chi2PerClust:chi2PerClustITS:nCrossRows/nFindableClust:fracSharedClust:DCAy:DCAz:eta:phi:pt:hasStrangeMother:isFromConversion:isFromMaterial:isPrim:charge:centr:chi2ToTPCc\r
854 //\r
855\r
856 if(IsUseMCInfo()) {\r
857 //\r
858 // only TH3 histograms \r
859 // x : pT : centr\r
dac20c1b 860 //\r
a26e43aa 861 // comes from week decays\r
dac20c1b 862 //\r
a26e43aa 863 fRecMCTrackHist->GetAxis(10)->SetRange(2,2);\r
dac20c1b 864\r
a26e43aa 865 // set all cuts\r
866 fRecMCTrackHist->GetAxis(0)->SetRangeUser(minNCrossRows,160);\r
867 fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,maxChi2PerClust-0.0001);\r
868 fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,maxChi2PerClustITS-0.0001);\r
869 fRecMCTrackHist->GetAxis(3)->SetRangeUser(minNCrossRowsOverFindable,1.4999);\r
870 fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,maxFracSharedClust-0.0001);\r
871 fRecMCTrackHist->GetAxis(5)->SetRangeUser(minDCAr,maxDCAr-0.0001);\r
872 fRecMCTrackHist->GetAxis(6)->SetRangeUser(minDCAz,maxDCAz-0.0001);\r
873 fRecMCTrackHist->GetAxis(7)->SetRangeUser(minEta,maxEta-0.0001);\r
874 fRecMCTrackHist->GetAxis(16)->SetRangeUser(0.,maxChi2ToTPCc-0.0001);\r
dac20c1b 875\r
a26e43aa 876 // nCrossRows \r
877 fRecMCTrackHist->GetAxis(0)->SetRangeUser(0,160);\r
dac20c1b 878\r
a26e43aa 879 h3D = (TH3D *)fRecMCTrackHist->Projection(0,9,15);\r
880 h3D->SetName("rec_sec_strange_nCrossRows_pT_centr");\r
881 h3D->SetTitle("rec_sec_strange_nCrossRows_pT_centr");\r
882 aFolderObj->Add(h3D);\r
dac20c1b 883\r
a26e43aa 884 // Chi2PerClust \r
885 fRecMCTrackHist->GetAxis(0)->SetRangeUser(minNCrossRows,160);\r
886 fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,10);\r
dac20c1b 887\r
a26e43aa 888 h3D = (TH3D *)fRecMCTrackHist->Projection(1,9,15);\r
889 h3D->SetName("rec_sec_strange_Chi2PerClust_pT_centr");\r
890 h3D->SetTitle("rec_sec_strange_Chi2PerClust_pT_centr");\r
891 aFolderObj->Add(h3D);\r
dac20c1b 892\r
a26e43aa 893 // Chi2PerClustITS \r
894 fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,maxChi2PerClust-0.0001);\r
895 fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,100);\r
896\r
897 h3D = (TH3D *)fRecMCTrackHist->Projection(2,9,15);\r
898 h3D->SetName("rec_sec_strange_Chi2PerClustITS_pT_centr");\r
899 h3D->SetTitle("rec_sec_strange_Chi2PerClustITS_pT_centr");\r
900 aFolderObj->Add(h3D);\r
901\r
902\r
903 // NCrossRowsOverFindable \r
904 fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,maxChi2PerClustITS-0.0001);\r
905 fRecMCTrackHist->GetAxis(3)->SetRangeUser(0,1.4999);\r
906\r
907 h3D = (TH3D *)fRecMCTrackHist->Projection(3,9,15);\r
908 h3D->SetName("rec_sec_strange_NCrossRowsOverFindable_pT_centr");\r
909 h3D->SetTitle("rec_sec_strange_NCrossRowsOverFindable_pT_centr");\r
910 aFolderObj->Add(h3D);\r
911\r
912\r
913 // FracSharedClust\r
914 fRecMCTrackHist->GetAxis(3)->SetRangeUser(minNCrossRowsOverFindable,1.4999);\r
915 fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,0.9999);\r
916\r
917 h3D = (TH3D *)fRecMCTrackHist->Projection(4,9,15);\r
918 h3D->SetName("rec_sec_strange_FracSharedClust_pT_centr");\r
919 h3D->SetTitle("rec_sec_strange_FracSharedClust_pT_centr");\r
920 aFolderObj->Add(h3D);\r
dac20c1b 921\r
dac20c1b 922\r
a26e43aa 923 // DCAr\r
924 fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,maxFracSharedClust-0.0001);\r
925 fRecMCTrackHist->GetAxis(5)->SetRangeUser(-10.,9.9999);\r
926\r
927 h3D = (TH3D *)fRecMCTrackHist->Projection(5,9,15);\r
928 h3D->SetName("rec_sec_strange_DCAr_pT_centr");\r
929 h3D->SetTitle("rec_sec_strange_DCAr_pT_centr");\r
930 aFolderObj->Add(h3D);\r
931\r
932\r
933 // DCAz\r
934 fRecMCTrackHist->GetAxis(5)->SetRangeUser(minDCAr,maxDCAr-0.0001);\r
935 fRecMCTrackHist->GetAxis(6)->SetRangeUser(-10.,9.9999);\r
936\r
937 h3D = (TH3D *)fRecMCTrackHist->Projection(6,9,15);\r
938 h3D->SetName("rec_sec_strange_DCAz_pT_centr");\r
939 h3D->SetTitle("rec_sec_strange_DCAz_pT_centr");\r
940 aFolderObj->Add(h3D);\r
941\r
942 // chi2ToTPCc\r
943 fRecMCTrackHist->GetAxis(6)->SetRangeUser(minDCAz,maxDCAz-0.0001);\r
944 fRecMCTrackHist->GetAxis(16)->SetRangeUser(0,100);\r
945\r
946 h3D = (TH3D *)fRecMCTrackHist->Projection(16,9,15);\r
947 h3D->SetName("rec_sec_strange_chi2ToTPCc_pT_centr");\r
948 h3D->SetTitle("rec_sec_strange_chi2ToTPCc_pT_centr");\r
949 aFolderObj->Add(h3D);\r
950\r
951\r
952 // only TH3 histograms \r
953 // x : pT : centr\r
dac20c1b 954 //\r
dac20c1b 955\r
a26e43aa 956 // comes from conversion\r
957 //\r
958 fRecMCTrackHist->GetAxis(10)->SetRange(1,2);\r
959 fRecMCTrackHist->GetAxis(11)->SetRange(2,2);\r
dac20c1b 960\r
a26e43aa 961 // set all cuts\r
962 fRecMCTrackHist->GetAxis(0)->SetRangeUser(minNCrossRows,160);\r
963 fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,maxChi2PerClust-0.0001);\r
964 fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,maxChi2PerClustITS-0.0001);\r
965 fRecMCTrackHist->GetAxis(3)->SetRangeUser(minNCrossRowsOverFindable,1.4999);\r
966 fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,maxFracSharedClust-0.0001);\r
967 fRecMCTrackHist->GetAxis(5)->SetRangeUser(minDCAr,maxDCAr-0.0001);\r
968 fRecMCTrackHist->GetAxis(6)->SetRangeUser(minDCAz,maxDCAz-0.0001);\r
969 fRecMCTrackHist->GetAxis(7)->SetRangeUser(minEta,maxEta-0.0001);\r
970 fRecMCTrackHist->GetAxis(16)->SetRangeUser(0.,maxChi2ToTPCc-0.0001);\r
dac20c1b 971\r
a26e43aa 972 // nCrossRows \r
973 fRecMCTrackHist->GetAxis(0)->SetRangeUser(0,160);\r
974\r
975 h3D = (TH3D *)fRecMCTrackHist->Projection(0,9,15);\r
976 h3D->SetName("rec_sec_conversion_nCrossRows_pT_centr");\r
977 h3D->SetTitle("rec_sec_conversion_nCrossRows_pT_centr");\r
978 aFolderObj->Add(h3D);\r
979\r
980 // Chi2PerClust \r
981 fRecMCTrackHist->GetAxis(0)->SetRangeUser(minNCrossRows,160);\r
982 fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,10);\r
983\r
984 h3D = (TH3D *)fRecMCTrackHist->Projection(1,9,15);\r
985 h3D->SetName("rec_sec_conversion_Chi2PerClust_pT_centr");\r
986 h3D->SetTitle("rec_sec_conversion_Chi2PerClust_pT_centr");\r
987 aFolderObj->Add(h3D);\r
988\r
989 // Chi2PerClustITS \r
990 fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,maxChi2PerClust-0.0001);\r
991 fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,100);\r
992\r
993 h3D = (TH3D *)fRecMCTrackHist->Projection(2,9,15);\r
994 h3D->SetName("rec_sec_conversion_Chi2PerClustITS_pT_centr");\r
995 h3D->SetTitle("rec_sec_conversion_Chi2PerClustITS_pT_centr");\r
996 aFolderObj->Add(h3D);\r
997\r
998\r
999 // NCrossRowsOverFindable \r
1000 fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,maxChi2PerClustITS-0.0001);\r
1001 fRecMCTrackHist->GetAxis(3)->SetRangeUser(0,1.4999);\r
1002\r
1003 h3D = (TH3D *)fRecMCTrackHist->Projection(3,9,15);\r
1004 h3D->SetName("rec_sec_conversion_NCrossRowsOverFindable_pT_centr");\r
1005 h3D->SetTitle("rec_sec_conversion_NCrossRowsOverFindable_pT_centr");\r
1006 aFolderObj->Add(h3D);\r
1007\r
1008\r
1009 // FracSharedClust\r
1010 fRecMCTrackHist->GetAxis(3)->SetRangeUser(minNCrossRowsOverFindable,1.4999);\r
1011 fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,0.9999);\r
1012\r
1013 h3D = (TH3D *)fRecMCTrackHist->Projection(4,9,15);\r
1014 h3D->SetName("rec_sec_conversion_FracSharedClust_pT_centr");\r
1015 h3D->SetTitle("rec_sec_conversion_FracSharedClust_pT_centr");\r
1016 aFolderObj->Add(h3D);\r
1017\r
1018\r
1019 // DCAr\r
1020 fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,maxFracSharedClust-0.0001);\r
1021 fRecMCTrackHist->GetAxis(5)->SetRangeUser(-10.,9.9999);\r
1022\r
1023 h3D = (TH3D *)fRecMCTrackHist->Projection(5,9,15);\r
1024 h3D->SetName("rec_sec_conversion_DCAr_pT_centr");\r
1025 h3D->SetTitle("rec_sec_conversion_DCAr_pT_centr");\r
1026 aFolderObj->Add(h3D);\r
1027\r
1028\r
1029 // DCAz\r
1030 fRecMCTrackHist->GetAxis(5)->SetRangeUser(minDCAr,maxDCAr-0.0001);\r
1031 fRecMCTrackHist->GetAxis(6)->SetRangeUser(-10.,9.9999);\r
1032\r
1033 h3D = (TH3D *)fRecMCTrackHist->Projection(6,9,15);\r
1034 h3D->SetName("rec_sec_conversion_DCAz_pT_centr");\r
1035 h3D->SetTitle("rec_sec_conversion_DCAz_pT_centr");\r
1036 aFolderObj->Add(h3D);\r
dac20c1b 1037\r
a26e43aa 1038 // chi2ToTPCc\r
1039 fRecMCTrackHist->GetAxis(6)->SetRangeUser(minDCAz,maxDCAz-0.0001);\r
1040 fRecMCTrackHist->GetAxis(16)->SetRangeUser(0,100);\r
1041\r
1042 h3D = (TH3D *)fRecMCTrackHist->Projection(16,9,15);\r
1043 h3D->SetName("rec_sec_conversion_chi2ToTPCc_pT_centr");\r
1044 h3D->SetTitle("rec_sec_conversion_chi2ToTPCc_pT_centr");\r
1045 aFolderObj->Add(h3D);\r
1046\r
1047\r
1048\r
1049\r
1050\r
1051 // comes from interaction with material\r
dac20c1b 1052 //\r
a26e43aa 1053 fRecMCTrackHist->GetAxis(11)->SetRange(1,2);\r
1054 fRecMCTrackHist->GetAxis(12)->SetRange(2,2);\r
dac20c1b 1055\r
a26e43aa 1056 // set all cuts\r
1057 fRecMCTrackHist->GetAxis(0)->SetRangeUser(minNCrossRows,160);\r
1058 fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,maxChi2PerClust-0.0001);\r
1059 fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,maxChi2PerClustITS-0.0001);\r
1060 fRecMCTrackHist->GetAxis(3)->SetRangeUser(minNCrossRowsOverFindable,1.4999);\r
1061 fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,maxFracSharedClust-0.0001);\r
1062 fRecMCTrackHist->GetAxis(5)->SetRangeUser(minDCAr,maxDCAr-0.0001);\r
1063 fRecMCTrackHist->GetAxis(6)->SetRangeUser(minDCAz,maxDCAz-0.0001);\r
1064 fRecMCTrackHist->GetAxis(7)->SetRangeUser(minEta,maxEta-0.0001);\r
1065 fRecMCTrackHist->GetAxis(16)->SetRangeUser(0.,maxChi2ToTPCc-0.0001);\r
dac20c1b 1066\r
a26e43aa 1067 // nCrossRows \r
1068 fRecMCTrackHist->GetAxis(0)->SetRangeUser(0,160);\r
dac20c1b 1069\r
a26e43aa 1070 h3D = (TH3D *)fRecMCTrackHist->Projection(0,9,15);\r
1071 h3D->SetName("rec_sec_material_nCrossRows_pT_centr");\r
1072 h3D->SetTitle("rec_sec_material_nCrossRows_pT_centr");\r
1073 aFolderObj->Add(h3D);\r
dac20c1b 1074\r
a26e43aa 1075 // Chi2PerClust \r
1076 fRecMCTrackHist->GetAxis(0)->SetRangeUser(minNCrossRows,160);\r
1077 fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,10);\r
dac20c1b 1078\r
a26e43aa 1079 h3D = (TH3D *)fRecMCTrackHist->Projection(1,9,15);\r
1080 h3D->SetName("rec_sec_material_Chi2PerClust_pT_centr");\r
1081 h3D->SetTitle("rec_sec_material_Chi2PerClust_pT_centr");\r
1082 aFolderObj->Add(h3D);\r
dac20c1b 1083\r
a26e43aa 1084 // Chi2PerClustITS \r
1085 fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,maxChi2PerClust-0.0001);\r
1086 fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,100);\r
dac20c1b 1087\r
a26e43aa 1088 h3D = (TH3D *)fRecMCTrackHist->Projection(2,9,15);\r
1089 h3D->SetName("rec_sec_material_Chi2PerClustITS_pT_centr");\r
1090 h3D->SetTitle("rec_sec_material_Chi2PerClustITS_pT_centr");\r
1091 aFolderObj->Add(h3D);\r
dac20c1b 1092\r
dac20c1b 1093\r
a26e43aa 1094 // NCrossRowsOverFindable \r
1095 fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,maxChi2PerClustITS-0.0001);\r
1096 fRecMCTrackHist->GetAxis(3)->SetRangeUser(0,1.4999);\r
1097\r
1098 h3D = (TH3D *)fRecMCTrackHist->Projection(3,9,15);\r
1099 h3D->SetName("rec_sec_material_NCrossRowsOverFindable_pT_centr");\r
1100 h3D->SetTitle("rec_sec_material_NCrossRowsOverFindable_pT_centr");\r
1101 aFolderObj->Add(h3D);\r
1102\r
dac20c1b 1103\r
a26e43aa 1104 // FracSharedClust\r
1105 fRecMCTrackHist->GetAxis(3)->SetRangeUser(minNCrossRowsOverFindable,1.4999);\r
1106 fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,0.9999);\r
1107\r
1108 h3D = (TH3D *)fRecMCTrackHist->Projection(4,9,15);\r
1109 h3D->SetName("rec_sec_material_FracSharedClust_pT_centr");\r
1110 h3D->SetTitle("rec_sec_material_FracSharedClust_pT_centr");\r
1111 aFolderObj->Add(h3D);\r
1112\r
1113\r
1114 // DCAr\r
1115 fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,maxFracSharedClust-0.0001);\r
1116 fRecMCTrackHist->GetAxis(5)->SetRangeUser(-10.,9.9999);\r
1117\r
1118 h3D = (TH3D *)fRecMCTrackHist->Projection(5,9,15);\r
1119 h3D->SetName("rec_sec_material_DCAr_pT_centr");\r
1120 h3D->SetTitle("rec_sec_material_DCAr_pT_centr");\r
1121 aFolderObj->Add(h3D);\r
1122\r
1123\r
1124 // DCAz\r
1125 fRecMCTrackHist->GetAxis(5)->SetRangeUser(minDCAr,maxDCAr-0.0001);\r
1126 fRecMCTrackHist->GetAxis(6)->SetRangeUser(-10.,9.9999);\r
1127\r
1128 h3D = (TH3D *)fRecMCTrackHist->Projection(6,9,15);\r
1129 h3D->SetName("rec_sec_material_DCAz_pT_centr");\r
1130 h3D->SetTitle("rec_sec_material_DCAz_pT_centr");\r
1131 aFolderObj->Add(h3D);\r
1132\r
1133 // chi2ToTPCc\r
1134 fRecMCTrackHist->GetAxis(6)->SetRangeUser(minDCAz,maxDCAz-0.0001);\r
1135 fRecMCTrackHist->GetAxis(16)->SetRangeUser(0,100);\r
1136\r
1137 h3D = (TH3D *)fRecMCTrackHist->Projection(16,9,15);\r
1138 h3D->SetName("rec_sec_material_chi2ToTPCc_pT_centr");\r
1139 h3D->SetTitle("rec_sec_material_chi2ToTPCc_pT_centr");\r
1140 aFolderObj->Add(h3D);\r
1141\r
1142\r
1143\r
1144 //\r
1145 // only TH3 histograms \r
1146 // x : pT : centr\r
dac20c1b 1147 //\r
a26e43aa 1148 // secondaries defined as AliStack::IsPhysicalPrimary()\r
dac20c1b 1149 //\r
a26e43aa 1150 fRecMCTrackHist->GetAxis(12)->SetRange(1,2);\r
1151 fRecMCTrackHist->GetAxis(13)->SetRange(1,1);\r
dac20c1b 1152\r
a26e43aa 1153 // set all cuts\r
1154 fRecMCTrackHist->GetAxis(0)->SetRangeUser(minNCrossRows,160);\r
1155 fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,maxChi2PerClust-0.0001);\r
1156 fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,maxChi2PerClustITS-0.0001);\r
1157 fRecMCTrackHist->GetAxis(3)->SetRangeUser(minNCrossRowsOverFindable,1.4999);\r
1158 fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,maxFracSharedClust-0.0001);\r
1159 fRecMCTrackHist->GetAxis(5)->SetRangeUser(minDCAr,maxDCAr-0.0001);\r
1160 fRecMCTrackHist->GetAxis(6)->SetRangeUser(minDCAz,maxDCAz-0.0001);\r
1161 fRecMCTrackHist->GetAxis(7)->SetRangeUser(minEta,maxEta-0.0001);\r
1162 fRecMCTrackHist->GetAxis(16)->SetRangeUser(0.,maxChi2ToTPCc-0.0001);\r
dac20c1b 1163\r
a26e43aa 1164 // nCrossRows \r
1165 fRecMCTrackHist->GetAxis(0)->SetRangeUser(0,160);\r
dac20c1b 1166\r
a26e43aa 1167 h3D = (TH3D *)fRecMCTrackHist->Projection(0,9,15);\r
1168 h3D->SetName("rec_sec_nCrossRows_pT_centr");\r
1169 h3D->SetTitle("rec_sec_nCrossRows_pT_centr");\r
1170 aFolderObj->Add(h3D);\r
dac20c1b 1171\r
a26e43aa 1172 // Chi2PerClust \r
1173 fRecMCTrackHist->GetAxis(0)->SetRangeUser(minNCrossRows,160);\r
1174 fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,10);\r
dac20c1b 1175\r
a26e43aa 1176 h3D = (TH3D *)fRecMCTrackHist->Projection(1,9,15);\r
1177 h3D->SetName("rec_sec_Chi2PerClust_pT_centr");\r
1178 h3D->SetTitle("rec_sec_Chi2PerClust_pT_centr");\r
1179 aFolderObj->Add(h3D);\r
1180\r
1181 // Chi2PerClustITS \r
1182 fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,maxChi2PerClust-0.0001);\r
1183 fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,100);\r
1184\r
1185 h3D = (TH3D *)fRecMCTrackHist->Projection(2,9,15);\r
1186 h3D->SetName("rec_sec_Chi2PerClustITS_pT_centr");\r
1187 h3D->SetTitle("rec_sec_Chi2PerClustITS_pT_centr");\r
1188 aFolderObj->Add(h3D);\r
1189\r
1190\r
1191 // NCrossRowsOverFindable \r
1192 fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,maxChi2PerClustITS-0.0001);\r
1193 fRecMCTrackHist->GetAxis(3)->SetRangeUser(0,1.4999);\r
1194\r
1195 h3D = (TH3D *)fRecMCTrackHist->Projection(3,9,15);\r
1196 h3D->SetName("rec_sec_NCrossRowsOverFindable_pT_centr");\r
1197 h3D->SetTitle("rec_sec_NCrossRowsOverFindable_pT_centr");\r
1198 aFolderObj->Add(h3D);\r
1199\r
1200\r
1201 // FracSharedClust\r
1202 fRecMCTrackHist->GetAxis(3)->SetRangeUser(minNCrossRowsOverFindable,1.4999);\r
1203 fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,0.9999);\r
1204\r
1205 h3D = (TH3D *)fRecMCTrackHist->Projection(4,9,15);\r
1206 h3D->SetName("rec_sec_FracSharedClust_pT_centr");\r
1207 h3D->SetTitle("rec_sec_FracSharedClust_pT_centr");\r
1208 aFolderObj->Add(h3D);\r
1209\r
1210\r
1211 // DCAr\r
1212 fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,maxFracSharedClust-0.0001);\r
1213 fRecMCTrackHist->GetAxis(5)->SetRangeUser(-10.,9.9999);\r
1214\r
1215 h3D = (TH3D *)fRecMCTrackHist->Projection(5,9,15);\r
1216 h3D->SetName("rec_sec_DCAr_pT_centr");\r
1217 h3D->SetTitle("rec_sec_DCAr_pT_centr");\r
1218 aFolderObj->Add(h3D);\r
1219\r
1220\r
1221 // DCAz\r
1222 fRecMCTrackHist->GetAxis(5)->SetRangeUser(minDCAr,maxDCAr-0.0001);\r
1223 fRecMCTrackHist->GetAxis(6)->SetRangeUser(-10.,9.9999);\r
1224\r
1225 h3D = (TH3D *)fRecMCTrackHist->Projection(6,9,15);\r
1226 h3D->SetName("rec_sec_DCAz_pT_centr");\r
1227 h3D->SetTitle("rec_sec_DCAz_pT_centr");\r
1228 aFolderObj->Add(h3D);\r
1229\r
1230 // chi2ToTPCc\r
1231 fRecMCTrackHist->GetAxis(6)->SetRangeUser(minDCAz,maxDCAz-0.0001);\r
1232 fRecMCTrackHist->GetAxis(16)->SetRangeUser(0,100);\r
1233\r
1234 h3D = (TH3D *)fRecMCTrackHist->Projection(16,9,15);\r
1235 h3D->SetName("rec_sec_chi2ToTPCc_pT_centr");\r
1236 h3D->SetTitle("rec_sec_chi2ToTPCc_pT_centr");\r
1237 aFolderObj->Add(h3D);\r
1238\r
1239 //\r
1240 // only TH3 histograms \r
1241 // x : pT : centr\r
1242 //\r
1243 // primaries defined as AliStack::IsPhysicalPrimary()\r
1244 //\r
1245 fRecMCTrackHist->GetAxis(12)->SetRange(1,2);\r
1246 fRecMCTrackHist->GetAxis(13)->SetRange(2,2);\r
1247\r
1248 // set all cuts\r
1249 fRecMCTrackHist->GetAxis(0)->SetRangeUser(minNCrossRows,160);\r
1250 fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,maxChi2PerClust-0.0001);\r
1251 fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,maxChi2PerClustITS-0.0001);\r
1252 fRecMCTrackHist->GetAxis(3)->SetRangeUser(minNCrossRowsOverFindable,1.4999);\r
1253 fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,maxFracSharedClust-0.0001);\r
1254 fRecMCTrackHist->GetAxis(5)->SetRangeUser(minDCAr,maxDCAr-0.0001);\r
1255 fRecMCTrackHist->GetAxis(6)->SetRangeUser(minDCAz,maxDCAz-0.0001);\r
1256 fRecMCTrackHist->GetAxis(7)->SetRangeUser(minEta,maxEta-0.0001);\r
1257 fRecMCTrackHist->GetAxis(16)->SetRangeUser(0.,maxChi2ToTPCc-0.0001);\r
1258\r
1259 // nCrossRows \r
1260 fRecMCTrackHist->GetAxis(0)->SetRangeUser(0,160);\r
1261\r
1262 h3D = (TH3D *)fRecMCTrackHist->Projection(0,9,15);\r
1263 h3D->SetName("rec_prim_nCrossRows_pT_centr");\r
1264 h3D->SetTitle("rec_prim_nCrossRows_pT_centr");\r
1265 aFolderObj->Add(h3D);\r
1266\r
1267 // Chi2PerClust \r
1268 fRecMCTrackHist->GetAxis(0)->SetRangeUser(minNCrossRows,160);\r
1269 fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,10);\r
1270\r
1271 h3D = (TH3D *)fRecMCTrackHist->Projection(1,9,15);\r
1272 h3D->SetName("rec_prim_Chi2PerClust_pT_centr");\r
1273 h3D->SetTitle("rec_prim_Chi2PerClust_pT_centr");\r
1274 aFolderObj->Add(h3D);\r
dac20c1b 1275\r
a26e43aa 1276 // Chi2PerClustITS \r
1277 fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,maxChi2PerClust-0.0001);\r
1278 fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,100);\r
1279\r
1280 h3D = (TH3D *)fRecMCTrackHist->Projection(2,9,15);\r
1281 h3D->SetName("rec_prim_Chi2PerClustITS_pT_centr");\r
1282 h3D->SetTitle("rec_prim_Chi2PerClustITS_pT_centr");\r
1283 aFolderObj->Add(h3D);\r
1284\r
1285\r
1286 // NCrossRowsOverFindable \r
1287 fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,maxChi2PerClustITS-0.0001);\r
1288 fRecMCTrackHist->GetAxis(3)->SetRangeUser(0,1.4999);\r
1289\r
1290 h3D = (TH3D *)fRecMCTrackHist->Projection(3,9,15);\r
1291 h3D->SetName("rec_prim_NCrossRowsOverFindable_pT_centr");\r
1292 h3D->SetTitle("rec_prim_NCrossRowsOverFindable_pT_centr");\r
1293 aFolderObj->Add(h3D);\r
1294\r
1295\r
1296 // FracSharedClust\r
1297 fRecMCTrackHist->GetAxis(3)->SetRangeUser(minNCrossRowsOverFindable,1.4999);\r
1298 fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,0.9999);\r
1299\r
1300 h3D = (TH3D *)fRecMCTrackHist->Projection(4,9,15);\r
1301 h3D->SetName("rec_prim_FracSharedClust_pT_centr");\r
1302 h3D->SetTitle("rec_prim_FracSharedClust_pT_centr");\r
1303 aFolderObj->Add(h3D);\r
1304\r
1305\r
1306 // DCAr\r
1307 fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,maxFracSharedClust-0.0001);\r
1308 fRecMCTrackHist->GetAxis(5)->SetRangeUser(-10.,9.9999);\r
1309\r
1310 h3D = (TH3D *)fRecMCTrackHist->Projection(5,9,15);\r
1311 h3D->SetName("rec_prim_DCAr_pT_centr");\r
1312 h3D->SetTitle("rec_prim_DCAr_pT_centr");\r
1313 aFolderObj->Add(h3D);\r
1314\r
1315\r
1316 // DCAz\r
1317 fRecMCTrackHist->GetAxis(5)->SetRangeUser(minDCAr,maxDCAr-0.0001);\r
1318 fRecMCTrackHist->GetAxis(6)->SetRangeUser(-10.,9.9999);\r
1319\r
1320 h3D = (TH3D *)fRecMCTrackHist->Projection(6,9,15);\r
1321 h3D->SetName("rec_prim_DCAz_pT_centr");\r
1322 h3D->SetTitle("rec_prim_DCAz_pT_centr");\r
1323 aFolderObj->Add(h3D);\r
1324\r
1325 // chi2ToTPCc\r
1326 fRecMCTrackHist->GetAxis(6)->SetRangeUser(minDCAz,maxDCAz-0.0001);\r
1327 fRecMCTrackHist->GetAxis(16)->SetRangeUser(0,100);\r
1328\r
1329 h3D = (TH3D *)fRecMCTrackHist->Projection(16,9,15);\r
1330 h3D->SetName("rec_prim_chi2ToTPCc_pT_centr");\r
1331 h3D->SetTitle("rec_prim_chi2ToTPCc_pT_centr");\r
1332 aFolderObj->Add(h3D);\r
1333\r
1334 }\r
dac20c1b 1335\r
1336 // export objects to analysis folder\r
1337 fAnalysisFolder = ExportToFolder(aFolderObj);\r
b4cdc39d 1338 if(!fAnalysisFolder) {\r
1339 if(aFolderObj) delete aFolderObj;\r
1340 return;\r
1341 }\r
dac20c1b 1342\r
a26e43aa 1343 // Reset setings\r
1344 \r
1345 for(Int_t ndim = 0; ndim < fEventCount->GetNdimensions(); ndim++) {\r
1346 fEventCount->GetAxis(ndim)->SetRange(1,fEventCount->GetAxis(ndim)->GetNbins());\r
1347 }\r
1348\r
1349 for(Int_t ndim = 0; ndim < fMCEventHist->GetNdimensions(); ndim++) {\r
1350 fMCEventHist->GetAxis(ndim)->SetRange(1,fMCEventHist->GetAxis(ndim)->GetNbins());\r
1351 }\r
1352\r
1353 for(Int_t ndim = 0; ndim < fRecMCEventHist->GetNdimensions(); ndim++) {\r
1354 fRecMCEventHist->GetAxis(ndim)->SetRange(1,fRecMCEventHist->GetAxis(ndim)->GetNbins());\r
1355 }\r
1356\r
1357 for(Int_t ndim = 0; ndim < fRecMCTrackHist->GetNdimensions(); ndim++) \r
1358 {\r
1359 fRecMCTrackHist->GetAxis(ndim)->SetRange(1,fRecMCTrackHist->GetAxis(ndim)->GetNbins());\r
1360 }\r
1361\r
dac20c1b 1362 // delete only TObjArray\r
a26e43aa 1363 //if(aFolderObj) delete aFolderObj;\r
1364\r
1365 if (fFolderObj) delete fFolderObj;\r
1366 fFolderObj = aFolderObj;\r
1367 aFolderObj=0;\r
dac20c1b 1368}\r
1369\r
1370//_____________________________________________________________________________\r
1371TFolder* AlidNdPtCutAnalysisPbPb::ExportToFolder(TObjArray * const array) \r
1372{\r
1373 // recreate folder avery time and export objects to new one\r
1374 //\r
1375 AlidNdPtCutAnalysisPbPb * comp=this;\r
1376 TFolder *folder = comp->GetAnalysisFolder();\r
1377\r
1378 TString name, title;\r
1379 TFolder *newFolder = 0;\r
1380 Int_t i = 0;\r
1381 Int_t size = array->GetSize();\r
1382\r
1383 if(folder) { \r
1384 // get name and title from old folder\r
1385 name = folder->GetName(); \r
1386 title = folder->GetTitle(); \r
1387\r
1388 // delete old one\r
1389 delete folder;\r
1390\r
1391 // create new one\r
1392 newFolder = CreateFolder(name.Data(),title.Data());\r
1393 newFolder->SetOwner();\r
1394\r
1395 // add objects to folder\r
1396 while(i < size) {\r
1397 newFolder->Add(array->At(i));\r
1398 i++;\r
1399 }\r
1400 }\r
1401\r
1402return newFolder;\r
1403}\r
1404\r
1405//_____________________________________________________________________________\r
1406TFolder* AlidNdPtCutAnalysisPbPb::CreateFolder(TString name,TString title) { \r
1407// create folder for analysed histograms\r
1408//\r
1409TFolder *folder = 0;\r
1410 folder = new TFolder(name.Data(),title.Data());\r
1411\r
1412 return folder;\r
1413}\r