]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/STEERBase/AliExternalTrackParam.cxx
Moved in-reco analysis call before event reset; clean delete of fAnalysis
[u/mrichter/AliRoot.git] / STEER / STEERBase / AliExternalTrackParam.cxx
index dccebd787bc11c51e1945b6c1a3362a19d7f6feb..d69137b56fdf035ee8fdfb33aa6f767225a0fbba 100644 (file)
@@ -104,6 +104,40 @@ AliExternalTrackParam::AliExternalTrackParam(Double_t x, Double_t alpha,
   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(),
@@ -658,6 +692,13 @@ Bool_t AliExternalTrackParam::Rotate(Double_t alpha) {
   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))  
@@ -1819,7 +1860,7 @@ void AliExternalTrackParam::FillPolymarker(TPolyMarker3D *pol, Float_t magF, Flo
     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++;
   }
 }
@@ -2207,3 +2248,30 @@ void AliExternalTrackParam::CheckCovariance() {
 //       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;
+}