CheckCovariance();
}
+//_____________________________________________________________________________
+void AliExternalTrackParam::CopyFromVTrack(const AliVTrack *vTrack)
+{
+ //
+ // Recreate TrackParams from VTrack
+ // This is not a copy contructor !
+ //
+ if (!vTrack) {
+ AliError("Source VTrack is NULL");
+ return;
+ }
+ if (this==vTrack) {
+ AliError("Copy of itself is requested");
+ return;
+ }
+ //
+ if (vTrack->InheritsFrom(AliExternalTrackParam::Class())) {
+ AliDebug(1,"Source itself is AliExternalTrackParam, using assignment operator");
+ *this = *(AliExternalTrackParam*)vTrack;
+ return;
+ }
+ //
+ AliVTrack::operator=( *vTrack );
+ //
+ Double_t xyz[3],pxpypz[3],cv[21];
+ vTrack->GetXYZ(xyz);
+ pxpypz[0]=vTrack->Px();
+ pxpypz[1]=vTrack->Py();
+ pxpypz[2]=vTrack->Pz();
+ vTrack->GetCovarianceXYZPxPyPz(cv);
+ Short_t sign = (Short_t)vTrack->Charge();
+ Set(xyz,pxpypz,cv,sign);
+}
+
//_____________________________________________________________________________
AliExternalTrackParam::AliExternalTrackParam(const AliVTrack *vTrack) :
AliVTrack(),
Double_t ca=TMath::Cos(alpha-fAlpha), sa=TMath::Sin(alpha-fAlpha);
Double_t sf=fP2, cf=TMath::Sqrt((1.- fP2)*(1.+fP2)); // Improve precision
+ // RS: check if rotation does no invalidate track model (cos(local_phi)>=0, i.e. particle
+ // direction in local frame is along the X axis
+ if ((cf*ca+sf*sa)<0) {
+ AliDebug(1,Form("Rotation failed: local cos(phi) would become %.2f",cf*ca+sf*sa));
+ return kFALSE;
+ }
+ //
Double_t tmp=sf*ca - cf*sa;
if (TMath::Abs(tmp) >= kAlmost1) {
if (TMath::Abs(tmp) > 1.+ Double_t(FLT_EPSILON))
Double_t point[3];
GetXYZAt(r,magF,point);
pol->SetPoint(counter,point[0],point[1], point[2]);
- printf("xyz\t%f\t%f\t%f\n",point[0], point[1],point[2]);
+ // printf("xyz\t%f\t%f\t%f\n",point[0], point[1],point[2]);
counter++;
}
}
// eig.Print();
// }
}
+
+Bool_t AliExternalTrackParam::ConstrainToVertex(const AliVVertex* vtx, Double_t b[3])
+{
+ // Constrain TPC inner params constrained
+ //
+ if (!vtx)
+ return kFALSE;
+
+ Double_t dz[2], cov[3];
+ if (!PropagateToDCABxByBz(vtx, b, 3, dz, cov))
+ return kFALSE;
+
+ Double_t covar[6];
+ vtx->GetCovarianceMatrix(covar);
+
+ Double_t p[2]= { fP[0] - dz[0], fP[1] - dz[1] };
+ Double_t c[3]= { covar[2], 0., covar[5] };
+
+ Double_t chi2C = GetPredictedChi2(p,c);
+ if (chi2C>kVeryBig)
+ return kFALSE;
+
+ if (!Update(p,c))
+ return kFALSE;
+
+ return kTRUE;
+}