From: belikov Date: Tue, 29 Jan 2008 09:05:38 +0000 (+0000) Subject: Moving a part of AliESDtrack::RelateToVertex(const AliESDVertex *, ...) to AliExterna... X-Git-Url: http://git.uio.no/git/?p=u%2Fmrichter%2FAliRoot.git;a=commitdiff_plain;h=e99a34df0b064ddeb2b6895cf05b242ba512e69c Moving a part of AliESDtrack::RelateToVertex(const AliESDVertex *, ...) to AliExternalTrackParam::PropagateToDCA(const AliESDVertex *, ...). Needed for the TPC-only primary vertex reconstruction. --- diff --git a/STEER/AliESDtrack.cxx b/STEER/AliESDtrack.cxx index b048d0dc4ec..c0afc7741e6 100644 --- a/STEER/AliESDtrack.cxx +++ b/STEER/AliESDtrack.cxx @@ -1134,58 +1134,28 @@ Bool_t AliESDtrack::RelateToVertex if (!vtx) return kFALSE; - Double_t alpha=GetAlpha(); - Double_t sn=TMath::Sin(alpha), cs=TMath::Cos(alpha); - Double_t x=GetX(), y=GetParameter()[0], snp=GetParameter()[2]; - Double_t xv= vtx->GetXv()*cs + vtx->GetYv()*sn; - Double_t yv=-vtx->GetXv()*sn + vtx->GetYv()*cs, zv=vtx->GetZv(); - x-=xv; y-=yv; - - //Estimate the impact parameter neglecting the track curvature - Double_t d=TMath::Abs(x*snp - y*TMath::Sqrt(1.- snp*snp)); - if (d > maxd) return kFALSE; - - //Propagate to the DCA - Double_t crv=kB2C*b*GetParameter()[4]; - if (TMath::Abs(b) < kAlmost0Field) crv=0.; - - Double_t tgfv=-(crv*x - snp)/(crv*y + TMath::Sqrt(1.-snp*snp)); - sn=tgfv/TMath::Sqrt(1.+ tgfv*tgfv); - if (TMath::Abs(tgfv)>0.) cs = sn/tgfv; - else cs=1.; - - x = xv*cs + yv*sn; - yv=-xv*sn + yv*cs; xv=x; - - if (!Propagate(alpha+TMath::ASin(sn),xv,b)) return kFALSE; - - fD = GetParameter()[0] - yv; - fZ = GetParameter()[1] - zv; + Double_t dz[2],cov[3]; + if (!PropagateToDCA(vtx, b, maxd, dz, cov)) return kFALSE; + + fD = dz[0]; + fZ = dz[1]; + fCdd = cov[0]; + fCdz = cov[1]; + fCzz = cov[2]; - Double_t cov[6]; vtx->GetCovMatrix(cov); + Double_t covar[6]; vtx->GetCovMatrix(covar); + Double_t p[2]={GetParameter()[0]-dz[0],GetParameter()[1]-dz[1]}; + Double_t c[3]={covar[2],0.,covar[5]}; - //***** Improvements by A.Dainese - alpha=GetAlpha(); sn=TMath::Sin(alpha); cs=TMath::Cos(alpha); - Double_t s2ylocvtx = cov[0]*sn*sn + cov[2]*cs*cs - 2.*cov[1]*cs*sn; - fCdd = GetCovariance()[0] + s2ylocvtx; // neglecting correlations - fCdz = GetCovariance()[1]; // between (x,y) and z - fCzz = GetCovariance()[2] + cov[5]; // in vertex's covariance matrix - //***** + Double_t chi2=GetPredictedChi2(p,c); + if (chi2>77.) return kFALSE; - {//Try to constrain - Double_t p[2]={yv,zv}, c[3]={cov[2],0.,cov[5]}; - Double_t chi2=GetPredictedChi2(p,c); - - if (chi2>77.) return kFALSE; - - AliExternalTrackParam tmp(*this); - if (!tmp.Update(p,c)) return kFALSE; - - fCchi2=chi2; - if (!fCp) fCp=new AliExternalTrackParam(); - new (fCp) AliExternalTrackParam(tmp); - } + delete fCp; + fCp=new AliExternalTrackParam(*this); + if (!fCp->Update(p,c)) {delete fCp; fCp=0; return kFALSE;} + + fCchi2=chi2; return kTRUE; } diff --git a/STEER/AliExternalTrackParam.cxx b/STEER/AliExternalTrackParam.cxx index 350715c4ac6..10a24579c76 100644 --- a/STEER/AliExternalTrackParam.cxx +++ b/STEER/AliExternalTrackParam.cxx @@ -904,11 +904,10 @@ PropagateToDCA(AliExternalTrackParam *p, Double_t b) { } - - -Bool_t AliExternalTrackParam::PropagateToDCA(const AliESDVertex *vtx, Double_t b, Double_t maxd){ +Bool_t AliExternalTrackParam::PropagateToDCA(const AliESDVertex *vtx, +Double_t b, Double_t maxd, Double_t dz[2], Double_t covar[3]) { // - // Try to relate this track to the vertex "vtx", + // Propagate this track to the DCA to vertex "vtx", // if the (rough) transverse impact parameter is not bigger then "maxd". // Magnetic field is "b" (kG). // @@ -922,7 +921,7 @@ Bool_t AliExternalTrackParam::PropagateToDCA(const AliESDVertex *vtx, Double_t b Double_t sn=TMath::Sin(alpha), cs=TMath::Cos(alpha); Double_t x=GetX(), y=GetParameter()[0], snp=GetParameter()[2]; Double_t xv= vtx->GetXv()*cs + vtx->GetYv()*sn; - Double_t yv=-vtx->GetXv()*sn + vtx->GetYv()*cs; + Double_t yv=-vtx->GetXv()*sn + vtx->GetYv()*cs, zv=vtx->GetZv(); x-=xv; y-=yv; //Estimate the impact parameter neglecting the track curvature @@ -930,14 +929,34 @@ Bool_t AliExternalTrackParam::PropagateToDCA(const AliESDVertex *vtx, Double_t b if (d > maxd) return kFALSE; //Propagate to the DCA - Double_t crv=0.299792458e-3*b*GetParameter()[4]; + Double_t crv=kB2C*b*GetParameter()[4]; + if (TMath::Abs(b) < kAlmost0Field) crv=0.; + Double_t tgfv=-(crv*x - snp)/(crv*y + TMath::Sqrt(1.-snp*snp)); sn=tgfv/TMath::Sqrt(1.+ tgfv*tgfv); cs=TMath::Sqrt(1.- sn*sn); + if (TMath::Abs(tgfv)>0.) cs = sn/tgfv; + else cs=1.; x = xv*cs + yv*sn; yv=-xv*sn + yv*cs; xv=x; if (!Propagate(alpha+TMath::ASin(sn),xv,b)) return kFALSE; + + if (dz==0) return kTRUE; + dz[0] = GetParameter()[0] - yv; + dz[1] = GetParameter()[1] - zv; + + if (covar==0) return kTRUE; + Double_t cov[6]; vtx->GetCovMatrix(cov); + + //***** Improvements by A.Dainese + alpha=GetAlpha(); sn=TMath::Sin(alpha); cs=TMath::Cos(alpha); + Double_t s2ylocvtx = cov[0]*sn*sn + cov[2]*cs*cs - 2.*cov[1]*cs*sn; + covar[0] = GetCovariance()[0] + s2ylocvtx; // neglecting correlations + covar[1] = GetCovariance()[1]; // between (x,y) and z + covar[2] = GetCovariance()[2] + cov[5]; // in vertex's covariance matrix + //***** + return kTRUE; } diff --git a/STEER/AliExternalTrackParam.h b/STEER/AliExternalTrackParam.h index 1509c776616..71d0d24f583 100644 --- a/STEER/AliExternalTrackParam.h +++ b/STEER/AliExternalTrackParam.h @@ -133,8 +133,9 @@ class AliExternalTrackParam: public AliVParticle { Double_t GetDCA(const AliExternalTrackParam *p, Double_t b, Double_t &xthis,Double_t &xp) const; Double_t PropagateToDCA(AliExternalTrackParam *p, Double_t b); - Bool_t PropagateToDCA(const AliESDVertex *vtx, Double_t b, Double_t maxd); - + Bool_t PropagateToDCA(const AliESDVertex *vtx, Double_t b, Double_t maxd, + Double_t dz[2]=0, Double_t cov[3]=0); + void GetDirection(Double_t d[3]) const; Bool_t GetPxPyPz(Double_t *p) const; Bool_t GetXYZ(Double_t *p) const;