]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ANALYSIS/AliAODv0.h
Updated flags
[u/mrichter/AliRoot.git] / ANALYSIS / AliAODv0.h
1 #ifndef ALIAODV0_H
2 #define ALIAODV0_H
3
4 /* Copyright(c) 2004-2005, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice                               */
6
7 //-------------------------------------------------------------------------
8 //     Implementation of the Analysis Oriented Data (AOD) V0 vertex class
9 //
10 //     Origin: B.Hippolyte, IReS, hippolyt@in2p3.fr 
11 //             G.Van Buren, BNL,  gene@bnl.gov      (original STAR MuDsts)
12 //
13 //     Purpose: Having observables for physics available for V0s
14 //-------------------------------------------------------------------------
15
16 #include <TObject.h>
17 #include <TDatabasePDG.h>
18
19 #define MASS(PID)  TDatabasePDG::Instance()->GetParticle((PID))->Mass()
20 #define MASS2(PID) MASS((PID))*MASS((PID))
21
22 class AliESD;
23 class AliESDVertex;
24 class AliESDv0;
25 class AliESDtrack;
26
27
28 class AliAODv0 : public TObject {
29
30 public:
31   AliAODv0();
32   AliAODv0(AliESDv0 *rV0Vertex, AliESD *rEvent);
33   void     Fill(AliESDv0 *rV0Vertex, AliESD *rEvent);
34   void     ResetV0();
35
36   Double_t DecayVertexV0X() const;
37   Double_t DecayVertexV0Y() const;
38   Double_t DecayVertexV0Z() const;
39
40   Double_t DecayLengthV0() const;
41                      
42   Double_t DcaV0Daughters() const;
43   Double_t DcaV0ToPrimVertex() const;
44   Double_t DcaPosToPrimVertex() const; 
45   Double_t DcaNegToPrimVertex() const; 
46
47   Double_t MomPosX() const;
48   Double_t MomPosY() const;
49   Double_t MomPosZ() const;
50   Double_t MomNegX() const;
51   Double_t MomNegY() const;
52   Double_t MomNegZ() const;
53
54   Int_t    KeyPos()  const;
55   Int_t    KeyNeg()  const;
56
57   Double_t Chi2V0()  const;
58
59   Double_t MomV0X()  const;
60   Double_t MomV0Y()  const;
61   Double_t MomV0Z()  const;
62
63   Double_t Ptot2Pos() const;
64   Double_t Ptot2Neg() const;
65   Double_t Ptot2V0()  const;
66   Double_t Pt2V0()    const;
67   Double_t MomPosAlongV0() const;
68   Double_t MomNegAlongV0() const;
69   Double_t AlphaV0() const;
70   Double_t PtArmV0() const;
71   Double_t EPosProton() const;
72   Double_t ENegProton() const;
73   Double_t EPosPion() const;
74   Double_t ENegPion() const;
75   Double_t ELambda() const;
76   Double_t EK0Short() const;
77   Double_t MassLambda() const;
78   Double_t MassAntiLambda() const;
79   Double_t MassK0Short() const;
80   Double_t RapK0Short() const;
81   Double_t RapLambda() const;
82
83
84 protected:
85   Double_t fDecayVertexV0X;       // decay vertex of V0 along X
86   Double_t fDecayVertexV0Y;       // decay vertex of V0 along Y
87   Double_t fDecayVertexV0Z;       // decay vertex of V0 along Z
88   Double_t fDcaV0Daughters;       // dca between V0 daughters
89   Double_t fDcaV0ToPrimVertex;    // dca of V0 to primary vertex 
90   Double_t fDcaPosToPrimVertex;   // dca of pos daughter to primary vertex 
91   Double_t fDcaNegToPrimVertex;   // dca of pos daughter to primary vertex 
92   Double_t fMomPosX;              // momemtum of pos daughter along X
93   Double_t fMomPosY;              // momemtum of pos daughter along Y
94   Double_t fMomPosZ;              // momemtum of pos daughter along Z
95   Double_t fMomNegX;              // momemtum of neg daughter along X
96   Double_t fMomNegY;              // momemtum of neg daughter along Y
97   Double_t fMomNegZ;              // momemtum of neg daughter along Z
98
99   Int_t   fKeyPos;                // track key/index to pos daughter 
100   Int_t   fKeyNeg;                // track key/index to neg daughter 
101
102   Double_t fChi2;                 // main quality variable of V0
103   AliESD  *fEvent;                // pointer to current event
104
105   ClassDef(AliAODv0,1)
106 };
107
108 inline Double_t AliAODv0::DecayVertexV0X() const {return fDecayVertexV0X;}
109 inline Double_t AliAODv0::DecayVertexV0Y() const {return fDecayVertexV0Y;}
110 inline Double_t AliAODv0::DecayVertexV0Z() const {return fDecayVertexV0Z;}
111
112 inline Double_t AliAODv0::DecayLengthV0() const {
113   if (fEvent&&fEvent->GetVertex()){
114     Double_t tPrimaryVertexPosition[3];
115     fEvent->GetVertex()->GetXYZ(tPrimaryVertexPosition);
116     return ::sqrt(::pow(DecayVertexV0X() - tPrimaryVertexPosition[0],2) +
117                   ::pow(DecayVertexV0Y() - tPrimaryVertexPosition[1],2) +
118                   ::pow(DecayVertexV0Z() - tPrimaryVertexPosition[2],2));
119   }
120   return 0.;
121 }
122
123 inline Double_t AliAODv0::DcaV0Daughters() const {return fDcaV0Daughters;}
124 inline Double_t AliAODv0::DcaV0ToPrimVertex() const {return fDcaV0ToPrimVertex;}
125 inline Double_t AliAODv0::DcaPosToPrimVertex() const {return fDcaPosToPrimVertex;}
126 inline Double_t AliAODv0::DcaNegToPrimVertex() const {return fDcaNegToPrimVertex;}
127
128 inline Double_t AliAODv0::MomPosX() const {return fMomPosX;}
129 inline Double_t AliAODv0::MomPosY() const {return fMomPosY;}
130 inline Double_t AliAODv0::MomPosZ() const {return fMomPosZ;}
131 inline Double_t AliAODv0::MomNegX() const {return fMomNegX;}
132 inline Double_t AliAODv0::MomNegY() const {return fMomNegY;}
133 inline Double_t AliAODv0::MomNegZ() const {return fMomNegZ;}
134
135 inline Int_t AliAODv0::KeyPos() const {return fKeyPos;}
136 inline Int_t AliAODv0::KeyNeg() const {return fKeyNeg;}
137
138 inline Double_t AliAODv0::Chi2V0() const {return fChi2;}
139
140 inline Double_t AliAODv0::MomV0X() const {return MomPosX()+MomNegX();}
141 inline Double_t AliAODv0::MomV0Y() const {return MomPosY()+MomNegY();}
142 inline Double_t AliAODv0::MomV0Z() const {return MomPosZ()+MomNegZ();}
143
144 inline Double_t AliAODv0::Ptot2Pos() const {
145   return (::pow(MomPosX(),2) + ::pow(MomPosY(),2) + ::pow(MomPosZ(),2) );
146 }
147 inline Double_t AliAODv0::Ptot2Neg() const {
148   return (::pow(MomNegX(),2) + ::pow(MomNegY(),2) + ::pow(MomNegZ(),2) );
149 }
150 inline Double_t AliAODv0::Pt2V0() const {
151   return (::pow(MomV0X(),2) + ::pow(MomV0Y(),2) );
152 }
153
154 inline Double_t AliAODv0::Ptot2V0() const {return ( Pt2V0() + ::pow(MomV0Z(),2) );}
155
156 inline Double_t AliAODv0::MomPosAlongV0() const {
157   Double_t lPtot2V0 = Ptot2V0();
158   if (lPtot2V0)
159     return (MomPosX()*MomV0X() +
160             MomPosY()*MomV0Y() +
161             MomPosZ()*MomV0Z()) / ::sqrt(lPtot2V0);
162   return 0.;
163 }
164
165 inline Double_t AliAODv0::MomNegAlongV0() const {
166   Double_t lPtot2V0 = Ptot2V0();
167   if (lPtot2V0)
168     return (MomNegX()*MomV0X() +
169             MomNegY()*MomV0Y() +
170             MomNegZ()*MomV0Z()) / ::sqrt(lPtot2V0);
171   return 0.;
172 }
173
174 inline Double_t AliAODv0::AlphaV0() const {
175   return 1.-(2./(1.+(MomPosAlongV0()/MomNegAlongV0())));
176 }
177 inline Double_t AliAODv0::PtArmV0() const {
178   return ::sqrt(Ptot2Pos()-MomPosAlongV0()*MomPosAlongV0());
179 }
180
181 inline Double_t AliAODv0::EPosProton() const {
182   return ::sqrt(Ptot2Pos()+MASS2("proton"));
183 }
184
185 inline Double_t AliAODv0::ENegProton() const {
186   return ::sqrt(Ptot2Neg()+MASS2("antiproton"));
187 }
188
189 inline Double_t AliAODv0::EPosPion() const {
190   return ::sqrt(Ptot2Pos()+MASS2("pi+"));
191 }
192
193 inline Double_t AliAODv0::ENegPion() const {
194   return ::sqrt(Ptot2Neg()+MASS2("pi-"));
195 }
196
197 inline Double_t AliAODv0::ELambda() const {
198   return ::sqrt(Ptot2V0()+MASS2("Lambda0"));
199 }
200
201 inline Double_t AliAODv0::EK0Short() const {
202   return ::sqrt(Ptot2V0()+MASS2("K_S0"));
203 }
204
205 inline Double_t AliAODv0::MassLambda() const {
206   return ::sqrt(::pow(EPosProton()+ENegPion(),2)-Ptot2V0());
207 }
208
209 inline Double_t AliAODv0::MassAntiLambda() const {
210   return ::sqrt(::pow(ENegProton()+EPosPion(),2)-Ptot2V0());
211 }
212
213 inline Double_t AliAODv0::MassK0Short() const {
214   return ::sqrt(::pow(EPosPion()+ENegPion(),2)-Ptot2V0());
215 }
216
217 inline Double_t AliAODv0::RapK0Short() const {
218   Double_t ek0 = EK0Short();
219   Double_t mMomV0Z = MomV0Z();
220   return 0.5*::log((ek0+mMomV0Z)/(ek0-mMomV0Z));
221 }
222
223 inline Double_t AliAODv0::RapLambda() const {
224   Double_t eLambda = ELambda();
225   Double_t mMomV0Z = MomV0Z();
226   return 0.5*::log((eLambda+mMomV0Z)/(eLambda-mMomV0Z));
227 }
228
229 #endif
230
231