Do not include from subdirectories
[u/mrichter/AliRoot.git] / HMPID / AliHMPIDPIDEfficiencyV0AnalysisTask.cxx
CommitLineData
57aa24ae 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
16//==============================================================================
17// AliHMPIDPIDEfficiencyV0AnalysysTask - Class representing a analysis tool to evaluate the PID efficiency for the HMPID detector using the V0's
18//
19//
20// HMPID PID Efficiency using the V0
21//
22// Francesco Barile
23//
24//==============================================================================
25//
26// By means of AliHMPIDAnalysisTask.C macro it is possible to use this class
27// to perform the analysis on local data, on data on alien using local machine
28// and on CAF.
29
30#ifndef AliHMPIDPIDEfficiencyV0AnalysisTASK_CXX
31#define AliHMPIDPIDEfficiencyV0AnalysisTASK_CXX
32
33
34#include "TH1.h"
35#include "TH2.h"
36#include "TFile.h"
37#include "TCanvas.h"
38#include "TGraphErrors.h"
39#include "AliAnalysisManager.h"
40#include "AliESDInputHandler.h"
41#include "AliMCEventHandler.h"
42#include "AliMCEvent.h"
43#include "AliMCEvent.h"
44
45#include "AliESDtrackCuts.h"
46
47#include "AliESDv0.h"
48#include "AliESDv0Cuts.h"
49
50#include "AliPID.h"
51#include "AliLog.h"
52#include "AliHMPIDPIDEfficiencyV0AnalysisTask.h"
53
54ClassImp(AliHMPIDPIDEfficiencyV0AnalysisTask)
55
56//__________________________________________________________________________
57AliHMPIDPIDEfficiencyV0AnalysisTask::AliHMPIDPIDEfficiencyV0AnalysisTask() :
58 fESD(0x0),fMC(0x0),fUseMC(kTRUE),
59 fHmpHistList(0x0),
60 fHmpNevents(0x0),
61 fThetavsMom(0x0),
62 fmass(0x0),
63 fpdg(0x0),
64 farme(0x0),
65 farmeb(0x0),
66 hangle(0x0),
67 massap(0x0),
68 massan(0x0),
69 fmassaHMPID(0x0),
70 hdiff(0x0),
71 hdiffn(0x0),
72 fTree(0x0)
73{
74 //
75 //Default ctor
76 //
77 for (Int_t i=0; i<90; i++) fVar[i]=0;
78}
79
80//___________________________________________________________________________
81AliHMPIDPIDEfficiencyV0AnalysisTask::AliHMPIDPIDEfficiencyV0AnalysisTask(const Char_t* name) :
82 AliAnalysisTaskSE(name),
83 fESD(0x0), fMC(0x0), fUseMC(kTRUE),
84 fHmpHistList(0x0),
85 fHmpNevents(0x0),
86 fThetavsMom(0x0),
87 fmass(0x0),
88 fpdg(0x0),
89 farme(0x0),
90 farmeb(0x0),
91 hangle(0x0),
92 massap(0x0),
93 massan(0x0),
94 fmassaHMPID(0x0),
95 hdiff(0x0),
96 hdiffn(0x0),
97 fTree(0x0)
98 {
99 //
100 // Constructor. Initialization of Inputs and Outputs
101 //
102 for (Int_t i=0; i<90; i++) fVar[i]=0;
103 DefineOutput(1,TList::Class());
104 DefineOutput(2,TTree::Class());
105}
106
107//___________________________________________________________________________
108AliHMPIDPIDEfficiencyV0AnalysisTask& AliHMPIDPIDEfficiencyV0AnalysisTask::operator=(const AliHMPIDPIDEfficiencyV0AnalysisTask& c)
109{
110 //
111 // Assignment operator
112 //
113 if (this!=&c) {
114 AliAnalysisTaskSE::operator=(c);
115 fESD = c.fESD;
116 fMC = c.fMC;
117 fUseMC = c.fUseMC;
118 fHmpHistList = c.fHmpHistList;
119 fHmpNevents = c.fHmpNevents;
120 fThetavsMom = c.fThetavsMom;
121 fmass = c.fmass;
122 fpdg = c.fpdg;
123 farme = c.farme;
124 farmeb = c.farmeb;
125 hangle = c.hangle;
126 massap = c.massap;
127 massan = c.massan;
128 fmassaHMPID = c.fmassaHMPID;
129 hdiff = c.hdiff;
130 hdiffn = c.hdiffn;
131 fTree = c.fTree;
132 for(Int_t i=0; i<90; i++) fVar[i]=c.fVar[i];
133 }
134 return *this;
135}
136
137//___________________________________________________________________________
138AliHMPIDPIDEfficiencyV0AnalysisTask::AliHMPIDPIDEfficiencyV0AnalysisTask(const AliHMPIDPIDEfficiencyV0AnalysisTask& c) :
139 AliAnalysisTaskSE(c),
140 fESD(c.fESD),fMC(c.fMC),fUseMC(c.fUseMC),
141 fHmpHistList(c.fHmpHistList),
142 fHmpNevents(c.fHmpNevents),
143 fThetavsMom(c.fThetavsMom),
144 fmass(c.fmass),
145 fpdg(c.fpdg),
146 farme(c.farme),
147 farmeb(c.farmeb),
148 hangle(c.hangle),
149 massap(c.massap),
150 massan(c.massan),
151 fmassaHMPID(c.fmassaHMPID),
152 hdiff(c.hdiff),
153 hdiffn(c.hdiffn),
154 fTree(c.fTree)
155{
156 //
157 // Copy Constructor
158 //
159 for (Int_t i=0; i<90; i++) fVar[i]=c.fVar[i];
160}
161
162//___________________________________________________________________________
163AliHMPIDPIDEfficiencyV0AnalysisTask::~AliHMPIDPIDEfficiencyV0AnalysisTask() {
164 //
165 //destructor
166 //
167 Info("~AliHMPIDPIDEfficiencyV0AnalysisTask","Calling Destructor");
168 if (fHmpHistList && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) delete fHmpHistList;
169}
170
171//___________________________________________________________________________
172void AliHMPIDPIDEfficiencyV0AnalysisTask::ConnectInputData(Option_t *)
173{
174 // Connect ESD here
175
176 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
177 if (!esdH) {
178 AliDebug(2,Form("ERROR: Could not get ESDInputHandler"));
179 } else
180 fESD = esdH->GetEvent();
181
182 if (fUseMC){
183 // Connect MC
184 AliMCEventHandler *mcH = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
185 if (!mcH) {
186 AliDebug(2,Form("ERROR: Could not get MCEventHandler"));
187 fUseMC = kFALSE;
188 } else
189 fMC = mcH->MCEvent();
190 if (!fMC) AliDebug(2,Form("ERROR: Could not get MCEvent"));
191 }
192}
193
194//___________________________________________________________________________
195void AliHMPIDPIDEfficiencyV0AnalysisTask::UserExec(Option_t *)
196{
197
198 fHmpNevents->Fill(0);
199
200 // Variables:
201 Double_t lPrimaryVtxPosition[3];
202 Double_t lV0Position[3];
203
204 Double_t lDcaPosToPrimVertex = 0;
205 Double_t lDcaNegToPrimVertex = 0;
206 //Double_t lDcaV0Daughters = 0;
207
208 Double_t lMagneticField = 999;
209
210
211 const AliESDVertex *vertex = fESD->GetPrimaryVertexTracks();
212 AliESDtrackCuts *myTracksCuts = NULL;
213 if (!vertex) return;
214 if (!(vertex->GetStatus())) return;
215 vertex->GetXYZ(lPrimaryVtxPosition);
216
217 lMagneticField = fESD->GetMagneticField();
218
219 myTracksCuts = new AliESDtrackCuts();
220 myTracksCuts->SetRequireTPCRefit(kTRUE);
221
222 if(!vertex || !vertex->GetStatus() || vertex->GetNContributors()<1) {
223
224 // SPD vertex
225 vertex = fESD->GetPrimaryVertexSPD();
226 if(!vertex) return;
227 if(!vertex->GetStatus()) return;
228 if(vertex->GetNContributors()<1) return; // no good vertex, skip event
229
230 }
231
232 Double_t vtxPos[3] = {999, 999, 999};
233 if(vertex) vertex->GetXYZ(vtxPos);
234
235 if(vertex) {
236 lPrimaryVtxPosition[0] = vertex->GetX();
237 lPrimaryVtxPosition[1] = vertex->GetY();
238 lPrimaryVtxPosition[2] = vertex->GetZ();
239
240 }
241
242 fHmpNevents->Fill(1);
243
244
245
246 // Daughters' momentum:
247 Double_t lMomPos[3] = {999,999,999};
248 Double_t lMomNeg[3] = {999,999,999};
249
250 // Daughters
251 AliESDtrack *pTrack = NULL;
252 AliESDtrack *nTrack = NULL;
253
254 AliStack* pStack = 0;
255 if (fUseMC){
256 pStack = fMC->Stack();
257 }
258
259 Double_t r[3];
260 Double_t rout[3];
261
262 //
263 // Main loop function, executed on Event basis
264 //
265 //...........................................................
266 //...........................................................
267 //...........................................................
268
269 // A N A L I S I V 0
270
271 //...........................................................
272 //...........................................................
273 //...........................................................
274
275 if(fESD->GetNumberOfV0s()>0) {
276
277 for(Int_t iV0 = 0; iV0<fESD->GetNumberOfV0s(); iV0++) {
278
279 AliESDv0 *v0 = fESD->GetV0(iV0);
280 if(!v0) continue;
281
282 //.....................................................
283
284 if(v0->GetOnFlyStatus()) continue;
285
286 //.....................................................
287
288 Int_t pIndex = TMath::Abs(v0->GetPindex());
289 Int_t nIndex = TMath::Abs(v0->GetNindex());
290
291 //Double_t mass=v0->GetEffMass();
292
293 // negative..................................
294
295 Int_t qN, nphN;
296 Float_t xN, yN;
297 Float_t xpcN, ypcN, thN, phN;
298
299 // positive...................................
300
301 Int_t qP, nphP;
302 Float_t xP, yP;
303 Float_t xpcP, ypcP, thP, phP;
304
305 //.............................................
306
307
308 //cout<<"xP="<<xP<<"yP="<<yP<<"qP="<<qP<<"nphP="<<nphP<<endl;
309
310 AliESDtrack *pTrackTest = fESD->GetTrack(pIndex);
311 AliESDtrack *nTrackTest = fESD->GetTrack(nIndex);
312
313 if (!pTrackTest || !nTrackTest) { Printf("strange analysis::UserExec:: Error:Could not retreive one of the daughter track\n"); continue; }
314
315 // Remove like-sign
316 if(pTrackTest->GetSign() == nTrackTest->GetSign()){ continue; }
317
318 // IMPONGO CHE LE FIGLIE SIANO UNA POSITIVA E L'ALTRA NEGATIVA....
319 //if( pTrack->GetSign() <0 || nTrack->GetSign() > 0) continue;
320
321 if( pTrackTest->GetSign() ==1){
322
323 pTrack = fESD->GetTrack(pIndex);
324 nTrack = fESD->GetTrack(nIndex);
325
326 // Daughters' momentum;
327 v0->GetPPxPyPz(lMomPos[0],lMomPos[1],lMomPos[2]);
328 v0->GetNPxPyPz(lMomNeg[0],lMomNeg[1],lMomNeg[2]);
329
330 }
331
332 if( pTrackTest->GetSign() ==-1){
333
334 pTrack = fESD->GetTrack(nIndex);
335 nTrack = fESD->GetTrack(pIndex);
336
337 // Daughters' momentum;
338 v0->GetPPxPyPz(lMomNeg[0],lMomNeg[1],lMomNeg[2]);
339 v0->GetNPxPyPz(lMomPos[0],lMomPos[1],lMomPos[2]);
340
341 }
342
343 // DCA between daughter and Primary Vertex:
344 if (pTrack) lDcaPosToPrimVertex = TMath::Abs(pTrack->GetD(lPrimaryVtxPosition[0],lPrimaryVtxPosition[1],lMagneticField) );
345 if (nTrack) lDcaNegToPrimVertex = TMath::Abs(nTrack->GetD(lPrimaryVtxPosition[0],lPrimaryVtxPosition[1],lMagneticField) );
346
347 // Quality tracks cuts:
348 //if ( !(myTracksCuts->IsSelected(pTrack)) || !(myTracksCuts->IsSelected(nTrack)) ) continue;
349
350 v0->GetD(lPrimaryVtxPosition[0],lPrimaryVtxPosition[1],lPrimaryVtxPosition[2]);
351 v0->GetXYZ(lV0Position[0], lV0Position[1], lV0Position[2]);
352
353 //---------------------------------------------------------------------------------------------------------------------------------------------------------
354 // TAGLIO PER RIDURRE IL PESO DEI .ROOT CREATO.................
355
356 if(v0->Theta() < 0.873 || v0->Theta() > 2.268 ) continue;
357 //cout<<"Phi................................"<< v0->Phi()<<endl;
358 if(v0->Phi() > 1.3962 && v0->Phi() < 5.9341 ) continue;
359 //cout<<"*****************************Phi After................................"<< v0->Phi()<<endl;
360
361 //---------------------------------------------------------------------------------------------------------------------------------------------------------
362
363 pTrack->GetHMPIDmip(xP,yP,qP,nphP);
364 pTrack->GetHMPIDtrk(xpcP,ypcP,thP,phP);
365
366 nTrack->GetHMPIDmip(xN,yN,qN,nphN);
367 nTrack->GetHMPIDtrk(xpcN,ypcN,thN,phN);
368
369
370
371 Float_t bp[2];
372 Float_t bpCov[3];
373 pTrack->GetImpactParameters(bp,bpCov);
374
375 Float_t bn[2];
376 Float_t bnCov[3];
377 nTrack->GetImpactParameters(bn,bnCov);
378
379
380 fVar[0] = pTrack->GetHMPIDcluIdx()/1000000;
381 fVar[1] = nTrack->GetHMPIDcluIdx()/1000000;
382
383 //fVar[1] = pHmp3;
384 fVar[2] = (Float_t)pTrack->P();
385 fVar[3] = (Float_t)nTrack->P();
386
387 fVar[4] = xpcP;
388 fVar[5] = ypcP;
389 fVar[6] = xP;
390 fVar[7] = yP;
391 fVar[8] = (Float_t)pTrack->GetHMPIDsignal();
392 fVar[9] = (Float_t)nTrack->GetHMPIDsignal();
393
394 fVar[10] = qP;
395 fVar[11] = thP;
396 fVar[12] = phP;
397
398 fVar[13] = (Float_t)pTrack->GetSign();
399 fVar[14] = (Float_t)nTrack->GetSign();
400
401 fVar[15] = (Float_t)nphP;
402 fVar[16] = (Float_t)pTrack->GetNcls(1);
403 fVar[17] = (Float_t)nTrack->GetNcls(1);
404
405 //fVar[14] = (Float_t)probs[0];
406 //fVar[15] = (Float_t)probs[1];
407 //fVar[16] = (Float_t)probs[2];
408 //fVar[17] = (Float_t)probs[3];
409 //fVar[18] = (Float_t)probs[4];
410 fVar[18] = (Float_t)pTrack->GetTOFsignal();
411 fVar[19] = (Float_t)nTrack->GetTOFsignal();
412
413 fVar[20] = (Float_t)pTrack->GetKinkIndex(0);
414 fVar[21] = (Float_t)nTrack->GetKinkIndex(0);
415
416 fVar[22] = (Float_t)pTrack->Xv();
417 fVar[23] = (Float_t)nTrack->Xv();
418
419 fVar[24] = (Float_t)pTrack->Yv();
420 fVar[25] = (Float_t)nTrack->Yv();
421
422 fVar[26] = (Float_t)pTrack->Zv();
423 fVar[27] = (Float_t)nTrack->Zv();
424
425 fVar[28] = (Float_t)pTrack->GetTPCchi2();
426 fVar[29] = (Float_t)nTrack->GetTPCchi2();
427
428 // fVar[25] = b[0];
429 // fVar[26] = b[1];
430 fVar[30] = pTrack->GetHMPIDcluIdx()%1000000/1000;
431 fVar[31] = nTrack->GetHMPIDcluIdx()%1000000/1000;
432
433 fVar[32] = vtxPos[0];
434 fVar[33] = vtxPos[1];
435 fVar[34] = vtxPos[2];
436// fVar[31] = (Float_t)ITSrefit;
437// fVar[32] = (Float_t)TPCrefit;
438 fVar[35] = (Float_t)pTrack->Eta();
439 fVar[36] = (Float_t)nTrack->Eta();
440
441 fVar[37] = (Float_t)r[0];
442 fVar[38] = (Float_t)r[1];
443 fVar[39] = (Float_t)r[2];
444 fVar[40] = (Float_t)rout[0];
445 fVar[41] = (Float_t)rout[1];
446 fVar[42] = (Float_t)rout[2];
447 fVar[43] = pTrack->GetMass();
448 fVar[44] = nTrack->GetMass();
449
450 fVar[45] = v0->GetDcaV0Daughters(); // OK
451 fVar[46] = v0->GetV0CosineOfPointingAngle();
452
453 fVar[47] = lMomPos[0];//pTrack->Px();
454 fVar[48] = lMomPos[1];//pTrack->Py();
455 fVar[49] = lMomPos[2];//pTrack->Pz();
456 fVar[50] = lMomNeg[0];//nTrack->Px();
457 fVar[51] = lMomNeg[1];//nTrack->Py();
458 fVar[52] = lMomNeg[2];//nTrack->Pz();
459
460 fVar[53] = v0->P(); // impulso della V0;
461 fVar[54] = v0->GetEffMass();
462
463 fVar[55] = v0->Xv();
464 fVar[56] = v0->Yv();
465 fVar[57] = v0->Zv();
466
467
468 fVar[58] = bp[0];
469 fVar[59] = bp[1];
470
471 fVar[60] = bn[0];
472 fVar[61] = bn[1];
473
474 fVar[62] = lDcaPosToPrimVertex;
475 fVar[63] = lDcaNegToPrimVertex;
476
477 fVar[64] = v0->Eta(); // pseudorapidity
478
479 fVar[65] = v0->GetChi2V0();
480 fVar[66] = v0->GetOnFlyStatus();
481
482 fVar[67] = lPrimaryVtxPosition[0];
483 fVar[68] = lPrimaryVtxPosition[1];
484 fVar[69] = lPrimaryVtxPosition[2];
485
486 fVar[70] = v0->GetV0CosineOfPointingAngle(lPrimaryVtxPosition[0],lPrimaryVtxPosition[1], lPrimaryVtxPosition[2]); // new cos pointing angle
487
488
489 fVar[71] = lV0Position[0];
490 fVar[72] = lV0Position[1];
491 fVar[73] = lV0Position[2];
492
493 fVar[74] = TMath::Sqrt(lV0Position[0]*lV0Position[0]+lV0Position[1]*lV0Position[1]); // v0 radius;
494 fVar[75] = TMath::Sqrt(TMath::Power(lV0Position[0] - lPrimaryVtxPosition[0],2) +
495 TMath::Power(lV0Position[1] - lPrimaryVtxPosition[1],2) +
496 TMath::Power(lV0Position[2] - lPrimaryVtxPosition[2],2 )); // v0 decay lenght;
497 /*
498 fVar[76] = xpcN;
499 fVar[77] = ypcN;
500 fVar[78] = xN;
501 fVar[79] = yN;
502 fVar[80] = qN;
503 fVar[81] = thN;
504 fVar[82] = phN;
505 fVar[83] = (Float_t)nphN;
506 */
507 fVar[84] = v0->Theta();//*TMath::RadToDeg();
508 fVar[85] = v0->Phi();//*TMath::RadToDeg();
509
510
511 fVar[76] = xpcN;
512 fVar[77] = ypcN;
513 fVar[78] = xN;
514 fVar[79] = yN;
515 fVar[80] = qN;
516 fVar[81] = thN;
517 fVar[82] = phN;
518 fVar[83] = (Float_t)nphN;
519
520 fTree->Fill();
521
522
523
524
525 } // endl loop sulle V0;
526 }
527 //fVar[0] = track->GetHMPIDcluIdx()/1000000;
528 //fTree->Fill();
529
530 /* PostData(0) is taken care of by AliAnalysisTaskSE */
531 PostData(1,fHmpHistList);
532 PostData(2,fTree);
533}
534
535//___________________________________________________________________________
536void AliHMPIDPIDEfficiencyV0AnalysisTask::Terminate(Option_t*)
537{
538 // The Terminate() function is the last function to be called during
539 // a query. It always runs on the client, it can be used to present
540 // the results graphically or save the results to file.
541
542 Info("Terminate"," ");
543
544 if (!fUseMC) return;
545
546 fHmpHistList = dynamic_cast<TList*> (GetOutputData(1));
547
548 if (!fHmpHistList) {
549 AliError("Histogram List is not available");
550 return;
551 }
552
553
554 AliAnalysisTaskSE::Terminate();
555
556}
557
558//___________________________________________________________________________
559void AliHMPIDPIDEfficiencyV0AnalysisTask::UserCreateOutputObjects() {
560 //
561 //HERE ONE CAN CREATE OUTPUT OBJECTS
562 //TO BE SET BEFORE THE EXECUTION OF THE TASK
563 //
564
565 //slot #1
566// OpenFile(1);
567 fHmpHistList = new TList();
568 fHmpHistList->SetOwner();
569
570 fHmpNevents = new TH1F("fHmpNevents","Number of events",2,0,2);
571 fHmpHistList->Add(fHmpNevents);
572
573 fThetavsMom = new TH2F("fThetavsMom","Theta Cherenkov vs momentum",250,0,5,250,0,1);
574 fHmpHistList->Add(fThetavsMom);
575
576 fmass = new TH1D("fmass","mass",400,0,10);
577 fHmpHistList->Add(fmass);
578
579 massap = new TH1D("massap","massap",400,0,10);
580 fHmpHistList->Add(massap);
581
582 massan = new TH1D("massan","massan",400,0,10);
583 fHmpHistList->Add(massan);
584
585 hdiff = new TH1D("hdiff","hdiff",2000,-100,100);
586 fHmpHistList->Add(hdiff);
587
588 hdiffn = new TH1D("hdiffn","hdiffn",2000,-100,100);
589 fHmpHistList->Add(hdiffn);
590
591 fmassaHMPID = new TH1D("fmassaHMPID","fmassaHMPID",400,0,10);
592 fHmpHistList->Add(fmassaHMPID);
593
594 fpdg = new TH1D("fpdg","pdg",5000,0,5000);
595 fHmpHistList->Add(fpdg);
596
597 farme = new TH2F("farme","p ARMENTEROS vs alfa", 300, -10.5, 10.5, 300, 0, 10.3);
598 fHmpHistList->Add(farme);
599
600 farmeb = new TH2F("farmeb","p ARMENTEROS vs alfa", 300, -10.5, 10.5, 300, 0, 10.3);
601 fHmpHistList->Add(farmeb);
602
603 hangle = new TH1D("hangle","pointing angle",1000,-10,10);
604 fHmpHistList->Add(hangle);
605
606
607 fTree = new TTree("Tree","Tree with data");
608 /*
609 fTree->Branch("Chamber",&fVar[0]);
610 fTree->Branch("pHmp3",&fVar[1]);
611 fTree->Branch("P",&fVar[2]);
612 fTree->Branch("h",&fVar[3]);
613 fTree->Branch("Ypc",&fVar[4]);
614 fTree->Branch("X",&fVar[5]);
615 fTree->Branch("Y",&fVar[6]);
616 fTree->Branch("HMPIDsignal",&fVar[7]);
617 fTree->Branch("Charge",&fVar[8]);
618 fTree->Branch("Theta",&fVar[9]);
619 fTree->Branch("Phi",&fVar[10]);
620
621 fTree->Branch("pSign",&fVar[11]);
622 fTree->Branch("nSign",&fVar[52]);
623
624 fTree->Branch("NumPhotons",&fVar[12]);
625 fTree->Branch("NumTPCclust",&fVar[13]);
626 fTree->Branch("Prob0",&fVar[14]);
627 fTree->Branch("Prob1",&fVar[15]);
628 fTree->Branch("Prob2",&fVar[16]);
629 fTree->Branch("Prob3",&fVar[17]);
630 fTree->Branch("Prob4",&fVar[18]);
631 fTree->Branch("TOFsignal",&fVar[19]);
632 fTree->Branch("KinkIndex",&fVar[20]);
633 fTree->Branch("Xv",&fVar[21]);
634 fTree->Branch("Yv",&fVar[22]);
635 fTree->Branch("Zv",&fVar[23]);
636 fTree->Branch("TPCchi2",&fVar[24]);
637 fTree->Branch("b0",&fVar[25]);
638 fTree->Branch("b1",&fVar[26]);
639 fTree->Branch("ClustSize",&fVar[27]);
640 fTree->Branch("PrimVertexX",&fVar[28]);
641 fTree->Branch("PrimVertexY",&fVar[29]);
642 fTree->Branch("PrimVertexZ",&fVar[30]);
643 fTree->Branch("ITSrefit",&fVar[31]);
644 fTree->Branch("TPCrefit",&fVar[32]);
645 fTree->Branch("Eta",&fVar[33]);
646 fTree->Branch("xTrack",&fVar[34]);
647 fTree->Branch("yTrack",&fVar[35]);
648 fTree->Branch("zTrack",&fVar[36]);
649 fTree->Branch("xOuterTrack",&fVar[37]);
650 fTree->Branch("yOuterTrack",&fVar[38]);
651 fTree->Branch("zOuterTrack",&fVar[39]);
652 fTree->Branch("massaHMPID",&fVar[40]);
653 fTree->Branch("massa_pos",&fVar[41]);
654 fTree->Branch("massa_neg",&fVar[42]);
655 fTree->Branch("alfa",&fVar[43]);
656 fTree->Branch("cosPos",&fVar[44]);
657 fTree->Branch("cosNeg",&fVar[45]);
658 fTree->Branch("pmadre",&fVar[46]);
659 fTree->Branch("distance",&fVar[47]);
660 fTree->Branch("pARMENTEROSa",&fVar[48]);
661 fTree->Branch("pARMENTEROSb",&fVar[49]);
662 fTree->Branch("pointingangle",&fVar[50]);
663 fTree->Branch("dcafiglie",&fVar[51]);
664 fTree->Branch("alfa2",&fVar[52]);
665 fTree->Branch("qt",&fVar[53]);
666 fTree->Branch("pMadreSomma",&fVar[54]);
667
668 fTree->Branch("pxp",&fVar[55]);
669 fTree->Branch("pyp",&fVar[56]);
670 fTree->Branch("pzp",&fVar[57]);
671 fTree->Branch("pxn",&fVar[58]);
672 fTree->Branch("pyn",&fVar[59]);
673 fTree->Branch("pzn",&fVar[60]);
674 */
675
676
677 //==========================================================================================
678
679
680 fTree->Branch("Chamberp",&fVar[0]);
681 fTree->Branch("Chambern",&fVar[1]);
682 fTree->Branch("Pp",&fVar[2]);
683 fTree->Branch("Pn",&fVar[3]);
684 fTree->Branch("HMPIDsignalp",&fVar[8]);
685 fTree->Branch("HMPIDsignaln",&fVar[9]);
686 fTree->Branch("GetNclsp",&fVar[16]);
687 fTree->Branch("GetNclsn",&fVar[17]);
688 fTree->Branch("TOFp",&fVar[18]);
689 fTree->Branch("TOFn",&fVar[19]);
690 fTree->Branch("kinkp",&fVar[20]);
691 fTree->Branch("kinkn",&fVar[21]);
692 fTree->Branch("Xvp",&fVar[22]);
693 fTree->Branch("Xvn",&fVar[23]);
694 fTree->Branch("Yvp",&fVar[24]);
695 fTree->Branch("Yvn",&fVar[25]);
696 fTree->Branch("Zvp",&fVar[26]);
697 fTree->Branch("Zvn",&fVar[27]);
698
699 fTree->Branch("TPCp",&fVar[28]);
700 fTree->Branch("TPCn",&fVar[29]);
701 fTree->Branch("CHp",&fVar[30]);
702 fTree->Branch("CHn",&fVar[31]);
703 fTree->Branch("vtxpos",&fVar[32]);
704 fTree->Branch("vtypos",&fVar[33]);
705 fTree->Branch("vtzpos",&fVar[34]);
706 fTree->Branch("Etap",&fVar[35]);
707 fTree->Branch("Etan",&fVar[36]);
708 fTree->Branch("R0",&fVar[37]);
709 fTree->Branch("R1",&fVar[38]);
710 fTree->Branch("R2",&fVar[39]);
711 fTree->Branch("ROUT0",&fVar[40]);
712 fTree->Branch("ROUT1",&fVar[41]);
713 fTree->Branch("ROUT2",&fVar[42]);
714 fTree->Branch("massp",&fVar[43]);
715 fTree->Branch("massn",&fVar[44]);
716 fTree->Branch("dcafiglie",&fVar[45]);
717 fTree->Branch("pointingangle",&fVar[46]);
718 fTree->Branch("pxp",&fVar[47]);
719 fTree->Branch("pyp",&fVar[48]);
720 fTree->Branch("pzp",&fVar[49]);
721 fTree->Branch("pxn",&fVar[50]);
722 fTree->Branch("pyn",&fVar[51]);
723 fTree->Branch("pzn",&fVar[52]);
724 fTree->Branch("Pmadre",&fVar[53]);
725 fTree->Branch("MassEffic",&fVar[54]);
726
727 fTree->Branch("v0x",&fVar[55]);
728 fTree->Branch("v0y",&fVar[56]);
729 fTree->Branch("v0z",&fVar[57]);
730
731 fTree->Branch("bpos0",&fVar[58]);
732 fTree->Branch("bpos1",&fVar[59]);
733 fTree->Branch("bneg0",&fVar[60]);
734 fTree->Branch("bneg1",&fVar[61]);
735
736 fTree->Branch("DcaPosToPrimVertex",&fVar[62]);
737 fTree->Branch("DcaNegToPrimVertex",&fVar[63]);
738
739 fTree->Branch("etaV0",&fVar[64]);
740 fTree->Branch("Chi2V0",&fVar[65]);
741 fTree->Branch("ONFLY",&fVar[66]);
742
743 fTree->Branch("PrimVertex0",&fVar[67]);
744 fTree->Branch("PrimVertex1",&fVar[68]);
745 fTree->Branch("PrimVertex2",&fVar[69]);
746
747 fTree->Branch("NewCosPointingAngle",&fVar[70]);
748
749 fTree->Branch("V0position0",&fVar[71]);
750 fTree->Branch("V0position1",&fVar[72]);
751 fTree->Branch("V0position2",&fVar[73]);
752
753 fTree->Branch("V0radius",&fVar[74]);
754 fTree->Branch("V0decayLenght",&fVar[75]);
755 // 8 POSITIVE.......................
756 fTree->Branch("XpcP",&fVar[4]);
757 fTree->Branch("YpcP",&fVar[5]);
758 fTree->Branch("XP" ,&fVar[6]);
759 fTree->Branch("YP" ,&fVar[7]);
760 fTree->Branch("QP" ,&fVar[10]);
761 fTree->Branch("THP" ,&fVar[11]);
762 fTree->Branch("PHP" ,&fVar[12]);
763 fTree->Branch("NPHP",&fVar[15]);
764 // 8 NEGATIVE.......................
765
766
767
768 //==========================================================================================
769
770 /*
771 fTree->Branch("XpcN ",&fVar[76]);
772 fTree->Branch("YpcN ",&fVar[77]);
773 fTree->Branch("XN ",&fVar[78]);
774 fTree->Branch("YN ",&fVar[79]);
775 fTree->Branch("QN ",&fVar[80]);
776 fTree->Branch("THN ",&fVar[81]);
777 fTree->Branch("PHN ",&fVar[82]);
778 fTree->Branch("NPHN ",&fVar[83]);
779 */
780 fTree->Branch("XpcN",&fVar[76]);
781 fTree->Branch("YpcN",&fVar[77]);
782 fTree->Branch("XN",&fVar[78]);
783 fTree->Branch("YN",&fVar[79]);
784 fTree->Branch("QN",&fVar[80]);
785 fTree->Branch("THN",&fVar[81]);
786 fTree->Branch("PHN",&fVar[82]);
787 fTree->Branch("NPHN",&fVar[83]);
788
789
790 fTree->Branch("Theta_VO",&fVar[84]);
791 fTree->Branch("Phi_VO",&fVar[85]);
792
793
794
795 PostData(1,fHmpHistList);
796 PostData(2,fTree);
797}
798
799//____________________________________________________________________________________________________________________________________
800Bool_t AliHMPIDPIDEfficiencyV0AnalysisTask::Equal(Double_t x, Double_t y, Double_t tolerance)
801{
802 return abs(x - y) <= tolerance ;
803}
804
805#endif