prepare PID LQ ref maker for production
[u/mrichter/AliRoot.git] / PWG1 / TRD / info / AliTRDv0Info.h
CommitLineData
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
27class AliESDv0;
28class AliESDtrack;
29class AliESDEvent;
30class AliTRDtrackV1;
31class AliTRDtrackInfo;
32class AliTRDv0Info : public TObject
33{
34public:
35 enum ETRDv0Info{
36 kNV0param = 10
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!
42 };
43
44 enum EDaughter{
45 kNeg = 0
46 ,kPos = 1
47 };
48
49 enum EDecayType{
50 kGamma = 0
51 ,kK0s = 1
52 ,kLambda = 2
53 ,kAntiLambda = 3
54 };
55
56 enum EDetector{
57 kTPC = 0
58 ,kTOF = 1
59 ,kITS = 2
60 };
61
62
63 AliTRDv0Info();
64 virtual ~AliTRDv0Info(){}
65
66/* Float_t Pplus[2*kNlayer]; // Positives */
67/* Float_t Pminus[2*kNlayer]; // Negatives */
68
69
70 void Print(Option_t *opt=0x0) const;
71
72 Bool_t GetV0PID(Int_t ipart, AliTRDtrackInfo *track);//decides if a track is accepted for one of the reference samples!!
73
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;}
86
87//____________________________________________________________
88 //Set cut values:
89
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;}
102
103
104
105private:
106 AliTRDv0Info(const AliTRDv0Info&);
107 AliTRDv0Info& operator=(const AliTRDv0Info&);
108
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
120
121 AliESDEvent *fESD; // ESD event
122
123 Bool_t fHasV0; //Does this track belong to a vertex from a V0 finder?
124
125 Int_t fQuality; // track quality status for both V0 daughters; OnFly, TPCrefit, Kinks, TPC clusters
126
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
130
131 Float_t fMomentum; // Momentum of track at the vertex
132
133 Float_t fDCA; // Distance of closest approach of daughter tracks
134
135 Float_t fPointingAngle;// = TMath::ACos(esdv0->GetV0CosineOfPointingAngle()); // Cosine of pointing angle
136
137 Float_t fOpenAngle; // opening angle between daughters
138
139 Float_t fPsiPair; // /Angle between daughter momentum plane and plane perpendicular to magnetic field
140
141 Double_t fInvMass[kNDecays]; // invariant mass for different decay scenarios (conversions, K0s, Lambda->p+pi-, Lambda->p-pi+)
142
143 Double_t fMagField; //magnetic field strength
144
145 Float_t fRadius; //distance of decay/conversion from primary vertex in x-y plane
146
147 Int_t fTrackID;//track index
148
149
150 Float_t fV0Momentum; //V0 mother's momentum
151
152 //____________________________________________________________
153 //Upper and lower limits for cut variables:
154
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
167
168 AliESDtrack *fTrackP; //positive daughter
169 AliESDtrack *fTrackN; //negative daughter
170 AliESDtrack *fTrack; //the current track in the ESDtrack loop (either positive or negative)
171
172
173 Int_t fNindex; //indices of positive and negative daughter track
174 Int_t fPindex; //indices of positive and negative daughter track
175
176
177 ClassDef(AliTRDv0Info, 0) // extracted V0 MC information
178};
179
180
181#endif
182