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