correct for omission
[u/mrichter/AliRoot.git] / STEER / AliAODcascade.cxx
CommitLineData
5f10117a 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
16//-------------------------------------------------------------------------
17// Implementation of the Analysis Oriented Data (AOD) Xi vertex class
18// Origin: A.Maire, IReS, antonin.maire@ires.in2p3.fr
19// G.Van Buren, BNL, gene@bnl.gov (original STAR MuDsts)
20//
21// Purpose: Having physics observables available for Xis
22//-------------------------------------------------------------------------
23
5f10117a 24#include <TVector3.h>
25#include <TMath.h>
97135b34 26#include <TDatabasePDG.h>
5f10117a 27
28#include "AliAODcascade.h"
29#include "AliAODTrack.h"
5f10117a 30
31ClassImp(AliAODcascade)
32
33
5f10117a 34AliAODcascade::AliAODcascade() :
35 AliAODv0(),
36
37 fDecayVertexXi(0x0),
38 fChargeXi(0),
39
40 fDcaXiDaughters(999),
41 fDcaXiToPrimVertex(999),
42 fDcaBachToPrimVertex(999),
43
44 fMomBachX(999),
45 fMomBachY(999),
46 fMomBachZ(999)
47
48{
49 //--------------------------------------------------------------------
50 // Default constructor
51 //--------------------------------------------------------------------
52
53}
54
55
56
57AliAODcascade::AliAODcascade(const AliAODcascade& rSource) :
58 AliAODv0( rSource ),
59
60 fDecayVertexXi( rSource.fDecayVertexXi ),
61 fChargeXi( rSource.fChargeXi ),
62
63 fDcaXiDaughters( rSource.fDcaXiDaughters ),
64 fDcaXiToPrimVertex( rSource.fDcaXiToPrimVertex ),
65 fDcaBachToPrimVertex( rSource.fDcaBachToPrimVertex ),
66
67 fMomBachX( rSource.fMomBachX ),
68 fMomBachY( rSource.fMomBachY ),
69 fMomBachZ( rSource.fMomBachZ )
70
71{
72 //--------------------------------------------------------------------
73 // Copy constructor
74 //--------------------------------------------------------------------
75
76}
77
78
79
80AliAODcascade::AliAODcascade( AliAODVertex* rAODVertexXi,
81 Int_t rChargeXi,
82 Double_t rDcaXiDaughters,
83 Double_t rDcaXiToPrimVertex,
84 Double_t rDcaBachToPrimVertex,
85 const Double_t* rMomBach,
86
87 AliAODVertex* rAODVertexV0,
88 Double_t rDcaV0Daughters,
89 Double_t rDcaV0ToPrimVertex,
90 const Double_t *rMomPos,
91 const Double_t *rMomNeg,
92 Double_t *rDcaDaughterToPrimVertex
93 ) :
94 AliAODv0(rAODVertexV0, rDcaV0Daughters, rDcaV0ToPrimVertex, rMomPos, rMomNeg, rDcaDaughterToPrimVertex),
95 fDecayVertexXi( rAODVertexXi ),
96 fChargeXi( rChargeXi ),
97 fDcaXiDaughters( rDcaXiDaughters ),
98 fDcaXiToPrimVertex( rDcaXiToPrimVertex ),
99 fDcaBachToPrimVertex( rDcaBachToPrimVertex ),
100 fMomBachX( rMomBach[0] ),
101 fMomBachY( rMomBach[1] ),
102 fMomBachZ( rMomBach[2] )
103{
104 //--------------------------------------------------------------------
105 // Constructor via setting each data member
106 //--------------------------------------------------------------------
107
108}
109
110
111
112
113AliAODcascade::AliAODcascade( AliAODVertex* rAODVertexXi,
114 Int_t rChargeXi,
115 Double_t rDcaXiDaughters,
116 Double_t rDcaXiToPrimVertex,
117 Double_t rDcaBachToPrimVertex,
118 const Double_t* rMomBach,
119 const AliAODv0& rAODv0 ) :
120 AliAODv0(rAODv0),
121 fDecayVertexXi(rAODVertexXi),
122 fChargeXi( rChargeXi ),
123 fDcaXiDaughters( rDcaXiDaughters ),
124 fDcaXiToPrimVertex( rDcaXiToPrimVertex ),
125 fDcaBachToPrimVertex( rDcaBachToPrimVertex ),
126 fMomBachX( rMomBach[0] ),
127 fMomBachY( rMomBach[1] ),
128 fMomBachZ( rMomBach[2] )
129{
130 //--------------------------------------------------------------------
131 // Constructor via setting each Xi data member + setting AODv0
132 //--------------------------------------------------------------------
133
134}
135
136
137
138
139
140AliAODcascade& AliAODcascade::operator=(const AliAODcascade& rSource){
141 //--------------------------------------------------------------------
142 // Assignment overload
143 //--------------------------------------------------------------------
144
145 if (this == &rSource) return *this;
146
147 AliAODv0::operator=(rSource);
148
149 this->fDecayVertexXi = rSource.fDecayVertexXi;
150 this->fChargeXi = rSource.fChargeXi;
151
152 this->fDcaXiDaughters = rSource.fDcaXiDaughters;
153 this->fDcaXiToPrimVertex = rSource.fDcaXiToPrimVertex;
154 this->fDcaBachToPrimVertex = rSource.fDcaBachToPrimVertex;
155
156 this->fMomBachX = rSource.fMomBachX;
157 this->fMomBachY = rSource.fMomBachY;
158 this->fMomBachZ = rSource.fMomBachZ;
159
160 return *this;
161}
162
163
164
165AliAODcascade::~AliAODcascade(){
166 //--------------------------------------------------------------------
167 // Empty destructor
168 //--------------------------------------------------------------------
169}
170
97135b34 171void AliAODcascade::Fill(AliAODVertex* rAODVertexXi,
5f10117a 172 Int_t rChargeXi,
173 Double_t rDcaXiDaughters,
174 Double_t rDcaXiToPrimVertex,
175 Double_t rDcaBachToPrimVertex,
176 const Double_t* rMomBach,
177
178 AliAODVertex* rAODVertexV0,
179 Double_t rDcaV0Daughters,
180 Double_t rDcaV0ToPrimVertex,
181 const Double_t* rMomPos,
182 const Double_t* rMomNeg,
183 Double_t* rDcaDaughterToPrimVertex )
184{
185 //--------------------------------------------------------------------
186 // Fill the AODcascade
187 //--------------------------------------------------------------------
188
189 AliAODv0::Fill(rAODVertexV0,rDcaV0Daughters,rDcaV0ToPrimVertex,rMomPos,rMomNeg,rDcaDaughterToPrimVertex);
190 fDecayVertexXi = rAODVertexXi;
191 fChargeXi = rChargeXi;
192
193 fDcaXiDaughters = rDcaXiDaughters;
194 fDcaXiToPrimVertex = rDcaXiToPrimVertex;
195 fDcaBachToPrimVertex = rDcaBachToPrimVertex;
196
197 fMomBachX = rMomBach[0];
198 fMomBachY = rMomBach[1];
199 fMomBachZ = rMomBach[2];
200}
201
202
203
204void AliAODcascade::ResetXi(){
205 //--------------------------------------------------------------------
206 // Reset the values of the AOD data members to the default ones
207 //--------------------------------------------------------------------
208
209 ResetV0();
210
211 GetDecayVertexXi()->SetChi2perNDF(-999);
212 GetDecayVertexXi()->RemoveCovMatrix();
213 GetDecayVertexXi()->RemoveDaughters();
214 GetDecayVertexXi()->SetID(-1);
215 GetDecayVertexXi()->SetParent((TObject*) 0x0);
216 GetDecayVertexXi()->SetPosition(-999, -999, -999);
217 GetDecayVertexXi()->SetType( AliAODVertex::kUndef );
218
219 fChargeXi = 0;
220
221 fDcaXiDaughters = 999;
222 fDcaXiToPrimVertex = 999;
223 fDcaBachToPrimVertex = 999;
224
225 fMomBachX = 999;
226 fMomBachY = 999;
227 fMomBachZ = 999;
228
229
230}
231
232void AliAODcascade::PrintXi(const Double_t& rPrimVtxX,
233 const Double_t& rPrimVtxY,
234 const Double_t& rPrimVtxZ) const
235{
97135b34 236 //--------------------------------------------------------------------
237 // Print the AOD data members
238 //--------------------------------------------------------------------
5f10117a 239 AliAODv0::Print();
240 printf("- \n");
241 printf("AliAODcascade : posXiVtx (%.6f, %.6f, %.6f) \n", DecayVertexXiX(), DecayVertexXiY(), DecayVertexXiZ() );
242 printf("AliAODcascade : chargeXi = %d \n", ChargeXi() );
243 printf("AliAODcascade : dca (bachtpv %.6f, xid %.6f, xitpv-calc %.6f, xitpv-mb %.6f) \n",
244 DcaBachToPrimVertex(),
245 DcaXiDaughters(),
246 DcaXiToPrimVertex( rPrimVtxX, rPrimVtxY, rPrimVtxZ),
247 DcaXiToPrimVertex() );
248 printf("AliAODcascade : cos(PtgAngle Xi) = %.6f \n", CosPointingAngleXi(rPrimVtxX, rPrimVtxY, rPrimVtxZ) );
249
250
251 printf("AliAODcascade : posVtxXI (x %.6f, y %.6f, z %.6f) \n", DecayVertexXiX(),DecayVertexXiY(),DecayVertexXiZ() );
252 printf("AliAODcascade : decaylgth (V0 %.6f, Xi %.6f) \n", DecayLengthV0(),DecayLengthXi(rPrimVtxX, rPrimVtxY, rPrimVtxZ) );
253 printf("AliAODcascade : momBach (px %.6f, py %.6f, pz %.6f, ptot2 %.6f) \n",
254 MomBachX(),
255 MomBachY(),
256 MomBachZ(),
257 Ptot2Bach() );
258 printf("AliAODcascade : momXi (px %.6f, py %.6f, pz %.6f, ptot2 %.6f, pt2 %.6f) \n",
259 MomXiX(),
260 MomXiY(),
261 MomXiZ(),
262 Ptot2Xi(),
263 Pt2Xi() );
264 printf("AliAODcascade : momAlongXi (Bach %.6f, V0 %.6f) \n", MomBachAlongXi(), MomV0AlongXi() );
265 printf("AliAODcascade : cin (alphaXi %.6f, PtArmXi %.6f) \n", AlphaXi(), PtArmXi() );
266 printf("AliAODcascade : rap (Xi %.6f, Omega %.6f) \n", RapXi(),RapOmega() );
267 printf("AliAODcascade : nrg (BachPi %.6f, BachK- %.6f, Omega %.6f, Xi %.6f ) \n",
268 EBachPion(),
269 EBachKaon(),
270 EOmega(),
271 EXi() );
272 printf("AliAODcascade : inv mass (Xi %.6f, Omega %.6f) \n", MassXi(), MassOmega() );
273 printf("- \n");
274 // Methods Not printed = GetBachID(), Chi2Xi()
275
276
277}
278
279Double_t AliAODcascade::CosPointingAngleXi(const Double_t& rPrimVtxX,
280 const Double_t& rPrimVtxY,
281 const Double_t& rPrimVtxZ) const {
282
283 // Cosine of Xi pointing angle in 3D space, with respect to a point
284 // (primary vtx ...)
285
97135b34 286 TVector3 lMomXi( MomXiX(),MomXiY(),MomXiZ() );
287 TVector3 lVectPrimVtxToXi(DecayVertexXiX() - rPrimVtxX,
288 DecayVertexXiY() - rPrimVtxY,
289 DecayVertexXiZ() - rPrimVtxZ);
5f10117a 290
97135b34 291 Double_t lPtgAngle = lMomXi.Angle(lVectPrimVtxToXi);
5f10117a 292
97135b34 293 return TMath::Cos(lPtgAngle);
5f10117a 294
295}
296
297Double_t AliAODcascade::DcaXiToPrimVertex(const Double_t& rPrimVtxX,
298 const Double_t& rPrimVtxY,
299 const Double_t& rPrimVtxZ) const {
300 //
301 // Compute the DCA between this Xi and the primary vertex
302 //
303 Double_t rMomXiX = MomXiX();
304 Double_t rMomXiY = MomXiY();
305 Double_t rMomXiZ = MomXiZ();
306 Double_t dx = (rPrimVtxY- DecayVertexXiY() )*rMomXiZ - (rPrimVtxZ- DecayVertexXiZ() )*rMomXiY;
307 Double_t dy = (rPrimVtxZ- DecayVertexXiZ() )*rMomXiX - (rPrimVtxX- DecayVertexXiX() )*rMomXiZ;
308 Double_t dz = (rPrimVtxX- DecayVertexXiX() )*rMomXiY - (rPrimVtxY- DecayVertexXiY() )*rMomXiX;
309 return TMath::Sqrt((dx*dx+dy*dy+dz*dz)/ Ptot2Xi() );
310}
311
312Int_t AliAODcascade::GetBachID() const {
313 //
314 // Return the ID of the bachelor
315 //
316
317 if( GetDecayVertexXi() == 0) return -1;
318
319 AliAODTrack *rBachTrack = (AliAODTrack *) ( GetDecayVertexXi()->GetDaughter(0) );
320 // The fDecayVertexXi should just have one stored daughter. To be managed within the AliAnalysisTaskESDFilter
321 Short_t rBachId = rBachTrack->GetID();
322 return rBachId;
323}
324
97135b34 325Double_t AliAODcascade::EBachPion() const {
326 static Double_t lMassPi = TDatabasePDG::Instance()->GetParticle("pi-")->Mass();
327 return ::sqrt(Ptot2Bach() + lMassPi*lMassPi);
328}
329
330Double_t AliAODcascade::EBachKaon() const {
331 static Double_t lMassKaon = TDatabasePDG::Instance()->GetParticle("K-")->Mass();
332 return ::sqrt(Ptot2Bach() + lMassKaon*lMassKaon);
333}
5f10117a 334
97135b34 335Double_t AliAODcascade::EXi() const {
336 static Double_t lMassXi = TDatabasePDG::Instance()->GetParticle("Xi-")->Mass();
d2ede0c3 337 return ::sqrt(Ptot2Xi() + lMassXi*lMassXi);
97135b34 338}
5f10117a 339
97135b34 340Double_t AliAODcascade::EOmega() const {
341 static Double_t lMassOmega = TDatabasePDG::Instance()->GetParticle("Omega-")->Mass();
d2ede0c3 342 return ::sqrt(Ptot2Xi() + lMassOmega*lMassOmega);
97135b34 343}