Line data Source code
1 : #ifndef ALIESDV0_H
2 : #define ALIESDV0_H
3 :
4 : /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5 : * See cxx source for full Copyright notice */
6 :
7 : /* $Id$ */
8 :
9 : //-------------------------------------------------------------------------
10 : // ESD V0 Vertex Class
11 : // This class is part of the Event Summary Data set of classes
12 : // Origin: Iouri Belikov, CERN, Jouri.Belikov@cern.ch
13 : // Modified by: Marian Ivanov, CERN, Marian.Ivanov@cern.ch
14 : // and Boris Hippolyte,IPHC, hippolyt@in2p3.fr
15 : //-------------------------------------------------------------------------
16 :
17 : #include <TPDGCode.h>
18 :
19 : #include "AliExternalTrackParam.h"
20 : #include "AliVParticle.h"
21 :
22 : class AliESDV0Params;
23 :
24 : class AliESDv0 : public AliVParticle {
25 : public:
26 : AliESDv0();
27 : AliESDv0(const AliExternalTrackParam &t1, Int_t i1,
28 : const AliExternalTrackParam &t2, Int_t i2);
29 :
30 : AliESDv0(const AliESDv0& v0);
31 : virtual ~AliESDv0();
32 : AliESDv0& operator=(const AliESDv0& v0);
33 : virtual void Copy(TObject &obj) const;
34 :
35 : // Start with AliVParticle functions
36 1320 : virtual Double_t Px() const { return fNmom[0]+fPmom[0]; }
37 1320 : virtual Double_t Py() const { return fNmom[1]+fPmom[1]; }
38 1320 : virtual Double_t Pz() const { return fNmom[2]+fPmom[2]; }
39 0 : virtual Double_t Pt() const { return TMath::Sqrt(Px()*Px()+Py()*Py()); }
40 : virtual Double_t P() const {
41 660 : return TMath::Sqrt(Px()*Px()+Py()*Py()+Pz()*Pz());
42 : }
43 0 : virtual Bool_t PxPyPz(Double_t p[3]) const { p[0] = Px(); p[1] = Py(); p[2] = Pz(); return kTRUE; }
44 124 : virtual Double_t Xv() const { return fPos[0]; }
45 124 : virtual Double_t Yv() const { return fPos[1]; }
46 0 : virtual Double_t Zv() const { return fPos[2]; }
47 0 : virtual Bool_t XvYvZv(Double_t x[3]) const { x[0] = Xv(); x[1] = Yv(); x[2] = Zv(); return kTRUE; }
48 0 : virtual Double_t OneOverPt() const { return (Pt() != 0.) ? 1./Pt() : -999.; }
49 0 : virtual Double_t Phi() const {return TMath::Pi()+TMath::ATan2(-Py(),-Px()); }
50 0 : virtual Double_t Theta() const {return 0.5*TMath::Pi()-TMath::ATan(Pz()/(Pt()+1.e-13)); }
51 : virtual Double_t E() const; // default is KOs but can be changed via ChangeMassHypothesis (defined in the .cxx)
52 0 : virtual Double_t M() const { return GetEffMass(); }
53 0 : virtual Double_t Eta() const { return 0.5*TMath::Log((P()+Pz())/(P()-Pz()+1.e-13)); }
54 : virtual Double_t Y() const;
55 0 : virtual Short_t Charge() const { return 0; }
56 0 : virtual Int_t GetLabel() const { return -1; } // temporary
57 0 : virtual const Double_t *PID() const { return 0; } // return PID object ? (to be discussed!)
58 :
59 : // Then extend the AliVParticle functions
60 : Double_t E(Int_t pdg) const;
61 : Double_t Y(Int_t pdg) const;
62 :
63 : // Now the functions for analysis consistency
64 : Double_t RapK0Short() const;
65 : Double_t RapLambda() const;
66 : Double_t AlphaV0() const;
67 : Double_t PtArmV0() const;
68 :
69 : // Eventually the older functions
70 : Double_t ChangeMassHypothesis(Int_t code=kK0Short);
71 :
72 0 : Int_t GetPdgCode() const {return fPdgCode;}
73 : Double_t GetEffMass(UInt_t p1, UInt_t p2) const;
74 : Double_t GetEffMassExplicit(Double_t m1, Double_t m2) const;
75 56 : Double_t GetEffMass() const {return fEffMass;}
76 132 : Double_t GetChi2V0() const {return fChi2V0;}
77 : void GetPxPyPz(Double_t &px, Double_t &py, Double_t &pz) const;
78 : void GetNPxPyPz(Double_t &px, Double_t &py, Double_t &pz) const;
79 : void GetPPxPyPz(Double_t &px, Double_t &py, Double_t &pz) const;
80 : void GetXYZ(Double_t &x, Double_t &y, Double_t &z) const;
81 : Float_t GetD(Double_t x0,Double_t y0) const;
82 : Float_t GetD(Double_t x0,Double_t y0,Double_t z0) const;
83 116 : Int_t GetNindex() const {return fNidx;}
84 116 : Int_t GetPindex() const {return fPidx;}
85 : void SetDcaV0Daughters(Double_t rDcaV0Daughters=0.);
86 444 : Double_t GetDcaV0Daughters() const {return fDcaV0Daughters;}
87 : Float_t GetV0CosineOfPointingAngle(Double_t refPointX, Double_t refPointY, Double_t refPointZ) const;
88 984 : Double_t GetV0CosineOfPointingAngle() const {return fPointAngle;}
89 28 : void SetV0CosineOfPointingAngle(Double_t cpa) {fPointAngle=cpa;}
90 14 : void SetOnFlyStatus(Bool_t status){fOnFlyStatus=status;}
91 140 : Bool_t GetOnFlyStatus() const {return fOnFlyStatus;}
92 140 : const AliExternalTrackParam *GetParamP() const {return &fParamP;}
93 140 : const AliExternalTrackParam *GetParamN() const {return &fParamN;}
94 : AliESDVertex GetVertex() const;
95 :
96 :
97 : // **** The following member functions need to be revised ***
98 :
99 : void GetPosCov(Double_t cov[6])const ; // getter for the covariance matrix of the V0 position
100 : Double_t GetSigmaY(); // sigma of y coordinate at vertex posistion
101 : Double_t GetSigmaZ(); // sigma of z coordinate at vertex posistion
102 : Double_t GetSigmaAP0(); // calculate sigma of Point angle resolution at vertex pos.
103 : Double_t GetSigmaD0(); // calculate sigma of position resolution at vertex pos.
104 : Double_t GetEffectiveSigmaAP0(); // calculate sigma of point angle resolution at vertex pos. effecive parameterization
105 : Double_t GetEffectiveSigmaD0(); // calculate sigma of position resolution at vertex pos.
106 : Double_t GetMinimaxSigmaAP0(); // calculate mini-max sigma of point angle resolution
107 : Double_t GetMinimaxSigmaD0(); // calculate mini-max sigma of dca resolution
108 : Double_t GetLikelihoodAP(Int_t mode0, Int_t mode1); // get likelihood for point angle
109 : Double_t GetLikelihoodD(Int_t mode0, Int_t mode1); // get likelihood for DCA
110 : Double_t GetLikelihoodC(Int_t mode0, Int_t mode1) const; // get likelihood for Causality
111 : //
112 : //
113 0 : static const AliESDV0Params & GetParameterization(){return fgkParams;}
114 732 : void SetParamP(const AliExternalTrackParam & paramP) {fParamP = paramP;}
115 732 : void SetParamN(const AliExternalTrackParam & paramN) {fParamN = paramN;}
116 48 : void SetStatus(Int_t status){fStatus=status;}
117 0 : Int_t GetStatus() const {return Int_t(fStatus);}
118 160 : Int_t GetIndex(Int_t i) const {return (i==0) ? fNidx : fPidx;}
119 : void SetIndex(Int_t i, Int_t ind);
120 28 : const Double_t *GetAnglep() const {return fAngle;}
121 572 : Double_t GetRr() const {return fRr;}
122 28 : Double_t GetDistSigma() const {return fDistSigma;}
123 28 : void SetDistSigma(Double_t ds) {fDistSigma=ds;}
124 0 : Float_t GetChi2Before() const {return fChi2Before;}
125 28 : void SetChi2Before(Float_t cb) {fChi2Before=cb;}
126 0 : Float_t GetChi2After() const {return fChi2After;}
127 28 : void SetChi2After(Float_t ca) {fChi2After=ca;}
128 0 : Float_t GetNAfter() const {return fNAfter;}
129 28 : void SetNAfter(Short_t na) {fNAfter=na;}
130 0 : Short_t GetNBefore() const {return fNBefore;}
131 28 : void SetNBefore(Short_t nb) {fNBefore=nb;}
132 : void SetCausality(Float_t pb0, Float_t pb1, Float_t pa0, Float_t pa1);
133 112 : const Double_t * GetCausalityP() const {return fCausality;}
134 : void SetClusters(const Int_t *clp, const Int_t *clm);
135 16 : const Int_t * GetClusters(Int_t i) const {return fClusters[i];}
136 28 : void SetNormDCAPrim(Float_t nd0, Float_t nd1){fNormDCAPrim[0] = nd0; fNormDCAPrim[1]=nd1;}
137 0 : const Double_t *GetNormDCAPrimP() const {return fNormDCAPrim;}
138 : // Dummy
139 0 : Int_t PdgCode() const {return 0;}
140 :
141 : //virtual Bool_t GetPxPyPz(Double_t */*p*/) const { return kFALSE; }
142 0 : virtual void SetID(Short_t /*id*/) {;}
143 : Double_t GetKFInfo(UInt_t p1, UInt_t p2, Int_t type) const;
144 : Double_t GetKFInfoScale(UInt_t p1, UInt_t p2, Int_t type, Double_t d1pt, Double_t s1pt) const;
145 : //
146 : protected:
147 : AliExternalTrackParam fParamN; // external parameters of negative particle
148 : AliExternalTrackParam fParamP; // external parameters of positive particle
149 :
150 : // CKBrev: tkink about revision
151 :
152 : Double32_t fEffMass; // reconstructed V0's effective mass
153 : Double32_t fDcaV0Daughters; // dca between V0's daughters
154 : Double32_t fChi2V0; // V0's chi2 value
155 : Double32_t fPos[3]; // V0's position (global)
156 : Double32_t fPosCov[6]; // covariance matrix of the vertex position
157 : Double32_t fNmom[3]; // momentum of the negative daughter (global)
158 : Double32_t fPmom[3]; // momentum of the positive daughter (global)
159 : Double32_t fNormDCAPrim[2]; // normalize distance to the primary vertex CKBrev
160 : Double32_t fRr; //rec position of the vertex CKBrev
161 : Double32_t fDistSigma; //sigma of distance CKBrev
162 : Double32_t fChi2Before; //chi2 of the tracks before V0 CKBrev
163 : Double32_t fChi2After; // chi2 of the tracks after V0 CKBrev
164 :
165 :
166 : Double32_t fCausality[4]; //[0,1,8] causality information - see comments in SetCausality CKBrev
167 : Double32_t fAngle[3]; //[-2*pi,2*pi,16]three angles CKBrev
168 : Double32_t fPointAngleFi; //[-1,1,16]point angle fi CKBrev
169 : Double32_t fPointAngleTh; //[-1,1,16]point angle theta CKBrev
170 : Double32_t fPointAngle; //[-1,1,32] cosine of the pointing angle
171 :
172 :
173 : Int_t fPdgCode; // reconstructed V0's type (PDG code)
174 : Int_t fClusters[2][6]; //! its clusters CKBrev
175 : Int_t fNidx; // index of the negative daughter
176 : Int_t fPidx; // index of the positive daughter
177 :
178 :
179 :
180 : Short_t fStatus; //status CKBrev
181 : Short_t fNBefore; // number of possible points before V0 CKBrev
182 : Short_t fNAfter; // number of possible points after V0 CKBrev
183 :
184 : Bool_t fOnFlyStatus; // if kTRUE, then this V0 is recontructed
185 : // "on fly" during the tracking
186 :
187 : //
188 : // parameterization coefficients
189 : static const AliESDV0Params fgkParams; //! resolution and likelihood parameterization
190 :
191 : private:
192 :
193 188 : ClassDef(AliESDv0,6) // ESD V0 vertex
194 : };
195 :
196 : inline
197 : void AliESDv0::GetNPxPyPz(Double_t &px, Double_t &py, Double_t &pz) const {
198 32 : px=fNmom[0]; py=fNmom[1]; pz=fNmom[2];
199 16 : }
200 :
201 : inline
202 : void AliESDv0::GetPPxPyPz(Double_t &px, Double_t &py, Double_t &pz) const {
203 32 : px=fPmom[0]; py=fPmom[1]; pz=fPmom[2];
204 16 : }
205 :
206 : inline
207 : void AliESDv0::SetDcaV0Daughters(Double_t rDcaV0Daughters){
208 28 : fDcaV0Daughters=rDcaV0Daughters;
209 14 : }
210 :
211 : inline
212 : void AliESDv0::SetIndex(Int_t i, Int_t ind) {
213 152 : if(i==0)
214 38 : fNidx=ind;
215 : else
216 38 : fPidx=ind;
217 76 : }
218 :
219 : #endif
|