]>
Commit | Line | Data |
---|---|---|
c028b974 | 1 | #ifndef ALIAODXI_H |
2 | #define ALIAODXI_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) Xi 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 Xis | |
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 AliESDcascade; | |
24 | class AliESDtrack; | |
25 | ||
26 | class AliAODxi : public AliAODv0 { | |
27 | ||
28 | public: | |
29 | AliAODxi(); | |
30 | AliAODxi(AliESDcascade *rXiVertex, AliESD *rEvent); | |
31 | AliAODxi(const AliAODxi& rAliAODxi); | |
32 | virtual ~AliAODxi(); | |
33 | ||
34 | AliAODxi& operator=(const AliAODxi& rAliAODxi); | |
35 | ||
36 | void Fill(AliESDcascade *rXiVertex, AliESD *rEvent); | |
37 | void ResetXi(); | |
38 | ||
39 | ||
40 | Int_t Charge() const; | |
41 | Double_t DecayVertexXiX() const; | |
42 | Double_t DecayVertexXiY() const; | |
43 | Double_t DecayVertexXiZ() const; | |
44 | virtual Double_t DecayLengthV0() const; | |
45 | Double_t DcaXiDaughters() const; | |
46 | Double_t DcaBachelorToPrimVertex() const; | |
47 | Double_t DcaV0ToPrimVertex(Double_t&, Double_t&, Double_t&) const; | |
48 | Double_t DcaXiToPrimVertex() const; | |
49 | Double_t CosPointAngle(Double_t&, Double_t&, Double_t&) const; | |
50 | ||
51 | Double_t DecayLengthXi(Double_t*) const; | |
52 | ||
53 | Double_t MomBachelorX() const; | |
54 | Double_t MomBachelorY() const; | |
55 | Double_t MomBachelorZ() const; | |
56 | UInt_t KeyBachelor() const; | |
57 | Double_t Chi2Xi() const; | |
58 | Double_t MomXiX() const; | |
59 | Double_t MomXiY() const; | |
60 | Double_t MomXiZ() const; | |
61 | ||
62 | Double_t Ptot2Bachelor() const; | |
63 | Double_t Ptot2Xi() const; | |
64 | Double_t Pt2Xi() const; | |
65 | Double_t MomBachelorAlongXi() const; | |
66 | Double_t MomV0AlongXi() const; | |
67 | Double_t AlphaXi() const; | |
68 | Double_t PtArmXi() const; | |
69 | Double_t EBachelorPion() const; | |
70 | Double_t EBachelorKaon() const; | |
71 | Double_t EXi() const; | |
72 | Double_t EOmega() const; | |
73 | Double_t MassXi() const; | |
74 | Double_t MassOmega() const; | |
75 | Double_t RapXi() const; | |
76 | Double_t RapOmega() const; | |
77 | ||
78 | ||
79 | protected: | |
80 | ||
81 | Int_t fCharge; // charge of Xi | |
82 | Double_t fDecayVertexXiX; // decay vertex of Xi along X | |
83 | Double_t fDecayVertexXiY; // decay vertex of Xi along Y | |
84 | Double_t fDecayVertexXiZ; // decay vertex of Xi along Z | |
85 | Double_t fDcaXiDaughters; // dca between Xi daughters | |
86 | Double_t fDcaXiToPrimVertex; // dca of Xi to primary vertex | |
87 | Double_t fDcaBachelorToPrimVertex; // dca of bachelor to primary vertex | |
88 | Double_t fMomBachelorX; // momemtum of bachelor along X | |
89 | Double_t fMomBachelorY; // momemtum of bachelor along Y | |
90 | Double_t fMomBachelorZ; // momemtum of bachelor along Z | |
91 | ||
92 | UInt_t fKeyBachelor; // track key/index to bachelor | |
93 | ||
94 | Double_t fChi2Xi; // main quality variable of Xi | |
95 | ||
96 | ClassDef(AliAODxi,1) | |
97 | }; | |
98 | ||
99 | inline Int_t AliAODxi::Charge() const {return fCharge;} | |
100 | ||
101 | inline Double_t AliAODxi::DecayVertexXiX() const {return fDecayVertexXiX;} | |
102 | inline Double_t AliAODxi::DecayVertexXiY() const {return fDecayVertexXiY;} | |
103 | inline Double_t AliAODxi::DecayVertexXiZ() const {return fDecayVertexXiZ;} | |
104 | ||
105 | inline Double_t AliAODxi::DecayLengthV0() const { | |
106 | return ::sqrt(::pow(fDecayVertexV0X - fDecayVertexXiX,2) + | |
107 | ::pow(fDecayVertexV0Y - fDecayVertexXiY,2) + | |
108 | ::pow(fDecayVertexV0Z - fDecayVertexXiZ,2)); | |
109 | } | |
110 | ||
111 | inline Double_t AliAODxi::DcaV0ToPrimVertex(Double_t& primVertexX, Double_t& primVertexY, Double_t& primVertexZ) const { | |
112 | Double_t momV0X=MomV0X(); | |
113 | Double_t momV0Y=MomV0Y(); | |
114 | Double_t momV0Z=MomV0Z(); | |
115 | Double_t dx=(primVertexY-fDecayVertexV0Y)*momV0Z - (primVertexZ-fDecayVertexV0Z)*momV0Y; | |
116 | Double_t dy=(primVertexX-fDecayVertexV0X)*momV0Z - (primVertexZ-fDecayVertexV0Z)*momV0X; | |
117 | Double_t dz=(primVertexX-fDecayVertexV0X)*momV0Y - (primVertexY-fDecayVertexV0Y)*momV0X; | |
118 | return TMath::Sqrt((dx*dx+dy*dy+dz*dz)/(momV0X*momV0X+momV0Y*momV0Y+momV0Z*momV0Z)); | |
119 | } | |
120 | ||
121 | inline Double_t AliAODxi::DcaXiDaughters() const {return fDcaXiDaughters;} | |
122 | inline Double_t AliAODxi::DcaBachelorToPrimVertex() const {return fDcaBachelorToPrimVertex;} | |
123 | inline Double_t AliAODxi::DcaXiToPrimVertex() const {return fDcaXiToPrimVertex;} | |
124 | ||
125 | inline Double_t AliAODxi::CosPointAngle(Double_t& refPointX, Double_t& refPointY, Double_t& refPointZ) const { | |
126 | ||
127 | Double_t deltaPos[3]; //vector between the reference point and the cascade vertex | |
128 | deltaPos[0] = fDecayVertexXiX - refPointX; | |
129 | deltaPos[1] = fDecayVertexXiY - refPointY; | |
130 | deltaPos[2] = fDecayVertexXiZ - refPointZ; | |
131 | ||
132 | Double_t deltaPos2 = deltaPos[0]*deltaPos[0] + deltaPos[1]*deltaPos[1] + deltaPos[2]*deltaPos[2]; | |
133 | ||
134 | Double_t cosinePointingAngle = (deltaPos[0]*MomXiX() + | |
135 | deltaPos[1]*MomXiY() + | |
136 | deltaPos[2]*MomXiZ() ) / | |
137 | TMath::Sqrt(Ptot2Xi() * deltaPos2); | |
138 | return cosinePointingAngle; | |
139 | } | |
140 | ||
141 | inline Double_t AliAODxi::DecayLengthXi(Double_t *tPrimaryVertexPosition) const { | |
142 | return ::sqrt(::pow(fDecayVertexXiX - tPrimaryVertexPosition[0],2) + | |
143 | ::pow(fDecayVertexXiY - tPrimaryVertexPosition[1],2) + | |
144 | ::pow(fDecayVertexXiZ - tPrimaryVertexPosition[2],2)); | |
145 | } | |
146 | ||
147 | inline Double_t AliAODxi::MomBachelorX() const {return fMomBachelorX;} | |
148 | inline Double_t AliAODxi::MomBachelorY() const {return fMomBachelorY;} | |
149 | inline Double_t AliAODxi::MomBachelorZ() const {return fMomBachelorZ;} | |
150 | inline UInt_t AliAODxi::KeyBachelor() const {return fKeyBachelor;} | |
151 | inline Double_t AliAODxi::Chi2Xi() const {return fChi2Xi;} | |
152 | inline Double_t AliAODxi::MomXiX() const {return MomV0X()+fMomBachelorX;} | |
153 | inline Double_t AliAODxi::MomXiY() const {return MomV0Y()+fMomBachelorY;} | |
154 | inline Double_t AliAODxi::MomXiZ() const {return MomV0Z()+fMomBachelorZ;} | |
155 | ||
156 | inline Double_t AliAODxi::Ptot2Bachelor() const { | |
157 | return (::pow(fMomBachelorX,2) + ::pow(fMomBachelorY,2) + ::pow(fMomBachelorZ,2) ); | |
158 | } | |
159 | inline Double_t AliAODxi::Ptot2Xi() const {return ( Pt2Xi() + ::pow(MomXiZ(),2) );} | |
160 | inline Double_t AliAODxi::Pt2Xi() const { | |
161 | return (::pow(MomXiX(),2) + ::pow(MomXiY(),2) ); | |
162 | } | |
163 | ||
164 | inline Double_t AliAODxi::MomBachelorAlongXi() const { | |
165 | Double_t lPtot2Xi = Ptot2Xi(); | |
166 | if (lPtot2Xi) | |
167 | return (MomBachelorX()*MomXiX() + | |
168 | MomBachelorY()*MomXiY() + | |
169 | MomBachelorZ()*MomXiZ()) / ::sqrt(lPtot2Xi); | |
170 | return 0.; | |
171 | } | |
172 | ||
173 | inline Double_t AliAODxi::MomV0AlongXi() const { | |
174 | Double_t lPtot2Xi = Ptot2Xi(); | |
175 | if (lPtot2Xi) | |
176 | return (MomV0X()*MomXiX() + | |
177 | MomV0Y()*MomXiY() + | |
178 | MomV0Z()*MomXiZ()) / ::sqrt(lPtot2Xi); | |
179 | return 0.; | |
180 | } | |
181 | ||
182 | inline Double_t AliAODxi::AlphaXi() const { | |
183 | Double_t lMomV0AlongXi = MomV0AlongXi(); | |
184 | Double_t lMomBachelorAlongXi = MomBachelorAlongXi(); | |
185 | ||
186 | return (((Float_t) Charge()) * (lMomBachelorAlongXi-lMomV0AlongXi)/ | |
187 | (lMomBachelorAlongXi+lMomV0AlongXi)); | |
188 | } | |
189 | ||
190 | inline Double_t AliAODxi::PtArmXi() const { | |
191 | return ::sqrt(Ptot2V0()-MomBachelorAlongXi()*MomBachelorAlongXi()); | |
192 | } | |
193 | ||
194 | inline Double_t AliAODxi::EBachelorPion() const { | |
195 | return ::sqrt(Ptot2Bachelor()+MASS2("pi-")); | |
196 | } | |
197 | ||
198 | inline Double_t AliAODxi::EBachelorKaon() const { | |
199 | return ::sqrt(Ptot2Bachelor()+MASS2("K-")); | |
200 | } | |
201 | ||
202 | inline Double_t AliAODxi::EXi() const { | |
203 | return ::sqrt(Ptot2Xi()+MASS2("Xi-")); | |
204 | } | |
205 | ||
206 | inline Double_t AliAODxi::EOmega() const { | |
207 | return ::sqrt(Ptot2Xi()+MASS2("Omega-")); | |
208 | } | |
209 | ||
210 | inline Double_t AliAODxi::MassXi() const { | |
211 | return ::sqrt(::pow(ELambda()+EBachelorPion(),2)-Ptot2Xi()); | |
212 | } | |
213 | ||
214 | inline Double_t AliAODxi::MassOmega() const { | |
215 | return ::sqrt(::pow(ELambda()+EBachelorKaon(),2)-Ptot2Xi()); | |
216 | } | |
217 | ||
218 | inline Double_t AliAODxi::RapXi() const { | |
219 | Double_t exi = EXi(); | |
220 | Double_t lMomXiZ = MomXiZ(); | |
221 | return 0.5*::log((exi+lMomXiZ)/(exi-lMomXiZ)); | |
222 | } | |
223 | ||
224 | inline Double_t AliAODxi::RapOmega() const { | |
225 | Double_t eom = EOmega(); | |
226 | Double_t lMomXiZ = MomXiZ(); | |
227 | return 0.5*::log((eom+lMomXiZ)/(eom-lMomXiZ)); | |
228 | } | |
229 | ||
230 | #endif |