3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
6 /* $Id: AliTRDv0Info.h 34132 2009-08-06 11:18:32Z cblume $ */
8 ////////////////////////////////////////////////////////////////////////////
10 // Reconstruction QA //
12 ////////////////////////////////////////////////////////////////////////////
18 #ifndef ALITRDGEOMETRY_H
19 #include "AliTRDgeometry.h"
31 class AliTRDtrackInfo;
32 class AliTRDv0Info : public TObject
37 ,kNlayer = AliTRDgeometry::kNlayer
38 ,kNDetectors = 3//TPC, TOF, ITS (TOF and ITS not implemented yet)
39 ,kNDaughters = 2//for positive and negative track
40 ,kNDecays = 4//number of decay types considered for reference data (conversions, K0s, Lambda, Anti-Lambda)
41 ,kNMomBins = 2//number of different momentum bins to consider for different cuts; first example: below/above 2.5 GeV -> to be refined!
64 virtual ~AliTRDv0Info(){}
66 /* Float_t Pplus[2*kNlayer]; // Positives */
67 /* Float_t Pminus[2*kNlayer]; // Negatives */
70 void Print(Option_t *opt=0x0) const;
72 Bool_t GetV0PID(Int_t ipart, AliTRDtrackInfo *track);//decides if a track is accepted for one of the reference samples!!
74 //Set values of measured/calculated variables:
75 void SetQuality(Int_t SQuality){fQuality = SQuality;}
76 void SetPplus(Int_t iLayer, Float_t SPplus){fPplus[iLayer] = SPplus;}
77 void SetPminus(Int_t iLayer, Float_t SPminus){fPminus[iLayer] = SPminus;}
78 void SetDCA(Float_t SDCA){fDCA = SDCA;}
79 void SetMomentum(Float_t SMomentum){fMomentum = SMomentum;}
80 void SetPointingAngle(Float_t SPointingAngle){fPointingAngle = SPointingAngle;}
81 void SetOpenAngle(Float_t SOpenAngle){fOpenAngle = SOpenAngle;}
82 void SetPsiPair(Float_t SPsiPair){fPsiPair = SPsiPair;}
83 void SetRadius(Float_t SRadius){fRadius = SRadius;}
84 void SetInvMass(Int_t iDecay, Float_t SInvMass){fInvMass[iDecay] = SInvMass;}
85 void SetDetPID(Int_t iDaughter, Int_t iDetector, Int_t iSpecies, Float_t SDetPID){fDetPID[iDaughter][iDetector][iSpecies] = SDetPID;}
87 //____________________________________________________________
90 void SetUpDCA(Int_t iDecay, Float_t UpDCA){fUpDCA[iDecay] = UpDCA;}
91 void SetUpPointingAngle(Int_t iDecay, Float_t UpPointingAngle){fUpPointingAngle[iDecay] = UpPointingAngle;}
92 void SetUpOpenAngle(Int_t iDecay, Float_t UpOpenAngle){fUpOpenAngle[iDecay] = UpOpenAngle;}
93 void SetDownOpenAngle(Int_t iDecay, Float_t DownOpenAngle){fDownOpenAngle[iDecay] = DownOpenAngle;}
94 void SetUpPsiPair(Int_t iDecay, Float_t UpPsiPair){fUpPsiPair[iDecay] = UpPsiPair;}
95 void SetDownPsiPair(Int_t iDecay, Float_t DownPsiPair){fDownPsiPair[iDecay] = DownPsiPair;}
96 void SetUpRadius(Int_t iDecay, Float_t UpRadius){fUpRadius[iDecay] = UpRadius;}
97 void SetDownRadius(Int_t iDecay, Float_t DownRadius){fDownRadius[iDecay] = DownRadius;}
98 void SetUpInvMass(Int_t iDecay, Int_t iMomentum, Double_t UpInvMass){fUpInvMass[iDecay][iMomentum] = UpInvMass;}
99 void SetDownInvMass(Int_t iDecay, Double_t DownInvMass){fDownInvMass[iDecay] = DownInvMass;}
100 void SetDownTPCPIDneg(Int_t iDecay, Double_t DownTPCPIDneg){fDownTPCPIDneg[iDecay] = DownTPCPIDneg;}
101 void SetDownTPCPIDpos(Int_t iDecay, Double_t DownTPCPIDpos){fDownTPCPIDpos[iDecay] = DownTPCPIDpos;}
106 AliTRDv0Info(const AliTRDv0Info&);
107 AliTRDv0Info& operator=(const AliTRDv0Info&);
109 void GetESDv0Info(AliESDv0 *esdv0);//gets most of the variables below
110 void GetDetectorPID();//operating with likelihood values of different detectors
111 Int_t Quality(AliESDv0 * const esdv0);//checks for track/vertex quality criteria
112 Double_t InvMass(Int_t part1, Int_t part2, AliESDv0 *esdv0) const;//invariant mass of mother
113 Float_t PsiPair(AliESDv0 *esdv0);//angle between daughters in plane perpendicular to magnetic field (characteristically around zero for conversions)
114 Float_t OpenAngle(AliESDv0 *esdv0);//opening angle between V0 daughters; close to zero for conversions
115 Float_t Radius(AliESDv0 *esdv0);//distance of secondary to primary vertex in x-y-plane
116 Float_t DCA() const {return fDCA;}//distance of closest approach between supposed daughter tracks
117 Float_t PointingAngle() const {return fPointingAngle;}//pointing angle: between vector from primary to secondary vertex and reconstructed momentum of V0 mother particle
118 Float_t V0Momentum(AliESDv0 *esdv0) const;//reconstructed momentum of V0 mother particle
119 void V0fromTrack(AliTRDtrackInfo * const track, Int_t ivertex);//checks if a track belongs to a vertex found by V0 finder
121 AliESDEvent *fESD; // ESD event
123 Bool_t fHasV0; //Does this track belong to a vertex from a V0 finder?
125 Int_t fQuality; // track quality status for both V0 daughters; OnFly, TPCrefit, Kinks, TPC clusters
127 Float_t fPplus[2*kNlayer]; // momentum and variance for the positive daughter
128 Float_t fPminus[2*kNlayer]; // momentum and variance for the negative daughter
129 Double_t fDetPID[kNDaughters][kNDetectors][AliPID::kSPECIES]; // PID provided by TPC, TOF and ITS
131 Float_t fMomentum; // Momentum of track at the vertex
133 Float_t fDCA; // Distance of closest approach of daughter tracks
135 Float_t fPointingAngle;// = TMath::ACos(esdv0->GetV0CosineOfPointingAngle()); // Cosine of pointing angle
137 Float_t fOpenAngle; // opening angle between daughters
139 Float_t fPsiPair; // /Angle between daughter momentum plane and plane perpendicular to magnetic field
141 Double_t fInvMass[kNDecays]; // invariant mass for different decay scenarios (conversions, K0s, Lambda->p+pi-, Lambda->p-pi+)
143 Double_t fMagField; //magnetic field strength
145 Float_t fRadius; //distance of decay/conversion from primary vertex in x-y plane
147 Int_t fTrackID;//track index
150 Float_t fV0Momentum; //V0 mother's momentum
152 //____________________________________________________________
153 //Upper and lower limits for cut variables:
155 Float_t fUpDCA[kNDecays]; // DCA, upper limit
156 Float_t fUpPointingAngle[kNDecays]; // pointing angle, upper limit
157 Float_t fUpOpenAngle[kNDecays]; // opening angle, upper limit
158 Float_t fDownOpenAngle[kNDecays]; // opening angle, lower limit
159 Float_t fUpPsiPair[kNDecays]; // psi angle, upper limit
160 Float_t fDownPsiPair[kNDecays]; // psi angle, lower limit
161 Double_t fUpInvMass[kNDecays][kNMomBins]; // invariant mass, upper limit
162 Double_t fDownInvMass[kNDecays]; // invariant mass, lower limit
163 Float_t fUpRadius[kNDecays]; // radius, upper limit
164 Float_t fDownRadius[kNDecays]; // radius, lower limit
165 Float_t fDownTPCPIDneg[AliPID::kSPECIES]; // TPC PID negatives, lower limit
166 Float_t fDownTPCPIDpos[AliPID::kSPECIES]; // TPC PID positives, lower limit
168 AliESDtrack *fTrackP; //positive daughter
169 AliESDtrack *fTrackN; //negative daughter
170 AliESDtrack *fTrack; //the current track in the ESDtrack loop (either positive or negative)
173 Int_t fNindex; //indices of positive and negative daughter track
174 Int_t fPindex; //indices of positive and negative daughter track
177 ClassDef(AliTRDv0Info, 0) // extracted V0 MC information