]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ANALYSIS/AliAODxi.h
- Fix for a recently introduced bug
[u/mrichter/AliRoot.git] / ANALYSIS / AliAODxi.h
CommitLineData
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
20class AliESD;
21class AliESDVertex;
22class AliESDv0;
23class AliESDcascade;
24class AliESDtrack;
25
26class AliAODxi : public AliAODv0 {
27
28public:
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
79protected:
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
99inline Int_t AliAODxi::Charge() const {return fCharge;}
100
101inline Double_t AliAODxi::DecayVertexXiX() const {return fDecayVertexXiX;}
102inline Double_t AliAODxi::DecayVertexXiY() const {return fDecayVertexXiY;}
103inline Double_t AliAODxi::DecayVertexXiZ() const {return fDecayVertexXiZ;}
104
105inline Double_t AliAODxi::DecayLengthV0() const {
106 return ::sqrt(::pow(fDecayVertexV0X - fDecayVertexXiX,2) +
107 ::pow(fDecayVertexV0Y - fDecayVertexXiY,2) +
108 ::pow(fDecayVertexV0Z - fDecayVertexXiZ,2));
109}
110
111inline 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
121inline Double_t AliAODxi::DcaXiDaughters() const {return fDcaXiDaughters;}
122inline Double_t AliAODxi::DcaBachelorToPrimVertex() const {return fDcaBachelorToPrimVertex;}
123inline Double_t AliAODxi::DcaXiToPrimVertex() const {return fDcaXiToPrimVertex;}
124
125inline 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
141inline 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
147inline Double_t AliAODxi::MomBachelorX() const {return fMomBachelorX;}
148inline Double_t AliAODxi::MomBachelorY() const {return fMomBachelorY;}
149inline Double_t AliAODxi::MomBachelorZ() const {return fMomBachelorZ;}
150inline UInt_t AliAODxi::KeyBachelor() const {return fKeyBachelor;}
151inline Double_t AliAODxi::Chi2Xi() const {return fChi2Xi;}
152inline Double_t AliAODxi::MomXiX() const {return MomV0X()+fMomBachelorX;}
153inline Double_t AliAODxi::MomXiY() const {return MomV0Y()+fMomBachelorY;}
154inline Double_t AliAODxi::MomXiZ() const {return MomV0Z()+fMomBachelorZ;}
155
156inline Double_t AliAODxi::Ptot2Bachelor() const {
157 return (::pow(fMomBachelorX,2) + ::pow(fMomBachelorY,2) + ::pow(fMomBachelorZ,2) );
158}
159inline Double_t AliAODxi::Ptot2Xi() const {return ( Pt2Xi() + ::pow(MomXiZ(),2) );}
160inline Double_t AliAODxi::Pt2Xi() const {
161 return (::pow(MomXiX(),2) + ::pow(MomXiY(),2) );
162}
163
164inline 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
173inline 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
182inline 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
190inline Double_t AliAODxi::PtArmXi() const {
191 return ::sqrt(Ptot2V0()-MomBachelorAlongXi()*MomBachelorAlongXi());
192}
193
194inline Double_t AliAODxi::EBachelorPion() const {
195 return ::sqrt(Ptot2Bachelor()+MASS2("pi-"));
196}
197
198inline Double_t AliAODxi::EBachelorKaon() const {
199 return ::sqrt(Ptot2Bachelor()+MASS2("K-"));
200}
201
202inline Double_t AliAODxi::EXi() const {
203 return ::sqrt(Ptot2Xi()+MASS2("Xi-"));
204}
205
206inline Double_t AliAODxi::EOmega() const {
207 return ::sqrt(Ptot2Xi()+MASS2("Omega-"));
208}
209
210inline Double_t AliAODxi::MassXi() const {
211 return ::sqrt(::pow(ELambda()+EBachelorPion(),2)-Ptot2Xi());
212}
213
214inline Double_t AliAODxi::MassOmega() const {
215 return ::sqrt(::pow(ELambda()+EBachelorKaon(),2)-Ptot2Xi());
216}
217
218inline 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
224inline 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