]>
Commit | Line | Data |
---|---|---|
930d0706 | 1 | /************************************************************************** |
2 | * Contributors are not mentioned at all. * | |
3 | * * | |
4 | * Permission to use, copy, modify and distribute this software and its * | |
5 | * documentation strictly for non-commercial purposes is hereby granted * | |
6 | * without fee, provided that the above copyright notice appears in all * | |
7 | * copies and that both the copyright notice and this permission notice * | |
8 | * appear in the supporting documentation. The authors make no claims * | |
9 | * about the suitability of this software for any purpose. It is * | |
10 | * provided "as is" without express or implied warranty. * | |
11 | **************************************************************************/ | |
12 | ||
13 | // | |
14 | //----------------------------------------------------------------- | |
15 | // AliAnalysisTaskNUclexAOD class AOD | |
16 | //----------------------------------------------------------------- | |
17 | ||
18 | ||
19 | class TTree; | |
20 | class TParticle; | |
21 | class TVector3; | |
22 | ||
23 | #include "AliAnalysisManager.h" | |
24 | #include <AliMCEventHandler.h> | |
25 | #include <AliMCEvent.h> | |
26 | #include <AliStack.h> | |
27 | ||
28 | class AliESDVertex; | |
29 | class AliAODVertex; | |
30 | class AliESDv0; | |
31 | class AliAODv0; | |
32 | class AliCascadeVertexer; | |
33 | ||
34 | #include <iostream> | |
35 | #include "AliAnalysisTaskSE.h" | |
36 | #include "TList.h" | |
37 | #include "TH1.h" | |
38 | #include "TH2.h" | |
39 | #include "TH3.h" | |
40 | #include "TNtuple.h" | |
41 | #include "TGraph.h" | |
42 | #include "TCutG.h" | |
43 | #include "TF1.h" | |
44 | #include "TCanvas.h" | |
45 | #include "TMath.h" | |
46 | #include "TChain.h" | |
47 | #include "Riostream.h" | |
48 | #include "AliLog.h" | |
49 | #include "AliCascadeVertexer.h" | |
50 | #include "AliESDEvent.h" | |
51 | #include "AliESDtrack.h" | |
52 | #include "AliExternalTrackParam.h" | |
53 | #include "AliAODEvent.h" | |
54 | #include "AliInputEventHandler.h" | |
55 | #include "AliESDcascade.h" | |
56 | #include "AliAODcascade.h" | |
57 | #include "AliAnalysisTaskReadNuclexAOD.h" | |
58 | #include "AliESDtrackCuts.h" | |
59 | #include "AliCentrality.h" | |
60 | #include "TString.h" | |
61 | #include <TDatime.h> | |
62 | #include <TRandom3.h> | |
63 | #include <AliAODPid.h> | |
64 | #include <AliAODHandler.h> | |
65 | #include <AliAODRecoDecay.h> | |
66 | #include <AliAODRecoDecayLF.h> | |
67 | #include <AliAODRecoDecayLF2Prong.h> | |
68 | ||
5e2539d9 | 69 | using std::cout; |
70 | using std::endl; | |
71 | ||
930d0706 | 72 | ClassImp(AliAnalysisTaskReadNuclexAOD) |
73 | ||
74 | //________________________________________________________________________ | |
75 | AliAnalysisTaskReadNuclexAOD::AliAnalysisTaskReadNuclexAOD() | |
76 | : AliAnalysisTaskSE(), | |
77 | fAnalysisType("AOD"), | |
78 | fCollidingSystems(0), | |
79 | fDataType("REAL"), | |
80 | fListHist(0), | |
81 | fHistEventMultiplicity(0), | |
82 | fHistTrackMultiplicity(0), | |
83 | fHistTrackMultiplicityCent(0), | |
84 | fHistTrackMultiplicitySemiCent(0), | |
85 | fHistTrackMultiplicityMB(0), | |
86 | fHistTrackMultiplicityPVCent(0), | |
87 | fHistTrackMultiplicityPVSemiCent(0), | |
88 | fHistTrackMultiplicityPVMB(0), | |
89 | fhBB(0), | |
90 | fhBBPions(0), | |
91 | fhBBHe(0), | |
92 | aodTree(0x0), | |
93 | Nuclei(0x0), | |
94 | SecondaryVertices(0x0), | |
95 | DaughterTracks(0x0), | |
96 | nevent(0x0), | |
97 | fNtuple1(0), | |
98 | trunNumber(0), | |
99 | tbunchcross(0), | |
100 | torbit(0), | |
101 | tperiod(0), | |
102 | teventtype(0), | |
103 | tTrackNumber(0), | |
104 | tpercentile(0), | |
105 | txPrimaryVertex(0), | |
106 | tyPrimaryVertex(0), | |
107 | tzPrimaryVertex(0), | |
108 | txSecondaryVertex(0), | |
109 | tySecondaryVertex(0), | |
110 | tzSecondaryVertex(0), | |
111 | tdcaTracks(0), | |
112 | tCosPointingAngle(0), | |
113 | tDCAV0toPrimaryVertex(0), | |
114 | tHeSign(0), | |
115 | tHepInTPC(0), | |
116 | tHeTPCsignal(0), | |
117 | tDcaHeToPrimVertex(0), | |
118 | tHeEta(0), | |
119 | tmomHex(0), | |
120 | tmomHey(0), | |
121 | tmomHez(0), | |
122 | tmomHeAtSVx(0), | |
123 | tmomHeAtSVy(0), | |
124 | tmomHeAtSVz(0), | |
125 | tHeTPCNcls(0), | |
126 | tHeimpactXY(0), | |
127 | tHeimpactZ(0), | |
128 | tHeITSClusterMap(0), | |
129 | tIsHeITSRefit(0), | |
130 | tPionSign(0), | |
131 | tPionpInTPC(0), | |
132 | tPionTPCsignal(0), | |
133 | tDcaPionToPrimVertex(0), | |
134 | tPionEta(0), | |
135 | tmomPionx(0), | |
136 | tmomPiony(0), | |
137 | tmomPionz(0), | |
138 | tmomNegPionAtSVx(0), | |
139 | tmomNegPionAtSVy(0), | |
140 | tmomNegPionAtSVz(0), | |
141 | tPionTPCNcls(0), | |
142 | tPionimpactXY(0), | |
143 | tPionimpactZ(0), | |
144 | tPionITSClusterMap(0), | |
145 | tIsPiITSRefit(0), | |
146 | txn(0), | |
147 | txp(0), | |
148 | tchi2He(0), | |
149 | tchi2Pi(0), | |
150 | fNtuple4(0), | |
151 | t3LHlrunNumber(0), | |
152 | t3LHlBCNumber(0), | |
153 | t3LHlOrbitNumber(0), | |
154 | t3LHlPeriodNumber(0), | |
155 | t3LHleventtype(0), | |
156 | t3LHlpercentile(0), | |
157 | t3LHlPx(0), | |
158 | t3LHlPy(0), | |
159 | t3LHlPz(0), | |
160 | t3LHlEta(0), | |
161 | t3LHlY(0), | |
162 | t3LHlM(0), | |
163 | t3LHlxPrimaryVertex(0), | |
164 | t3LHlyPrimaryVertex(0), | |
165 | t3LHlzPrimaryVertex(0), | |
166 | t3LHlp0px(0), | |
167 | t3LHlp0py(0), | |
168 | t3LHlp0pz(0), | |
169 | t3LHlp0ch(0), | |
170 | t3LHlp1px(0), | |
171 | t3LHlp1py(0), | |
172 | t3LHlp1pz(0), | |
173 | t3LHlp1ch(0) | |
174 | ||
175 | { | |
176 | // Dummy Constructor | |
177 | } | |
178 | ||
179 | //________________________________________________________________________ | |
180 | AliAnalysisTaskReadNuclexAOD::AliAnalysisTaskReadNuclexAOD(const char *name) | |
181 | : AliAnalysisTaskSE(name), | |
182 | fAnalysisType("AOD"), | |
183 | fCollidingSystems(0), | |
184 | fDataType("REAL"), | |
185 | fListHist(0), | |
186 | fHistEventMultiplicity(0), | |
187 | fHistTrackMultiplicity(0), | |
188 | fHistTrackMultiplicityCent(0), | |
189 | fHistTrackMultiplicitySemiCent(0), | |
190 | fHistTrackMultiplicityMB(0), | |
191 | fHistTrackMultiplicityPVCent(0), | |
192 | fHistTrackMultiplicityPVSemiCent(0), | |
193 | fHistTrackMultiplicityPVMB(0), | |
194 | fhBB(0), | |
195 | fhBBPions(0), | |
196 | fhBBHe(0), | |
197 | aodTree(0x0), | |
198 | Nuclei(0x0), | |
199 | SecondaryVertices(0x0), | |
200 | DaughterTracks(0x0), | |
201 | nevent(0x0), | |
202 | fNtuple1(0), | |
203 | trunNumber(0), | |
204 | tbunchcross(0), | |
205 | torbit(0), | |
206 | tperiod(0), | |
207 | teventtype(0), | |
208 | tTrackNumber(0), | |
209 | tpercentile(0), | |
210 | txPrimaryVertex(0), | |
211 | tyPrimaryVertex(0), | |
212 | tzPrimaryVertex(0), | |
213 | txSecondaryVertex(0), | |
214 | tySecondaryVertex(0), | |
215 | tzSecondaryVertex(0), | |
216 | tdcaTracks(0), | |
217 | tCosPointingAngle(0), | |
218 | tDCAV0toPrimaryVertex(0), | |
219 | tHeSign(0), | |
220 | tHepInTPC(0), | |
221 | tHeTPCsignal(0), | |
222 | tDcaHeToPrimVertex(0), | |
223 | tHeEta(0), | |
224 | tmomHex(0), | |
225 | tmomHey(0), | |
226 | tmomHez(0), | |
227 | tmomHeAtSVx(0), | |
228 | tmomHeAtSVy(0), | |
229 | tmomHeAtSVz(0), | |
230 | tHeTPCNcls(0), | |
231 | tHeimpactXY(0), | |
232 | tHeimpactZ(0), | |
233 | tHeITSClusterMap(0), | |
234 | tIsHeITSRefit(0), | |
235 | tPionSign(0), | |
236 | tPionpInTPC(0), | |
237 | tPionTPCsignal(0), | |
238 | tDcaPionToPrimVertex(0), | |
239 | tPionEta(0), | |
240 | tmomPionx(0), | |
241 | tmomPiony(0), | |
242 | tmomPionz(0), | |
243 | tmomNegPionAtSVx(0), | |
244 | tmomNegPionAtSVy(0), | |
245 | tmomNegPionAtSVz(0), | |
246 | tPionTPCNcls(0), | |
247 | tPionimpactXY(0), | |
248 | tPionimpactZ(0), | |
249 | tPionITSClusterMap(0), | |
250 | tIsPiITSRefit(0), | |
251 | txn(0), | |
252 | txp(0), | |
253 | tchi2He(0), | |
254 | tchi2Pi(0), | |
255 | fNtuple4(0), | |
256 | t3LHlrunNumber(0), | |
257 | t3LHlBCNumber(0), | |
258 | t3LHlOrbitNumber(0), | |
259 | t3LHlPeriodNumber(0), | |
260 | t3LHleventtype(0), | |
261 | t3LHlpercentile(0), | |
262 | t3LHlPx(0), | |
263 | t3LHlPy(0), | |
264 | t3LHlPz(0), | |
265 | t3LHlEta(0), | |
266 | t3LHlY(0), | |
267 | t3LHlM(0), | |
268 | t3LHlxPrimaryVertex(0), | |
269 | t3LHlyPrimaryVertex(0), | |
270 | t3LHlzPrimaryVertex(0), | |
271 | t3LHlp0px(0), | |
272 | t3LHlp0py(0), | |
273 | t3LHlp0pz(0), | |
274 | t3LHlp0ch(0), | |
275 | t3LHlp1px(0), | |
276 | t3LHlp1py(0), | |
277 | t3LHlp1pz(0), | |
278 | t3LHlp1ch(0) | |
279 | ||
280 | { | |
281 | // Define input and output slots here | |
282 | // Input slot #0 works with a TChain | |
283 | //DefineInput(0, TChain::Class()); | |
284 | // Output slot #0 writes into a TList container (Cascade) | |
285 | DefineOutput(1, TList::Class()); | |
286 | ||
287 | DefineInput(0, TChain::Class()); | |
288 | ||
289 | DefineOutput(1, TList::Class()); | |
290 | DefineOutput(2, TTree::Class()); | |
291 | DefineOutput(3, TTree::Class()); | |
292 | ||
293 | } | |
294 | //_______________________________________________________ | |
295 | AliAnalysisTaskReadNuclexAOD::~AliAnalysisTaskReadNuclexAOD() | |
296 | { | |
297 | // Destructor | |
298 | if (fListHist) { | |
299 | delete fListHist; | |
300 | fListHist = 0; | |
301 | } | |
302 | ||
303 | if(fNtuple1) delete fNtuple1; | |
304 | if(fNtuple4) delete fNtuple4; | |
305 | } | |
306 | //=================DEFINITION BETHE BLOCH============================== | |
307 | ||
308 | Double_t AliAnalysisTaskReadNuclexAOD::BetheBloch(Double_t betaGamma,Double_t charge,Bool_t isPbPb) { | |
309 | ||
310 | Double_t kp1, kp2, kp3, kp4, kp5; | |
311 | ||
312 | if(isPbPb){ | |
313 | ||
314 | ||
315 | ||
316 | //pass2 2011 | |
317 | kp1 = 4.7*charge*charge; | |
318 | kp2 = 8.98482806165147636e+00; | |
319 | kp3 = 1.54000000000000005e-05; | |
320 | kp4 = 2.30445734159456084e+00; | |
321 | kp5 = 2.25624744086878559e+00; | |
322 | ||
323 | } | |
324 | ||
325 | else{ | |
326 | ||
327 | ||
328 | //pass2 2011 | |
329 | kp1 = 4.7*charge*charge; | |
330 | kp2 = 8.98482806165147636e+00; | |
331 | kp3 = 1.54000000000000005e-05; | |
332 | kp4 = 2.30445734159456084e+00; | |
333 | kp5 = 2.25624744086878559e+00; | |
334 | ||
335 | ||
336 | } | |
337 | ||
338 | Double_t beta = betaGamma / TMath::Sqrt(1.0 + betaGamma * betaGamma); | |
339 | ||
340 | Double_t aa = TMath::Power(beta, kp4); | |
341 | Double_t bb = TMath::Power(1.0 / betaGamma, kp5); | |
342 | ||
343 | bb = TMath::Log(kp3 + bb); | |
344 | ||
345 | Double_t out = (kp2 - aa - bb) * kp1 / aa; | |
346 | ||
347 | return out; | |
348 | ||
349 | } | |
350 | ||
351 | void AliAnalysisTaskReadNuclexAOD::Init() | |
352 | { | |
353 | // cout<<"----------------------------------> Vediamo"<<endl; | |
354 | ||
355 | // AliAODHandler* aodHandler = (AliAODHandler*)((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler()); | |
356 | // cout<<aodHandler<<endl; | |
357 | // TTree *aodTree = aodHandler->GetTree(); | |
358 | // // aodTree = aodHandler->GetTree(); | |
359 | // cout<<"aodTree: "<<aodTree<<endl; | |
360 | // aodTree->SetBranchAddress("Nuclei", &Nuclei); | |
361 | // aodTree->SetBranchAddress("SecondaryVertices",&SecondaryVertices); | |
362 | // aodTree->SetBranchAddress("DaughterTracks", &DaughterTracks); | |
363 | ||
364 | ||
365 | } | |
366 | ||
367 | //==================DEFINITION OF OUTPUT OBJECTS============================== | |
368 | ||
369 | void AliAnalysisTaskReadNuclexAOD::UserCreateOutputObjects() | |
370 | { | |
371 | fListHist = new TList(); | |
372 | fListHist->SetOwner(); // IMPORTANT! | |
373 | ||
374 | ||
375 | if(! fHistEventMultiplicity ){ | |
376 | ||
377 | fHistEventMultiplicity = new TH1F( "fHistEventMultiplicity" , "Nb of Events" , 13 , 0, 13); | |
378 | ||
379 | fHistEventMultiplicity->GetXaxis()->SetBinLabel(1,"All Events"); | |
380 | fHistEventMultiplicity->GetXaxis()->SetBinLabel(2,"Events w/PV"); | |
381 | fHistEventMultiplicity->GetXaxis()->SetBinLabel(3,"Events w/|Vz|<10cm"); | |
382 | fHistEventMultiplicity->GetXaxis()->SetBinLabel(4,"Central Events"); | |
383 | fHistEventMultiplicity->GetXaxis()->SetBinLabel(5,"SemiCentral Events"); | |
384 | fHistEventMultiplicity->GetXaxis()->SetBinLabel(6,"MB Events"); | |
385 | fHistEventMultiplicity->GetXaxis()->SetBinLabel(7,"Central Events w/|Vz|<10cm"); | |
386 | fHistEventMultiplicity->GetXaxis()->SetBinLabel(8,"SemiCentral Events w/|Vz|<10cm"); | |
387 | fHistEventMultiplicity->GetXaxis()->SetBinLabel(9,"MB Events w/|Vz|<10cm"); | |
388 | fHistEventMultiplicity->GetXaxis()->SetBinLabel(10,"Sec. Vert. Tree"); | |
389 | fHistEventMultiplicity->GetXaxis()->SetBinLabel(11,"Sec. Vert. Rec"); | |
390 | fHistEventMultiplicity->GetXaxis()->SetBinLabel(12,"Event Not taken"); | |
391 | fListHist->Add(fHistEventMultiplicity); | |
392 | } | |
393 | ||
394 | ||
395 | if(! fHistTrackMultiplicity ){ | |
396 | fHistTrackMultiplicity = new TH2F( "fHistTrackMultiplicity" , "Nb of Tracks", 2500,0, 25000,210,-1,104); | |
397 | fHistTrackMultiplicity->GetXaxis()->SetTitle("Number of tracks"); | |
398 | fHistTrackMultiplicity->GetYaxis()->SetTitle("Percentile"); | |
399 | fListHist->Add(fHistTrackMultiplicity); | |
400 | } | |
401 | ||
402 | if(! fHistTrackMultiplicityCent ){ | |
403 | fHistTrackMultiplicityCent = new TH2F( "fHistTrackMultiplicityCent", "Nb of Tracks Central Events", 2500,0, 25000,210,-1,104 ); | |
404 | fHistTrackMultiplicityCent->GetXaxis()->SetTitle("Number of tracks"); | |
405 | fHistTrackMultiplicityCent->GetYaxis()->SetTitle("Percentile"); | |
406 | fListHist->Add(fHistTrackMultiplicityCent); | |
407 | } | |
408 | ||
409 | if(! fHistTrackMultiplicitySemiCent ){ | |
410 | fHistTrackMultiplicitySemiCent = new TH2F( "fHistTrackMultiplicitySemiCent" , "Nb of Tracks SemiCentral Events", 2500,0, 25000 ,210,-1,104); | |
411 | fHistTrackMultiplicitySemiCent->GetXaxis()->SetTitle("Number of tracks"); | |
412 | fHistTrackMultiplicitySemiCent->GetYaxis()->SetTitle("Percentile"); | |
413 | fListHist->Add(fHistTrackMultiplicitySemiCent); | |
414 | } | |
415 | ||
416 | if(! fHistTrackMultiplicityMB ){ | |
417 | fHistTrackMultiplicityMB = new TH2F( "fHistTrackMultiplicityMB" , "Nb of Tracks MBral Events", 2500,0, 25000,210,-1,104 ); | |
418 | fHistTrackMultiplicityMB->GetXaxis()->SetTitle("Number of tracks"); | |
419 | fHistTrackMultiplicityMB->GetYaxis()->SetTitle("Percentile"); | |
420 | fListHist->Add(fHistTrackMultiplicityMB); | |
421 | } | |
422 | ||
423 | if(! fHistTrackMultiplicityPVCent ){ | |
424 | fHistTrackMultiplicityPVCent = new TH2F( "fHistTrackMultiplicityPVCent" , "Nb of Tracks Central Events", 2500,0, 25000,210,-1,104 ); | |
425 | fHistTrackMultiplicityPVCent->GetXaxis()->SetTitle("Number of tracks"); | |
426 | fHistTrackMultiplicityPVCent->GetYaxis()->SetTitle("Percentile"); | |
427 | fListHist->Add(fHistTrackMultiplicityPVCent); | |
428 | } | |
429 | ||
430 | if(! fHistTrackMultiplicityPVSemiCent ){ | |
431 | fHistTrackMultiplicityPVSemiCent = new TH2F( "fHistTrackMultiplicityPVSemiCent" , "Nb of Tracks SemiCentral Events", 2500,0, 25000 ,210,-1,104); | |
432 | fHistTrackMultiplicityPVSemiCent->GetXaxis()->SetTitle("Number of tracks"); | |
433 | fHistTrackMultiplicityPVSemiCent->GetYaxis()->SetTitle("Percentile"); | |
434 | fListHist->Add(fHistTrackMultiplicityPVSemiCent); | |
435 | } | |
436 | ||
437 | if(! fHistTrackMultiplicityPVMB ){ | |
438 | fHistTrackMultiplicityPVMB = new TH2F( "fHistTrackMultiplicityPVMB" , "Nb of Tracks MBral Events", 2500,0, 25000,210,-1,104 ); | |
439 | fHistTrackMultiplicityPVMB->GetXaxis()->SetTitle("Number of tracks"); | |
440 | fHistTrackMultiplicityPVMB->GetYaxis()->SetTitle("Percentile"); | |
441 | fListHist->Add(fHistTrackMultiplicityPVMB); | |
442 | } | |
443 | ||
444 | if(! fhBB ){ | |
445 | fhBB = new TH2F( "fhBB" , "BetheBlochTPC" , 120,-6,6,150,0,1500); | |
446 | fhBB->GetXaxis()->SetTitle("p/z (GeV/#it{c})"); | |
447 | fhBB->GetYaxis()->SetTitle("TPC Signal"); | |
448 | fListHist->Add(fhBB); | |
449 | } | |
450 | ||
451 | if(! fhBBPions ){ | |
452 | fhBBPions = new TH2F( "fhBBPions" , "Bethe-Bloch TPC Pions" , 120,-6,6,150,0,1500); | |
453 | fhBBPions->GetXaxis()->SetTitle("p/z (GeV/#it{c})"); | |
454 | fhBBPions->GetYaxis()->SetTitle("TPC Signal"); | |
455 | fListHist->Add(fhBBPions); | |
456 | } | |
457 | ||
458 | if(! fhBBHe ){ | |
459 | fhBBHe = new TH2F( "fhBBHe" , "Bethe-Bloch TPC He" , 120,-6,6,150,0,1500); | |
460 | fhBBHe->GetXaxis()->SetTitle("p/z (GeV/#it{c})"); | |
461 | fhBBHe->GetYaxis()->SetTitle("TPC Signal"); | |
462 | fListHist->Add(fhBBHe); | |
463 | } | |
464 | ||
465 | ||
466 | ||
467 | if(! fNtuple1 ) { | |
468 | ||
469 | fNtuple1 = new TTree("fNtuple1","fNtuple1"); | |
470 | ||
471 | fNtuple1->Branch("trunNumber" ,&trunNumber ,"trunNumber/F"); | |
472 | fNtuple1->Branch("tbunchcross" ,&tbunchcross ,"tbunchcross/F"); | |
473 | fNtuple1->Branch("torbit" ,&torbit ,"torbit/F"); | |
474 | fNtuple1->Branch("tperiod" ,&tperiod ,"tperiod/F"); | |
475 | fNtuple1->Branch("teventtype" ,&teventtype ,"teventtype/F"); | |
476 | fNtuple1->Branch("tTrackNumber" ,&tTrackNumber ,"tTrackNumber/F"); | |
477 | fNtuple1->Branch("tpercentile" ,&tpercentile ,"tpercentile/F") ; | |
478 | fNtuple1->Branch("txPrimaryVertex" ,&txPrimaryVertex ,"txPrimaryVertex/F"); | |
479 | fNtuple1->Branch("tyPrimaryVertex" ,&tyPrimaryVertex ,"tyPrimaryVertex/F"); | |
480 | fNtuple1->Branch("tzPrimaryVertex" ,&tzPrimaryVertex ,"tzPrimaryVertex/F"); | |
481 | fNtuple1->Branch("txSecondaryVertex" ,&txSecondaryVertex ,"txSecondaryVertex/F"); | |
482 | fNtuple1->Branch("tySecondaryVertex" ,&tySecondaryVertex ,"tySecondaryVertex/F"); | |
483 | fNtuple1->Branch("tzSecondaryVertex" ,&tzSecondaryVertex ,"tzSecondaryVertex/F"); | |
484 | fNtuple1->Branch("tdcaTracks" ,&tdcaTracks ,"tdcaTracks/F"); | |
485 | fNtuple1->Branch("tCosPointingAngle" ,&tCosPointingAngle ,"tCosPointingAngle/F"); | |
486 | fNtuple1->Branch("tDCAV0toPrimaryVertex",&tDCAV0toPrimaryVertex,"tDCAV0toPrimaryVertex/F"); | |
487 | fNtuple1->Branch("tHeSign" ,&tHeSign ,"tHeSign/F"); | |
488 | fNtuple1->Branch("tHepInTPC" ,&tHepInTPC ,"tHepInTPC/F"); | |
489 | fNtuple1->Branch("tHeTPCsignal" ,&tHeTPCsignal ,"tHeTPCsignal/F"); | |
490 | fNtuple1->Branch("tDcaHeToPrimVertex" ,&tDcaHeToPrimVertex ,"tDcaHeToPrimVertex/F"); | |
491 | fNtuple1->Branch("tHeEta" ,&tHeEta ,"tHeEta/F"); | |
492 | fNtuple1->Branch("tmomHex" ,&tmomHex ,"tmomHex/F"); | |
493 | fNtuple1->Branch("tmomHey" ,&tmomHey ,"tmomHey/F"); | |
494 | fNtuple1->Branch("tmomHez" ,&tmomHez ,"tmomHez/F"); | |
495 | fNtuple1->Branch("tmomHeAtSVx" ,&tmomHeAtSVx ,"tmomHeAtSVx/F"); | |
496 | fNtuple1->Branch("tmomHeAtSVy" ,&tmomHeAtSVy ,"tmomHeAtSVy/F"); | |
497 | fNtuple1->Branch("tmomHeAtSVz" ,&tmomHeAtSVz ,"tmomHeAtSVz/F"); | |
498 | fNtuple1->Branch("tHeTPCNcls" ,&tHeTPCNcls ,"tHeTPCNcls/F"); | |
499 | fNtuple1->Branch("tHeimpactXY" ,&tHeimpactXY ,"tHeimpactXY/F"); | |
500 | fNtuple1->Branch("tHeimpactZ" ,&tHeimpactZ ,"tHeimpactZ/F"); | |
501 | fNtuple1->Branch("tHeITSClusterMap" ,&tHeITSClusterMap ,"tHeITSClusterMap/F"); | |
502 | fNtuple1->Branch("tIsHeITSRefit" ,&tIsHeITSRefit ,"tIsHeITSRefit/F"); | |
503 | fNtuple1->Branch("tPionSign" ,&tPionSign ,"tPionSign/F"); | |
504 | fNtuple1->Branch("tPionpInTPC" ,&tPionpInTPC ,"tPionpInTPC/F"); | |
505 | fNtuple1->Branch("tPionTPCsignal" ,&tPionTPCsignal ,"tPionTPCsignal/F"); | |
506 | fNtuple1->Branch("tDcaPionToPrimVertex" ,&tDcaPionToPrimVertex ,"tDcaPionToPrimVertex/F"); | |
507 | fNtuple1->Branch("tPionEta" ,&tPionEta ,"tPionEta/F"); | |
508 | fNtuple1->Branch("tmomPionx" ,&tmomPionx ,"tmomPionx/F"); | |
509 | fNtuple1->Branch("tmomPiony" ,&tmomPiony ,"tmomPiony/F"); | |
510 | fNtuple1->Branch("tmomPionz" ,&tmomPionz ,"tmomPionz/F"); | |
511 | fNtuple1->Branch("tmomNegPionAtSVx" ,&tmomNegPionAtSVx ,"tmomNegPionAtSVx/F"); | |
512 | fNtuple1->Branch("tmomNegPionAtSVy" ,&tmomNegPionAtSVy ,"tmomNegPionAtSVy/F"); | |
513 | fNtuple1->Branch("tmomNegPionAtSVz" ,&tmomNegPionAtSVz ,"tmomNegPionAtSVz/F"); | |
514 | fNtuple1->Branch("tPionTPCNcls" ,&tPionTPCNcls ,"tPionTPCNcls/F"); | |
515 | fNtuple1->Branch("tPionimpactXY" ,&tPionimpactXY ,"tPionimpactXY/F"); | |
516 | fNtuple1->Branch("tPionimpactZ" ,&tPionimpactZ ,"tPionimpactZ/F"); | |
517 | fNtuple1->Branch("tPionITSClusterMap" ,&tPionITSClusterMap ,"tPionITSClusterMap/F"); | |
518 | fNtuple1->Branch("tIsPiITSRefit" ,&tIsPiITSRefit ,"tIsPiITSRefit/F"); | |
519 | fNtuple1->Branch("txn" ,&txn ,"txn/F"); | |
520 | fNtuple1->Branch("txp" ,&txp ,"txp/F"); | |
521 | fNtuple1->Branch("tchi2He" ,&tchi2He ,"tchi2He/F"); | |
522 | fNtuple1->Branch("tchi2Pi" ,&tchi2Pi ,"tchi2Pi/F"); | |
523 | ||
524 | } | |
525 | ||
526 | if(! fNtuple4 ) { | |
527 | ||
528 | fNtuple4 = new TTree("fNtuple4","fNtuple4"); | |
529 | ||
530 | fNtuple4->Branch("t3LHlrunNumber" ,&t3LHlrunNumber ,"t3LHlrunNumber/F"); | |
531 | fNtuple4->Branch("t3LHlBCNumber" ,&t3LHlBCNumber ,"t3LHlBCNumber/F"); | |
532 | fNtuple4->Branch("t3LHlOrbitNumber" ,&t3LHlOrbitNumber ,"t3LHlOrbitNumber/F"); | |
533 | fNtuple4->Branch("t3LHlPeriodNumber" ,&t3LHlPeriodNumber ,"t3LHlPeriodNumber/F"); | |
534 | fNtuple4->Branch("t3LHleventtype" ,&t3LHleventtype ,"t3LHleventtype/F"); | |
535 | fNtuple4->Branch("t3LHlpercentile" ,&t3LHlpercentile ,"t3LHlpercentile/F"); | |
536 | fNtuple4->Branch("t3LHlPx" ,&t3LHlPx ,"t3LHlPx/F"); | |
537 | fNtuple4->Branch("t3LHlPy" ,&t3LHlPy ,"t3LHlPy/F"); | |
538 | fNtuple4->Branch("t3LHlPz" ,&t3LHlPz ,"t3LHlPz/F"); | |
539 | fNtuple4->Branch("t3LHlEta" ,&t3LHlEta ,"t3LHlEta/F"); | |
540 | fNtuple4->Branch("t3LHlY" ,&t3LHlY ,"t3LHlY/F"); | |
541 | fNtuple4->Branch("t3LHlM" ,&t3LHlM ,"t3LHlM/F"); | |
542 | fNtuple4->Branch("t3LHlxPrimaryVertex" ,&t3LHlxPrimaryVertex ,"t3LHlxPrimaryVertex/F"); | |
543 | fNtuple4->Branch("t3LHlyPrimaryVertex" ,&t3LHlyPrimaryVertex ,"t3LHlyPrimaryVertex/F"); | |
544 | fNtuple4->Branch("t3LHlzPrimaryVertex" ,&t3LHlzPrimaryVertex ,"t3LHlzPrimaryVertex/F"); | |
545 | fNtuple4->Branch("t3LHlp0px" ,&t3LHlp0px ,"t3LHlp0px/F"); | |
546 | fNtuple4->Branch("t3LHlp0py" ,&t3LHlp0py ,"t3LHlp0py/F"); | |
547 | fNtuple4->Branch("t3LHlp0pz" ,&t3LHlp0pz ,"t3LHlp0pz/F"); | |
548 | fNtuple4->Branch("t3LHlp0ch" ,&t3LHlp0ch ,"t3LHlp0ch/F"); | |
549 | fNtuple4->Branch("t3LHlp1px" ,&t3LHlp1px ,"t3LHlp1px/F"); | |
550 | fNtuple4->Branch("t3LHlp1py" ,&t3LHlp1py ,"t3LHlp1py/F"); | |
551 | fNtuple4->Branch("t3LHlp1pz" ,&t3LHlp1pz ,"t3LHlp1pz/F"); | |
552 | fNtuple4->Branch("t3LHlp1ch" ,&t3LHlp1ch ,"t3LHlp1ch/F"); | |
553 | ||
554 | ||
555 | } | |
556 | ||
557 | ||
558 | PostData(1, fListHist); | |
559 | PostData(2, fNtuple1); | |
560 | PostData(3, fNtuple4); | |
561 | }// end UserCreateOutputObjects | |
562 | ||
563 | ||
564 | ||
565 | //====================== USER EXEC ======================== | |
566 | ||
567 | void AliAnalysisTaskReadNuclexAOD::UserExec(Option_t *) | |
568 | { | |
569 | //_______________________________________________________________________ | |
570 | ||
571 | //!*********************!// | |
572 | //! Define variables !// | |
573 | //!*********************!// | |
574 | ||
575 | Double_t xPrimaryVertex=0.,yPrimaryVertex=0.,zPrimaryVertex=0.; | |
576 | ||
577 | ULong_t statusT; | |
578 | ULong_t statusPi; | |
579 | ||
580 | Bool_t IsHeITSRefit=kFALSE,IsPiITSRefit=kFALSE ; | |
581 | ||
582 | Double_t fPos[3]={0.,0.,0.}; | |
583 | ||
584 | Double_t runNumber=0.; | |
585 | Double_t BCNumber=0.; | |
586 | Double_t OrbitNumber=0.; | |
587 | Double_t PeriodNumber=0.; | |
588 | ||
589 | Double_t Helium3Mass = 2.80839; | |
590 | Double_t PionMass = 0.13957; | |
591 | ||
592 | // TLORENTZ vectors | |
593 | ||
594 | TLorentzVector vPion,vHelium,vSum; | |
595 | TLorentzVector vHyp; | |
596 | TLorentzVector vp0,vp1,vS; | |
597 | //!---------------------------------------------------------------- | |
598 | //! A set of very loose parameters for cuts | |
599 | ||
600 | // Double_t fgChi2max=33.; //! max chi2 | |
601 | Double_t fgDNmin=0.05; //! min imp parameter for the 1st daughter = 500um | |
602 | // Double_t fgDPmin=0.05; //! min imp parameter for the 2nd daughter = 500um | |
603 | Double_t fgDCAmax=1.; //! max DCA between the daughter tracks in cm | |
604 | // Double_t fgCPAmin=0.99; //! min cosine of V0's pointing angle | |
605 | Double_t fgRmin=0.1; //! min radius of the fiducial volume = 1 mm | |
606 | Double_t fgRmax=200.; //! max radius of the fiducial volume = 2 m | |
607 | ||
608 | //!----------------------------------------------------------------- | |
609 | ||
610 | // Main loop | |
611 | // Called for EACH event | |
612 | ||
613 | nevent++; //--> This is important | |
614 | ||
615 | AliVEvent *event = InputEvent(); | |
616 | if (!event) { Printf("ERROR: Could not retrieve event"); return; } | |
617 | Info("AliAnalysisTaskReadNuclexAOD","Starting UserExec"); | |
618 | ||
619 | SetDataType("REAL"); | |
620 | ||
621 | AliAODEvent *lAODevent=(AliAODEvent *)InputEvent(); | |
622 | if (!lAODevent) { | |
623 | Printf("ERROR: aod not available"); | |
624 | // fHistLog->Fill(98); | |
625 | return; | |
626 | } | |
627 | ||
628 | fHistEventMultiplicity->Fill(0.5); | |
629 | ||
630 | //************************************************************* | |
631 | ||
632 | runNumber = lAODevent->GetRunNumber(); | |
633 | BCNumber = lAODevent->GetBunchCrossNumber(); | |
634 | OrbitNumber = lAODevent->GetOrbitNumber(); | |
635 | PeriodNumber = lAODevent->GetPeriodNumber(); | |
636 | ||
637 | AliCentrality *centrality = lAODevent->GetCentrality(); | |
638 | centrality = lAODevent->GetCentrality(); | |
639 | ||
640 | Float_t percentile=centrality->GetCentralityPercentile("V0M"); | |
0a918d8d | 641 | Float_t refMult = ((AliVAODHeader*)lAODevent->GetHeader())->GetRefMultiplicity(); |
930d0706 | 642 | |
643 | fHistTrackMultiplicity->Fill(refMult,percentile); //tracce per evento | |
644 | ||
645 | // cout<<"Centrality: "<<percentile<<" number of track: "<<lAODevent->GetHeader()->GetRefMultiplicity()<<endl; | |
646 | //************************************************************* | |
647 | ||
648 | AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager(); | |
649 | AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler()); | |
650 | ||
651 | Int_t eventtype=-99; | |
652 | ||
653 | Bool_t isSelectedCentral = (inputHandler->IsEventSelected() & AliVEvent::kCentral); | |
654 | Bool_t isSelectedSemiCentral = (inputHandler->IsEventSelected() & AliVEvent::kSemiCentral); | |
655 | Bool_t isSelectedMB = (inputHandler->IsEventSelected() & AliVEvent::kMB); | |
656 | ||
657 | if(isSelectedCentral){ | |
658 | fHistEventMultiplicity->Fill(3.5); | |
659 | fHistTrackMultiplicityCent->Fill(refMult,percentile); | |
660 | eventtype=1; | |
661 | } | |
662 | ||
663 | if(isSelectedSemiCentral){ | |
664 | fHistEventMultiplicity->Fill(4.5); | |
665 | fHistTrackMultiplicitySemiCent->Fill(refMult,percentile); | |
666 | eventtype=2; | |
667 | } | |
668 | ||
669 | if(isSelectedMB){ | |
670 | fHistEventMultiplicity->Fill(5.5); | |
671 | fHistTrackMultiplicityMB->Fill(refMult,percentile); | |
672 | eventtype=3; | |
673 | } | |
674 | ||
675 | if(eventtype==-99)return; | |
676 | // cout<<"eventtype: "<<eventtype<<endl; | |
677 | ||
678 | // if(!isSelectedCentral)return; | |
679 | // if(!isSelectedSemiCentral)return; | |
680 | // if(!isSelectedMB)return; | |
681 | ||
682 | cout<<"eventtype: "<<eventtype<<endl; | |
683 | ||
684 | //------------------------------- | |
685 | ||
686 | Double_t lBestPrimaryVtxPos[3] = {-100.0, -100.0, -100.0}; | |
687 | Double_t lMagneticField = -10.; | |
688 | ||
689 | AliAODVertex* primvtx = lAODevent->GetPrimaryVertex(); | |
690 | if(!primvtx){ | |
691 | cout<<"No PV"<<endl; | |
692 | return; | |
693 | } | |
694 | fHistEventMultiplicity->Fill(1.5); | |
695 | primvtx->GetXYZ( lBestPrimaryVtxPos ); | |
696 | ||
697 | if(TMath::Abs(lBestPrimaryVtxPos[2]) > 10.0 ) { | |
698 | AliWarning("Pb / | Z position of Best Prim Vtx | > 10.0 cm ... return !"); | |
699 | return; | |
700 | } | |
701 | fHistEventMultiplicity->Fill(2.5); | |
702 | ||
703 | ||
704 | if(eventtype==1){ | |
705 | fHistTrackMultiplicityPVCent->Fill(refMult,percentile); | |
706 | fHistEventMultiplicity->Fill(6.5); | |
707 | } | |
708 | ||
709 | if(eventtype==2){ | |
710 | fHistTrackMultiplicityPVSemiCent->Fill(refMult,percentile); | |
711 | fHistEventMultiplicity->Fill(7.5); | |
712 | } | |
713 | ||
714 | if(eventtype==3){ | |
715 | fHistTrackMultiplicityPVMB->Fill(refMult,percentile); | |
716 | fHistEventMultiplicity->Fill(8.5); | |
717 | } | |
718 | ||
719 | lMagneticField = lAODevent->GetMagneticField(); | |
720 | ||
721 | xPrimaryVertex = lBestPrimaryVtxPos[0]; | |
722 | yPrimaryVertex = lBestPrimaryVtxPos[1]; | |
723 | zPrimaryVertex = lBestPrimaryVtxPos[2]; | |
724 | ||
725 | //-------------------------------------------------------- | |
726 | ||
727 | AliAODHandler* aodHandler = (AliAODHandler*)((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler()); | |
728 | ||
729 | aodTree = aodHandler->GetTree(); | |
730 | aodTree->SetBranchAddress("Nuclei",&Nuclei); | |
731 | aodTree->SetBranchAddress("SecondaryVertices",&SecondaryVertices); | |
732 | aodTree->SetBranchAddress("DaughterTracks",&DaughterTracks); | |
733 | ||
734 | //--------------------------------------------------------- | |
735 | ||
736 | aodTree->GetEntry(nevent); | |
737 | ||
738 | if(Nuclei-> GetEntriesFast()>0) | |
739 | fHistEventMultiplicity->Fill(2); | |
740 | ||
741 | if(SecondaryVertices-> GetEntriesFast()>0) | |
742 | fHistEventMultiplicity->Fill(3); | |
743 | ||
744 | for(Int_t i=0; i < SecondaryVertices-> GetEntriesFast() ; i++){ | |
745 | ||
746 | AliAODRecoDecayLF2Prong *d = (AliAODRecoDecayLF2Prong*)SecondaryVertices->UncheckedAt(i); | |
747 | //cout<<"\n\n\nPT: "<<d->Pt()<<endl<<endl<<endl<<endl; | |
748 | if(!d) continue; | |
749 | ||
750 | fHistEventMultiplicity->Fill(10.5); | |
751 | ||
752 | // Double_t tDecayVertexV0[3]; | |
753 | // if(d->GetXYZ(tDecayVertexV0)) | |
754 | ||
755 | Double_t tV0mom[3]; | |
756 | d->PxPyPz(tV0mom); | |
757 | ||
758 | // TLORENTZ vectors | |
759 | ||
760 | // cout<<"px prong 1: "<<d->PxProng(0)<<endl; | |
761 | ||
762 | vHyp.SetXYZM(tV0mom[0],tV0mom[1],tV0mom[2],2.991); | |
763 | ||
764 | ||
765 | vp0.SetXYZM(d->PxProng(0),d->PyProng(0),d->PzProng(0),PionMass); | |
766 | vp1.SetXYZM(d->PxProng(1),d->PyProng(1),d->PzProng(1),Helium3Mass); | |
767 | vS = vp0 + vp1; | |
768 | ||
769 | // cout<<"Momemnto pt: "<<lPt<<endl; | |
770 | ||
771 | t3LHlrunNumber =(Float_t)runNumber; | |
772 | t3LHlBCNumber =(Float_t)BCNumber; | |
773 | t3LHlOrbitNumber =(Float_t)OrbitNumber; | |
774 | t3LHlPeriodNumber =(Float_t)PeriodNumber; | |
775 | t3LHleventtype =(Float_t)eventtype; | |
776 | t3LHlpercentile =(Float_t)percentile; | |
777 | t3LHlPx =(Float_t)tV0mom[0]; | |
778 | t3LHlPy =(Float_t)tV0mom[1]; | |
779 | t3LHlPz =(Float_t)tV0mom[2]; | |
780 | t3LHlEta =(Float_t)d->Eta(); | |
781 | t3LHlY =(Float_t)vHyp.Rapidity(); | |
782 | t3LHlM =(Float_t)vS.M(); | |
783 | t3LHlxPrimaryVertex =(Float_t)xPrimaryVertex; | |
784 | t3LHlyPrimaryVertex =(Float_t)yPrimaryVertex; | |
785 | t3LHlzPrimaryVertex =(Float_t)zPrimaryVertex; | |
786 | ||
787 | t3LHlp0px =(Float_t)d->PxProng(0); | |
788 | t3LHlp0py =(Float_t)d->PyProng(0); | |
789 | t3LHlp0pz =(Float_t)d->PzProng(0); | |
790 | t3LHlp0ch =(Float_t)d->ChargeProng(0); | |
791 | t3LHlp1px =(Float_t)d->PxProng(1); | |
792 | t3LHlp1py =(Float_t)d->PyProng(1); | |
793 | t3LHlp1pz =(Float_t)d->PzProng(1); | |
794 | t3LHlp1ch =(Float_t)d->ChargeProng(1); | |
795 | ||
796 | fNtuple4->Fill(); | |
797 | ||
798 | } | |
799 | ||
800 | ||
801 | //---------------------------------------- | |
802 | // Loop on tracks like-AnalysisTaskHelium3Pi.cxx | |
803 | ||
804 | Int_t TrackNumber= DaughterTracks-> GetEntriesFast(); | |
805 | ||
806 | TArrayI Track0(TrackNumber); //Pions | |
807 | Int_t nTrack0=0; | |
808 | ||
809 | TArrayI Track1(TrackNumber); //Helium3 | |
810 | Int_t nTrack1=0; | |
811 | ||
812 | ||
813 | Float_t impactXY=-999, impactZ=-999; | |
814 | Float_t impactXYpi=-999, impactZpi=-999; | |
815 | ||
816 | for(Int_t j=0; j<TrackNumber; j++){ | |
817 | // cout<<"eventtype inside: "<<eventtype<<endl; | |
818 | // cout<<"Inside loop tracks"<<endl; | |
819 | AliVTrack *track = (AliVTrack*)DaughterTracks->UncheckedAt(j); | |
820 | AliAODTrack *aodtrack =(AliAODTrack*)track; | |
821 | ||
822 | fhBB->Fill(aodtrack->GetDetPid()->GetTPCmomentum()*aodtrack->Charge(),aodtrack->GetTPCsignal()); | |
823 | ||
824 | //----------------------------------------------------------- | |
825 | //Track cuts | |
826 | // if(aodtrack->GetTPCNcls() < 80 )continue; | |
827 | // if(aodtrack->Chi2perNDF() > 5 )continue; | |
828 | ||
829 | // if (!aodtrack->IsOn(AliAODTrack::kTPCrefit)) continue; | |
830 | // if (!aodtrack->IsOn(AliAODTrack::kTPCin)) continue; | |
831 | // if (aodtrack->IsOn(AliAODTrack::kITSpureSA)) continue; | |
832 | ||
833 | //--------------------------------------------------------------- | |
834 | ||
835 | if (aodtrack->GetTPCsignal()<100){ | |
836 | Track0[nTrack0++]=j; | |
837 | fhBBPions->Fill(aodtrack->GetDetPid()->GetTPCmomentum()*aodtrack->Charge(),aodtrack->GetTPCsignal()); | |
838 | } | |
839 | ||
840 | else{ | |
841 | Track1[nTrack1++]=j; | |
842 | fhBBHe->Fill(aodtrack->GetDetPid()->GetTPCmomentum()*aodtrack->Charge(),aodtrack->GetTPCsignal()); | |
843 | } | |
844 | ||
845 | } | |
846 | ||
847 | Track0.Set(nTrack0); | |
848 | Track1.Set(nTrack1); | |
849 | ||
850 | ||
851 | //cout<<"nTrack0: "<<nTrack0<<endl; | |
852 | //cout<<"nTrack1: "<<nTrack1<<endl; | |
853 | ||
854 | ||
855 | //cout<<"Track loops..."<<endl; | |
856 | ||
857 | Double_t DcaHeToPrimVertex=0; | |
858 | Double_t DcaPionToPrimVertex=0; | |
859 | ||
860 | impactXY=-999, impactZ=-999; | |
861 | impactXYpi=-999, impactZpi=-999; | |
862 | ||
863 | ||
864 | AliESDtrack *PionTrack = 0x0; | |
865 | AliESDtrack *HeTrack = 0x0; | |
866 | ||
867 | ||
868 | // Vettors for il PxPyPz | |
869 | ||
870 | Double_t momPionVett[3]; | |
871 | for(Int_t i=0;i<3;i++)momPionVett[i]=0; | |
872 | ||
873 | Double_t momHeVett[3]; | |
874 | for(Int_t i=0;i<3;i++)momHeVett[i]=0; | |
875 | ||
876 | //At SV | |
877 | ||
878 | Double_t momPionVettAt[3]; | |
879 | for(Int_t i=0;i<3;i++)momPionVettAt[i]=0; | |
880 | ||
881 | Double_t momHeVettAt[3]; | |
882 | for(Int_t i=0;i<3;i++)momHeVettAt[i]=0; | |
883 | ||
884 | ||
885 | //Loop on the tracks | |
886 | ||
887 | for (Int_t k=0; k <nTrack0 ; k++) { //! Pion Tracks Loop | |
888 | ||
889 | DcaPionToPrimVertex=0.; | |
890 | DcaHeToPrimVertex=0; | |
891 | ||
892 | Int_t Track0idx=Track0[k]; | |
893 | ||
894 | AliVTrack *trackpi = (AliVTrack*)DaughterTracks->UncheckedAt(Track0idx); | |
895 | PionTrack = new AliESDtrack(trackpi); | |
896 | ||
897 | statusPi = (ULong_t)trackpi->GetStatus(); | |
898 | IsPiITSRefit = ((statusPi) & (AliESDtrack::kITSrefit)); | |
899 | ||
900 | if (PionTrack) | |
901 | DcaPionToPrimVertex = TMath::Abs(PionTrack->GetD(xPrimaryVertex, yPrimaryVertex,lMagneticField)); | |
902 | ||
903 | //cout<<"DcaPionToPrimVertex: "<<DcaPionToPrimVertex<<endl; | |
904 | ||
905 | if(DcaPionToPrimVertex<0.2)continue; | |
906 | AliExternalTrackParam trackInPion(*PionTrack); | |
907 | ||
908 | for (Int_t i=0; i<nTrack1; i++){ //! He Tracks Loop | |
909 | ||
910 | Int_t Track1idx=Track1[i]; | |
911 | ||
912 | AliVTrack *trackhe = (AliVTrack*)DaughterTracks->UncheckedAt(Track1idx); | |
913 | HeTrack = new AliESDtrack(trackhe); | |
914 | ||
915 | statusT= (ULong_t)HeTrack->GetStatus(); | |
916 | IsHeITSRefit = (statusT & AliESDtrack::kITSrefit); | |
917 | ||
918 | if (HeTrack) | |
919 | DcaHeToPrimVertex = TMath::Abs(HeTrack->GetD(xPrimaryVertex, yPrimaryVertex,lMagneticField)); //OK | |
920 | ||
921 | AliExternalTrackParam trackInHe(*HeTrack); | |
922 | ||
923 | if ( DcaPionToPrimVertex < fgDNmin) //OK | |
924 | if ( DcaHeToPrimVertex < fgDNmin) continue; //OK | |
925 | ||
926 | Double_t xn, xp; | |
927 | Double_t dca=0.; | |
928 | ||
929 | dca= PionTrack->GetDCA(HeTrack,lMagneticField,xn,xp); //!dca (Neg to Pos) | |
930 | ||
931 | //cout<<"dca tracks: "<<dca<<endl; | |
932 | ||
933 | if (dca > fgDCAmax) continue; | |
934 | if ((xn+xp) > 2*fgRmax) continue; | |
935 | if ((xn+xp) < 2*fgRmin) continue; | |
936 | ||
937 | Bool_t corrected=kFALSE; | |
938 | if ((trackInPion.GetX() > 3.) && (xn < 3.)) { | |
939 | //correct for the beam pipe material | |
940 | corrected=kTRUE; | |
941 | } | |
942 | if ((trackInHe.GetX() > 3.) && (xp < 3.)) { | |
943 | //correct for the beam pipe material | |
944 | corrected=kTRUE; | |
945 | } | |
946 | if (corrected) { | |
947 | dca=trackInPion.GetDCA(&trackInHe,lMagneticField,xn,xp); | |
948 | if (dca > fgDCAmax) continue; | |
949 | if ((xn+xp) > 2*fgRmax) continue; | |
950 | if ((xn+xp) < 2*fgRmin) continue; | |
951 | } | |
952 | ||
953 | //=============================================// | |
954 | // Make "V0" with found tracks // | |
955 | //=============================================// | |
956 | ||
957 | trackInPion.PropagateTo(xn,lMagneticField); | |
958 | trackInHe.PropagateTo(xp,lMagneticField); | |
959 | ||
960 | AliESDv0 vertex(trackInPion,Track0idx,trackInHe,Track1idx); | |
961 | // if (vertex.GetChi2V0() > fgChi2max) continue; | |
962 | ||
963 | //cout<<"Made v0"<<endl; | |
964 | ||
965 | Float_t CosPointingAngle=vertex.GetV0CosineOfPointingAngle(xPrimaryVertex,yPrimaryVertex,zPrimaryVertex); //PointingAngle | |
966 | //cout<<"cpa: "<<CosPointingAngle<<endl; | |
967 | // if (CosPointingAngle < fgCPAmin) continue; | |
968 | ||
969 | vertex.SetDcaV0Daughters(dca); | |
970 | vertex.SetV0CosineOfPointingAngle(CosPointingAngle); | |
971 | ||
972 | fPos[0]=vertex.Xv(); | |
973 | fPos[1]=vertex.Yv(); | |
974 | fPos[2]=vertex.Zv(); | |
975 | ||
976 | HeTrack->PxPyPz(momHeVett); | |
977 | PionTrack->PxPyPz(momPionVett); | |
978 | ||
979 | Double_t raggio=TMath::Sqrt(fPos[0]*fPos[0]+fPos[1]*fPos[1]+fPos[2]*fPos[2]); | |
980 | HeTrack->GetPxPyPzAt(raggio,lMagneticField,momHeVettAt); | |
981 | PionTrack->GetPxPyPzAt(raggio,lMagneticField,momPionVettAt); | |
982 | ||
983 | //------------------------------------------------------------------------// | |
984 | ||
985 | HeTrack->GetImpactParameters(impactXY, impactZ); | |
986 | PionTrack->GetImpactParameters(impactXYpi, impactZpi); | |
987 | ||
988 | // if(vertex.GetD(xPrimaryVertex,yPrimaryVertex,zPrimaryVertex)>3) continue; | |
989 | ||
990 | //salvo solo fino a 3.1 GeV/c2 | |
991 | ||
992 | vHelium.SetXYZM(2*momHeVettAt[0],2*momHeVettAt[1],2*momHeVettAt[2],Helium3Mass); | |
993 | vPion.SetXYZM(momPionVettAt[0],momPionVettAt[1],momPionVettAt[2],PionMass); | |
994 | vSum=vHelium+vPion; | |
995 | ||
996 | // if(vSum.M()>3.2) | |
997 | // continue; | |
998 | ||
999 | Int_t fIdxInt[200]; //dummy array | |
1000 | Int_t nClustersTPCHe = HeTrack->GetTPCclusters(fIdxInt); | |
1001 | Int_t nClustersTPCPi = PionTrack->GetTPCclusters(fIdxInt); | |
1002 | ||
1003 | //cout<<"Cos PA: "<<CosPointingAngle<<endl; | |
1004 | fHistEventMultiplicity->Fill(11.5); | |
1005 | //------------------------------------------------------------- | |
1006 | ||
1007 | trunNumber =(Float_t)runNumber; | |
1008 | tbunchcross =(Float_t)BCNumber; | |
1009 | torbit =(Float_t)OrbitNumber; | |
1010 | tperiod =(Float_t)PeriodNumber; | |
1011 | teventtype =(Float_t)eventtype; | |
1012 | tTrackNumber =(Float_t)TrackNumber; | |
1013 | tpercentile =(Float_t)percentile; | |
1014 | txPrimaryVertex =(Float_t)xPrimaryVertex; //PRIMARY | |
1015 | tyPrimaryVertex =(Float_t)yPrimaryVertex; | |
1016 | tzPrimaryVertex =(Float_t)zPrimaryVertex; | |
1017 | txSecondaryVertex =(Float_t)fPos[0]; //SECONDARY | |
1018 | tySecondaryVertex =(Float_t)fPos[1]; | |
1019 | tzSecondaryVertex =(Float_t)fPos[2]; | |
1020 | tdcaTracks =(Float_t)dca; //between 2 tracks | |
1021 | tCosPointingAngle =(Float_t)CosPointingAngle; //cosPointingAngle da V0 | |
1022 | tDCAV0toPrimaryVertex =(Float_t)vertex.GetD(xPrimaryVertex,yPrimaryVertex,zPrimaryVertex); | |
1023 | tHeSign =(Float_t)HeTrack->GetSign(); //He | |
1024 | tHepInTPC =(Float_t)trackInHe.GetP(); | |
1025 | tHeTPCsignal =(Float_t)HeTrack->GetTPCsignal(); | |
1026 | tDcaHeToPrimVertex =(Float_t)DcaHeToPrimVertex; | |
1027 | tHeEta =(Float_t)HeTrack->Eta(); | |
1028 | tmomHex =(Float_t)momHeVett[0]; | |
1029 | tmomHey =(Float_t)momHeVett[1]; | |
1030 | tmomHez =(Float_t)momHeVett[2]; | |
1031 | tmomHeAtSVx =(Float_t)momHeVettAt[0]; | |
1032 | tmomHeAtSVy =(Float_t)momHeVettAt[1]; | |
1033 | tmomHeAtSVz =(Float_t)momHeVettAt[2]; | |
1034 | tHeTPCNcls =(Float_t)HeTrack->GetTPCNcls(); | |
1035 | tHeimpactXY =(Float_t)impactXY; | |
1036 | tHeimpactZ =(Float_t)impactZ; | |
1037 | tHeITSClusterMap =(Float_t)HeTrack->GetITSClusterMap(); | |
1038 | tIsHeITSRefit =(Float_t)IsHeITSRefit; | |
1039 | tPionSign =(Float_t)PionTrack->GetSign(); //Pion | |
1040 | tPionpInTPC =(Float_t)trackInPion.GetP(); | |
1041 | tPionTPCsignal =(Float_t)PionTrack->GetTPCsignal(); | |
1042 | tDcaPionToPrimVertex =(Float_t)DcaPionToPrimVertex; | |
1043 | tPionEta =(Float_t)PionTrack->Eta(); | |
1044 | tmomPionx =(Float_t)momPionVett[0]; | |
1045 | tmomPiony =(Float_t)momPionVett[1]; | |
1046 | tmomPionz =(Float_t)momPionVett[2]; | |
1047 | tmomNegPionAtSVx =(Float_t)momPionVettAt[0]; | |
1048 | tmomNegPionAtSVy =(Float_t)momPionVettAt[1]; | |
1049 | tmomNegPionAtSVz =(Float_t)momPionVettAt[2]; | |
1050 | tPionTPCNcls =(Float_t)PionTrack->GetTPCNcls(); | |
1051 | tPionimpactXY =(Float_t)impactXYpi; | |
1052 | tPionimpactZ =(Float_t)impactZpi; | |
1053 | tPionITSClusterMap =(Float_t)PionTrack->GetITSClusterMap(); | |
1054 | tIsPiITSRefit =(Float_t)IsPiITSRefit; | |
1055 | txn =(Float_t)xn; | |
1056 | txp =(Float_t)xp; | |
1057 | tchi2He =(Float_t)HeTrack->GetTPCchi2()/(Float_t)(nClustersTPCHe); | |
1058 | tchi2Pi =(Float_t)PionTrack->GetTPCchi2()/(Float_t)(nClustersTPCPi); | |
1059 | ||
1060 | fNtuple1->Fill(); | |
1061 | vertex.Delete(); | |
1062 | ||
1063 | } | |
1064 | ||
1065 | } | |
1066 | ||
1067 | PostData(1,fListHist); | |
1068 | PostData(2,fNtuple1); | |
1069 | PostData(3,fNtuple4); | |
1070 | ||
1071 | } //end userexec | |
1072 | ||
1073 | ||
1074 | //________________________________________________________________________ | |
1075 | ||
1076 | void AliAnalysisTaskReadNuclexAOD::Terminate(Option_t *) | |
1077 | { | |
1078 | // Draw result to the screen | |
1079 | // Called once at the end of the query | |
1080 | } | |
1081 | ||
1082 |