1 #ifndef ALIAODCASCADE_H
2 #define ALIAODCASCADE_H
4 /* Copyright(c) 2004-2005, ALICE Experiment at CERN, All rights reserved. *
5 * See cxx source for full Copyright notice */
7 //-------------------------------------------------------------------------
8 // Implementation of the Analysis Oriented Data (AOD) Xi vertex class
9 // Origin: A.Maire, IReS, antonin.maire@ires.in2p3.fr
10 // G.Van Buren, BNL, gene@bnl.gov (original STAR MuDsts)
12 // Purpose: Having physics observables available for Xis
13 //-------------------------------------------------------------------------
15 #include <TDatabasePDG.h>
20 #define MASS(PID) TDatabasePDG::Instance()->GetParticle((PID))->Mass()
21 #define MASS2(PID) MASS((PID))*MASS((PID))
29 class AliAODcascade : public AliAODv0 {
34 AliAODcascade(const AliAODcascade& rSource);
36 AliAODcascade( AliAODVertex* rAODVertexXi, // No "const" param, constructor "TRef(const TObject*)" doesn't exist.
38 Double_t rDcaXiDaughters,
39 Double_t rDcaXiToPrimVertex,
40 Double_t rDcaBachToPrimVertex,
41 const Double_t* rMomBach,
43 AliAODVertex* rAODVertexV0, // No "const" param, see above.
44 Double_t rDcaV0Daughters,
45 Double_t rDcaV0ToPrimVertex,
46 const Double_t* rMomPos,
47 const Double_t* rMomNeg,
48 Double_t* rDcaDaughterToPrimVertex ); // const? -> Need agreement at AliAODRecoDecay level
51 AliAODcascade( AliAODVertex* rAODVertexXi, // No "const" param, see above.
53 Double_t rDcaXiDaughters,
54 Double_t rDcaXiToPrimVertex,
55 Double_t rDcaBachToPrimVertex,
56 const Double_t* rMomBach,
57 const AliAODv0& rAODv0 );
61 virtual ~AliAODcascade();
63 AliAODcascade& operator=(const AliAODcascade& rSource);
65 void Fill( AliAODVertex* rAODVertexXi, // No "const" param, see above.
67 Double_t rDcaXiDaughters,
68 Double_t rDcaXiToPrimVertex,
69 Double_t rDcaBachToPrimVertex,
70 const Double_t* rMomBach,
72 AliAODVertex* rAODVertexV0, // No "const" param, see above.
73 Double_t rDcaV0Daughters,
74 Double_t rDcaV0ToPrimVertex,
75 const Double_t* rMomPos,
76 const Double_t* rMomNeg,
77 Double_t* rDcaDaughterToPrimVertex ); // const? -> Need agreement at AliAODRecoDecay level
79 // void Fill( AliAODVertex* rAODVertexXi,
81 // Double_t rDcaXiDaughters,
82 // Double_t rDcaXiToPrimVertex,
83 // Double_t rDcaBachToPrimVertex,
84 // const Double_t* rMomBach,
85 // const AliAODv0& rAODv0 ); // -> To be implemented ...
89 void PrintXi(const Double_t& rPrimVtxX,
90 const Double_t& rPrimVtxY,
91 const Double_t& rPrimVtxZ) const;
94 Int_t ChargeXi() const;
95 Int_t GetBachID() const;
96 Int_t GetLabel() const {return -1;}
98 AliAODVertex* GetDecayVertexXi() const;
99 Double_t DecayVertexXiX() const;
100 Double_t DecayVertexXiY() const;
101 Double_t DecayVertexXiZ() const;
102 Double_t Chi2Xi() const;
105 Double_t DcaBachToPrimVertex() const;
106 Double_t DcaXiDaughters() const;
107 Double_t DcaXiToPrimVertex() const;
108 Double_t DcaXiToPrimVertex(const Double_t& rPrimVtxX, // hopefully, temporary method ...
109 const Double_t& rPrimVtxY,
110 const Double_t& rPrimVtxZ) const;
111 Double_t CosPointingAngleXi(const Double_t& rPrimVtxX,
112 const Double_t& rPrimVtxY,
113 const Double_t& rPrimVtxZ) const;
116 Double_t DecayLengthV0() const;
117 Double_t DecayLengthXi(const Double_t& rPrimVtxX,
118 const Double_t& rPrimVtxY,
119 const Double_t& rPrimVtxZ) const;
122 Double_t MomBachX() const;
123 Double_t MomBachY() const;
124 Double_t MomBachZ() const;
126 Double_t MomXiX() const;
127 Double_t MomXiY() const;
128 Double_t MomXiZ() const;
131 Double_t Ptot2Bach() const;
132 Double_t Ptot2Xi() const;
133 Double_t Pt2Xi() const;
134 Double_t MomBachAlongXi() const;
135 Double_t MomV0AlongXi() const;
136 Double_t AlphaXi() const;
137 Double_t PtArmXi() const;
138 Double_t EBachPion() const;
139 Double_t EBachKaon() const;
140 Double_t EXi() const;
141 Double_t EOmega() const;
142 Double_t MassXi() const;
143 Double_t MassOmega() const;
144 Double_t RapXi() const;
145 Double_t RapOmega() const;
150 TRef fDecayVertexXi; // ref to decay vertex of the cascade (Xi vertex)
151 Short_t fChargeXi; // charge of Xi
153 Double32_t fDcaXiDaughters; // dca between Xi daughters
154 Double32_t fDcaXiToPrimVertex; // dca of Xi to primary vertex
155 Double32_t fDcaBachToPrimVertex; // dca of bachelor to primary vertex
157 Double32_t fMomBachX; // momemtum of bachelor along X
158 Double32_t fMomBachY; // momemtum of bachelor along Y
159 Double32_t fMomBachZ; // momemtum of bachelor along Z
162 ClassDef(AliAODcascade,1)
168 //-----------------------------------------------------------
172 inline Int_t AliAODcascade::ChargeXi() const {return fChargeXi; }
174 inline AliAODVertex* AliAODcascade::GetDecayVertexXi() const { return (AliAODVertex*)fDecayVertexXi.GetObject(); }
175 inline Double_t AliAODcascade::DecayVertexXiX() const {return GetDecayVertexXi()->GetX(); }
176 inline Double_t AliAODcascade::DecayVertexXiY() const {return GetDecayVertexXi()->GetY(); }
177 inline Double_t AliAODcascade::DecayVertexXiZ() const {return GetDecayVertexXi()->GetZ(); }
179 inline Double_t AliAODcascade::Chi2Xi() const {return GetDecayVertexXi()->GetChi2(); }
183 inline Double_t AliAODcascade::DcaBachToPrimVertex() const {return fDcaBachToPrimVertex;}
184 inline Double_t AliAODcascade::DcaXiDaughters() const {return fDcaXiDaughters;}
185 inline Double_t AliAODcascade::DcaXiToPrimVertex() const {return fDcaXiToPrimVertex;}
190 inline Double_t AliAODcascade::DecayLengthV0() const {
191 return ::sqrt(::pow(DecayVertexV0X() - DecayVertexXiX(),2) +
192 ::pow(DecayVertexV0Y() - DecayVertexXiY(),2) +
193 ::pow(DecayVertexV0Z() - DecayVertexXiZ(),2));
196 inline Double_t AliAODcascade::DecayLengthXi(const Double_t& rPrimVtxX,
197 const Double_t& rPrimVtxY,
198 const Double_t& rPrimVtxZ) const {
199 return ::sqrt(::pow(DecayVertexXiX() - rPrimVtxX,2) +
200 ::pow(DecayVertexXiY() - rPrimVtxY,2) +
201 ::pow(DecayVertexXiZ() - rPrimVtxZ,2));
209 inline Double_t AliAODcascade::MomBachX() const {return fMomBachX;}
210 inline Double_t AliAODcascade::MomBachY() const {return fMomBachY;}
211 inline Double_t AliAODcascade::MomBachZ() const {return fMomBachZ;}
213 inline Double_t AliAODcascade::MomXiX() const {return MomV0X()+fMomBachX;}
214 inline Double_t AliAODcascade::MomXiY() const {return MomV0Y()+fMomBachY;}
215 inline Double_t AliAODcascade::MomXiZ() const {return MomV0Z()+fMomBachZ;}
217 inline Double_t AliAODcascade::Ptot2Bach() const {
218 return (::pow(fMomBachX,2) + ::pow(fMomBachY,2) + ::pow(fMomBachZ,2) );
220 inline Double_t AliAODcascade::Ptot2Xi() const {return ( Pt2Xi() + ::pow(MomXiZ(),2) );}
221 inline Double_t AliAODcascade::Pt2Xi() const {
222 return (::pow(MomXiX(),2) + ::pow(MomXiY(),2) );
225 inline Double_t AliAODcascade::MomBachAlongXi() const {
226 Double_t rPtot2Xi = Ptot2Xi();
228 return (MomBachX()*MomXiX() +
229 MomBachY()*MomXiY() +
230 MomBachZ()*MomXiZ()) / ::sqrt(rPtot2Xi);
234 inline Double_t AliAODcascade::MomV0AlongXi() const {
235 Double_t rPtot2Xi = Ptot2Xi();
237 return (MomV0X()*MomXiX() +
239 MomV0Z()*MomXiZ()) / ::sqrt(rPtot2Xi);
243 inline Double_t AliAODcascade::AlphaXi() const {
244 Double_t rMomV0AlongXi = MomV0AlongXi();
245 Double_t rMomBachAlongXi = MomBachAlongXi();
247 return (((Float_t) ChargeXi()) * (rMomBachAlongXi - rMomV0AlongXi)/
248 (rMomBachAlongXi + rMomV0AlongXi));
251 inline Double_t AliAODcascade::PtArmXi() const {
252 return ::sqrt(Ptot2Bach()-MomBachAlongXi()*MomBachAlongXi());
255 inline Double_t AliAODcascade::EBachPion() const {
256 return ::sqrt(Ptot2Bach()+MASS2("pi-"));
259 inline Double_t AliAODcascade::EBachKaon() const {
260 return ::sqrt(Ptot2Bach()+MASS2("K-"));
263 inline Double_t AliAODcascade::EXi() const {
264 return ::sqrt(Ptot2Xi()+MASS2("Xi-"));
267 inline Double_t AliAODcascade::EOmega() const {
268 return ::sqrt(Ptot2Xi()+MASS2("Omega-"));
271 inline Double_t AliAODcascade::MassXi() const {
272 return ::sqrt(::pow(ELambda()+EBachPion(),2)-Ptot2Xi());
275 inline Double_t AliAODcascade::MassOmega() const {
276 return ::sqrt(::pow(ELambda()+EBachKaon(),2)-Ptot2Xi());
279 inline Double_t AliAODcascade::RapXi() const {
280 Double_t exi = EXi();
281 Double_t rMomXiZ = MomXiZ();
282 return 0.5*::log((exi+rMomXiZ)/(exi-rMomXiZ));
285 inline Double_t AliAODcascade::RapOmega() const {
286 Double_t eom = EOmega();
287 Double_t rMomXiZ = MomXiZ();
288 return 0.5*::log((eom+rMomXiZ)/(eom-rMomXiZ));