]>
Commit | Line | Data |
---|---|---|
1ee39b3a | 1 | #ifndef ALITRDV0INFO_H |
2 | #define ALITRDV0INFO_H | |
3 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
4 | * See cxx source for full Copyright notice */ | |
5 | ||
6 | /* $Id: AliTRDv0Info.h 34132 2009-08-06 11:18:32Z cblume $ */ | |
7 | ||
8 | //////////////////////////////////////////////////////////////////////////// | |
9 | // // | |
10 | // Reconstruction QA // | |
11 | // // | |
12 | //////////////////////////////////////////////////////////////////////////// | |
13 | ||
14 | #ifndef Root_TObject | |
15 | #include "TObject.h" | |
16 | #endif | |
17 | ||
18 | #ifndef ALITRDGEOMETRY_H | |
19 | #include "AliTRDgeometry.h" | |
20 | #endif | |
21 | ||
22 | #ifndef ALIPID_H | |
23 | #include "AliPID.h" | |
24 | #endif | |
25 | ||
26 | ||
27 | class AliESDv0; | |
28 | class AliESDtrack; | |
0ed6f095 | 29 | class AliKFParticle; |
30 | class AliKFVertex; | |
31 | class AliVEvent; | |
32 | class AliVTrack; | |
3d19c1b0 | 33 | //class AliTRDtrackV1; |
1ee39b3a | 34 | class AliTRDtrackInfo; |
35 | class AliTRDv0Info : public TObject | |
36 | { | |
37 | public: | |
38 | enum ETRDv0Info{ | |
39 | kNV0param = 10 | |
40 | ,kNlayer = AliTRDgeometry::kNlayer | |
41 | ,kNDetectors = 3//TPC, TOF, ITS (TOF and ITS not implemented yet) | |
42 | ,kNDaughters = 2//for positive and negative track | |
43 | ,kNDecays = 4//number of decay types considered for reference data (conversions, K0s, Lambda, Anti-Lambda) | |
8bc8ea55 | 44 | ,kNMomBins = 2//number of different momentum bins to consider for different cuts; first example: below /above 2.5 GeV-> to be refined! |
0ed6f095 | 45 | ,kNArmenteros = 2//number of Armenteros-Polanski parameters |
1ee39b3a | 46 | }; |
47 | ||
0ed6f095 | 48 | enum EDaughter{ |
1ee39b3a | 49 | kNeg = 0 |
50 | ,kPos = 1 | |
51 | }; | |
52 | ||
53 | enum EDecayType{ | |
54 | kGamma = 0 | |
55 | ,kK0s = 1 | |
56 | ,kLambda = 2 | |
57 | ,kAntiLambda = 3 | |
58 | }; | |
59 | ||
60 | enum EDetector{ | |
61 | kTPC = 0 | |
62 | ,kTOF = 1 | |
63 | ,kITS = 2 | |
64 | }; | |
65 | ||
66 | ||
67 | AliTRDv0Info(); | |
3d19c1b0 | 68 | AliTRDv0Info(const AliTRDv0Info &ref); |
1ee39b3a | 69 | virtual ~AliTRDv0Info(){} |
3d19c1b0 | 70 | |
1ee39b3a | 71 | |
64d57299 | 72 | Int_t GetQuality(){return fQuality;} |
73 | Float_t GetDCA(){return fDCA;} | |
74 | Float_t GetPointingAngle(){return fPointingAngle;} | |
75 | Float_t GetOpenAngle(){return fOpenAngle;} | |
76 | Float_t GetPsiPair(){return fPsiPair;} | |
77 | Float_t GetRadius(){return fRadius;} | |
78 | Float_t GetV0Momentum(){return fV0Momentum;} | |
79 | Double_t GetInvMass(Int_t iDecay){return fInvMass[iDecay];} | |
80 | Float_t GetDetPID(Int_t iDaughter, Int_t iDetector, Int_t iSpecies){return fDetPID[iDaughter][iDetector][iSpecies];} | |
81 | Float_t GetComPID(Int_t iDaughter, Int_t iSpecies){return fComPID[iDaughter][iSpecies];} | |
82 | Float_t GetTPCdEdx(Int_t iDaughter){return fTPCdEdx[iDaughter];} | |
83 | Float_t GetChi2ndf(Int_t decay){return fChi2ndf[decay];} | |
84 | ||
85 | //Get Cut values: | |
86 | ||
87 | Float_t GetUpDCA(Int_t iDecay){return fUpDCA[iDecay];} | |
88 | Float_t GetUpPointingAngle(Int_t iDecay){return fUpPointingAngle[iDecay];} | |
89 | Float_t GetUpOpenAngle(Int_t iDecay){return fUpOpenAngle[iDecay];} | |
90 | Float_t GetDownOpenAngle(Int_t iDecay){return fDownOpenAngle[iDecay];} | |
91 | Float_t GetUpPsiPair(Int_t iDecay){return fUpPsiPair[iDecay];} | |
92 | Float_t GetDownPsiPair(Int_t iDecay){return fDownPsiPair[iDecay];} | |
93 | Float_t GetUpRadius(Int_t iDecay){return fUpRadius[iDecay];} | |
94 | Float_t GetDownRadius(Int_t iDecay){return fDownRadius[iDecay];} | |
95 | Double_t GetUpInvMass(Int_t iDecay, Int_t iMomentum){return fUpInvMass[iDecay][iMomentum];} | |
96 | Double_t GetDownInvMass(Int_t iDecay){return fDownInvMass[iDecay];} | |
97 | Float_t GetDownTPCPIDneg(Int_t iPart){return fDownTPCPIDneg[iPart];} | |
98 | Float_t GetDownTPCPIDpos(Int_t iPart){return fDownTPCPIDpos[iPart];} | |
99 | Float_t GetDownComPIDneg(Int_t iPart){return fDownComPIDneg[iPart];} | |
100 | Float_t GetDownComPIDpos(Int_t iPart){return fDownComPIDpos[iPart];} | |
101 | Float_t GetDownComPIDnegPart(Int_t iPart){return fDownComPIDnegPart[iPart];} | |
102 | Float_t GetDownComPIDposPart(Int_t iPart){return fDownComPIDposPart[iPart];} | |
103 | ||
104 | ||
105 | Int_t GetPID(Int_t ipart, AliTRDtrackInfo *track); | |
106 | Int_t HasTrack(const AliTRDtrackInfo * const track) const; | |
107 | Int_t HasTrack(Int_t ti) const; | |
108 | AliESDtrack *GetV0Daughter(Int_t sign); //Get positive of negative daughter of decay | |
109 | ||
b9ddd472 | 110 | void Print(Option_t *opt="") const; |
64d57299 | 111 | |
3d19c1b0 | 112 | void SetMagField(Float_t b) {fMagField = b;} |
b9ddd472 | 113 | void SetV0tracks(AliESDtrack *p, AliESDtrack *n); |
0ed6f095 | 114 | void SetInputEvent(AliVEvent *e) { fInputEvent = e; }; |
115 | void SetPrimaryVertex(AliKFVertex *v) { fPrimaryVertex = v; }; | |
64d57299 | 116 | |
1ee39b3a | 117 | //Set values of measured/calculated variables: |
118 | void SetQuality(Int_t SQuality){fQuality = SQuality;} | |
1ee39b3a | 119 | void SetDCA(Float_t SDCA){fDCA = SDCA;} |
1ee39b3a | 120 | void SetPointingAngle(Float_t SPointingAngle){fPointingAngle = SPointingAngle;} |
121 | void SetOpenAngle(Float_t SOpenAngle){fOpenAngle = SOpenAngle;} | |
122 | void SetPsiPair(Float_t SPsiPair){fPsiPair = SPsiPair;} | |
123 | void SetRadius(Float_t SRadius){fRadius = SRadius;} | |
124 | void SetInvMass(Int_t iDecay, Float_t SInvMass){fInvMass[iDecay] = SInvMass;} | |
125 | void SetDetPID(Int_t iDaughter, Int_t iDetector, Int_t iSpecies, Float_t SDetPID){fDetPID[iDaughter][iDetector][iSpecies] = SDetPID;} | |
8bc8ea55 | 126 | void SetComPID(Int_t iDaughter, Int_t iSpecies, Float_t SComPID){fComPID[iDaughter][iSpecies] = SComPID;} |
0ed6f095 | 127 | void SetTPCdEdx(Int_t iDaughter, Float_t STpcdEdx){fTPCdEdx[iDaughter] = STpcdEdx;} |
64d57299 | 128 | void SetV0Momentum(Float_t SV0Momentum){fV0Momentum = SV0Momentum;} |
129 | void SetChi2ndf(Int_t decay, Float_t SChi2ndf){fChi2ndf[decay]=SChi2ndf;} | |
1ee39b3a | 130 | |
131 | //____________________________________________________________ | |
132 | //Set cut values: | |
133 | ||
3d19c1b0 | 134 | void SetUpDCA(Int_t iDecay, Float_t UpDCA){fUpDCA[iDecay] = UpDCA;} |
135 | void SetUpPointingAngle(Int_t iDecay, Float_t UpPointingAngle){fUpPointingAngle[iDecay] = UpPointingAngle;} | |
136 | void SetUpOpenAngle(Int_t iDecay, Float_t UpOpenAngle){fUpOpenAngle[iDecay] = UpOpenAngle;} | |
137 | void SetDownOpenAngle(Int_t iDecay, Float_t DownOpenAngle){fDownOpenAngle[iDecay] = DownOpenAngle;} | |
138 | void SetUpPsiPair(Int_t iDecay, Float_t UpPsiPair){fUpPsiPair[iDecay] = UpPsiPair;} | |
139 | void SetDownPsiPair(Int_t iDecay, Float_t DownPsiPair){fDownPsiPair[iDecay] = DownPsiPair;} | |
140 | void SetUpRadius(Int_t iDecay, Float_t UpRadius){fUpRadius[iDecay] = UpRadius;} | |
141 | void SetDownRadius(Int_t iDecay, Float_t DownRadius){fDownRadius[iDecay] = DownRadius;} | |
142 | void SetUpInvMass(Int_t iDecay, Int_t iMomentum, Double_t UpInvMass){fUpInvMass[iDecay][iMomentum] = UpInvMass;} | |
143 | void SetDownInvMass(Int_t iDecay, Double_t DownInvMass){fDownInvMass[iDecay] = DownInvMass;} | |
144 | void SetDownTPCPIDneg(Int_t iPart, Double_t DownTPCPIDneg){fDownTPCPIDneg[iPart] = DownTPCPIDneg;} | |
145 | void SetDownTPCPIDpos(Int_t iPart, Double_t DownTPCPIDpos){fDownTPCPIDpos[iPart] = DownTPCPIDpos;} | |
146 | void SetDownComPIDneg(Int_t iPart, Double_t DownComPIDneg){fDownComPIDneg[iPart] = DownComPIDneg;} | |
147 | void SetDownComPIDpos(Int_t iPart, Double_t DownComPIDpos){fDownComPIDpos[iPart] = DownComPIDpos;} | |
148 | void SetDownComPIDnegPart(Int_t iPart, Double_t DownComPIDnegPart){fDownComPIDnegPart[iPart] = DownComPIDnegPart;} | |
149 | void SetDownComPIDposPart(Int_t iPart, Double_t DownComPIDposPart){fDownComPIDposPart[iPart] = DownComPIDposPart;} | |
64d57299 | 150 | |
151 | ||
3d19c1b0 | 152 | void SetV0Info(AliESDv0 *v0);//gets most of the variables below |
1ee39b3a | 153 | |
0ed6f095 | 154 | |
155 | ||
1ee39b3a | 156 | private: |
1ee39b3a | 157 | AliTRDv0Info& operator=(const AliTRDv0Info&); |
158 | ||
1ee39b3a | 159 | void GetDetectorPID();//operating with likelihood values of different detectors |
8bc8ea55 | 160 | void CombinePID();//Bayesian combination of TPC and TOF likelihoods |
0ed6f095 | 161 | Bool_t TPCdEdxCuts(Int_t part, AliTRDtrackInfo * const track);//direct cuts on TPC dE/dx |
162 | ||
d80a6a00 | 163 | Bool_t GetTPCdEdx();//TPC dE/dx values from both tracks |
1ee39b3a | 164 | Int_t Quality(AliESDv0 * const esdv0);//checks for track/vertex quality criteria |
165 | Double_t InvMass(Int_t part1, Int_t part2, AliESDv0 *esdv0) const;//invariant mass of mother | |
166 | Float_t PsiPair(AliESDv0 *esdv0);//angle between daughters in plane perpendicular to magnetic field (characteristically around zero for conversions) | |
167 | Float_t OpenAngle(AliESDv0 *esdv0);//opening angle between V0 daughters; close to zero for conversions | |
168 | Float_t Radius(AliESDv0 *esdv0);//distance of secondary to primary vertex in x-y-plane | |
169 | Float_t DCA() const {return fDCA;}//distance of closest approach between supposed daughter tracks | |
170 | Float_t PointingAngle() const {return fPointingAngle;}//pointing angle: between vector from primary to secondary vertex and reconstructed momentum of V0 mother particle | |
171 | Float_t V0Momentum(AliESDv0 *esdv0) const;//reconstructed momentum of V0 mother particle | |
0ed6f095 | 172 | Bool_t V0SignCheck();//checks if daughters have opposite signs |
173 | Bool_t Armenteros(AliESDv0 *esdv0, Int_t species);//the famous Armenteros-Polanski cut | |
174 | Double_t KFChi2ndf(Int_t part1, Int_t part2,Int_t decay);//Chi2ndf from KF | |
64d57299 | 175 | AliKFParticle *CreateMotherParticle(const AliESDtrack *pdaughter, const AliESDtrack *ndaughter, Int_t pspec, Int_t nspec);//Mother Particle from KF |
0ed6f095 | 176 | |
1ee39b3a | 177 | |
178 | //____________________________________________________________ | |
179 | //Upper and lower limits for cut variables: | |
180 | ||
181 | Float_t fUpDCA[kNDecays]; // DCA, upper limit | |
182 | Float_t fUpPointingAngle[kNDecays]; // pointing angle, upper limit | |
183 | Float_t fUpOpenAngle[kNDecays]; // opening angle, upper limit | |
184 | Float_t fDownOpenAngle[kNDecays]; // opening angle, lower limit | |
185 | Float_t fUpPsiPair[kNDecays]; // psi angle, upper limit | |
186 | Float_t fDownPsiPair[kNDecays]; // psi angle, lower limit | |
0ed6f095 | 187 | |
64d57299 | 188 | Double_t fUpChi2ndf[kNDecays]; // upper Chi2/NDF limit |
1ee39b3a | 189 | Float_t fUpRadius[kNDecays]; // radius, upper limit |
190 | Float_t fDownRadius[kNDecays]; // radius, lower limit | |
191 | Float_t fDownTPCPIDneg[AliPID::kSPECIES]; // TPC PID negatives, lower limit | |
192 | Float_t fDownTPCPIDpos[AliPID::kSPECIES]; // TPC PID positives, lower limit | |
8bc8ea55 | 193 | Float_t fDownComPIDneg[AliPID::kSPECIES]; // Combined PID negatives, lower limit |
194 | Float_t fDownComPIDpos[AliPID::kSPECIES]; // Combined PID positives, lower limit | |
195 | Float_t fDownComPIDnegPart[AliPID::kSPECIES]; // Combined PID positive partner daughters (NOT the daughter track that would go into the reference data; here: pion daughters from Lambda decays; lower limit | |
196 | Float_t fDownComPIDposPart[AliPID::kSPECIES]; // Combined PID positive partner daughters (NOT the daughter track that would go into the reference data; here: pion daughters from Lambda decays; lower limit | |
64d57299 | 197 | Double_t fUpInvMass[kNDecays][kNMomBins]; // invariant mass, upper limit |
198 | Double_t fDownInvMass[kNDecays]; // invariant mass, lower limit | |
199 | ||
200 | ||
201 | Double_t fChi2ndf[kNDecays];//Chi2/NDF from KF | |
202 | ||
203 | ||
204 | Double_t fInvMass[kNDecays]; // invariant mass for different decay scenarios (conversions, K0s, Lambda->p+pi-, Lambda->p-pi+) | |
205 | Int_t fQuality; // track quality status for both V0 daughters; OnFly, TPCrefit, Kinks, TPC clusters | |
206 | ||
207 | Double_t fDetPID[kNDaughters][kNDetectors][AliPID::kSPECIES]; // PID provided by TPC, TOF and ITS | |
208 | Double_t fComPID[kNDaughters][AliPID::kSPECIES];//Combined PID, momentarily from TPC and TOF only | |
0ed6f095 | 209 | |
64d57299 | 210 | Float_t fDCA; // Distance of closest approach of daughter tracks |
211 | Float_t fPointingAngle;// = TMath::ACos(esdv0->GetV0CosineOfPointingAngle()); // Cosine of pointing angle | |
212 | Float_t fOpenAngle; // opening angle between daughters | |
213 | Float_t fPsiPair; // /Angle between daughter momentum plane and plane perpendicular to magnetic field | |
214 | ||
215 | Bool_t fArmenteros[kNDecays];// Array for the Armenteros yes/no decision for all decays | |
216 | Double_t fMagField; //magnetic field strength | |
217 | Float_t fRadius; //distance of decay/conversion from primary vertex in x-y plane | |
218 | Float_t fV0Momentum; //V0 mother's momentum | |
1ee39b3a | 219 | |
3d19c1b0 | 220 | Int_t fNindex; //indices of positive and negative daughter track |
221 | Int_t fPindex; //indices of positive and negative daughter track | |
0ed6f095 | 222 | |
64d57299 | 223 | Float_t fTPCdEdx[kNDaughters]; //Energy deposition in the TPC |
224 | ||
225 | ||
0ed6f095 | 226 | AliVEvent *fInputEvent; // Input Event |
227 | AliKFVertex *fPrimaryVertex; // primary vertex | |
1ee39b3a | 228 | |
64d57299 | 229 | AliESDtrack *fTrackP; //!positive daughter |
230 | AliESDtrack *fTrackN; //!negative daughter | |
231 | ||
232 | ||
1ee39b3a | 233 | |
3d19c1b0 | 234 | ClassDef(AliTRDv0Info, 1) // extracted V0 MC information |
1ee39b3a | 235 | }; |
236 | ||
237 | ||
238 | #endif | |
239 |