]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGLF/STRANGENESS/Hypernuclei/AliAnalysisTaskHelium3Pi.cxx
Fixing Coverity Warnings
[u/mrichter/AliRoot.git] / PWGLF / STRANGENESS / Hypernuclei / AliAnalysisTaskHelium3Pi.cxx
CommitLineData
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
18class TTree;
19class TParticle;
20class TVector3;
21
22#include "AliAnalysisManager.h"
23#include <AliMCEventHandler.h>
24#include <AliMCEvent.h>
25#include <AliStack.h>
26
27class AliESDVertex;
28class AliAODVertex;
29class AliESDv0;
30class AliAODv0;
31class 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
65const Int_t AliAnalysisTaskHelium3Pi::fgNrot = 15;
66
67ClassImp(AliAnalysisTaskHelium3Pi)
68
69//________________________________________________________________________
70AliAnalysisTaskHelium3Pi::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//________________________________________________________________________
195AliAnalysisTaskHelium3Pi::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//_______________________________________________________
326AliAnalysisTaskHelium3Pi::~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
340Double_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
382void 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
618void 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
1188void AliAnalysisTaskHelium3Pi::Terminate(Option_t *)
1189{
1190 // Draw result to the screen
1191 // Called once at the end of the query
1192}
1193
1194