Line data Source code
1 : #ifndef ALIAODCASCADE_H
2 : #define ALIAODCASCADE_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: A.Maire, IReS, antonin.maire@ires.in2p3.fr
10 : // G.Van Buren, BNL, gene@bnl.gov (original STAR MuDsts)
11 : //
12 : // Purpose: Having physics observables available for Xis
13 : //-------------------------------------------------------------------------
14 :
15 :
16 : #include "AliAODv0.h"
17 :
18 : class AliAODTrack;
19 : class AliAODVertex;
20 :
21 : class AliAODcascade : public AliAODv0 {
22 :
23 : public:
24 : AliAODcascade();
25 :
26 : AliAODcascade(const AliAODcascade& rSource);
27 :
28 : AliAODcascade( AliAODVertex* rAODVertexXi, // No "const" param, constructor "TRef(const TObject*)" doesn't exist.
29 : Int_t rChargeXi,
30 : Double_t rDcaXiDaughters,
31 : Double_t rDcaXiToPrimVertex,
32 : Double_t rDcaBachToPrimVertex,
33 : const Double_t* rMomBach,
34 :
35 : AliAODVertex* rAODVertexV0, // No "const" param, see above.
36 : Double_t rDcaV0Daughters,
37 : Double_t rDcaV0ToPrimVertex,
38 : const Double_t* rMomPos,
39 : const Double_t* rMomNeg,
40 : Double_t* rDcaDaughterToPrimVertex ); // const? -> Need agreement at AliAODRecoDecay level
41 :
42 :
43 : AliAODcascade( AliAODVertex* rAODVertexXi, // No "const" param, see above.
44 : Int_t rChargeXi,
45 : Double_t rDcaXiDaughters,
46 : Double_t rDcaXiToPrimVertex,
47 : Double_t rDcaBachToPrimVertex,
48 : const Double_t* rMomBach,
49 : const AliAODv0& rAODv0 );
50 :
51 :
52 :
53 : virtual ~AliAODcascade();
54 :
55 : AliAODcascade& operator=(const AliAODcascade& rSource);
56 :
57 : void Fill(AliAODVertex* rAODVertexXi, // No "const" param, see above.
58 : Int_t rChargeXi,
59 : Double_t rDcaXiDaughters,
60 : Double_t rDcaXiToPrimVertex,
61 : Double_t rDcaBachToPrimVertex,
62 : const Double_t* rMomBach,
63 :
64 : AliAODVertex* rAODVertexV0, // No "const" param, see above.
65 : Double_t rDcaV0Daughters,
66 : Double_t rDcaV0ToPrimVertex,
67 : const Double_t* rMomPos,
68 : const Double_t* rMomNeg,
69 : Double_t* rDcaDaughterToPrimVertex ); // const? -> Need agreement at AliAODRecoDecay level
70 :
71 : // void Fill( AliAODVertex* rAODVertexXi,
72 : // Int_t rChargeXi,
73 : // Double_t rDcaXiDaughters,
74 : // Double_t rDcaXiToPrimVertex,
75 : // Double_t rDcaBachToPrimVertex,
76 : // const Double_t* rMomBach,
77 : // const AliAODv0& rAODv0 ); // -> To be implemented ...
78 :
79 :
80 : void ResetXi();
81 : void PrintXi(const Double_t& rPrimVtxX,
82 : const Double_t& rPrimVtxY,
83 : const Double_t& rPrimVtxZ) const;
84 :
85 : // ----
86 : Int_t ChargeXi() const;
87 : Int_t GetBachID() const;
88 0 : Int_t GetLabel() const {return -1;}
89 :
90 : AliAODVertex* GetDecayVertexXi() const;
91 : Double_t DecayVertexXiX() const;
92 : Double_t DecayVertexXiY() const;
93 : Double_t DecayVertexXiZ() const;
94 : Double_t Chi2Xi() const;
95 :
96 : Double_t DcaBachToPrimVertex() const;
97 : Double_t DcaXiDaughters() const;
98 : Double_t DcaXiToPrimVertex() const;
99 : Double_t DcaXiToPrimVertex(const Double_t& rPrimVtxX, // hopefully, temporary method ...
100 : const Double_t& rPrimVtxY,
101 : const Double_t& rPrimVtxZ) const;
102 : Double_t CosPointingAngleXi(const Double_t& rPrimVtxX,
103 : const Double_t& rPrimVtxY,
104 : const Double_t& rPrimVtxZ) const;
105 :
106 : Double_t DecayLengthV0() const;
107 : Double_t DecayLengthXi(const Double_t& rPrimVtxX,
108 : const Double_t& rPrimVtxY,
109 : const Double_t& rPrimVtxZ) const;
110 :
111 : Double_t MomBachX() const;
112 : Double_t MomBachY() const;
113 : Double_t MomBachZ() const;
114 :
115 : Double_t MomXiX() const;
116 : Double_t MomXiY() const;
117 : Double_t MomXiZ() const;
118 :
119 : // ----
120 : Double_t Ptot2Bach() const;
121 : Double_t Ptot2Xi() const;
122 : Double_t Pt2Xi() const;
123 : Double_t MomBachAlongXi() const;
124 : Double_t MomV0AlongXi() const;
125 : Double_t AlphaXi() const;
126 : Double_t PtArmXi() const;
127 : Double_t EBachPion() const;
128 : Double_t EBachKaon() const;
129 : Double_t EXi() const;
130 : Double_t EOmega() const;
131 : Double_t MassXi() const;
132 : Double_t MassOmega() const;
133 : Double_t RapXi() const;
134 : Double_t RapOmega() const;
135 :
136 : protected:
137 :
138 : TRef fDecayVertexXi; // ref to decay vertex of the cascade (Xi vertex)
139 : Short_t fChargeXi; // charge of Xi
140 :
141 : Double32_t fDcaXiDaughters; // dca between Xi daughters
142 : Double32_t fDcaXiToPrimVertex; // dca of Xi to primary vertex
143 : Double32_t fDcaBachToPrimVertex; // dca of bachelor to primary vertex
144 :
145 : Double32_t fMomBachX; // momemtum of bachelor along X
146 : Double32_t fMomBachY; // momemtum of bachelor along Y
147 : Double32_t fMomBachZ; // momemtum of bachelor along Z
148 :
149 174 : ClassDef(AliAODcascade,1)
150 : };
151 :
152 : //-----------------------------------------------------------
153 :
154 0 : inline Int_t AliAODcascade::ChargeXi() const {return fChargeXi; }
155 :
156 0 : inline AliAODVertex* AliAODcascade::GetDecayVertexXi() const { return (AliAODVertex*)fDecayVertexXi.GetObject(); }
157 0 : inline Double_t AliAODcascade::DecayVertexXiX() const {return GetDecayVertexXi()->GetX(); }
158 0 : inline Double_t AliAODcascade::DecayVertexXiY() const {return GetDecayVertexXi()->GetY(); }
159 0 : inline Double_t AliAODcascade::DecayVertexXiZ() const {return GetDecayVertexXi()->GetZ(); }
160 :
161 0 : inline Double_t AliAODcascade::Chi2Xi() const {return GetDecayVertexXi()->GetChi2(); }
162 :
163 0 : inline Double_t AliAODcascade::DcaBachToPrimVertex() const {return fDcaBachToPrimVertex;}
164 0 : inline Double_t AliAODcascade::DcaXiDaughters() const {return fDcaXiDaughters;}
165 0 : inline Double_t AliAODcascade::DcaXiToPrimVertex() const {return fDcaXiToPrimVertex;}
166 :
167 : inline Double_t AliAODcascade::DecayLengthV0() const {
168 0 : return ::sqrt(::pow(DecayVertexV0X() - DecayVertexXiX(),2) +
169 0 : ::pow(DecayVertexV0Y() - DecayVertexXiY(),2) +
170 0 : ::pow(DecayVertexV0Z() - DecayVertexXiZ(),2));
171 : }
172 :
173 : inline Double_t AliAODcascade::DecayLengthXi(const Double_t& rPrimVtxX,
174 : const Double_t& rPrimVtxY,
175 : const Double_t& rPrimVtxZ) const {
176 0 : return ::sqrt(::pow(DecayVertexXiX() - rPrimVtxX,2) +
177 0 : ::pow(DecayVertexXiY() - rPrimVtxY,2) +
178 0 : ::pow(DecayVertexXiZ() - rPrimVtxZ,2));
179 : }
180 :
181 0 : inline Double_t AliAODcascade::MomBachX() const {return fMomBachX;}
182 0 : inline Double_t AliAODcascade::MomBachY() const {return fMomBachY;}
183 0 : inline Double_t AliAODcascade::MomBachZ() const {return fMomBachZ;}
184 :
185 0 : inline Double_t AliAODcascade::MomXiX() const {return MomV0X()+fMomBachX;}
186 0 : inline Double_t AliAODcascade::MomXiY() const {return MomV0Y()+fMomBachY;}
187 0 : inline Double_t AliAODcascade::MomXiZ() const {return MomV0Z()+fMomBachZ;}
188 :
189 : inline Double_t AliAODcascade::Ptot2Bach() const {
190 0 : return (::pow(fMomBachX,2) + ::pow(fMomBachY,2) + ::pow(fMomBachZ,2) );
191 : }
192 0 : inline Double_t AliAODcascade::Ptot2Xi() const {return ( Pt2Xi() + ::pow(MomXiZ(),2) );}
193 : inline Double_t AliAODcascade::Pt2Xi() const {
194 0 : return (::pow(MomXiX(),2) + ::pow(MomXiY(),2) );
195 : }
196 :
197 : inline Double_t AliAODcascade::MomBachAlongXi() const {
198 0 : Double_t rPtot2Xi = Ptot2Xi();
199 0 : if (rPtot2Xi)
200 0 : return (MomBachX()*MomXiX() +
201 0 : MomBachY()*MomXiY() +
202 0 : MomBachZ()*MomXiZ()) / ::sqrt(rPtot2Xi);
203 0 : else return 0.;
204 0 : }
205 :
206 : inline Double_t AliAODcascade::MomV0AlongXi() const {
207 0 : Double_t rPtot2Xi = Ptot2Xi();
208 0 : if (rPtot2Xi)
209 0 : return (MomV0X()*MomXiX() +
210 0 : MomV0Y()*MomXiY() +
211 0 : MomV0Z()*MomXiZ()) / ::sqrt(rPtot2Xi);
212 0 : return 0.;
213 0 : }
214 :
215 : inline Double_t AliAODcascade::AlphaXi() const {
216 0 : Double_t rMomV0AlongXi = MomV0AlongXi();
217 0 : Double_t rMomBachAlongXi = MomBachAlongXi();
218 :
219 0 : return (((Float_t) ChargeXi()) * (rMomBachAlongXi - rMomV0AlongXi)/
220 0 : (rMomBachAlongXi + rMomV0AlongXi));
221 : }
222 :
223 : inline Double_t AliAODcascade::PtArmXi() const {
224 0 : return ::sqrt(Ptot2Bach()-MomBachAlongXi()*MomBachAlongXi());
225 : }
226 :
227 : inline Double_t AliAODcascade::MassXi() const {
228 0 : return ::sqrt(::pow(ELambda()+EBachPion(),2)-Ptot2Xi());
229 : }
230 :
231 : inline Double_t AliAODcascade::MassOmega() const {
232 0 : return ::sqrt(::pow(ELambda()+EBachKaon(),2)-Ptot2Xi());
233 : }
234 :
235 : inline Double_t AliAODcascade::RapXi() const {
236 0 : Double_t exi = EXi();
237 0 : Double_t rMomXiZ = MomXiZ();
238 0 : return 0.5*::log((exi+rMomXiZ)/(exi-rMomXiZ));
239 : }
240 :
241 : inline Double_t AliAODcascade::RapOmega() const {
242 0 : Double_t eom = EOmega();
243 0 : Double_t rMomXiZ = MomXiZ();
244 0 : return 0.5*::log((eom+rMomXiZ)/(eom-rMomXiZ));
245 : }
246 :
247 : #endif
|