Pass execution mode to event handler.
[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 //     Origin: B.Hippolyte, IReS, hippolyt@in2p3.fr 
10 //             G.Van Buren, BNL,  gene@bnl.gov      (original STAR MuDsts)
11 //     Purpose: Having observables for physics available for V0s
12 //-------------------------------------------------------------------------
13
14 #include <TObject.h>
15 #include <TDatabasePDG.h>
16
17 #define MASS(PID)  TDatabasePDG::Instance()->GetParticle((PID))->Mass()
18 #define MASS2(PID) MASS((PID))*MASS((PID))
19
20 class AliESD;
21 class AliESDVertex;
22 class AliESDv0;
23 class AliESDtrack;
24
25
26 class AliAODv0 : public TObject {
27
28 public:
29   AliAODv0();
30   AliAODv0(AliESDv0 *rV0Vertex, AliESD *rEvent);
31   AliAODv0(const AliAODv0& rAliAODv0);
32   virtual ~AliAODv0();
33
34   AliAODv0& operator=(const AliAODv0& rAliAODv0);
35
36   void     Fill(AliESDv0 *rV0Vertex, AliESD *rEvent);
37   void     ResetV0();
38
39   Double_t DecayVertexV0X() const;
40   Double_t DecayVertexV0Y() const;
41   Double_t DecayVertexV0Z() const;
42
43   Double_t DecayLengthV0(double*) const;
44                      
45   Double_t DcaV0Daughters() const;
46   Double_t DcaV0ToPrimVertex() const;
47   Double_t DcaPosToPrimVertex() const; 
48   Double_t DcaNegToPrimVertex() const; 
49   Double_t CosPointAngle(Double_t&, Double_t&, Double_t&) const;
50   Double_t RadiusV0()           const;
51   Double_t OpenAngleV0()        const;
52
53   Double_t MomPosX() const;
54   Double_t MomPosY() const;
55   Double_t MomPosZ() const;
56   Double_t MomNegX() const;
57   Double_t MomNegY() const;
58   Double_t MomNegZ() const;
59
60   Int_t    KeyPos()  const;
61   Int_t    KeyNeg()  const;
62
63   Double_t Chi2V0()  const;
64
65   Double_t MomV0X()  const;
66   Double_t MomV0Y()  const;
67   Double_t MomV0Z()  const;
68
69   Double_t Ptot2Pos() const;
70   Double_t Ptot2Neg() const;
71   Double_t Ptot2V0()  const;
72   Double_t Pt2V0()    const;
73   Double_t MomPosAlongV0() const;
74   Double_t MomNegAlongV0() const;
75   Double_t AlphaV0() const;
76   Double_t PtArmV0() const;
77   Double_t EPosProton() const;
78   Double_t ENegProton() const;
79   Double_t EPosPion() const;
80   Double_t ENegPion() const;
81   Double_t ELambda() const;
82   Double_t EK0Short() const;
83   Double_t MassLambda() const;
84   Double_t MassAntiLambda() const;
85   Double_t MassK0Short() const;
86   Double_t RapK0Short() const;
87   Double_t RapLambda() const;
88   Double_t PseudoRapV0()    const;
89   Double_t PseudoRapPos()   const;
90   Double_t PseudoRapNeg()   const;
91
92
93 protected:
94   Double_t fDecayVertexV0X;       // decay vertex of V0 along X
95   Double_t fDecayVertexV0Y;       // decay vertex of V0 along Y
96   Double_t fDecayVertexV0Z;       // decay vertex of V0 along Z
97   Double_t fDcaV0Daughters;       // dca between V0 daughters
98   Double_t fDcaV0ToPrimVertex;    // dca of V0 to primary vertex 
99   Double_t fDcaPosToPrimVertex;   // dca of pos daughter to primary vertex 
100   Double_t fDcaNegToPrimVertex;   // dca of pos daughter to primary vertex 
101   Double_t fMomPosX;              // momemtum of pos daughter along X
102   Double_t fMomPosY;              // momemtum of pos daughter along Y
103   Double_t fMomPosZ;              // momemtum of pos daughter along Z
104   Double_t fMomNegX;              // momemtum of neg daughter along X
105   Double_t fMomNegY;              // momemtum of neg daughter along Y
106   Double_t fMomNegZ;              // momemtum of neg daughter along Z
107
108   UInt_t   fKeyPos;               // track key/index to pos daughter 
109   UInt_t   fKeyNeg;               // track key/index to neg daughter 
110
111   Double_t fChi2;                 // main quality variable of V0
112
113   ClassDef(AliAODv0,1)
114 };
115
116 inline Double_t AliAODv0::DecayVertexV0X() const {return fDecayVertexV0X;}
117 inline Double_t AliAODv0::DecayVertexV0Y() const {return fDecayVertexV0Y;}
118 inline Double_t AliAODv0::DecayVertexV0Z() const {return fDecayVertexV0Z;}
119
120 inline Double_t AliAODv0::DecayLengthV0(double *tParentVertexPosition) const {
121   return ::sqrt(::pow(DecayVertexV0X() - tParentVertexPosition[0],2) +
122                 ::pow(DecayVertexV0Y() - tParentVertexPosition[1],2) +
123                 ::pow(DecayVertexV0Z() - tParentVertexPosition[2],2));
124 }
125
126 inline Double_t AliAODv0::DcaV0Daughters() const {return fDcaV0Daughters;}
127 inline Double_t AliAODv0::DcaV0ToPrimVertex() const {return fDcaV0ToPrimVertex;}
128 inline Double_t AliAODv0::DcaPosToPrimVertex() const {return fDcaPosToPrimVertex;}
129 inline Double_t AliAODv0::DcaNegToPrimVertex() const {return fDcaNegToPrimVertex;}
130
131 inline Double_t AliAODv0::MomPosX() const {return fMomPosX;}
132 inline Double_t AliAODv0::MomPosY() const {return fMomPosY;}
133 inline Double_t AliAODv0::MomPosZ() const {return fMomPosZ;}
134 inline Double_t AliAODv0::MomNegX() const {return fMomNegX;}
135 inline Double_t AliAODv0::MomNegY() const {return fMomNegY;}
136 inline Double_t AliAODv0::MomNegZ() const {return fMomNegZ;}
137
138 inline Int_t AliAODv0::KeyPos() const {return fKeyPos;}
139 inline Int_t AliAODv0::KeyNeg() const {return fKeyNeg;}
140
141 inline Double_t AliAODv0::Chi2V0() const {return fChi2;}
142
143 inline Double_t AliAODv0::CosPointAngle(Double_t& refPointX, Double_t& refPointY, Double_t& refPointZ) const {
144   
145   Double_t deltaPos[3]; //vector between the reference point and the V0 vertex
146   deltaPos[0] = fDecayVertexV0X - refPointX;
147   deltaPos[1] = fDecayVertexV0Y - refPointY;
148   deltaPos[2] = fDecayVertexV0Z - refPointZ;
149
150   Double_t deltaPos2 = deltaPos[0]*deltaPos[0] + deltaPos[1]*deltaPos[1] + deltaPos[2]*deltaPos[2];
151   
152   Double_t cosinePointingAngle = (deltaPos[0]*MomV0X() +
153                                   deltaPos[1]*MomV0Y() +
154                                   deltaPos[2]*MomV0Z() ) /
155     TMath::Sqrt(Ptot2V0() * deltaPos2);
156   return cosinePointingAngle;
157 }
158
159 inline Double_t AliAODv0::MomV0X() const {return MomPosX()+MomNegX();}
160 inline Double_t AliAODv0::MomV0Y() const {return MomPosY()+MomNegY();}
161 inline Double_t AliAODv0::MomV0Z() const {return MomPosZ()+MomNegZ();}
162
163 inline Double_t AliAODv0::Ptot2Pos() const {
164   return (::pow(MomPosX(),2) + ::pow(MomPosY(),2) + ::pow(MomPosZ(),2) );
165 }
166 inline Double_t AliAODv0::Ptot2Neg() const {
167   return (::pow(MomNegX(),2) + ::pow(MomNegY(),2) + ::pow(MomNegZ(),2) );
168 }
169 inline Double_t AliAODv0::Pt2V0() const {
170   return (::pow(MomV0X(),2) + ::pow(MomV0Y(),2) );
171 }
172
173 inline Double_t AliAODv0::Ptot2V0() const {return ( Pt2V0() + ::pow(MomV0Z(),2) );}
174
175 inline Double_t AliAODv0::MomPosAlongV0() const {
176   Double_t lPtot2V0 = Ptot2V0();
177   if (lPtot2V0)
178     return (MomPosX()*MomV0X() +
179             MomPosY()*MomV0Y() +
180             MomPosZ()*MomV0Z()) / ::sqrt(lPtot2V0);
181   return 0.;
182 }
183
184 inline Double_t AliAODv0::MomNegAlongV0() const {
185   Double_t lPtot2V0 = Ptot2V0();
186   if (lPtot2V0)
187     return (MomNegX()*MomV0X() +
188             MomNegY()*MomV0Y() +
189             MomNegZ()*MomV0Z()) / ::sqrt(lPtot2V0);
190   return 0.;
191 }
192
193 inline Double_t AliAODv0::AlphaV0() const {
194   return 1.-(2./(1.+(MomPosAlongV0()/MomNegAlongV0())));
195 }
196 inline Double_t AliAODv0::PtArmV0() const {
197   return ::sqrt(Ptot2Pos()-MomPosAlongV0()*MomPosAlongV0());
198 }
199
200 inline Double_t AliAODv0::EPosProton() const {
201   return ::sqrt(Ptot2Pos()+MASS2("proton"));
202 }
203
204 inline Double_t AliAODv0::ENegProton() const {
205   return ::sqrt(Ptot2Neg()+MASS2("antiproton"));
206 }
207
208 inline Double_t AliAODv0::EPosPion() const {
209   return ::sqrt(Ptot2Pos()+MASS2("pi+"));
210 }
211
212 inline Double_t AliAODv0::ENegPion() const {
213   return ::sqrt(Ptot2Neg()+MASS2("pi-"));
214 }
215
216 inline Double_t AliAODv0::ELambda() const {
217   return ::sqrt(Ptot2V0()+MASS2("Lambda0"));
218 }
219
220 inline Double_t AliAODv0::EK0Short() const {
221   return ::sqrt(Ptot2V0()+MASS2("K_S0"));
222 }
223
224 inline Double_t AliAODv0::MassLambda() const {
225   return ::sqrt(::pow(EPosProton()+ENegPion(),2)-Ptot2V0());
226 }
227
228 inline Double_t AliAODv0::MassAntiLambda() const {
229   return ::sqrt(::pow(ENegProton()+EPosPion(),2)-Ptot2V0());
230 }
231
232 inline Double_t AliAODv0::MassK0Short() const {
233   return ::sqrt(::pow(EPosPion()+ENegPion(),2)-Ptot2V0());
234 }
235
236 inline Double_t AliAODv0::RapK0Short() const {
237   Double_t ek0 = EK0Short();
238   Double_t mMomV0Z = MomV0Z();
239   return 0.5*::log((ek0+mMomV0Z)/(ek0-mMomV0Z));
240 }
241
242 inline Double_t AliAODv0::RapLambda() const {
243   Double_t eLambda = ELambda();
244   Double_t mMomV0Z = MomV0Z();
245   return 0.5*::log((eLambda+mMomV0Z)/(eLambda-mMomV0Z));
246 }
247
248 inline Double_t AliAODv0::RadiusV0() const {
249   return ::sqrt( fDecayVertexV0X*fDecayVertexV0X
250                  + fDecayVertexV0Y*fDecayVertexV0Y );
251 }
252
253 inline Double_t AliAODv0::PseudoRapV0() const {
254   Double_t lTheta = ::acos( MomV0Z()/::sqrt(Ptot2V0()) );
255   return ( -::log(TMath::Tan(lTheta/2.)) );
256 }
257
258 inline Double_t AliAODv0::PseudoRapPos()   const {
259   Double_t lTheta = ::acos( MomPosZ()/::sqrt(Ptot2Pos()) );
260   return ( -::log(TMath::Tan(lTheta/2.)) );
261 }
262
263 inline Double_t AliAODv0::PseudoRapNeg()   const {
264   Double_t lTheta = ::acos( MomNegZ()/::sqrt(Ptot2Neg()) );
265   return ( -::log(TMath::Tan(lTheta/2.)) );
266 }
267
268 inline Double_t AliAODv0::OpenAngleV0() const {
269   Double_t lPtot1xPtot2 = fMomPosX*fMomNegX+fMomPosY*fMomNegY+fMomPosZ*fMomNegZ;
270   Double_t lPtot1Ptot2_2 = Ptot2Pos()*Ptot2Neg();
271   return ::acos(lPtot1xPtot2/::sqrt(lPtot1Ptot2_2) );
272 }
273
274 #endif