#include <Riostream.h>
#include <TMath.h>
+#include <TDatabasePDG.h>
#include <TPDGCode.h>
+#include <TParticlePDG.h>
#include "AliLog.h"
#include "AliESDv0.h"
+#include "AliExternalTrackParam.h"
ClassImp(AliESDv0)
-AliESDv0::AliESDv0() : TObject() {
+AliESDv0::AliESDv0() :
+ TObject(),
+ fPdgCode(kK0Short),
+ fEffMass(TDatabasePDG::Instance()->GetParticle(kK0Short)->Mass()),
+ fDcaDaughters(0),
+ fChi2(1.e+33),
+ fNidx(0),
+ fPidx(0)
+{
//--------------------------------------------------------------------
// Default constructor (K0s)
//--------------------------------------------------------------------
- fPdgCode=kK0Short;
- fEffMass=0.497672;
- fChi2=1.e+33;
- fPos[0]=fPos[1]=fPos[2]=0.;
- fPosCov[0]=fPosCov[1]=fPosCov[2]=fPosCov[3]=fPosCov[4]=fPosCov[5]=0.;
+
+ for (Int_t i=0; i<3; i++) {
+ fPos[i] = 0.;
+ fNmom[i] = 0.;
+ fPmom[i] = 0.;
+ }
+
+ for (Int_t i=0; i<6; i++) {
+ fPosCov[i]= 0.;
+ fNmomCov[i] = 0.;
+ fPmomCov[i] = 0.;
+ }
+}
+
+AliESDv0::AliESDv0(const AliExternalTrackParam &t1, Int_t i1,
+ const AliExternalTrackParam &t2, Int_t i2) :
+ TObject(),
+ fPdgCode(kK0Short),
+ fEffMass(TDatabasePDG::Instance()->GetParticle(kK0Short)->Mass()),
+ fDcaDaughters(0),
+ fChi2(1.e+33),
+ fNidx(i1),
+ fPidx(i2)
+{
+ //--------------------------------------------------------------------
+ // Main constructor (K0s)
+ //--------------------------------------------------------------------
+
+ for (Int_t i=0; i<6; i++) {
+ fPosCov[i]= 0.;
+ fNmomCov[i] = 0.;
+ fPmomCov[i] = 0.;
+ }
+
+ //Trivial estimation of the vertex parameters
+ Double_t x=t1.GetX(), alpha=t1.GetAlpha();
+ const Double_t *par=t1.GetParameter();
+ Double_t pt=1./TMath::Abs(par[4]),
+ phi=TMath::ASin(par[2]) + alpha,
+ cs=TMath::Cos(alpha), sn=TMath::Sin(alpha);
+
+ Double_t px1=pt*TMath::Cos(phi), py1=pt*TMath::Sin(phi), pz1=pt*par[3];
+ Double_t x1=x*cs - par[0]*sn;
+ Double_t y1=x*sn + par[0]*cs;
+ Double_t z1=par[1];
+ Double_t sx1=sn*sn*t1.GetSigmaY2(), sy1=cs*cs*t1.GetSigmaY2();
+
+
+
+ x=t2.GetX(); alpha=t2.GetAlpha(); par=t2.GetParameter();
+ pt=1./TMath::Abs(par[4]);
+ phi=TMath::ASin(par[2]) + alpha;
+ cs=TMath::Cos(alpha); sn=TMath::Sin(alpha);
+
+ Double_t px2=pt*TMath::Cos(phi), py2=pt*TMath::Sin(phi), pz2=pt*par[3];
+ Double_t x2=x*cs - par[0]*sn;
+ Double_t y2=x*sn + par[0]*cs;
+ Double_t z2=par[1];
+ Double_t sx2=sn*sn*t2.GetSigmaY2(), sy2=cs*cs*t2.GetSigmaY2();
+
+ Double_t sz1=t1.GetSigmaZ2(), sz2=t2.GetSigmaZ2();
+ Double_t wx1=sx2/(sx1+sx2), wx2=1.- wx1;
+ Double_t wy1=sy2/(sy1+sy2), wy2=1.- wy1;
+ Double_t wz1=sz2/(sz1+sz2), wz2=1.- wz1;
+ fPos[0]=wx1*x1 + wx2*x2; fPos[1]=wy1*y1 + wy2*y2; fPos[2]=wz1*z1 + wz2*z2;
+
+ //fPos[0]=0.5*(x1+x2); fPos[1]=0.5*(y1+y2); fPos[2]=0.5*(z1+z2);
+ fNmom[0]=px1; fNmom[1]=py1; fNmom[2]=pz1;
+ fPmom[0]=px2; fPmom[1]=py2; fPmom[2]=pz2;
+
+ Double_t e1=TMath::Sqrt(0.13957*0.13957 + px1*px1 + py1*py1 + pz1*pz1);
+ Double_t e2=TMath::Sqrt(0.13957*0.13957 + px2*px2 + py2*py2 + pz2*pz2);
+ fEffMass=TMath::Sqrt((e1+e2)*(e1+e2)-
+ (px1+px2)*(px1+px2)-(py1+py2)*(py1+py2)-(pz1+pz2)*(pz1+pz2));
+
+ fChi2=7.;
+
}
Double_t AliESDv0::ChangeMassHypothesis(Int_t code) {