]>
Commit | Line | Data |
---|---|---|
c683985a | 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 | // AliAnalysisTaskHelium3Pi class | |
15 | //----------------------------------------------------------------- | |
16 | ||
17 | ||
18 | class TTree; | |
19 | class TParticle; | |
20 | class TVector3; | |
21 | ||
22 | #include "AliAnalysisManager.h" | |
23 | #include <AliMCEventHandler.h> | |
24 | #include <AliMCEvent.h> | |
25 | #include <AliStack.h> | |
26 | ||
27 | class AliESDVertex; | |
28 | class AliAODVertex; | |
29 | class AliESDv0; | |
30 | class AliAODv0; | |
31 | class AliCascadeVertexer; | |
32 | ||
33 | #include <iostream> | |
34 | #include "AliAnalysisTaskSE.h" | |
35 | #include "TList.h" | |
36 | #include "TH1.h" | |
37 | #include "TH2.h" | |
38 | #include "TH3.h" | |
39 | #include "TNtuple.h" | |
40 | #include "TGraph.h" | |
41 | #include "TCutG.h" | |
42 | #include "TF1.h" | |
43 | #include "TCanvas.h" | |
44 | #include "TMath.h" | |
45 | #include "TChain.h" | |
46 | #include "Riostream.h" | |
47 | #include "AliLog.h" | |
48 | #include "AliCascadeVertexer.h" | |
49 | #include "AliESDEvent.h" | |
50 | #include "AliESDtrack.h" | |
51 | #include "AliExternalTrackParam.h" | |
52 | #include "AliAODEvent.h" | |
53 | #include "AliInputEventHandler.h" | |
54 | #include "AliESDcascade.h" | |
55 | #include "AliAODcascade.h" | |
56 | #include "AliAnalysisTaskHelium3Pi.h" | |
57 | #include "AliESDtrackCuts.h" | |
58 | #include "AliCentrality.h" | |
59 | #include "TString.h" | |
60 | #include <TDatime.h> | |
61 | #include <TRandom3.h> | |
62 | #include <TLorentzVector.h> | |
5d169b75 | 63 | //#include <AliVTrack.h> |
c683985a | 64 | |
65 | const Int_t AliAnalysisTaskHelium3Pi::fgNrot = 15; | |
66 | ||
67 | ClassImp(AliAnalysisTaskHelium3Pi) | |
68 | ||
69 | //________________________________________________________________________ | |
70 | AliAnalysisTaskHelium3Pi::AliAnalysisTaskHelium3Pi() | |
71 | : AliAnalysisTaskSE(), | |
72 | fAnalysisType("ESD"), | |
73 | fCollidingSystems(0), | |
5d169b75 | 74 | fESDtrackCuts(0), |
c683985a | 75 | fDataType("REAL"), |
d52dfc4c | 76 | fListHist(0), |
c683985a | 77 | fHistEventMultiplicity(0), |
78 | fHistTrackMultiplicity(0), | |
79 | fHistTrackMultiplicityCent(0), | |
80 | fHistTrackMultiplicitySemiCent(0), | |
81 | fHistTrackMultiplicityMB(0), | |
82 | fHistTrackMultiplicityPVCent(0), | |
83 | fHistTrackMultiplicityPVSemiCent(0), | |
84 | fHistTrackMultiplicityPVMB(0), | |
c683985a | 85 | fhBB(0), |
86 | fhTOF(0), | |
87 | fhMassTOF(0), | |
88 | fhBBPions(0), | |
89 | fhBBHe(0), | |
90 | fhNaPos(0), | |
91 | fhNaNeg(0), | |
92 | fBetavsTPCsignalPos(0), | |
93 | fBetavsTPCsignalNeg(0), | |
c683985a | 94 | fNtuple1(0), |
d52dfc4c | 95 | trunNumber(0), |
96 | tbunchcross(0), | |
97 | torbit(0), | |
98 | tperiod(0), | |
99 | teventtype(0), | |
100 | tTrackNumber(0), | |
101 | tpercentile(0), | |
102 | txPrimaryVertex(0), | |
103 | tyPrimaryVertex(0), | |
104 | tzPrimaryVertex(0), | |
105 | txSecondaryVertex(0), | |
106 | tySecondaryVertex(0), | |
107 | tzSecondaryVertex(0), | |
108 | tdcaTracks(0), | |
109 | tCosPointingAngle(0), | |
110 | tDCAV0toPrimaryVertex(0), | |
111 | tHeSign(0), | |
112 | tHepInTPC(0), | |
113 | tHeTPCsignal(0), | |
114 | tDcaHeToPrimVertex(0), | |
115 | tHeEta(0), | |
116 | tmomHex(0), | |
117 | tmomHey(0), | |
118 | tmomHez(0), | |
119 | tmomHeAtSVx(0), | |
120 | tmomHeAtSVy(0), | |
121 | tmomHeAtSVz(0), | |
122 | tHeTPCNcls(0), | |
123 | tHeimpactXY(0), | |
124 | tHeimpactZ(0), | |
125 | tHeITSClusterMap(0), | |
126 | tIsHeITSRefit(0), | |
127 | tPionSign(0), | |
128 | tPionpInTPC(0), | |
129 | tPionTPCsignal(0), | |
130 | tDcaPionToPrimVertex(0), | |
131 | tPionEta(0), | |
132 | tmomPionx(0), | |
133 | tmomPiony(0), | |
134 | tmomPionz(0), | |
135 | tmomNegPionAtSVx(0), | |
136 | tmomNegPionAtSVy(0), | |
137 | tmomNegPionAtSVz(0), | |
138 | tPionTPCNcls(0), | |
139 | tPionimpactXY(0), | |
140 | tPionimpactZ(0), | |
141 | tPionITSClusterMap(0), | |
142 | tIsPiITSRefit(0), | |
143 | txn(0), | |
144 | txp(0), | |
145 | tchi2He(0), | |
146 | tchi2Pi(0), | |
5d169b75 | 147 | fNtuple4(0), |
d52dfc4c | 148 | tHelrunNumber(0), |
149 | tHelBCNumber(0), | |
150 | tHelOrbitNumber(0), | |
151 | tHelPeriodNumber(0), | |
152 | tHeleventtype(0), | |
153 | tHelisHeITSrefit(0), | |
154 | tHelpercentile(0), | |
155 | tHelSign(0), | |
156 | tHelpinTPC(0), | |
157 | tHelGetTPCsignal(0), | |
158 | tHelPx(0), | |
159 | tHelPy(0), | |
160 | tHelPz(0), | |
161 | tHelEta(0), | |
162 | tHelisTOF(0), | |
163 | tHelpoutTPC(0), | |
164 | tHeltimeTOF(0), | |
165 | tHeltrackLenghtTOF(0), | |
166 | tHelimpactXY(0), | |
167 | tHelimpactZ(0), | |
168 | tHelmapITS(0), | |
169 | tHelTPCNcls(0), | |
170 | tHelTRDsignal(0), | |
171 | tHelxPrimaryVertex(0), | |
172 | tHelyPrimaryVertex(0), | |
173 | tHelzPrimaryVertex(0), | |
174 | tHelchi2PerClusterTPC(0), | |
5d169b75 | 175 | fPIDResponse(0) |
d52dfc4c | 176 | |
c683985a | 177 | { |
d52dfc4c | 178 | // Dummy Constructor |
179 | ||
180 | // printf("Dummy Constructor"); | |
181 | ||
182 | fESDtrackCuts = new AliESDtrackCuts("fESDtrackCuts"); | |
183 | fESDtrackCuts->SetRequireITSStandAlone(kFALSE); | |
184 | fESDtrackCuts->SetRequireITSPureStandAlone(kFALSE); | |
185 | ||
186 | fESDtrackCuts->SetRequireTPCRefit(kTRUE); | |
187 | fESDtrackCuts->SetAcceptKinkDaughters(kFALSE); | |
188 | fESDtrackCuts->SetMinNClustersTPC(60); | |
189 | fESDtrackCuts->SetMaxChi2PerClusterTPC(5); | |
190 | fESDtrackCuts->SetEtaRange(-0.9,0.9); | |
191 | ||
c683985a | 192 | } |
193 | ||
194 | //________________________________________________________________________ | |
195 | AliAnalysisTaskHelium3Pi::AliAnalysisTaskHelium3Pi(const char *name) | |
5d169b75 | 196 | : AliAnalysisTaskSE(name), |
197 | fAnalysisType("ESD"), | |
198 | fCollidingSystems(0), | |
199 | fESDtrackCuts(0), | |
200 | fDataType("REAL"), | |
d52dfc4c | 201 | fListHist(0), |
202 | fHistEventMultiplicity(0), | |
203 | fHistTrackMultiplicity(0), | |
5d169b75 | 204 | fHistTrackMultiplicityCent(0), |
205 | fHistTrackMultiplicitySemiCent(0), | |
206 | fHistTrackMultiplicityMB(0), | |
207 | fHistTrackMultiplicityPVCent(0), | |
208 | fHistTrackMultiplicityPVSemiCent(0), | |
209 | fHistTrackMultiplicityPVMB(0), | |
5d169b75 | 210 | fhBB(0), |
211 | fhTOF(0), | |
212 | fhMassTOF(0), | |
213 | fhBBPions(0), | |
214 | fhBBHe(0), | |
215 | fhNaPos(0), | |
216 | fhNaNeg(0), | |
217 | fBetavsTPCsignalPos(0), | |
218 | fBetavsTPCsignalNeg(0), | |
5d169b75 | 219 | fNtuple1(0), |
d52dfc4c | 220 | trunNumber(0), |
221 | tbunchcross(0), | |
222 | torbit(0), | |
223 | tperiod(0), | |
224 | teventtype(0), | |
225 | tTrackNumber(0), | |
226 | tpercentile(0), | |
227 | txPrimaryVertex(0), | |
228 | tyPrimaryVertex(0), | |
229 | tzPrimaryVertex(0), | |
230 | txSecondaryVertex(0), | |
231 | tySecondaryVertex(0), | |
232 | tzSecondaryVertex(0), | |
233 | tdcaTracks(0), | |
234 | tCosPointingAngle(0), | |
235 | tDCAV0toPrimaryVertex(0), | |
236 | tHeSign(0), | |
237 | tHepInTPC(0), | |
238 | tHeTPCsignal(0), | |
239 | tDcaHeToPrimVertex(0), | |
240 | tHeEta(0), | |
241 | tmomHex(0), | |
242 | tmomHey(0), | |
243 | tmomHez(0), | |
244 | tmomHeAtSVx(0), | |
245 | tmomHeAtSVy(0), | |
246 | tmomHeAtSVz(0), | |
247 | tHeTPCNcls(0), | |
248 | tHeimpactXY(0), | |
249 | tHeimpactZ(0), | |
250 | tHeITSClusterMap(0), | |
251 | tIsHeITSRefit(0), | |
252 | tPionSign(0), | |
253 | tPionpInTPC(0), | |
254 | tPionTPCsignal(0), | |
255 | tDcaPionToPrimVertex(0), | |
256 | tPionEta(0), | |
257 | tmomPionx(0), | |
258 | tmomPiony(0), | |
259 | tmomPionz(0), | |
260 | tmomNegPionAtSVx(0), | |
261 | tmomNegPionAtSVy(0), | |
262 | tmomNegPionAtSVz(0), | |
263 | tPionTPCNcls(0), | |
264 | tPionimpactXY(0), | |
265 | tPionimpactZ(0), | |
266 | tPionITSClusterMap(0), | |
267 | tIsPiITSRefit(0), | |
268 | txn(0), | |
269 | txp(0), | |
270 | tchi2He(0), | |
271 | tchi2Pi(0), | |
5d169b75 | 272 | fNtuple4(0), |
d52dfc4c | 273 | tHelrunNumber(0), |
274 | tHelBCNumber(0), | |
275 | tHelOrbitNumber(0), | |
276 | tHelPeriodNumber(0), | |
277 | tHeleventtype(0), | |
278 | tHelisHeITSrefit(0), | |
279 | tHelpercentile(0), | |
280 | tHelSign(0), | |
281 | tHelpinTPC(0), | |
282 | tHelGetTPCsignal(0), | |
283 | tHelPx(0), | |
284 | tHelPy(0), | |
285 | tHelPz(0), | |
286 | tHelEta(0), | |
287 | tHelisTOF(0), | |
288 | tHelpoutTPC(0), | |
289 | tHeltimeTOF(0), | |
290 | tHeltrackLenghtTOF(0), | |
291 | tHelimpactXY(0), | |
292 | tHelimpactZ(0), | |
293 | tHelmapITS(0), | |
294 | tHelTPCNcls(0), | |
295 | tHelTRDsignal(0), | |
296 | tHelxPrimaryVertex(0), | |
297 | tHelyPrimaryVertex(0), | |
298 | tHelzPrimaryVertex(0), | |
299 | tHelchi2PerClusterTPC(0), | |
300 | fPIDResponse(0) | |
301 | { | |
302 | ||
c683985a | 303 | // Define input and output slots here |
304 | // Input slot #0 works with a TChain | |
305 | //DefineInput(0, TChain::Class()); | |
d52dfc4c | 306 | // Output slot #0 writes into a TList container () |
307 | ||
308 | DefineInput(0, TChain::Class()); | |
c683985a | 309 | |
310 | DefineOutput(1, TList::Class()); | |
d52dfc4c | 311 | DefineOutput(2, TTree::Class()); |
312 | DefineOutput(3, TTree::Class()); | |
5d169b75 | 313 | |
5d169b75 | 314 | fESDtrackCuts = new AliESDtrackCuts("fESDtrackCuts"); |
315 | fESDtrackCuts->SetRequireITSStandAlone(kFALSE); | |
316 | fESDtrackCuts->SetRequireITSPureStandAlone(kFALSE); | |
317 | ||
318 | fESDtrackCuts->SetRequireTPCRefit(kTRUE); | |
319 | fESDtrackCuts->SetAcceptKinkDaughters(kFALSE); | |
5d169b75 | 320 | fESDtrackCuts->SetMinNClustersTPC(60); |
321 | fESDtrackCuts->SetMaxChi2PerClusterTPC(5); | |
d52dfc4c | 322 | fESDtrackCuts->SetEtaRange(-0.9,0.9); |
323 | ||
c683985a | 324 | } |
325 | //_______________________________________________________ | |
326 | AliAnalysisTaskHelium3Pi::~AliAnalysisTaskHelium3Pi() | |
327 | { | |
328 | // Destructor | |
d52dfc4c | 329 | if (fListHist) { |
330 | delete fListHist; | |
331 | fListHist = 0; | |
c683985a | 332 | } |
5d169b75 | 333 | |
334 | if (fESDtrackCuts) delete fESDtrackCuts; | |
d52dfc4c | 335 | if(fNtuple1) delete fNtuple1; |
336 | if(fNtuple4) delete fNtuple4; | |
c683985a | 337 | } |
338 | //=================DEFINITION BETHE BLOCH============================== | |
339 | ||
340 | Double_t AliAnalysisTaskHelium3Pi::BetheBloch(Double_t betaGamma,Double_t charge,Bool_t isPbPb) { | |
341 | ||
342 | Double_t kp1, kp2, kp3, kp4, kp5; | |
343 | ||
344 | if(isPbPb){ | |
345 | ||
346 | // pass1 2011 | |
347 | kp1 = 4.7*charge*charge; | |
348 | kp2 = 8.98482806165147636e+00; | |
349 | kp3 = 1.54000000000000005e-05; | |
350 | kp4 = 2.30445734159456084e+00; | |
351 | kp5 = 2.25624744086878559e+00; | |
352 | ||
353 | } | |
354 | ||
355 | else{ | |
356 | ||
357 | // to be defined ... | |
358 | //pass1 2011 | |
359 | kp1 = 4.7*charge*charge; | |
360 | kp2 = 8.98482806165147636e+00; | |
361 | kp3 = 1.54000000000000005e-05; | |
362 | kp4 = 2.30445734159456084e+00; | |
363 | kp5 = 2.25624744086878559e+00; | |
364 | ||
365 | } | |
366 | ||
367 | Double_t beta = betaGamma / TMath::Sqrt(1.0 + betaGamma * betaGamma); | |
368 | ||
369 | Double_t aa = TMath::Power(beta, kp4); | |
370 | Double_t bb = TMath::Power(1.0 / betaGamma, kp5); | |
371 | ||
372 | bb = TMath::Log(kp3 + bb); | |
373 | ||
374 | Double_t out = (kp2 - aa - bb) * kp1 / aa; | |
375 | ||
376 | return out; | |
377 | ||
378 | } | |
5d169b75 | 379 | |
c683985a | 380 | //==================DEFINITION OF OUTPUT OBJECTS============================== |
381 | ||
382 | void AliAnalysisTaskHelium3Pi::UserCreateOutputObjects() | |
383 | { | |
384 | ||
d52dfc4c | 385 | fListHist = new TList(); |
386 | fListHist->SetOwner(); // IMPORTANT! | |
c683985a | 387 | |
388 | if(! fHistEventMultiplicity ){ | |
389 | fHistEventMultiplicity = new TH1F( "fHistEventMultiplicity" , "Nb of Events" , 10 , 0, 10); | |
390 | fHistEventMultiplicity->GetXaxis()->SetBinLabel(1,"All Events"); | |
391 | fHistEventMultiplicity->GetXaxis()->SetBinLabel(2,"Events w/PV"); | |
392 | fHistEventMultiplicity->GetXaxis()->SetBinLabel(3,"Events w/|Vz|<10cm"); | |
393 | fHistEventMultiplicity->GetXaxis()->SetBinLabel(4,"Central Events"); | |
394 | fHistEventMultiplicity->GetXaxis()->SetBinLabel(5,"SemiCentral Events"); | |
395 | fHistEventMultiplicity->GetXaxis()->SetBinLabel(6,"MB Events"); | |
396 | fHistEventMultiplicity->GetXaxis()->SetBinLabel(7,"Central Events w/|Vz|<10cm"); | |
397 | fHistEventMultiplicity->GetXaxis()->SetBinLabel(8,"SemiCentral Events w/|Vz|<10cm"); | |
398 | fHistEventMultiplicity->GetXaxis()->SetBinLabel(9,"MB Events w/|Vz|<10cm"); | |
399 | ||
d52dfc4c | 400 | fListHist->Add(fHistEventMultiplicity); |
c683985a | 401 | } |
402 | ||
403 | if(! fHistTrackMultiplicity ){ | |
d52dfc4c | 404 | fHistTrackMultiplicity = new TH2F( "fHistTrackMultiplicity" , "Nb of Tracks", 2500,0, 25000,210,-1,104); |
c683985a | 405 | fHistTrackMultiplicity->GetXaxis()->SetTitle("Number of tracks"); |
406 | fHistTrackMultiplicity->GetYaxis()->SetTitle("Percentile"); | |
d52dfc4c | 407 | fListHist->Add(fHistTrackMultiplicity); |
c683985a | 408 | } |
409 | ||
410 | if(! fHistTrackMultiplicityCent ){ | |
d52dfc4c | 411 | fHistTrackMultiplicityCent = new TH2F( "fHistTrackMultiplicityCent", "Nb of Tracks Central Events", 2500,0, 25000,210,-1,104 ); |
c683985a | 412 | fHistTrackMultiplicityCent->GetXaxis()->SetTitle("Number of tracks"); |
413 | fHistTrackMultiplicityCent->GetYaxis()->SetTitle("Percentile"); | |
d52dfc4c | 414 | fListHist->Add(fHistTrackMultiplicityCent); |
c683985a | 415 | } |
416 | ||
417 | if(! fHistTrackMultiplicitySemiCent ){ | |
d52dfc4c | 418 | fHistTrackMultiplicitySemiCent = new TH2F( "fHistTrackMultiplicitySemiCent" , "Nb of Tracks SemiCentral Events", 2500,0, 25000 ,210,-1,104); |
c683985a | 419 | fHistTrackMultiplicitySemiCent->GetXaxis()->SetTitle("Number of tracks"); |
420 | fHistTrackMultiplicitySemiCent->GetYaxis()->SetTitle("Percentile"); | |
d52dfc4c | 421 | fListHist->Add(fHistTrackMultiplicitySemiCent); |
c683985a | 422 | } |
423 | ||
424 | if(! fHistTrackMultiplicityMB ){ | |
d52dfc4c | 425 | fHistTrackMultiplicityMB = new TH2F( "fHistTrackMultiplicityMB" , "Nb of Tracks MBral Events", 2500,0, 25000,210,-1,104 ); |
c683985a | 426 | fHistTrackMultiplicityMB->GetXaxis()->SetTitle("Number of tracks"); |
427 | fHistTrackMultiplicityMB->GetYaxis()->SetTitle("Percentile"); | |
d52dfc4c | 428 | fListHist->Add(fHistTrackMultiplicityMB); |
c683985a | 429 | } |
430 | ||
431 | if(! fHistTrackMultiplicityPVCent ){ | |
d52dfc4c | 432 | fHistTrackMultiplicityPVCent = new TH2F( "fHistTrackMultiplicityPVCent" , "Nb of Tracks Central Events", 2500,0, 25000,210,-1,104 ); |
c683985a | 433 | fHistTrackMultiplicityPVCent->GetXaxis()->SetTitle("Number of tracks"); |
434 | fHistTrackMultiplicityPVCent->GetYaxis()->SetTitle("Percentile"); | |
d52dfc4c | 435 | fListHist->Add(fHistTrackMultiplicityPVCent); |
c683985a | 436 | } |
437 | ||
438 | if(! fHistTrackMultiplicityPVSemiCent ){ | |
d52dfc4c | 439 | fHistTrackMultiplicityPVSemiCent = new TH2F( "fHistTrackMultiplicityPVSemiCent" , "Nb of Tracks SemiCentral Events", 2500,0, 25000 ,210,-1,104); |
c683985a | 440 | fHistTrackMultiplicityPVSemiCent->GetXaxis()->SetTitle("Number of tracks"); |
441 | fHistTrackMultiplicityPVSemiCent->GetYaxis()->SetTitle("Percentile"); | |
d52dfc4c | 442 | fListHist->Add(fHistTrackMultiplicityPVSemiCent); |
c683985a | 443 | } |
444 | ||
445 | if(! fHistTrackMultiplicityPVMB ){ | |
d52dfc4c | 446 | fHistTrackMultiplicityPVMB = new TH2F( "fHistTrackMultiplicityPVMB" , "Nb of Tracks MBral Events", 2500,0, 25000,210,-1,104 ); |
c683985a | 447 | fHistTrackMultiplicityPVMB->GetXaxis()->SetTitle("Number of tracks"); |
448 | fHistTrackMultiplicityPVMB->GetYaxis()->SetTitle("Percentile"); | |
d52dfc4c | 449 | fListHist->Add(fHistTrackMultiplicityPVMB); |
c683985a | 450 | } |
451 | ||
c683985a | 452 | if(! fhBB ){ |
d52dfc4c | 453 | fhBB = new TH2F( "fhBB" , "BetheBlochTPC" , 120,-6,6,150,0,1500); |
c683985a | 454 | fhBB->GetXaxis()->SetTitle("p/z (GeV/#it{c})"); |
455 | fhBB->GetYaxis()->SetTitle("TPC Signal"); | |
d52dfc4c | 456 | fListHist->Add(fhBB); |
c683985a | 457 | } |
458 | ||
459 | if(! fhTOF ){ | |
d52dfc4c | 460 | fhTOF = new TH2F( "fhTOF" , "Scatter Plot TOF" , 120,-6,6,100,0,1.2); |
c683985a | 461 | fhTOF->GetXaxis()->SetTitle("p/z (GeV/#it{c})"); |
462 | fhTOF->GetYaxis()->SetTitle("#beta"); | |
d52dfc4c | 463 | fListHist->Add(fhTOF); |
c683985a | 464 | } |
465 | ||
466 | if(! fhMassTOF){ | |
467 | fhMassTOF=new TH1F ("fhMassTOF","Particle Mass - TOF", 300,0 ,5); | |
468 | fhMassTOF->GetXaxis()->SetTitle("Mass (GeV/#it{c}^{2})"); | |
d52dfc4c | 469 | fListHist->Add(fhMassTOF); |
c683985a | 470 | } |
471 | ||
472 | if(! fhBBPions ){ | |
d52dfc4c | 473 | fhBBPions = new TH2F( "fhBBPions" , "Bethe-Bloch TPC Pions" , 120,-6,6,150,0,1500); |
c683985a | 474 | fhBBPions->GetXaxis()->SetTitle("p/z (GeV/#it{c})"); |
475 | fhBBPions->GetYaxis()->SetTitle("TPC Signal"); | |
d52dfc4c | 476 | fListHist->Add(fhBBPions); |
c683985a | 477 | } |
478 | ||
479 | if(! fhBBHe ){ | |
d52dfc4c | 480 | fhBBHe = new TH2F( "fhBBHe" , "Bethe-Bloch TPC He" , 120,-6,6,150,0,1500); |
c683985a | 481 | fhBBHe->GetXaxis()->SetTitle("p/z (GeV/#it{c})"); |
482 | fhBBHe->GetYaxis()->SetTitle("TPC Signal"); | |
d52dfc4c | 483 | fListHist->Add(fhBBHe); |
c683985a | 484 | } |
485 | ||
486 | if(! fhNaPos ){ | |
d52dfc4c | 487 | fhNaPos = new TH2F( "fhNaPos" , "Distribution Pos" , 500,0,5,40,-10,10); |
c683985a | 488 | fhNaPos->GetXaxis()->SetTitle("p/z (GeV/#it{c})"); |
489 | fhNaPos->GetYaxis()->SetTitle("(TPCSignal-bbtheo)/bbtheo (He)"); | |
d52dfc4c | 490 | fListHist->Add(fhNaPos); |
c683985a | 491 | } |
492 | ||
493 | if(! fhNaNeg ){ | |
d52dfc4c | 494 | fhNaNeg = new TH2F( "fhNaNeg" , "Distribution Neg" , 500,0,5,40,-10,10); |
c683985a | 495 | fhNaNeg->GetXaxis()->SetTitle("p/z (GeV/#it{c})"); |
496 | fhNaNeg->GetYaxis()->SetTitle("(TPCSignal-bbtheo)/bbtheo (He)"); | |
d52dfc4c | 497 | fListHist->Add(fhNaNeg); |
c683985a | 498 | } |
499 | ||
500 | if(! fBetavsTPCsignalPos ){ | |
d52dfc4c | 501 | fBetavsTPCsignalPos = new TH2F("fBetavsTPCsignalPos","fBetavsTPCsignalPos",100,0,1.2,150,0,1500); |
c683985a | 502 | fBetavsTPCsignalPos->GetXaxis()->SetTitle("#beta"); |
503 | fBetavsTPCsignalPos->GetYaxis()->SetTitle("TPC Signal"); | |
d52dfc4c | 504 | fListHist->Add(fBetavsTPCsignalPos); |
c683985a | 505 | } |
506 | ||
507 | if(! fBetavsTPCsignalNeg ){ | |
d52dfc4c | 508 | fBetavsTPCsignalNeg = new TH2F("fBetavsTPCsignalNeg","fBetavsTPCsignalNeg",100,0,1.2,150,0,1500); |
c683985a | 509 | fBetavsTPCsignalNeg->GetXaxis()->SetTitle("#beta"); |
510 | fBetavsTPCsignalNeg->GetYaxis()->SetTitle("TPC Signal"); | |
d52dfc4c | 511 | fListHist->Add(fBetavsTPCsignalNeg); |
c683985a | 512 | } |
513 | ||
d52dfc4c | 514 | |
c683985a | 515 | |
516 | if(! fNtuple1 ) { | |
c683985a | 517 | |
d52dfc4c | 518 | fNtuple1 = new TTree("fNtuple1","fNtuple1"); |
519 | ||
520 | fNtuple1->Branch("trunNumber" ,&trunNumber ,"trunNumber/F"); | |
521 | fNtuple1->Branch("tbunchcross" ,&tbunchcross ,"tbunchcross/F"); | |
522 | fNtuple1->Branch("torbit" ,&torbit ,"torbit/F"); | |
523 | fNtuple1->Branch("tperiod" ,&tperiod ,"tperiod/F"); | |
524 | fNtuple1->Branch("teventtype" ,&teventtype ,"teventtype/F"); | |
525 | fNtuple1->Branch("tTrackNumber" ,&tTrackNumber ,"tTrackNumber/F"); | |
526 | fNtuple1->Branch("tpercentile" ,&tpercentile ,"tpercentile/F") ; | |
527 | fNtuple1->Branch("txPrimaryVertex" ,&txPrimaryVertex ,"txPrimaryVertex/F"); | |
528 | fNtuple1->Branch("tyPrimaryVertex" ,&tyPrimaryVertex ,"tyPrimaryVertex/F"); | |
529 | fNtuple1->Branch("tzPrimaryVertex" ,&tzPrimaryVertex ,"tzPrimaryVertex/F"); | |
530 | fNtuple1->Branch("txSecondaryVertex" ,&txSecondaryVertex ,"txSecondaryVertex/F"); | |
531 | fNtuple1->Branch("tySecondaryVertex" ,&tySecondaryVertex ,"tySecondaryVertex/F"); | |
532 | fNtuple1->Branch("tzSecondaryVertex" ,&tzSecondaryVertex ,"tzSecondaryVertex/F"); | |
533 | fNtuple1->Branch("tdcaTracks" ,&tdcaTracks ,"tdcaTracks/F"); | |
534 | fNtuple1->Branch("tCosPointingAngle" ,&tCosPointingAngle ,"tCosPointingAngle/F"); | |
535 | fNtuple1->Branch("tDCAV0toPrimaryVertex",&tDCAV0toPrimaryVertex,"tDCAV0toPrimaryVertex/F"); | |
536 | fNtuple1->Branch("tHeSign" ,&tHeSign ,"tHeSign/F"); | |
537 | fNtuple1->Branch("tHepInTPC" ,&tHepInTPC ,"tHepInTPC/F"); | |
538 | fNtuple1->Branch("tHeTPCsignal" ,&tHeTPCsignal ,"tHeTPCsignal/F"); | |
539 | fNtuple1->Branch("tDcaHeToPrimVertex" ,&tDcaHeToPrimVertex ,"tDcaHeToPrimVertex/F"); | |
540 | fNtuple1->Branch("tHeEta" ,&tHeEta ,"tHeEta/F"); | |
541 | fNtuple1->Branch("tmomHex" ,&tmomHex ,"tmomHex/F"); | |
542 | fNtuple1->Branch("tmomHey" ,&tmomHey ,"tmomHey/F"); | |
543 | fNtuple1->Branch("tmomHez" ,&tmomHez ,"tmomHez/F"); | |
544 | fNtuple1->Branch("tmomHeAtSVx" ,&tmomHeAtSVx ,"tmomHeAtSVx/F"); | |
545 | fNtuple1->Branch("tmomHeAtSVy" ,&tmomHeAtSVy ,"tmomHeAtSVy/F"); | |
546 | fNtuple1->Branch("tmomHeAtSVz" ,&tmomHeAtSVz ,"tmomHeAtSVz/F"); | |
547 | fNtuple1->Branch("tHeTPCNcls" ,&tHeTPCNcls ,"tHeTPCNcls/F"); | |
548 | fNtuple1->Branch("tHeimpactXY" ,&tHeimpactXY ,"tHeimpactXY/F"); | |
549 | fNtuple1->Branch("tHeimpactZ" ,&tHeimpactZ ,"tHeimpactZ/F"); | |
550 | fNtuple1->Branch("tHeITSClusterMap" ,&tHeITSClusterMap ,"tHeITSClusterMap/F"); | |
551 | fNtuple1->Branch("tIsHeITSRefit" ,&tIsHeITSRefit ,"tIsHeITSRefit/F"); | |
552 | fNtuple1->Branch("tPionSign" ,&tPionSign ,"tPionSign/F"); | |
553 | fNtuple1->Branch("tPionpInTPC" ,&tPionpInTPC ,"tPionpInTPC/F"); | |
554 | fNtuple1->Branch("tPionTPCsignal" ,&tPionTPCsignal ,"tPionTPCsignal/F"); | |
555 | fNtuple1->Branch("tDcaPionToPrimVertex" ,&tDcaPionToPrimVertex ,"tDcaPionToPrimVertex/F"); | |
556 | fNtuple1->Branch("tPionEta" ,&tPionEta ,"tPionEta/F"); | |
557 | fNtuple1->Branch("tmomPionx" ,&tmomPionx ,"tmomPionx/F"); | |
558 | fNtuple1->Branch("tmomPiony" ,&tmomPiony ,"tmomPiony/F"); | |
559 | fNtuple1->Branch("tmomPionz" ,&tmomPionz ,"tmomPionz/F"); | |
560 | fNtuple1->Branch("tmomNegPionAtSVx" ,&tmomNegPionAtSVx ,"tmomNegPionAtSVx/F"); | |
561 | fNtuple1->Branch("tmomNegPionAtSVy" ,&tmomNegPionAtSVy ,"tmomNegPionAtSVy/F"); | |
562 | fNtuple1->Branch("tmomNegPionAtSVz" ,&tmomNegPionAtSVz ,"tmomNegPionAtSVz/F"); | |
563 | fNtuple1->Branch("tPionTPCNcls" ,&tPionTPCNcls ,"tPionTPCNcls/F"); | |
564 | fNtuple1->Branch("tPionimpactXY" ,&tPionimpactXY ,"tPionimpactXY/F"); | |
565 | fNtuple1->Branch("tPionimpactZ" ,&tPionimpactZ ,"tPionimpactZ/F"); | |
566 | fNtuple1->Branch("tPionITSClusterMap" ,&tPionITSClusterMap ,"tPionITSClusterMap/F"); | |
567 | fNtuple1->Branch("tIsPiITSRefit" ,&tIsPiITSRefit ,"tIsPiITSRefit/F"); | |
568 | fNtuple1->Branch("txn" ,&txn ,"txn/F"); | |
569 | fNtuple1->Branch("txp" ,&txp ,"txp/F"); | |
570 | fNtuple1->Branch("tchi2He" ,&tchi2He ,"tchi2He/F"); | |
571 | fNtuple1->Branch("tchi2Pi" ,&tchi2Pi ,"tchi2Pi/F"); | |
572 | ||
c683985a | 573 | } |
574 | ||
575 | if(! fNtuple4 ) { | |
d52dfc4c | 576 | |
577 | fNtuple4 = new TTree("fNtuple4","fNtuple4"); | |
578 | ||
579 | fNtuple4->Branch("tHelrunNumber" ,&tHelrunNumber ,"tHelrunNumber/F"); | |
580 | fNtuple4->Branch("tHelBCNumber" ,&tHelBCNumber ,"tHelBCNumber/F"); | |
581 | fNtuple4->Branch("tHelOrbitNumber" ,&tHelOrbitNumber ,"tHelOrbitNumber/F"); | |
582 | fNtuple4->Branch("tHelPeriodNumber" ,&tHelPeriodNumber ,"tHelPeriodNumber/F"); | |
583 | fNtuple4->Branch("tHeleventtype" ,&tHeleventtype ,"tHeleventtype/F"); | |
584 | fNtuple4->Branch("tHelisHeITSrefit" ,&tHelisHeITSrefit ,"tHelisHeITSrefit/F"); | |
585 | fNtuple4->Branch("tHelpercentile" ,&tHelpercentile ,"tHelpercentile/F"); | |
586 | fNtuple4->Branch("tHelSign" ,&tHelSign ,"tHelSign/F"); | |
587 | fNtuple4->Branch("tHelpinTPC" ,&tHelpinTPC ,"tHelpinTPC/F"); | |
588 | fNtuple4->Branch("tHelGetTPCsignal" ,&tHelGetTPCsignal ,"tHelGetTPCsignal/F"); | |
589 | fNtuple4->Branch("tHelPx" ,&tHelPx ,"tHelPx/F"); | |
590 | fNtuple4->Branch("tHelPy" ,&tHelPy ,"tHelPy/F"); | |
591 | fNtuple4->Branch("tHelPz" ,&tHelPz ,"tHelPz/F"); | |
592 | fNtuple4->Branch("tHelEta" ,&tHelEta ,"tHelEta/F"); | |
593 | fNtuple4->Branch("tHelisTOF" ,&tHelisTOF ,"tHelisTOF/F"); | |
594 | fNtuple4->Branch("tHelpoutTPC" ,&tHelpoutTPC ,"tHelpoutTPC/F"); | |
595 | fNtuple4->Branch("tHeltimeTOF" ,&tHeltimeTOF ,"tHeltimeTOF/F"); | |
596 | fNtuple4->Branch("tHeltrackLenghtTOF" ,&tHeltrackLenghtTOF ,"tHeltrackLenghtTOF/F"); | |
597 | fNtuple4->Branch("tHelimpactXY" ,&tHelimpactXY ,"tHelimpactXY/F"); | |
598 | fNtuple4->Branch("tHelimpactZ" ,&tHelimpactZ ,"tHelimpactZ/F"); | |
599 | fNtuple4->Branch("tHelmapITS" ,&tHelmapITS ,"tHelmapITS/F"); | |
600 | fNtuple4->Branch("tHelTPCNcls" ,&tHelTPCNcls ,"tHelTPCNcls/F"); | |
601 | fNtuple4->Branch("tHelTRDsignal" ,&tHelTRDsignal ,"tHelTRDsignal/F"); | |
602 | fNtuple4->Branch("tHelxPrimaryVertex" ,&tHelxPrimaryVertex ,"tHelxPrimaryVertex/F"); | |
603 | fNtuple4->Branch("tHelyPrimaryVertex" ,&tHelyPrimaryVertex ,"tHelyPrimaryVertex/F"); | |
604 | fNtuple4->Branch("tHelzPrimaryVertex" ,&tHelzPrimaryVertex ,"tHelzPrimaryVertex/F"); | |
605 | fNtuple4->Branch("tHelchi2PerClusterTPC",&tHelchi2PerClusterTPC,"tHelchi2PerClusterTPC/F"); | |
606 | ||
c683985a | 607 | |
d52dfc4c | 608 | } |
c683985a | 609 | |
d52dfc4c | 610 | PostData(1, fListHist); |
611 | PostData(2, fNtuple1); | |
612 | PostData(3, fNtuple4); | |
c683985a | 613 | }// end UserCreateOutputObjects |
614 | ||
615 | ||
c683985a | 616 | //====================== USER EXEC ======================== |
617 | ||
618 | void AliAnalysisTaskHelium3Pi::UserExec(Option_t *) | |
619 | { | |
620 | //_______________________________________________________________________ | |
621 | ||
622 | //!*********************!// | |
623 | //! Define variables !// | |
624 | //!*********************!// | |
5d169b75 | 625 | |
5d169b75 | 626 | Double_t pinTPC=0.,poutTPC=0.,TPCSignal=0.; |
c683985a | 627 | Double_t xPrimaryVertex=0.,yPrimaryVertex=0.,zPrimaryVertex=0.; |
628 | Double_t massTOF=0.,timeTOF=0.,trackLenghtTOF=0.,betaTOF=0.; | |
629 | ||
630 | ULong_t status=0; | |
5d169b75 | 631 | // ULong_t statusT=0; |
c683985a | 632 | ULong_t statusPi=0; |
633 | ||
5d169b75 | 634 | Bool_t isTPC=kFALSE,isTOF=kFALSE,IsHeITSRefit=kFALSE,IsPiITSRefit=kFALSE ; |
c683985a | 635 | |
636 | Float_t nSigmaNegPion=0.; | |
c683985a | 637 | |
638 | Double_t cutNSigma = 3; | |
5d169b75 | 639 | Double_t bbtheoM=0.,bbtheo=0.; |
c683985a | 640 | Double_t zNathashaNeg=0; |
641 | Double_t zNathashaPos=0; | |
642 | Double_t fPos[3]={0.,0.,0.}; | |
643 | Double_t runNumber=0.; | |
5d169b75 | 644 | // Double_t evNumber=0.; |
c683985a | 645 | |
646 | Double_t BCNumber=0.; | |
647 | Double_t OrbitNumber=0.; | |
648 | Double_t PeriodNumber=0.; | |
649 | ||
650 | Double_t Helium3Mass = 2.80839; | |
651 | Double_t PionMass = 0.13957; | |
652 | // TLORENTZ vectors | |
653 | ||
654 | TLorentzVector vPion,vHelium,vSum; | |
655 | ||
656 | //!---------------------------------------------------------------- | |
657 | ||
658 | //! A set of very loose parameters for cuts | |
659 | ||
660 | Double_t fgChi2max=33.; //! max chi2 | |
661 | Double_t fgDNmin=0.05; //! min imp parameter for the 1st daughter = 500um | |
662 | Double_t fgDCAmax=1.0; //! max DCA between the daughter tracks in cm | |
663 | Double_t fgCPAmin=0.99; //! min cosine of V0's pointing angle | |
664 | // Double_t fgRmin=0.2; //! min radius of the fiducial volume //original | |
665 | Double_t fgRmin=0.1; //! min radius of the fiducial volume = 1 mm | |
666 | Double_t fgRmax=200.; //! max radius of the fiducial volume = 2 m | |
667 | ||
668 | //------------------------------------------ | |
669 | ||
670 | // Main loop | |
671 | // Called for EACH event | |
672 | ||
673 | AliVEvent *event = InputEvent(); | |
674 | if (!event) { Printf("ERROR: Could not retrieve event"); return; } | |
675 | ||
676 | Info("AliAnalysisTaskHelium3Pi","Starting UserExec"); | |
677 | ||
678 | SetDataType("REAL"); | |
679 | ||
680 | // create pointer to event | |
681 | AliESDEvent* lESDevent = dynamic_cast<AliESDEvent*>(event); | |
682 | if (!lESDevent) { | |
683 | AliError("Cannot get the ESD event"); | |
684 | return; | |
685 | } | |
686 | ||
687 | fHistEventMultiplicity->Fill(0); | |
688 | ||
689 | Double_t lMagneticField=lESDevent->GetMagneticField(); | |
690 | Int_t TrackNumber = -1; | |
691 | ||
692 | ||
693 | //*****************// | |
694 | //* Centrality *// | |
695 | //*****************// | |
696 | ||
697 | AliCentrality *centrality = lESDevent->GetCentrality(); | |
698 | Float_t percentile=centrality->GetCentralityPercentile("V0M"); | |
699 | ||
700 | TrackNumber = lESDevent->GetNumberOfTracks(); | |
701 | if (TrackNumber<2) return; | |
702 | ||
703 | fHistTrackMultiplicity->Fill(TrackNumber,percentile); //tracce per evento | |
704 | ||
705 | //**************************************** | |
5d169b75 | 706 | |
707 | // PID | |
708 | ||
709 | AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager(); | |
710 | AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler()); | |
711 | fPIDResponse=inputHandler->GetPIDResponse(); // data member di tipo "const AliPIDResponse *fPIDResponse;" | |
d52dfc4c | 712 | // cout<<"fPIDResponse "<<fPIDResponse<<endl; |
5d169b75 | 713 | //=========================================== |
c683985a | 714 | |
715 | Int_t eventtype=-99; | |
716 | ||
d52dfc4c | 717 | Bool_t isSelectedCentral = (inputHandler->IsEventSelected() & AliVEvent::kCentral); |
718 | Bool_t isSelectedSemiCentral = (inputHandler->IsEventSelected() & AliVEvent::kSemiCentral); | |
719 | Bool_t isSelectedMB = (inputHandler->IsEventSelected() & AliVEvent::kMB); | |
c683985a | 720 | |
721 | if(isSelectedCentral){ | |
722 | fHistEventMultiplicity->Fill(3); | |
723 | fHistTrackMultiplicityCent->Fill(TrackNumber,percentile); | |
724 | eventtype=1; | |
725 | } | |
726 | ||
727 | if(isSelectedSemiCentral){ | |
728 | fHistEventMultiplicity->Fill(4); | |
729 | fHistTrackMultiplicitySemiCent->Fill(TrackNumber,percentile); | |
730 | eventtype=2; | |
731 | } | |
732 | ||
733 | if(isSelectedMB){ | |
734 | fHistEventMultiplicity->Fill(5); | |
735 | fHistTrackMultiplicityMB->Fill(TrackNumber,percentile); | |
736 | eventtype=3; | |
737 | } | |
738 | ||
739 | if(isSelectedCentral || isSelectedSemiCentral || isSelectedMB){ | |
740 | ||
741 | // ANALISYS | |
742 | ||
743 | // Primary vertex cut | |
744 | ||
745 | const AliESDVertex *vtx = lESDevent->GetPrimaryVertexTracks(); | |
746 | ||
747 | if(vtx->GetNContributors()<1) { | |
748 | ||
749 | // SPD vertex cut | |
750 | vtx = lESDevent->GetPrimaryVertexSPD(); | |
751 | ||
752 | if(vtx->GetNContributors()<1) { | |
753 | Info("AliAnalysisTaskHelium3Pi","No good vertex, skip event"); | |
754 | return; // NO GOOD VERTEX, SKIP EVENT | |
755 | } | |
756 | } | |
757 | ||
758 | fHistEventMultiplicity->Fill(1); // analyzed events with PV | |
759 | ||
760 | xPrimaryVertex=vtx->GetXv(); | |
761 | yPrimaryVertex=vtx->GetYv(); | |
762 | zPrimaryVertex=vtx->GetZv(); | |
763 | ||
764 | if(TMath::Abs(zPrimaryVertex)>10) return; | |
765 | ||
766 | if(eventtype==1){ | |
767 | fHistTrackMultiplicityPVCent->Fill(TrackNumber,percentile); | |
768 | fHistEventMultiplicity->Fill(6); | |
769 | } | |
770 | ||
771 | if(eventtype==2){ | |
772 | fHistTrackMultiplicityPVSemiCent->Fill(TrackNumber,percentile); | |
773 | fHistEventMultiplicity->Fill(7); | |
774 | } | |
775 | ||
776 | if(eventtype==3){ | |
777 | fHistTrackMultiplicityPVMB->Fill(TrackNumber,percentile); | |
778 | fHistEventMultiplicity->Fill(8); | |
779 | } | |
780 | ||
781 | ||
782 | fHistEventMultiplicity->Fill(2); | |
783 | ||
784 | //Find Pair candidates | |
785 | ||
786 | TArrayI PionsTPC(TrackNumber); //Neg pions | |
787 | Int_t nPionsTPC=0; | |
788 | ||
789 | TArrayI HeTPC(TrackNumber); //helium3 | |
790 | Int_t nHeTPC=0; | |
791 | ||
792 | const Double_t speedOfLight = TMath::C()*1E2*1E-12; // cm/ps | |
793 | ||
794 | Float_t impactXY=-999, impactZ=-999; | |
795 | Float_t impactXYpi=-999, impactZpi=-999; | |
5d169b75 | 796 | |
c683985a | 797 | |
d52dfc4c | 798 | //************************************************************* |
c683985a | 799 | |
800 | runNumber = lESDevent->GetRunNumber(); | |
c683985a | 801 | BCNumber = lESDevent->GetBunchCrossNumber(); |
802 | OrbitNumber = lESDevent->GetOrbitNumber(); | |
803 | PeriodNumber= lESDevent->GetPeriodNumber(); | |
804 | ||
805 | //************************************************************* | |
d52dfc4c | 806 | |
c683985a | 807 | for (Int_t j=0; j<TrackNumber; j++) { //loop on tracks |
808 | ||
809 | AliESDtrack *esdtrack=lESDevent->GetTrack(j); | |
5d169b75 | 810 | // AliVTrack* esdtrack= (AliVTrack *) fEvent->GetTrack(iT); |
811 | ||
812 | ||
c683985a | 813 | if(!esdtrack) { |
814 | AliError(Form("ERROR: Could not retrieve esdtrack %d",j)); | |
815 | continue; | |
816 | } | |
5d169b75 | 817 | |
c683985a | 818 | // ************** Track cuts **************** |
819 | ||
d52dfc4c | 820 | if (!fESDtrackCuts->AcceptTrack(esdtrack)) continue; |
821 | ||
c683985a | 822 | |
d52dfc4c | 823 | status = (ULong_t)esdtrack->GetStatus(); |
c683985a | 824 | isTPC = (((status) & AliESDtrack::kTPCin) != 0); |
825 | isTOF = ((((status) & AliESDtrack::kTOFout) != 0) && (((status) & AliESDtrack::kTIME) != 0)); | |
5d169b75 | 826 | |
c683985a | 827 | |
828 | UInt_t mapITS=esdtrack->GetITSClusterMap(); | |
5d169b75 | 829 | |
c683985a | 830 | //---------------------------------------------- |
831 | ||
832 | //****** Cuts from AliV0Vertex.cxx ************* | |
833 | ||
834 | Double_t d=esdtrack->GetD(xPrimaryVertex,yPrimaryVertex,lMagneticField); | |
835 | // if (TMath::Abs(d)<fgDPmin) continue; | |
836 | if (TMath::Abs(d)>fgRmax) continue; | |
837 | ||
838 | //---- (Usefull) Stuff | |
839 | ||
840 | TPCSignal=esdtrack->GetTPCsignal(); | |
841 | ||
842 | if (TPCSignal<10)continue; | |
5d169b75 | 843 | if (TPCSignal>1000)continue; |
c683985a | 844 | |
845 | if(!isTPC)continue; | |
c683985a | 846 | if(!esdtrack->GetTPCInnerParam())continue; |
847 | ||
848 | AliExternalTrackParam trackIn(*esdtrack->GetInnerParam()); | |
5d169b75 | 849 | pinTPC= trackIn.GetP(); |
c683985a | 850 | |
5d169b75 | 851 | //pinTPC= esdtrack->GetTPCMomentum(); |
852 | ||
c683985a | 853 | poutTPC=pinTPC; |
854 | ||
c683985a | 855 | |
856 | if((status) & (AliESDtrack::kITSrefit!=0)){ | |
c683985a | 857 | fhBB->Fill(pinTPC*esdtrack->GetSign(),TPCSignal); |
858 | } | |
859 | ||
860 | timeTOF=esdtrack->GetTOFsignal(); // ps | |
861 | trackLenghtTOF= esdtrack->GetIntegratedLength(); // cm | |
862 | ||
863 | if(isTOF){ | |
864 | ||
865 | if(!esdtrack->GetOuterParam())continue; | |
866 | ||
867 | AliExternalTrackParam trackOut(*esdtrack->GetOuterParam()); | |
868 | ||
869 | poutTPC = trackOut.GetP(); | |
870 | ||
871 | betaTOF= (trackLenghtTOF/timeTOF)/2.99792458e-2; | |
872 | ||
873 | fhTOF->Fill(poutTPC*esdtrack->GetSign(),betaTOF); | |
874 | ||
875 | Double_t mass2=(poutTPC*poutTPC)*((((speedOfLight*speedOfLight)*(timeTOF*timeTOF))-(trackLenghtTOF*trackLenghtTOF))/(trackLenghtTOF*trackLenghtTOF)); | |
876 | if(mass2>0) massTOF=TMath::Sqrt(mass2); | |
877 | fhMassTOF->Fill(massTOF); | |
878 | ||
879 | if(esdtrack->GetSign() < 0.)fBetavsTPCsignalNeg->Fill(betaTOF,TPCSignal); | |
880 | if(esdtrack->GetSign() > 0.)fBetavsTPCsignalPos->Fill(betaTOF,TPCSignal); | |
881 | ||
882 | } | |
883 | ||
884 | //pass2 | |
885 | ||
5d169b75 | 886 | // bbtheo =BetheBloch((2*pinTPC)/3.,2,kTRUE); //! OK |
887 | // bbtheoM=(1 - 0.08*5)*bbtheo; //! OK | |
888 | // bbtheoP=(1 + 0.08*5)*bbtheo; //! OK | |
889 | ||
890 | ||
891 | bbtheo = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)0,esdtrack,(AliPID::EParticleType) 7); | |
c683985a | 892 | |
c683985a | 893 | if(esdtrack->GetSign()<0){ |
5d169b75 | 894 | zNathashaNeg=bbtheo;//(TPCSignal-bbtheo)/bbtheo; |
895 | // cout<<"BBtheo 1 :"<<zNathashaNeg<<endl; | |
c683985a | 896 | fhNaNeg->Fill(pinTPC,zNathashaNeg); |
897 | } | |
898 | ||
899 | if(esdtrack->GetSign() > 0.){ | |
5d169b75 | 900 | zNathashaPos=bbtheo;//(TPCSignal-bbtheo)/bbtheo; |
c683985a | 901 | fhNaPos->Fill(pinTPC,zNathashaPos); |
902 | } | |
903 | ||
5d169b75 | 904 | nSigmaNegPion=TMath::Abs(fPIDResponse->NumberOfSigmasTPC(esdtrack,(AliPID::EParticleType) 2)); |
905 | //2 is pion | |
c683985a | 906 | |
907 | if ( (nSigmaNegPion < cutNSigma)){ | |
908 | ||
5d169b75 | 909 | // cout<<"Nsigma pi: "<<nSigmaNegPion<<endl; |
910 | ||
c683985a | 911 | fhBBPions->Fill(pinTPC*esdtrack->GetSign(),TPCSignal); |
912 | ||
5d169b75 | 913 | if(pinTPC<3.){ |
c683985a | 914 | PionsTPC[nPionsTPC++]=j; |
915 | } | |
916 | } | |
5d169b75 | 917 | |
918 | // nSigmaNegPion=(fPIDResponse->NumberOfSigmasTPC(esdtrack,(AliPID::EParticleType) 2)); | |
919 | ||
d52dfc4c | 920 | bbtheoM = TMath::Abs((fPIDResponse->NumberOfSigmasTPC(esdtrack,(AliPID::EParticleType) 7))); |
c683985a | 921 | |
5d169b75 | 922 | // if( TPCSignal > bbtheoM ) { |
d52dfc4c | 923 | // if( bbtheoM > -3.) { |
924 | if( bbtheoM < 3.) { | |
c683985a | 925 | |
926 | if(pinTPC>0.6){ | |
927 | ||
928 | fhBBHe->Fill(pinTPC*esdtrack->GetSign(),TPCSignal); | |
929 | HeTPC[nHeTPC++]=j; | |
930 | ||
c683985a | 931 | Bool_t isHeITSrefit=((status) & (AliESDtrack::kITSrefit)); |
932 | ||
933 | esdtrack->GetImpactParameters(impactXY, impactZ); | |
c683985a | 934 | |
935 | Int_t fIdxInt[200]; //dummy array | |
936 | Int_t nClustersTPC = esdtrack->GetTPCclusters(fIdxInt); | |
937 | ||
938 | Float_t chi2PerClusterTPC = esdtrack->GetTPCchi2()/(Float_t)(nClustersTPC); | |
939 | ||
d52dfc4c | 940 | tHelrunNumber =(Float_t)runNumber; |
941 | tHelBCNumber =(Float_t)BCNumber; | |
942 | tHelOrbitNumber =(Float_t)OrbitNumber; | |
943 | tHelPeriodNumber =(Float_t)PeriodNumber; | |
944 | tHeleventtype =(Float_t)eventtype; | |
945 | tHelisHeITSrefit =(Float_t)isHeITSrefit; | |
946 | tHelpercentile =(Float_t)percentile; | |
947 | tHelSign =(Float_t)esdtrack->GetSign(); | |
948 | tHelpinTPC =(Float_t)pinTPC; | |
949 | tHelGetTPCsignal =(Float_t)esdtrack->GetTPCsignal(); | |
950 | tHelPx =(Float_t)esdtrack->Px(); | |
951 | tHelPy =(Float_t)esdtrack->Py(); | |
952 | tHelPz =(Float_t)esdtrack->Pz(); | |
953 | tHelEta =(Float_t)esdtrack->Eta(); | |
954 | tHelisTOF =(Float_t)isTOF; | |
955 | tHelpoutTPC =(Float_t)poutTPC; | |
956 | tHeltimeTOF =(Float_t)timeTOF; | |
957 | tHeltrackLenghtTOF =(Float_t)trackLenghtTOF; | |
958 | tHelimpactXY =(Float_t)impactXY; | |
959 | tHelimpactZ =(Float_t)impactZ; | |
960 | tHelmapITS =(Float_t)mapITS; | |
961 | tHelTPCNcls =(Float_t)esdtrack->GetTPCNcls(); | |
962 | tHelTRDsignal =(Float_t)esdtrack->GetTRDsignal(); | |
963 | tHelxPrimaryVertex =(Float_t)xPrimaryVertex; | |
964 | tHelyPrimaryVertex =(Float_t)yPrimaryVertex; | |
965 | tHelzPrimaryVertex =(Float_t)zPrimaryVertex; | |
966 | tHelchi2PerClusterTPC =(Float_t)chi2PerClusterTPC; | |
967 | ||
968 | fNtuple4->Fill(); | |
c683985a | 969 | } |
970 | } | |
d52dfc4c | 971 | } //! track |
972 | ||
973 | PionsTPC.Set(nPionsTPC); | |
974 | HeTPC.Set(nHeTPC); | |
c683985a | 975 | |
976 | Double_t DcaHeToPrimVertex=0; | |
977 | Double_t DcaPionToPrimVertex=0; | |
978 | ||
979 | impactXY=-999, impactZ=-999; | |
980 | impactXYpi=-999, impactZpi=-999; | |
981 | ||
982 | // Track | |
983 | ||
c683985a | 984 | // Vettors for il PxPyPz |
985 | ||
986 | Double_t momPionVett[3]; | |
987 | for(Int_t i=0;i<3;i++)momPionVett[i]=0; | |
988 | ||
989 | Double_t momHeVett[3]; | |
990 | for(Int_t i=0;i<3;i++)momHeVett[i]=0; | |
991 | ||
992 | //At SV | |
993 | ||
994 | Double_t momPionVettAt[3]; | |
995 | for(Int_t i=0;i<3;i++)momPionVettAt[i]=0; | |
996 | ||
997 | Double_t momHeVettAt[3]; | |
998 | for(Int_t i=0;i<3;i++)momHeVettAt[i]=0; | |
999 | ||
1000 | //--------------- LOOP PAIRS ---------------- | |
1001 | ||
1002 | for (Int_t k=0; k < nPionsTPC; k++) { //! Pions Loop | |
1003 | ||
1004 | DcaPionToPrimVertex=0.; | |
1005 | DcaHeToPrimVertex=0; | |
1006 | ||
1007 | Int_t PionIdx=PionsTPC[k]; | |
1008 | ||
f26537d8 | 1009 | AliESDtrack *PionTrack=lESDevent->GetTrack(PionIdx); |
c683985a | 1010 | |
1011 | statusPi = (ULong_t)PionTrack->GetStatus(); | |
5d169b75 | 1012 | // isTOFPi = ((((statusPi) & (AliESDtrack::kTOFout)) != 0) && (((statusPi) & (AliESDtrack::kTIME)) != 0)); |
c683985a | 1013 | IsPiITSRefit = ((statusPi) & (AliESDtrack::kITSrefit)); |
1014 | ||
1015 | if (PionTrack) | |
1016 | DcaPionToPrimVertex = TMath::Abs(PionTrack->GetD(xPrimaryVertex, yPrimaryVertex,lMagneticField)); //OK | |
1017 | ||
d52dfc4c | 1018 | if(DcaPionToPrimVertex<0.2)continue; |
c683985a | 1019 | |
1020 | AliExternalTrackParam trackInPion(*PionTrack); | |
1021 | ||
1022 | for (Int_t i=0; i<nHeTPC; i++){ //! Helium Loop | |
1023 | ||
1024 | Int_t HeIdx=HeTPC[i]; | |
1025 | ||
f26537d8 | 1026 | AliESDtrack *HeTrack=lESDevent->GetTrack(HeIdx); |
c683985a | 1027 | |
5d169b75 | 1028 | // statusT= (ULong_t)HeTrack->GetStatus(); |
1029 | // isTOFHe = (((statusT & AliESDtrack::kTOFout) != 0) && ((statusT & AliESDtrack::kTIME) != 0)); | |
c683985a | 1030 | IsHeITSRefit = (status & AliESDtrack::kITSrefit); |
1031 | ||
1032 | if (HeTrack) | |
1033 | DcaHeToPrimVertex = TMath::Abs(HeTrack->GetD(xPrimaryVertex, yPrimaryVertex,lMagneticField)); //OK | |
1034 | ||
1035 | AliExternalTrackParam trackInHe(*HeTrack); | |
1036 | ||
1037 | if ( DcaPionToPrimVertex < fgDNmin) //OK | |
1038 | if ( DcaHeToPrimVertex < fgDNmin) continue; //OK | |
1039 | ||
1040 | Double_t xn, xp; | |
1041 | Double_t dca=0.; | |
1042 | ||
1043 | dca= PionTrack->GetDCA(HeTrack,lMagneticField,xn,xp); //!dca (Neg to Pos) | |
1044 | ||
1045 | if (dca > fgDCAmax) continue; | |
1046 | if ((xn+xp) > 2*fgRmax) continue; | |
1047 | if ((xn+xp) < 2*fgRmin) continue; | |
1048 | ||
1049 | //CORRECTION from AliV0Vertex | |
1050 | ||
1051 | Bool_t corrected=kFALSE; | |
1052 | if ((trackInPion.GetX() > 3.) && (xn < 3.)) { | |
1053 | //correct for the beam pipe material | |
1054 | corrected=kTRUE; | |
1055 | } | |
1056 | if ((trackInHe.GetX() > 3.) && (xp < 3.)) { | |
1057 | //correct for the beam pipe material | |
1058 | corrected=kTRUE; | |
1059 | } | |
1060 | if (corrected) { | |
1061 | dca=trackInPion.GetDCA(&trackInHe,lMagneticField,xn,xp); | |
1062 | if (dca > fgDCAmax) continue; | |
1063 | if ((xn+xp) > 2*fgRmax) continue; | |
1064 | if ((xn+xp) < 2*fgRmin) continue; | |
1065 | } | |
1066 | ||
1067 | //=============================================// | |
1068 | // Make "V0" with found tracks // | |
1069 | //=============================================// | |
1070 | ||
1071 | trackInPion.PropagateTo(xn,lMagneticField); | |
1072 | trackInHe.PropagateTo(xp,lMagneticField); | |
1073 | ||
1074 | AliESDv0 vertex(trackInPion,PionIdx,trackInHe,HeIdx); | |
1075 | if (vertex.GetChi2V0() > fgChi2max) continue; | |
1076 | ||
1077 | Float_t CosPointingAngle=vertex.GetV0CosineOfPointingAngle(xPrimaryVertex,yPrimaryVertex,zPrimaryVertex); //PointingAngle | |
1078 | if (CosPointingAngle < fgCPAmin) continue; | |
1079 | ||
1080 | vertex.SetDcaV0Daughters(dca); | |
1081 | vertex.SetV0CosineOfPointingAngle(CosPointingAngle); | |
1082 | ||
1083 | fPos[0]=vertex.Xv(); | |
1084 | fPos[1]=vertex.Yv(); | |
1085 | fPos[2]=vertex.Zv(); | |
1086 | ||
1087 | HeTrack->PxPyPz(momHeVett); | |
1088 | PionTrack->PxPyPz(momPionVett); | |
1089 | ||
1090 | Double_t raggio=TMath::Sqrt(fPos[0]*fPos[0]+fPos[1]*fPos[1]+fPos[2]*fPos[2]); | |
1091 | HeTrack->GetPxPyPzAt(raggio,lMagneticField,momHeVettAt); | |
1092 | PionTrack->GetPxPyPzAt(raggio,lMagneticField,momPionVettAt); | |
1093 | ||
1094 | //------------------------------------------------------------------------// | |
1095 | ||
1096 | HeTrack->GetImpactParameters(impactXY, impactZ); | |
1097 | ||
1098 | PionTrack->GetImpactParameters(impactXYpi, impactZpi); | |
1099 | ||
1100 | if(vertex.GetD(xPrimaryVertex,yPrimaryVertex,zPrimaryVertex)>3) continue; | |
1101 | ||
1102 | //salvo solo fino a 3.1 GeV/c2 | |
1103 | ||
1104 | vHelium.SetXYZM(2*momHeVettAt[0],2*momHeVettAt[1],2*momHeVettAt[2],Helium3Mass); | |
1105 | vPion.SetXYZM(momPionVettAt[0],momPionVettAt[1],momPionVettAt[2],PionMass); | |
1106 | vSum=vHelium+vPion; | |
1107 | ||
5d169b75 | 1108 | if(vSum.M()>3.2) |
1109 | continue; | |
1110 | ||
1111 | Int_t fIdxInt[200]; //dummy array | |
1112 | Int_t nClustersTPCHe = HeTrack->GetTPCclusters(fIdxInt); | |
1113 | Int_t nClustersTPCPi = PionTrack->GetTPCclusters(fIdxInt); | |
c683985a | 1114 | |
1115 | //----------------------------------------------------------------------// | |
d52dfc4c | 1116 | |
1117 | trunNumber =(Float_t)runNumber; | |
1118 | tbunchcross =(Float_t)BCNumber; | |
1119 | torbit =(Float_t)OrbitNumber; | |
1120 | tperiod =(Float_t)PeriodNumber; | |
1121 | teventtype =(Float_t)eventtype; | |
1122 | tTrackNumber =(Float_t)TrackNumber; | |
1123 | tpercentile =(Float_t)percentile; | |
1124 | txPrimaryVertex =(Float_t)xPrimaryVertex; //PRIMARY | |
1125 | tyPrimaryVertex =(Float_t)yPrimaryVertex; | |
1126 | tzPrimaryVertex =(Float_t)zPrimaryVertex; | |
1127 | txSecondaryVertex =(Float_t)fPos[0]; //SECONDARY | |
1128 | tySecondaryVertex =(Float_t)fPos[1]; | |
1129 | tzSecondaryVertex =(Float_t)fPos[2]; | |
1130 | tdcaTracks =(Float_t)dca; //between 2 tracks | |
1131 | tCosPointingAngle =(Float_t)CosPointingAngle; //cosPointingAngle da V0 | |
1132 | tDCAV0toPrimaryVertex =(Float_t)vertex.GetD(xPrimaryVertex,yPrimaryVertex,zPrimaryVertex); | |
1133 | tHeSign =(Float_t)HeTrack->GetSign(); //He | |
1134 | tHepInTPC =(Float_t)trackInHe.GetP(); | |
1135 | tHeTPCsignal =(Float_t)HeTrack->GetTPCsignal(); | |
1136 | tDcaHeToPrimVertex =(Float_t)DcaHeToPrimVertex; | |
1137 | tHeEta =(Float_t)HeTrack->Eta(); | |
1138 | tmomHex =(Float_t)momHeVett[0]; | |
1139 | tmomHey =(Float_t)momHeVett[1]; | |
1140 | tmomHez =(Float_t)momHeVett[2]; | |
1141 | tmomHeAtSVx =(Float_t)momHeVettAt[0]; | |
1142 | tmomHeAtSVy =(Float_t)momHeVettAt[1]; | |
1143 | tmomHeAtSVz =(Float_t)momHeVettAt[2]; | |
1144 | tHeTPCNcls =(Float_t)HeTrack->GetTPCNcls(); | |
1145 | tHeimpactXY =(Float_t)impactXY; | |
1146 | tHeimpactZ =(Float_t)impactZ; | |
1147 | tHeITSClusterMap =(Float_t)HeTrack->GetITSClusterMap(); | |
1148 | tIsHeITSRefit =(Float_t)IsHeITSRefit; | |
1149 | tPionSign =(Float_t)PionTrack->GetSign(); //Pion | |
1150 | tPionpInTPC =(Float_t)trackInPion.GetP(); | |
1151 | tPionTPCsignal =(Float_t)PionTrack->GetTPCsignal(); | |
1152 | tDcaPionToPrimVertex =(Float_t)DcaPionToPrimVertex; | |
1153 | tPionEta =(Float_t)PionTrack->Eta(); | |
1154 | tmomPionx =(Float_t)momPionVett[0]; | |
1155 | tmomPiony =(Float_t)momPionVett[1]; | |
1156 | tmomPionz =(Float_t)momPionVett[2]; | |
1157 | tmomNegPionAtSVx =(Float_t)momPionVettAt[0]; | |
1158 | tmomNegPionAtSVy =(Float_t)momPionVettAt[1]; | |
1159 | tmomNegPionAtSVz =(Float_t)momPionVettAt[2]; | |
1160 | tPionTPCNcls =(Float_t)PionTrack->GetTPCNcls(); | |
1161 | tPionimpactXY =(Float_t)impactXYpi; | |
1162 | tPionimpactZ =(Float_t)impactZpi; | |
1163 | tPionITSClusterMap =(Float_t)PionTrack->GetITSClusterMap(); | |
1164 | tIsPiITSRefit =(Float_t)IsPiITSRefit; | |
1165 | txn =(Float_t)xn; | |
1166 | txp =(Float_t)xp; | |
1167 | tchi2He =(Float_t)HeTrack->GetTPCchi2()/(Float_t)(nClustersTPCHe); | |
1168 | tchi2Pi =(Float_t)PionTrack->GetTPCchi2()/(Float_t)(nClustersTPCPi); | |
1169 | ||
1170 | ||
1171 | fNtuple1->Fill(); | |
5d169b75 | 1172 | vertex.Delete(); |
c683985a | 1173 | }// positive TPC |
1174 | ||
1175 | } //negative tpc | |
1176 | ||
1177 | } | |
1178 | ||
d52dfc4c | 1179 | PostData(1,fListHist); |
1180 | PostData(2,fNtuple1); | |
1181 | PostData(3,fNtuple4); | |
c683985a | 1182 | |
1183 | } //end userexec | |
1184 | ||
1185 | ||
1186 | //________________________________________________________________________ | |
1187 | ||
1188 | void AliAnalysisTaskHelium3Pi::Terminate(Option_t *) | |
1189 | { | |
1190 | // Draw result to the screen | |
1191 | // Called once at the end of the query | |
1192 | } | |
1193 | ||
1194 |