]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/AliAODcascade.h
Removed (unnecessary) AliTPCTrack dependence.
[u/mrichter/AliRoot.git] / STEER / AliAODcascade.h
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 #include <TDatabasePDG.h>
16
17 #include <AliAODv0.h>
18
19
20 #define MASS(PID)  TDatabasePDG::Instance()->GetParticle((PID))->Mass()
21 #define MASS2(PID) MASS((PID))*MASS((PID))
22
23
24 class AliAODTrack;
25 class AliAODVertex;
26
27
28
29 class AliAODcascade : public AliAODv0 {
30
31 public:
32   AliAODcascade();
33   
34   AliAODcascade(const AliAODcascade& rSource);
35   
36   AliAODcascade( AliAODVertex* rAODVertexXi,  // No "const" param, constructor "TRef(const TObject*)" doesn't exist.
37                       Int_t         rChargeXi,
38                       Double_t      rDcaXiDaughters,
39                       Double_t      rDcaXiToPrimVertex,
40                       Double_t      rDcaBachToPrimVertex,
41                 const Double_t*     rMomBach,
42                 
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
49
50                 
51   AliAODcascade( AliAODVertex* rAODVertexXi,  // No "const" param, see above.
52                       Int_t         rChargeXi,
53                       Double_t      rDcaXiDaughters,
54                       Double_t      rDcaXiToPrimVertex,
55                       Double_t      rDcaBachToPrimVertex,
56                 const Double_t*     rMomBach,
57                 const AliAODv0&     rAODv0 );
58                 
59                 
60                 
61   virtual ~AliAODcascade();
62
63   AliAODcascade& operator=(const AliAODcascade& rSource);
64   
65   void  Fill(   AliAODVertex*   rAODVertexXi, // No "const" param, see above.
66                       Int_t     rChargeXi,
67                       Double_t  rDcaXiDaughters,
68                       Double_t  rDcaXiToPrimVertex,
69                       Double_t  rDcaBachToPrimVertex,
70                 const Double_t* rMomBach,
71                         
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
78   
79 //   void  Fill(   AliAODVertex*   rAODVertexXi, 
80 //                       Int_t     rChargeXi,
81 //                    Double_t  rDcaXiDaughters,
82 //                    Double_t  rDcaXiToPrimVertex,
83 //                    Double_t  rDcaBachToPrimVertex,
84 //              const Double_t* rMomBach,
85 //              const AliAODv0& rAODv0  );          // -> To be implemented ...       
86                       
87                       
88   void  ResetXi();                                       
89   void  PrintXi(const Double_t& rPrimVtxX, 
90                 const Double_t& rPrimVtxY, 
91                 const Double_t& rPrimVtxZ) const; 
92
93 // ----
94   Int_t    ChargeXi()                const;
95   Int_t    GetBachID()               const;
96   Int_t    GetLabel()                const {return -1;}
97   
98   AliAODVertex* GetDecayVertexXi()   const; 
99   Double_t DecayVertexXiX()          const;
100   Double_t DecayVertexXiY()          const;
101   Double_t DecayVertexXiZ()          const;
102   Double_t Chi2Xi()                  const;
103   
104     
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;  
114   
115
116   Double_t DecayLengthV0()           const;
117   Double_t DecayLengthXi(const Double_t& rPrimVtxX, 
118                          const Double_t& rPrimVtxY, 
119                          const Double_t& rPrimVtxZ) const;
120   
121                       
122   Double_t MomBachX()       const;
123   Double_t MomBachY()       const;
124   Double_t MomBachZ()       const;
125   
126   Double_t MomXiX()         const;
127   Double_t MomXiY()         const;
128   Double_t MomXiZ()         const;
129
130 // ---- 
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;
146
147
148 protected:
149
150   TRef          fDecayVertexXi;           // ref to decay vertex of the cascade (Xi vertex)
151   Short_t       fChargeXi;                // charge of Xi
152     
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 
156   
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
160
161   
162   ClassDef(AliAODcascade,1)   
163 };
164
165
166
167
168 //-----------------------------------------------------------
169
170
171
172 inline Int_t    AliAODcascade::ChargeXi()   const     {return fChargeXi; }
173
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(); }
178
179 inline Double_t AliAODcascade::Chi2Xi()         const {return GetDecayVertexXi()->GetChi2(); }
180
181
182
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;}
186
187
188
189
190 inline Double_t AliAODcascade::DecayLengthV0() const {
191     return ::sqrt(::pow(DecayVertexV0X() - DecayVertexXiX(),2) +
192                   ::pow(DecayVertexV0Y() - DecayVertexXiY(),2) +
193                   ::pow(DecayVertexV0Z() - DecayVertexXiZ(),2));
194 }
195
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));
202 }
203
204
205
206
207
208
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;}
212
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;}
216
217 inline Double_t AliAODcascade::Ptot2Bach() const {
218   return (::pow(fMomBachX,2) + ::pow(fMomBachY,2) + ::pow(fMomBachZ,2) );
219 }
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) );
223 }
224
225 inline Double_t AliAODcascade::MomBachAlongXi() const {
226   Double_t rPtot2Xi = Ptot2Xi();
227   if (rPtot2Xi)
228     return (MomBachX()*MomXiX() +
229             MomBachY()*MomXiY() +
230             MomBachZ()*MomXiZ()) / ::sqrt(rPtot2Xi);
231   else return 0.;
232 }
233
234 inline Double_t AliAODcascade::MomV0AlongXi() const {
235   Double_t rPtot2Xi = Ptot2Xi();
236   if (rPtot2Xi)
237     return (MomV0X()*MomXiX() +
238             MomV0Y()*MomXiY() +
239             MomV0Z()*MomXiZ()) / ::sqrt(rPtot2Xi);
240   return 0.;
241 }
242
243 inline Double_t AliAODcascade::AlphaXi() const {
244   Double_t rMomV0AlongXi   = MomV0AlongXi();
245   Double_t rMomBachAlongXi = MomBachAlongXi();
246
247   return (((Float_t) ChargeXi()) * (rMomBachAlongXi - rMomV0AlongXi)/
248                                    (rMomBachAlongXi + rMomV0AlongXi));
249 }
250
251 inline Double_t AliAODcascade::PtArmXi() const {
252   return ::sqrt(Ptot2Bach()-MomBachAlongXi()*MomBachAlongXi());
253 }
254
255 inline Double_t AliAODcascade::EBachPion() const {
256   return ::sqrt(Ptot2Bach()+MASS2("pi-"));
257 }
258
259 inline Double_t AliAODcascade::EBachKaon() const {
260   return ::sqrt(Ptot2Bach()+MASS2("K-"));
261 }
262
263 inline Double_t AliAODcascade::EXi() const {
264   return ::sqrt(Ptot2Xi()+MASS2("Xi-"));
265 }
266
267 inline Double_t AliAODcascade::EOmega() const {
268   return ::sqrt(Ptot2Xi()+MASS2("Omega-"));
269 }
270
271 inline Double_t AliAODcascade::MassXi() const {
272   return ::sqrt(::pow(ELambda()+EBachPion(),2)-Ptot2Xi());
273 }
274
275 inline Double_t AliAODcascade::MassOmega() const {
276   return ::sqrt(::pow(ELambda()+EBachKaon(),2)-Ptot2Xi());
277 }
278
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));
283 }
284
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));
289 }
290
291 #endif