]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGLF/STRANGENESS/Hypernuclei/AliAnalysisTaskHelium3Pi.cxx
changes for Vertex and Tracks classes
[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 ){
cb98e8ad 389 fHistEventMultiplicity = new TH1F( "fHistEventMultiplicity" , "Nb of Events" , 12 , -0.5, 11.5);
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 fHistEventMultiplicity->GetXaxis()->SetBinLabel(10,"Any Events");
400 fHistEventMultiplicity->GetXaxis()->SetBinLabel(11,"Any Events w/|Vz|<10cm");
c683985a 401
d52dfc4c 402 fListHist->Add(fHistEventMultiplicity);
c683985a 403 }
404
405 if(! fHistTrackMultiplicity ){
d52dfc4c 406 fHistTrackMultiplicity = new TH2F( "fHistTrackMultiplicity" , "Nb of Tracks", 2500,0, 25000,210,-1,104);
c683985a 407 fHistTrackMultiplicity->GetXaxis()->SetTitle("Number of tracks");
408 fHistTrackMultiplicity->GetYaxis()->SetTitle("Percentile");
d52dfc4c 409 fListHist->Add(fHistTrackMultiplicity);
c683985a 410 }
411
412 if(! fHistTrackMultiplicityCent ){
d52dfc4c 413 fHistTrackMultiplicityCent = new TH2F( "fHistTrackMultiplicityCent", "Nb of Tracks Central Events", 2500,0, 25000,210,-1,104 );
c683985a 414 fHistTrackMultiplicityCent->GetXaxis()->SetTitle("Number of tracks");
415 fHistTrackMultiplicityCent->GetYaxis()->SetTitle("Percentile");
d52dfc4c 416 fListHist->Add(fHistTrackMultiplicityCent);
c683985a 417 }
418
419 if(! fHistTrackMultiplicitySemiCent ){
d52dfc4c 420 fHistTrackMultiplicitySemiCent = new TH2F( "fHistTrackMultiplicitySemiCent" , "Nb of Tracks SemiCentral Events", 2500,0, 25000 ,210,-1,104);
c683985a 421 fHistTrackMultiplicitySemiCent->GetXaxis()->SetTitle("Number of tracks");
422 fHistTrackMultiplicitySemiCent->GetYaxis()->SetTitle("Percentile");
d52dfc4c 423 fListHist->Add(fHistTrackMultiplicitySemiCent);
c683985a 424 }
425
426 if(! fHistTrackMultiplicityMB ){
d52dfc4c 427 fHistTrackMultiplicityMB = new TH2F( "fHistTrackMultiplicityMB" , "Nb of Tracks MBral Events", 2500,0, 25000,210,-1,104 );
c683985a 428 fHistTrackMultiplicityMB->GetXaxis()->SetTitle("Number of tracks");
429 fHistTrackMultiplicityMB->GetYaxis()->SetTitle("Percentile");
d52dfc4c 430 fListHist->Add(fHistTrackMultiplicityMB);
c683985a 431 }
432
433 if(! fHistTrackMultiplicityPVCent ){
d52dfc4c 434 fHistTrackMultiplicityPVCent = new TH2F( "fHistTrackMultiplicityPVCent" , "Nb of Tracks Central Events", 2500,0, 25000,210,-1,104 );
c683985a 435 fHistTrackMultiplicityPVCent->GetXaxis()->SetTitle("Number of tracks");
436 fHistTrackMultiplicityPVCent->GetYaxis()->SetTitle("Percentile");
d52dfc4c 437 fListHist->Add(fHistTrackMultiplicityPVCent);
c683985a 438 }
439
440 if(! fHistTrackMultiplicityPVSemiCent ){
d52dfc4c 441 fHistTrackMultiplicityPVSemiCent = new TH2F( "fHistTrackMultiplicityPVSemiCent" , "Nb of Tracks SemiCentral Events", 2500,0, 25000 ,210,-1,104);
c683985a 442 fHistTrackMultiplicityPVSemiCent->GetXaxis()->SetTitle("Number of tracks");
443 fHistTrackMultiplicityPVSemiCent->GetYaxis()->SetTitle("Percentile");
d52dfc4c 444 fListHist->Add(fHistTrackMultiplicityPVSemiCent);
c683985a 445 }
446
447 if(! fHistTrackMultiplicityPVMB ){
d52dfc4c 448 fHistTrackMultiplicityPVMB = new TH2F( "fHistTrackMultiplicityPVMB" , "Nb of Tracks MBral Events", 2500,0, 25000,210,-1,104 );
c683985a 449 fHistTrackMultiplicityPVMB->GetXaxis()->SetTitle("Number of tracks");
450 fHistTrackMultiplicityPVMB->GetYaxis()->SetTitle("Percentile");
d52dfc4c 451 fListHist->Add(fHistTrackMultiplicityPVMB);
c683985a 452 }
453
c683985a 454 if(! fhBB ){
d52dfc4c 455 fhBB = new TH2F( "fhBB" , "BetheBlochTPC" , 120,-6,6,150,0,1500);
c683985a 456 fhBB->GetXaxis()->SetTitle("p/z (GeV/#it{c})");
457 fhBB->GetYaxis()->SetTitle("TPC Signal");
d52dfc4c 458 fListHist->Add(fhBB);
c683985a 459 }
460
461 if(! fhTOF ){
d52dfc4c 462 fhTOF = new TH2F( "fhTOF" , "Scatter Plot TOF" , 120,-6,6,100,0,1.2);
c683985a 463 fhTOF->GetXaxis()->SetTitle("p/z (GeV/#it{c})");
464 fhTOF->GetYaxis()->SetTitle("#beta");
d52dfc4c 465 fListHist->Add(fhTOF);
c683985a 466 }
467
468 if(! fhMassTOF){
469 fhMassTOF=new TH1F ("fhMassTOF","Particle Mass - TOF", 300,0 ,5);
470 fhMassTOF->GetXaxis()->SetTitle("Mass (GeV/#it{c}^{2})");
d52dfc4c 471 fListHist->Add(fhMassTOF);
c683985a 472 }
473
474 if(! fhBBPions ){
d52dfc4c 475 fhBBPions = new TH2F( "fhBBPions" , "Bethe-Bloch TPC Pions" , 120,-6,6,150,0,1500);
c683985a 476 fhBBPions->GetXaxis()->SetTitle("p/z (GeV/#it{c})");
477 fhBBPions->GetYaxis()->SetTitle("TPC Signal");
d52dfc4c 478 fListHist->Add(fhBBPions);
c683985a 479 }
480
481 if(! fhBBHe ){
d52dfc4c 482 fhBBHe = new TH2F( "fhBBHe" , "Bethe-Bloch TPC He" , 120,-6,6,150,0,1500);
c683985a 483 fhBBHe->GetXaxis()->SetTitle("p/z (GeV/#it{c})");
484 fhBBHe->GetYaxis()->SetTitle("TPC Signal");
d52dfc4c 485 fListHist->Add(fhBBHe);
c683985a 486 }
487
488 if(! fhNaPos ){
d52dfc4c 489 fhNaPos = new TH2F( "fhNaPos" , "Distribution Pos" , 500,0,5,40,-10,10);
c683985a 490 fhNaPos->GetXaxis()->SetTitle("p/z (GeV/#it{c})");
491 fhNaPos->GetYaxis()->SetTitle("(TPCSignal-bbtheo)/bbtheo (He)");
d52dfc4c 492 fListHist->Add(fhNaPos);
c683985a 493 }
494
495 if(! fhNaNeg ){
d52dfc4c 496 fhNaNeg = new TH2F( "fhNaNeg" , "Distribution Neg" , 500,0,5,40,-10,10);
c683985a 497 fhNaNeg->GetXaxis()->SetTitle("p/z (GeV/#it{c})");
498 fhNaNeg->GetYaxis()->SetTitle("(TPCSignal-bbtheo)/bbtheo (He)");
d52dfc4c 499 fListHist->Add(fhNaNeg);
c683985a 500 }
501
502 if(! fBetavsTPCsignalPos ){
d52dfc4c 503 fBetavsTPCsignalPos = new TH2F("fBetavsTPCsignalPos","fBetavsTPCsignalPos",100,0,1.2,150,0,1500);
c683985a 504 fBetavsTPCsignalPos->GetXaxis()->SetTitle("#beta");
505 fBetavsTPCsignalPos->GetYaxis()->SetTitle("TPC Signal");
d52dfc4c 506 fListHist->Add(fBetavsTPCsignalPos);
c683985a 507 }
508
509 if(! fBetavsTPCsignalNeg ){
d52dfc4c 510 fBetavsTPCsignalNeg = new TH2F("fBetavsTPCsignalNeg","fBetavsTPCsignalNeg",100,0,1.2,150,0,1500);
c683985a 511 fBetavsTPCsignalNeg->GetXaxis()->SetTitle("#beta");
512 fBetavsTPCsignalNeg->GetYaxis()->SetTitle("TPC Signal");
d52dfc4c 513 fListHist->Add(fBetavsTPCsignalNeg);
c683985a 514 }
515
d52dfc4c 516
c683985a 517
518 if(! fNtuple1 ) {
c683985a 519
d52dfc4c 520 fNtuple1 = new TTree("fNtuple1","fNtuple1");
521
522 fNtuple1->Branch("trunNumber" ,&trunNumber ,"trunNumber/F");
523 fNtuple1->Branch("tbunchcross" ,&tbunchcross ,"tbunchcross/F");
524 fNtuple1->Branch("torbit" ,&torbit ,"torbit/F");
525 fNtuple1->Branch("tperiod" ,&tperiod ,"tperiod/F");
526 fNtuple1->Branch("teventtype" ,&teventtype ,"teventtype/F");
527 fNtuple1->Branch("tTrackNumber" ,&tTrackNumber ,"tTrackNumber/F");
528 fNtuple1->Branch("tpercentile" ,&tpercentile ,"tpercentile/F") ;
529 fNtuple1->Branch("txPrimaryVertex" ,&txPrimaryVertex ,"txPrimaryVertex/F");
530 fNtuple1->Branch("tyPrimaryVertex" ,&tyPrimaryVertex ,"tyPrimaryVertex/F");
531 fNtuple1->Branch("tzPrimaryVertex" ,&tzPrimaryVertex ,"tzPrimaryVertex/F");
532 fNtuple1->Branch("txSecondaryVertex" ,&txSecondaryVertex ,"txSecondaryVertex/F");
533 fNtuple1->Branch("tySecondaryVertex" ,&tySecondaryVertex ,"tySecondaryVertex/F");
534 fNtuple1->Branch("tzSecondaryVertex" ,&tzSecondaryVertex ,"tzSecondaryVertex/F");
535 fNtuple1->Branch("tdcaTracks" ,&tdcaTracks ,"tdcaTracks/F");
536 fNtuple1->Branch("tCosPointingAngle" ,&tCosPointingAngle ,"tCosPointingAngle/F");
537 fNtuple1->Branch("tDCAV0toPrimaryVertex",&tDCAV0toPrimaryVertex,"tDCAV0toPrimaryVertex/F");
538 fNtuple1->Branch("tHeSign" ,&tHeSign ,"tHeSign/F");
539 fNtuple1->Branch("tHepInTPC" ,&tHepInTPC ,"tHepInTPC/F");
540 fNtuple1->Branch("tHeTPCsignal" ,&tHeTPCsignal ,"tHeTPCsignal/F");
541 fNtuple1->Branch("tDcaHeToPrimVertex" ,&tDcaHeToPrimVertex ,"tDcaHeToPrimVertex/F");
542 fNtuple1->Branch("tHeEta" ,&tHeEta ,"tHeEta/F");
543 fNtuple1->Branch("tmomHex" ,&tmomHex ,"tmomHex/F");
544 fNtuple1->Branch("tmomHey" ,&tmomHey ,"tmomHey/F");
545 fNtuple1->Branch("tmomHez" ,&tmomHez ,"tmomHez/F");
546 fNtuple1->Branch("tmomHeAtSVx" ,&tmomHeAtSVx ,"tmomHeAtSVx/F");
547 fNtuple1->Branch("tmomHeAtSVy" ,&tmomHeAtSVy ,"tmomHeAtSVy/F");
548 fNtuple1->Branch("tmomHeAtSVz" ,&tmomHeAtSVz ,"tmomHeAtSVz/F");
549 fNtuple1->Branch("tHeTPCNcls" ,&tHeTPCNcls ,"tHeTPCNcls/F");
550 fNtuple1->Branch("tHeimpactXY" ,&tHeimpactXY ,"tHeimpactXY/F");
551 fNtuple1->Branch("tHeimpactZ" ,&tHeimpactZ ,"tHeimpactZ/F");
552 fNtuple1->Branch("tHeITSClusterMap" ,&tHeITSClusterMap ,"tHeITSClusterMap/F");
553 fNtuple1->Branch("tIsHeITSRefit" ,&tIsHeITSRefit ,"tIsHeITSRefit/F");
554 fNtuple1->Branch("tPionSign" ,&tPionSign ,"tPionSign/F");
555 fNtuple1->Branch("tPionpInTPC" ,&tPionpInTPC ,"tPionpInTPC/F");
556 fNtuple1->Branch("tPionTPCsignal" ,&tPionTPCsignal ,"tPionTPCsignal/F");
557 fNtuple1->Branch("tDcaPionToPrimVertex" ,&tDcaPionToPrimVertex ,"tDcaPionToPrimVertex/F");
558 fNtuple1->Branch("tPionEta" ,&tPionEta ,"tPionEta/F");
559 fNtuple1->Branch("tmomPionx" ,&tmomPionx ,"tmomPionx/F");
560 fNtuple1->Branch("tmomPiony" ,&tmomPiony ,"tmomPiony/F");
561 fNtuple1->Branch("tmomPionz" ,&tmomPionz ,"tmomPionz/F");
562 fNtuple1->Branch("tmomNegPionAtSVx" ,&tmomNegPionAtSVx ,"tmomNegPionAtSVx/F");
563 fNtuple1->Branch("tmomNegPionAtSVy" ,&tmomNegPionAtSVy ,"tmomNegPionAtSVy/F");
564 fNtuple1->Branch("tmomNegPionAtSVz" ,&tmomNegPionAtSVz ,"tmomNegPionAtSVz/F");
565 fNtuple1->Branch("tPionTPCNcls" ,&tPionTPCNcls ,"tPionTPCNcls/F");
566 fNtuple1->Branch("tPionimpactXY" ,&tPionimpactXY ,"tPionimpactXY/F");
567 fNtuple1->Branch("tPionimpactZ" ,&tPionimpactZ ,"tPionimpactZ/F");
568 fNtuple1->Branch("tPionITSClusterMap" ,&tPionITSClusterMap ,"tPionITSClusterMap/F");
569 fNtuple1->Branch("tIsPiITSRefit" ,&tIsPiITSRefit ,"tIsPiITSRefit/F");
570 fNtuple1->Branch("txn" ,&txn ,"txn/F");
571 fNtuple1->Branch("txp" ,&txp ,"txp/F");
572 fNtuple1->Branch("tchi2He" ,&tchi2He ,"tchi2He/F");
573 fNtuple1->Branch("tchi2Pi" ,&tchi2Pi ,"tchi2Pi/F");
574
c683985a 575 }
576
577 if(! fNtuple4 ) {
d52dfc4c 578
579 fNtuple4 = new TTree("fNtuple4","fNtuple4");
580
581 fNtuple4->Branch("tHelrunNumber" ,&tHelrunNumber ,"tHelrunNumber/F");
582 fNtuple4->Branch("tHelBCNumber" ,&tHelBCNumber ,"tHelBCNumber/F");
583 fNtuple4->Branch("tHelOrbitNumber" ,&tHelOrbitNumber ,"tHelOrbitNumber/F");
584 fNtuple4->Branch("tHelPeriodNumber" ,&tHelPeriodNumber ,"tHelPeriodNumber/F");
585 fNtuple4->Branch("tHeleventtype" ,&tHeleventtype ,"tHeleventtype/F");
586 fNtuple4->Branch("tHelisHeITSrefit" ,&tHelisHeITSrefit ,"tHelisHeITSrefit/F");
587 fNtuple4->Branch("tHelpercentile" ,&tHelpercentile ,"tHelpercentile/F");
588 fNtuple4->Branch("tHelSign" ,&tHelSign ,"tHelSign/F");
589 fNtuple4->Branch("tHelpinTPC" ,&tHelpinTPC ,"tHelpinTPC/F");
590 fNtuple4->Branch("tHelGetTPCsignal" ,&tHelGetTPCsignal ,"tHelGetTPCsignal/F");
591 fNtuple4->Branch("tHelPx" ,&tHelPx ,"tHelPx/F");
592 fNtuple4->Branch("tHelPy" ,&tHelPy ,"tHelPy/F");
593 fNtuple4->Branch("tHelPz" ,&tHelPz ,"tHelPz/F");
594 fNtuple4->Branch("tHelEta" ,&tHelEta ,"tHelEta/F");
595 fNtuple4->Branch("tHelisTOF" ,&tHelisTOF ,"tHelisTOF/F");
596 fNtuple4->Branch("tHelpoutTPC" ,&tHelpoutTPC ,"tHelpoutTPC/F");
597 fNtuple4->Branch("tHeltimeTOF" ,&tHeltimeTOF ,"tHeltimeTOF/F");
598 fNtuple4->Branch("tHeltrackLenghtTOF" ,&tHeltrackLenghtTOF ,"tHeltrackLenghtTOF/F");
599 fNtuple4->Branch("tHelimpactXY" ,&tHelimpactXY ,"tHelimpactXY/F");
600 fNtuple4->Branch("tHelimpactZ" ,&tHelimpactZ ,"tHelimpactZ/F");
601 fNtuple4->Branch("tHelmapITS" ,&tHelmapITS ,"tHelmapITS/F");
602 fNtuple4->Branch("tHelTPCNcls" ,&tHelTPCNcls ,"tHelTPCNcls/F");
603 fNtuple4->Branch("tHelTRDsignal" ,&tHelTRDsignal ,"tHelTRDsignal/F");
604 fNtuple4->Branch("tHelxPrimaryVertex" ,&tHelxPrimaryVertex ,"tHelxPrimaryVertex/F");
605 fNtuple4->Branch("tHelyPrimaryVertex" ,&tHelyPrimaryVertex ,"tHelyPrimaryVertex/F");
606 fNtuple4->Branch("tHelzPrimaryVertex" ,&tHelzPrimaryVertex ,"tHelzPrimaryVertex/F");
607 fNtuple4->Branch("tHelchi2PerClusterTPC",&tHelchi2PerClusterTPC,"tHelchi2PerClusterTPC/F");
608
c683985a 609
d52dfc4c 610 }
c683985a 611
d52dfc4c 612 PostData(1, fListHist);
613 PostData(2, fNtuple1);
614 PostData(3, fNtuple4);
c683985a 615}// end UserCreateOutputObjects
616
617
c683985a 618//====================== USER EXEC ========================
619
620void AliAnalysisTaskHelium3Pi::UserExec(Option_t *)
621{
622 //_______________________________________________________________________
623
624 //!*********************!//
625 //! Define variables !//
626 //!*********************!//
5d169b75 627
5d169b75 628 Double_t pinTPC=0.,poutTPC=0.,TPCSignal=0.;
c683985a 629 Double_t xPrimaryVertex=0.,yPrimaryVertex=0.,zPrimaryVertex=0.;
630 Double_t massTOF=0.,timeTOF=0.,trackLenghtTOF=0.,betaTOF=0.;
631
632 ULong_t status=0;
5d169b75 633 // ULong_t statusT=0;
c683985a 634 ULong_t statusPi=0;
635
5d169b75 636 Bool_t isTPC=kFALSE,isTOF=kFALSE,IsHeITSRefit=kFALSE,IsPiITSRefit=kFALSE ;
c683985a 637
638 Float_t nSigmaNegPion=0.;
c683985a 639
640 Double_t cutNSigma = 3;
5d169b75 641 Double_t bbtheoM=0.,bbtheo=0.;
c683985a 642 Double_t zNathashaNeg=0;
643 Double_t zNathashaPos=0;
644 Double_t fPos[3]={0.,0.,0.};
645 Double_t runNumber=0.;
5d169b75 646 // Double_t evNumber=0.;
c683985a 647
648 Double_t BCNumber=0.;
649 Double_t OrbitNumber=0.;
650 Double_t PeriodNumber=0.;
651
652 Double_t Helium3Mass = 2.80839;
653 Double_t PionMass = 0.13957;
654 // TLORENTZ vectors
655
656 TLorentzVector vPion,vHelium,vSum;
657
658 //!----------------------------------------------------------------
659
660 //! A set of very loose parameters for cuts
661
662 Double_t fgChi2max=33.; //! max chi2
663 Double_t fgDNmin=0.05; //! min imp parameter for the 1st daughter = 500um
664 Double_t fgDCAmax=1.0; //! max DCA between the daughter tracks in cm
665 Double_t fgCPAmin=0.99; //! min cosine of V0's pointing angle
666 // Double_t fgRmin=0.2; //! min radius of the fiducial volume //original
667 Double_t fgRmin=0.1; //! min radius of the fiducial volume = 1 mm
668 Double_t fgRmax=200.; //! max radius of the fiducial volume = 2 m
669
670 //------------------------------------------
671
672 // Main loop
673 // Called for EACH event
674
675 AliVEvent *event = InputEvent();
676 if (!event) { Printf("ERROR: Could not retrieve event"); return; }
677
678 Info("AliAnalysisTaskHelium3Pi","Starting UserExec");
679
680 SetDataType("REAL");
681
682 // create pointer to event
683 AliESDEvent* lESDevent = dynamic_cast<AliESDEvent*>(event);
684 if (!lESDevent) {
685 AliError("Cannot get the ESD event");
686 return;
687 }
688
689 fHistEventMultiplicity->Fill(0);
690
691 Double_t lMagneticField=lESDevent->GetMagneticField();
692 Int_t TrackNumber = -1;
693
694
695 //*****************//
696 //* Centrality *//
697 //*****************//
698
699 AliCentrality *centrality = lESDevent->GetCentrality();
700 Float_t percentile=centrality->GetCentralityPercentile("V0M");
701
702 TrackNumber = lESDevent->GetNumberOfTracks();
703 if (TrackNumber<2) return;
704
c683985a 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);
cb98e8ad 720 Bool_t isSelectedAny = (inputHandler->IsEventSelected() & AliVEvent::kAny);
c683985a 721
722 if(isSelectedCentral){
723 fHistEventMultiplicity->Fill(3);
724 fHistTrackMultiplicityCent->Fill(TrackNumber,percentile);
725 eventtype=1;
726 }
727
728 if(isSelectedSemiCentral){
729 fHistEventMultiplicity->Fill(4);
730 fHistTrackMultiplicitySemiCent->Fill(TrackNumber,percentile);
731 eventtype=2;
732 }
733
734 if(isSelectedMB){
735 fHistEventMultiplicity->Fill(5);
736 fHistTrackMultiplicityMB->Fill(TrackNumber,percentile);
737 eventtype=3;
738 }
cb98e8ad 739
ac5e3bdf 740 if(!isSelectedCentral && !isSelectedSemiCentral && !isSelectedMB && isSelectedAny){
cb98e8ad 741 fHistEventMultiplicity->Fill(9);
cb98e8ad 742 fHistTrackMultiplicity->Fill(TrackNumber,percentile); //tracce per evento
743 eventtype=4;
744 }
745
ac5e3bdf 746 //if(isSelectedCentral || isSelectedSemiCentral || isSelectedMB || isSelectedAny){
747 if(eventtype ==1 || eventtype ==2 || eventtype==3 || eventtype==4){
c683985a 748
749 // ANALISYS
750
751 // Primary vertex cut
752
753 const AliESDVertex *vtx = lESDevent->GetPrimaryVertexTracks();
754
755 if(vtx->GetNContributors()<1) {
756
757 // SPD vertex cut
758 vtx = lESDevent->GetPrimaryVertexSPD();
759
760 if(vtx->GetNContributors()<1) {
761 Info("AliAnalysisTaskHelium3Pi","No good vertex, skip event");
762 return; // NO GOOD VERTEX, SKIP EVENT
763 }
764 }
765
766 fHistEventMultiplicity->Fill(1); // analyzed events with PV
767
e690d4d0 768 xPrimaryVertex=vtx->GetX();
769 yPrimaryVertex=vtx->GetY();
770 zPrimaryVertex=vtx->GetZ();
c683985a 771
772 if(TMath::Abs(zPrimaryVertex)>10) return;
773
774 if(eventtype==1){
775 fHistTrackMultiplicityPVCent->Fill(TrackNumber,percentile);
776 fHistEventMultiplicity->Fill(6);
777 }
778
779 if(eventtype==2){
780 fHistTrackMultiplicityPVSemiCent->Fill(TrackNumber,percentile);
781 fHistEventMultiplicity->Fill(7);
782 }
783
784 if(eventtype==3){
785 fHistTrackMultiplicityPVMB->Fill(TrackNumber,percentile);
786 fHistEventMultiplicity->Fill(8);
787 }
cb98e8ad 788
789 if(eventtype==4){
790 fHistEventMultiplicity->Fill(10);
791 }
c683985a 792
793
794 fHistEventMultiplicity->Fill(2);
795
796 //Find Pair candidates
797
798 TArrayI PionsTPC(TrackNumber); //Neg pions
799 Int_t nPionsTPC=0;
800
801 TArrayI HeTPC(TrackNumber); //helium3
802 Int_t nHeTPC=0;
803
804 const Double_t speedOfLight = TMath::C()*1E2*1E-12; // cm/ps
805
806 Float_t impactXY=-999, impactZ=-999;
807 Float_t impactXYpi=-999, impactZpi=-999;
5d169b75 808
c683985a 809
d52dfc4c 810 //*************************************************************
c683985a 811
812 runNumber = lESDevent->GetRunNumber();
c683985a 813 BCNumber = lESDevent->GetBunchCrossNumber();
814 OrbitNumber = lESDevent->GetOrbitNumber();
815 PeriodNumber= lESDevent->GetPeriodNumber();
816
817 //*************************************************************
d52dfc4c 818
c683985a 819 for (Int_t j=0; j<TrackNumber; j++) { //loop on tracks
820
821 AliESDtrack *esdtrack=lESDevent->GetTrack(j);
5d169b75 822 // AliVTrack* esdtrack= (AliVTrack *) fEvent->GetTrack(iT);
823
824
c683985a 825 if(!esdtrack) {
826 AliError(Form("ERROR: Could not retrieve esdtrack %d",j));
827 continue;
828 }
5d169b75 829
c683985a 830 // ************** Track cuts ****************
831
d52dfc4c 832 if (!fESDtrackCuts->AcceptTrack(esdtrack)) continue;
833
c683985a 834
d52dfc4c 835 status = (ULong_t)esdtrack->GetStatus();
c683985a 836 isTPC = (((status) & AliESDtrack::kTPCin) != 0);
837 isTOF = ((((status) & AliESDtrack::kTOFout) != 0) && (((status) & AliESDtrack::kTIME) != 0));
c683985a 838
839 UInt_t mapITS=esdtrack->GetITSClusterMap();
5d169b75 840
c683985a 841 //----------------------------------------------
842
843 //****** Cuts from AliV0Vertex.cxx *************
844
845 Double_t d=esdtrack->GetD(xPrimaryVertex,yPrimaryVertex,lMagneticField);
846 // if (TMath::Abs(d)<fgDPmin) continue;
847 if (TMath::Abs(d)>fgRmax) continue;
848
849 //---- (Usefull) Stuff
850
851 TPCSignal=esdtrack->GetTPCsignal();
852
853 if (TPCSignal<10)continue;
5d169b75 854 if (TPCSignal>1000)continue;
c683985a 855
856 if(!isTPC)continue;
c683985a 857 if(!esdtrack->GetTPCInnerParam())continue;
858
859 AliExternalTrackParam trackIn(*esdtrack->GetInnerParam());
5d169b75 860 pinTPC= trackIn.GetP();
c683985a 861
5d169b75 862 //pinTPC= esdtrack->GetTPCMomentum();
863
c683985a 864 poutTPC=pinTPC;
865
c683985a 866
867 if((status) & (AliESDtrack::kITSrefit!=0)){
c683985a 868 fhBB->Fill(pinTPC*esdtrack->GetSign(),TPCSignal);
869 }
870
871 timeTOF=esdtrack->GetTOFsignal(); // ps
872 trackLenghtTOF= esdtrack->GetIntegratedLength(); // cm
873
874 if(isTOF){
875
876 if(!esdtrack->GetOuterParam())continue;
877
878 AliExternalTrackParam trackOut(*esdtrack->GetOuterParam());
879
880 poutTPC = trackOut.GetP();
881
882 betaTOF= (trackLenghtTOF/timeTOF)/2.99792458e-2;
883
884 fhTOF->Fill(poutTPC*esdtrack->GetSign(),betaTOF);
885
886 Double_t mass2=(poutTPC*poutTPC)*((((speedOfLight*speedOfLight)*(timeTOF*timeTOF))-(trackLenghtTOF*trackLenghtTOF))/(trackLenghtTOF*trackLenghtTOF));
887 if(mass2>0) massTOF=TMath::Sqrt(mass2);
888 fhMassTOF->Fill(massTOF);
889
890 if(esdtrack->GetSign() < 0.)fBetavsTPCsignalNeg->Fill(betaTOF,TPCSignal);
891 if(esdtrack->GetSign() > 0.)fBetavsTPCsignalPos->Fill(betaTOF,TPCSignal);
892
893 }
894
895 //pass2
896
5d169b75 897 // bbtheo =BetheBloch((2*pinTPC)/3.,2,kTRUE); //! OK
898 // bbtheoM=(1 - 0.08*5)*bbtheo; //! OK
899 // bbtheoP=(1 + 0.08*5)*bbtheo; //! OK
900
901
902 bbtheo = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)0,esdtrack,(AliPID::EParticleType) 7);
c683985a 903
c683985a 904 if(esdtrack->GetSign()<0){
5d169b75 905 zNathashaNeg=bbtheo;//(TPCSignal-bbtheo)/bbtheo;
906 // cout<<"BBtheo 1 :"<<zNathashaNeg<<endl;
c683985a 907 fhNaNeg->Fill(pinTPC,zNathashaNeg);
908 }
909
910 if(esdtrack->GetSign() > 0.){
5d169b75 911 zNathashaPos=bbtheo;//(TPCSignal-bbtheo)/bbtheo;
c683985a 912 fhNaPos->Fill(pinTPC,zNathashaPos);
913 }
914
5d169b75 915 nSigmaNegPion=TMath::Abs(fPIDResponse->NumberOfSigmasTPC(esdtrack,(AliPID::EParticleType) 2));
916 //2 is pion
c683985a 917
918 if ( (nSigmaNegPion < cutNSigma)){
919
5d169b75 920 // cout<<"Nsigma pi: "<<nSigmaNegPion<<endl;
921
c683985a 922 fhBBPions->Fill(pinTPC*esdtrack->GetSign(),TPCSignal);
923
5d169b75 924 if(pinTPC<3.){
c683985a 925 PionsTPC[nPionsTPC++]=j;
926 }
927 }
5d169b75 928
929 // nSigmaNegPion=(fPIDResponse->NumberOfSigmasTPC(esdtrack,(AliPID::EParticleType) 2));
930
d52dfc4c 931 bbtheoM = TMath::Abs((fPIDResponse->NumberOfSigmasTPC(esdtrack,(AliPID::EParticleType) 7)));
c683985a 932
5d169b75 933 // if( TPCSignal > bbtheoM ) {
d52dfc4c 934 // if( bbtheoM > -3.) {
935 if( bbtheoM < 3.) {
c683985a 936
937 if(pinTPC>0.6){
938
939 fhBBHe->Fill(pinTPC*esdtrack->GetSign(),TPCSignal);
940 HeTPC[nHeTPC++]=j;
941
c683985a 942 Bool_t isHeITSrefit=((status) & (AliESDtrack::kITSrefit));
943
944 esdtrack->GetImpactParameters(impactXY, impactZ);
c683985a 945
946 Int_t fIdxInt[200]; //dummy array
947 Int_t nClustersTPC = esdtrack->GetTPCclusters(fIdxInt);
948
949 Float_t chi2PerClusterTPC = esdtrack->GetTPCchi2()/(Float_t)(nClustersTPC);
950
d52dfc4c 951 tHelrunNumber =(Float_t)runNumber;
952 tHelBCNumber =(Float_t)BCNumber;
953 tHelOrbitNumber =(Float_t)OrbitNumber;
954 tHelPeriodNumber =(Float_t)PeriodNumber;
955 tHeleventtype =(Float_t)eventtype;
956 tHelisHeITSrefit =(Float_t)isHeITSrefit;
957 tHelpercentile =(Float_t)percentile;
958 tHelSign =(Float_t)esdtrack->GetSign();
959 tHelpinTPC =(Float_t)pinTPC;
960 tHelGetTPCsignal =(Float_t)esdtrack->GetTPCsignal();
961 tHelPx =(Float_t)esdtrack->Px();
962 tHelPy =(Float_t)esdtrack->Py();
963 tHelPz =(Float_t)esdtrack->Pz();
964 tHelEta =(Float_t)esdtrack->Eta();
965 tHelisTOF =(Float_t)isTOF;
966 tHelpoutTPC =(Float_t)poutTPC;
967 tHeltimeTOF =(Float_t)timeTOF;
968 tHeltrackLenghtTOF =(Float_t)trackLenghtTOF;
969 tHelimpactXY =(Float_t)impactXY;
970 tHelimpactZ =(Float_t)impactZ;
971 tHelmapITS =(Float_t)mapITS;
972 tHelTPCNcls =(Float_t)esdtrack->GetTPCNcls();
973 tHelTRDsignal =(Float_t)esdtrack->GetTRDsignal();
974 tHelxPrimaryVertex =(Float_t)xPrimaryVertex;
975 tHelyPrimaryVertex =(Float_t)yPrimaryVertex;
976 tHelzPrimaryVertex =(Float_t)zPrimaryVertex;
977 tHelchi2PerClusterTPC =(Float_t)chi2PerClusterTPC;
978
cb98e8ad 979 // fNtuple4->Fill();
c683985a 980 }
981 }
d52dfc4c 982 } //! track
983
984 PionsTPC.Set(nPionsTPC);
985 HeTPC.Set(nHeTPC);
c683985a 986
987 Double_t DcaHeToPrimVertex=0;
988 Double_t DcaPionToPrimVertex=0;
989
990 impactXY=-999, impactZ=-999;
991 impactXYpi=-999, impactZpi=-999;
992
993 // Track
994
c683985a 995 // Vettors for il PxPyPz
996
997 Double_t momPionVett[3];
998 for(Int_t i=0;i<3;i++)momPionVett[i]=0;
999
1000 Double_t momHeVett[3];
1001 for(Int_t i=0;i<3;i++)momHeVett[i]=0;
1002
1003 //At SV
1004
1005 Double_t momPionVettAt[3];
1006 for(Int_t i=0;i<3;i++)momPionVettAt[i]=0;
1007
1008 Double_t momHeVettAt[3];
1009 for(Int_t i=0;i<3;i++)momHeVettAt[i]=0;
1010
1011 //--------------- LOOP PAIRS ----------------
1012
1013 for (Int_t k=0; k < nPionsTPC; k++) { //! Pions Loop
1014
1015 DcaPionToPrimVertex=0.;
1016 DcaHeToPrimVertex=0;
1017
1018 Int_t PionIdx=PionsTPC[k];
1019
f26537d8 1020 AliESDtrack *PionTrack=lESDevent->GetTrack(PionIdx);
c683985a 1021
1022 statusPi = (ULong_t)PionTrack->GetStatus();
5d169b75 1023 // isTOFPi = ((((statusPi) & (AliESDtrack::kTOFout)) != 0) && (((statusPi) & (AliESDtrack::kTIME)) != 0));
c683985a 1024 IsPiITSRefit = ((statusPi) & (AliESDtrack::kITSrefit));
1025
1026 if (PionTrack)
1027 DcaPionToPrimVertex = TMath::Abs(PionTrack->GetD(xPrimaryVertex, yPrimaryVertex,lMagneticField)); //OK
1028
d52dfc4c 1029 if(DcaPionToPrimVertex<0.2)continue;
c683985a 1030
1031 AliExternalTrackParam trackInPion(*PionTrack);
1032
1033 for (Int_t i=0; i<nHeTPC; i++){ //! Helium Loop
1034
1035 Int_t HeIdx=HeTPC[i];
1036
f26537d8 1037 AliESDtrack *HeTrack=lESDevent->GetTrack(HeIdx);
c683985a 1038
5d169b75 1039 // statusT= (ULong_t)HeTrack->GetStatus();
1040 // isTOFHe = (((statusT & AliESDtrack::kTOFout) != 0) && ((statusT & AliESDtrack::kTIME) != 0));
c683985a 1041 IsHeITSRefit = (status & AliESDtrack::kITSrefit);
1042
1043 if (HeTrack)
1044 DcaHeToPrimVertex = TMath::Abs(HeTrack->GetD(xPrimaryVertex, yPrimaryVertex,lMagneticField)); //OK
1045
1046 AliExternalTrackParam trackInHe(*HeTrack);
1047
1048 if ( DcaPionToPrimVertex < fgDNmin) //OK
1049 if ( DcaHeToPrimVertex < fgDNmin) continue; //OK
1050
1051 Double_t xn, xp;
1052 Double_t dca=0.;
1053
1054 dca= PionTrack->GetDCA(HeTrack,lMagneticField,xn,xp); //!dca (Neg to Pos)
1055
1056 if (dca > fgDCAmax) continue;
1057 if ((xn+xp) > 2*fgRmax) continue;
1058 if ((xn+xp) < 2*fgRmin) continue;
1059
1060 //CORRECTION from AliV0Vertex
1061
1062 Bool_t corrected=kFALSE;
1063 if ((trackInPion.GetX() > 3.) && (xn < 3.)) {
1064 //correct for the beam pipe material
1065 corrected=kTRUE;
1066 }
1067 if ((trackInHe.GetX() > 3.) && (xp < 3.)) {
1068 //correct for the beam pipe material
1069 corrected=kTRUE;
1070 }
1071 if (corrected) {
1072 dca=trackInPion.GetDCA(&trackInHe,lMagneticField,xn,xp);
1073 if (dca > fgDCAmax) continue;
1074 if ((xn+xp) > 2*fgRmax) continue;
1075 if ((xn+xp) < 2*fgRmin) continue;
1076 }
1077
1078 //=============================================//
1079 // Make "V0" with found tracks //
1080 //=============================================//
1081
1082 trackInPion.PropagateTo(xn,lMagneticField);
1083 trackInHe.PropagateTo(xp,lMagneticField);
1084
1085 AliESDv0 vertex(trackInPion,PionIdx,trackInHe,HeIdx);
1086 if (vertex.GetChi2V0() > fgChi2max) continue;
1087
1088 Float_t CosPointingAngle=vertex.GetV0CosineOfPointingAngle(xPrimaryVertex,yPrimaryVertex,zPrimaryVertex); //PointingAngle
1089 if (CosPointingAngle < fgCPAmin) continue;
1090
1091 vertex.SetDcaV0Daughters(dca);
1092 vertex.SetV0CosineOfPointingAngle(CosPointingAngle);
1093
1094 fPos[0]=vertex.Xv();
1095 fPos[1]=vertex.Yv();
1096 fPos[2]=vertex.Zv();
1097
1098 HeTrack->PxPyPz(momHeVett);
1099 PionTrack->PxPyPz(momPionVett);
1100
1101 Double_t raggio=TMath::Sqrt(fPos[0]*fPos[0]+fPos[1]*fPos[1]+fPos[2]*fPos[2]);
1102 HeTrack->GetPxPyPzAt(raggio,lMagneticField,momHeVettAt);
1103 PionTrack->GetPxPyPzAt(raggio,lMagneticField,momPionVettAt);
1104
1105 //------------------------------------------------------------------------//
1106
1107 HeTrack->GetImpactParameters(impactXY, impactZ);
1108
1109 PionTrack->GetImpactParameters(impactXYpi, impactZpi);
1110
1111 if(vertex.GetD(xPrimaryVertex,yPrimaryVertex,zPrimaryVertex)>3) continue;
1112
1113 //salvo solo fino a 3.1 GeV/c2
1114
1115 vHelium.SetXYZM(2*momHeVettAt[0],2*momHeVettAt[1],2*momHeVettAt[2],Helium3Mass);
1116 vPion.SetXYZM(momPionVettAt[0],momPionVettAt[1],momPionVettAt[2],PionMass);
1117 vSum=vHelium+vPion;
1118
5d169b75 1119 if(vSum.M()>3.2)
1120 continue;
1121
1122 Int_t fIdxInt[200]; //dummy array
1123 Int_t nClustersTPCHe = HeTrack->GetTPCclusters(fIdxInt);
1124 Int_t nClustersTPCPi = PionTrack->GetTPCclusters(fIdxInt);
c683985a 1125
1126 //----------------------------------------------------------------------//
d52dfc4c 1127
1128 trunNumber =(Float_t)runNumber;
1129 tbunchcross =(Float_t)BCNumber;
1130 torbit =(Float_t)OrbitNumber;
1131 tperiod =(Float_t)PeriodNumber;
1132 teventtype =(Float_t)eventtype;
1133 tTrackNumber =(Float_t)TrackNumber;
1134 tpercentile =(Float_t)percentile;
1135 txPrimaryVertex =(Float_t)xPrimaryVertex; //PRIMARY
1136 tyPrimaryVertex =(Float_t)yPrimaryVertex;
1137 tzPrimaryVertex =(Float_t)zPrimaryVertex;
1138 txSecondaryVertex =(Float_t)fPos[0]; //SECONDARY
1139 tySecondaryVertex =(Float_t)fPos[1];
1140 tzSecondaryVertex =(Float_t)fPos[2];
1141 tdcaTracks =(Float_t)dca; //between 2 tracks
1142 tCosPointingAngle =(Float_t)CosPointingAngle; //cosPointingAngle da V0
1143 tDCAV0toPrimaryVertex =(Float_t)vertex.GetD(xPrimaryVertex,yPrimaryVertex,zPrimaryVertex);
1144 tHeSign =(Float_t)HeTrack->GetSign(); //He
1145 tHepInTPC =(Float_t)trackInHe.GetP();
1146 tHeTPCsignal =(Float_t)HeTrack->GetTPCsignal();
1147 tDcaHeToPrimVertex =(Float_t)DcaHeToPrimVertex;
1148 tHeEta =(Float_t)HeTrack->Eta();
1149 tmomHex =(Float_t)momHeVett[0];
1150 tmomHey =(Float_t)momHeVett[1];
1151 tmomHez =(Float_t)momHeVett[2];
1152 tmomHeAtSVx =(Float_t)momHeVettAt[0];
1153 tmomHeAtSVy =(Float_t)momHeVettAt[1];
1154 tmomHeAtSVz =(Float_t)momHeVettAt[2];
1155 tHeTPCNcls =(Float_t)HeTrack->GetTPCNcls();
1156 tHeimpactXY =(Float_t)impactXY;
1157 tHeimpactZ =(Float_t)impactZ;
1158 tHeITSClusterMap =(Float_t)HeTrack->GetITSClusterMap();
1159 tIsHeITSRefit =(Float_t)IsHeITSRefit;
1160 tPionSign =(Float_t)PionTrack->GetSign(); //Pion
1161 tPionpInTPC =(Float_t)trackInPion.GetP();
1162 tPionTPCsignal =(Float_t)PionTrack->GetTPCsignal();
1163 tDcaPionToPrimVertex =(Float_t)DcaPionToPrimVertex;
1164 tPionEta =(Float_t)PionTrack->Eta();
1165 tmomPionx =(Float_t)momPionVett[0];
1166 tmomPiony =(Float_t)momPionVett[1];
1167 tmomPionz =(Float_t)momPionVett[2];
1168 tmomNegPionAtSVx =(Float_t)momPionVettAt[0];
1169 tmomNegPionAtSVy =(Float_t)momPionVettAt[1];
1170 tmomNegPionAtSVz =(Float_t)momPionVettAt[2];
1171 tPionTPCNcls =(Float_t)PionTrack->GetTPCNcls();
1172 tPionimpactXY =(Float_t)impactXYpi;
1173 tPionimpactZ =(Float_t)impactZpi;
1174 tPionITSClusterMap =(Float_t)PionTrack->GetITSClusterMap();
1175 tIsPiITSRefit =(Float_t)IsPiITSRefit;
1176 txn =(Float_t)xn;
1177 txp =(Float_t)xp;
1178 tchi2He =(Float_t)HeTrack->GetTPCchi2()/(Float_t)(nClustersTPCHe);
1179 tchi2Pi =(Float_t)PionTrack->GetTPCchi2()/(Float_t)(nClustersTPCPi);
1180
1181
1182 fNtuple1->Fill();
5d169b75 1183 vertex.Delete();
c683985a 1184 }// positive TPC
1185
1186 } //negative tpc
1187
1188 }
1189
d52dfc4c 1190 PostData(1,fListHist);
1191 PostData(2,fNtuple1);
1192 PostData(3,fNtuple4);
c683985a 1193
1194} //end userexec
1195
1196
1197//________________________________________________________________________
1198
1199void AliAnalysisTaskHelium3Pi::Terminate(Option_t *)
1200{
1201 // Draw result to the screen
1202 // Called once at the end of the query
1203}
1204
1205