]>
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 | |
9 | // | |
10 | // Origin: B.Hippolyte, IReS, hippolyt@in2p3.fr | |
11 | // G.Van Buren, BNL, gene@bnl.gov (original STAR MuDsts) | |
2d8e3807 | 12 | // |
13 | // Purpose: Having observables for physics available for V0s | |
d77fd7b3 | 14 | //------------------------------------------------------------------------- |
15 | ||
16 | #include <TObject.h> | |
a98dba45 | 17 | #include <TDatabasePDG.h> |
18 | ||
19 | #define MASS(PID) TDatabasePDG::Instance()->GetParticle((PID))->Mass() | |
20 | #define MASS2(PID) MASS((PID))*MASS((PID)) | |
d77fd7b3 | 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(); | |
2d8e3807 | 32 | AliAODv0(AliESDv0 *rV0Vertex, AliESD *rEvent); |
33 | void Fill(AliESDv0 *rV0Vertex, AliESD *rEvent); | |
34 | void ResetV0(); | |
d77fd7b3 | 35 | |
2d8e3807 | 36 | Double_t DecayVertexV0X() const; |
37 | Double_t DecayVertexV0Y() const; | |
38 | Double_t DecayVertexV0Z() const; | |
a98dba45 | 39 | |
40 | Double_t DecayLengthV0() const; | |
d77fd7b3 | 41 | |
2d8e3807 | 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; | |
a98dba45 | 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 | ||
d77fd7b3 | 83 | |
84 | protected: | |
2d8e3807 | 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) | |
d77fd7b3 | 106 | }; |
107 | ||
2d8e3807 | 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;} | |
d77fd7b3 | 111 | |
a98dba45 | 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 | ||
2d8e3807 | 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;} | |
d77fd7b3 | 127 | |
2d8e3807 | 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;} | |
d77fd7b3 | 134 | |
2d8e3807 | 135 | inline Int_t AliAODv0::KeyPos() const {return fKeyPos;} |
136 | inline Int_t AliAODv0::KeyNeg() const {return fKeyNeg;} | |
d77fd7b3 | 137 | |
2d8e3807 | 138 | inline Double_t AliAODv0::Chi2V0() const {return fChi2;} |
d77fd7b3 | 139 | |
2d8e3807 | 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();} | |
d77fd7b3 | 143 | |
2d8e3807 | 144 | inline Double_t AliAODv0::Ptot2Pos() const { |
145 | return (::pow(MomPosX(),2) + ::pow(MomPosY(),2) + ::pow(MomPosZ(),2) ); | |
d77fd7b3 | 146 | } |
2d8e3807 | 147 | inline Double_t AliAODv0::Ptot2Neg() const { |
148 | return (::pow(MomNegX(),2) + ::pow(MomNegY(),2) + ::pow(MomNegZ(),2) ); | |
d77fd7b3 | 149 | } |
2d8e3807 | 150 | inline Double_t AliAODv0::Pt2V0() const { |
151 | return (::pow(MomV0X(),2) + ::pow(MomV0Y(),2) ); | |
d77fd7b3 | 152 | } |
153 | ||
2d8e3807 | 154 | inline Double_t AliAODv0::Ptot2V0() const {return ( Pt2V0() + ::pow(MomV0Z(),2) );} |
d77fd7b3 | 155 | |
2d8e3807 | 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); | |
d77fd7b3 | 162 | return 0.; |
163 | } | |
164 | ||
2d8e3807 | 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); | |
d77fd7b3 | 171 | return 0.; |
172 | } | |
173 | ||
2d8e3807 | 174 | inline Double_t AliAODv0::AlphaV0() const { |
d77fd7b3 | 175 | return 1.-(2./(1.+(MomPosAlongV0()/MomNegAlongV0()))); |
176 | } | |
2d8e3807 | 177 | inline Double_t AliAODv0::PtArmV0() const { |
d77fd7b3 | 178 | return ::sqrt(Ptot2Pos()-MomPosAlongV0()*MomPosAlongV0()); |
179 | } | |
180 | ||
a98dba45 | 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 | ||
d77fd7b3 | 229 | #endif |
230 | ||
231 |