added track covariance matrix (yz plane) to the tracklet
authorabercuci <abercuci@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 4 Dec 2008 11:07:46 +0000 (11:07 +0000)
committerabercuci <abercuci@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 4 Dec 2008 11:07:46 +0000 (11:07 +0000)
changed signature of the stand alone track fitting functions

TRD/AliTRDseedV1.cxx
TRD/AliTRDseedV1.h
TRD/AliTRDtrackerV1.cxx
TRD/AliTRDtrackerV1.h
TRD/qaRec/AliTRDtrackingResolution.cxx

index c51bb48..9e96a39 100644 (file)
@@ -58,6 +58,7 @@ AliTRDseedV1::AliTRDseedV1(Int_t det)
   ,fSnp(0.)
   ,fTgl(0.)
   ,fdX(0.)
+  ,fXref(0.)
 {
   //
   // Constructor
@@ -66,6 +67,7 @@ AliTRDseedV1::AliTRDseedV1(Int_t det)
 
   for(int islice=0; islice < knSlices; islice++) fdEdx[islice] = 0.;
   for(int ispec=0; ispec<AliPID::kSPECIES; ispec++) fProb[ispec]  = -1.;
+  fRefCov[0] = 1.; fRefCov[1] = 0.; fRefCov[2] = 1.;
 }
 
 //____________________________________________________________________
@@ -79,6 +81,7 @@ AliTRDseedV1::AliTRDseedV1(const AliTRDseedV1 &ref)
   ,fSnp(ref.fSnp)
   ,fTgl(ref.fTgl)
   ,fdX(ref.fdX)
+  ,fXref(ref.fXref)
 {
   //
   // Copy Constructor performing a deep copy
@@ -88,6 +91,7 @@ AliTRDseedV1::AliTRDseedV1(const AliTRDseedV1 &ref)
   SetBit(kOwner, kFALSE);
   for(int islice=0; islice < knSlices; islice++) fdEdx[islice] = ref.fdEdx[islice];
   for(int ispec=0; ispec<AliPID::kSPECIES; ispec++) fProb[ispec] = ref.fProb[ispec];
+  memcpy(fRefCov, ref.fRefCov, 3*sizeof(Double_t));
 }
 
 
@@ -142,10 +146,12 @@ void AliTRDseedV1::Copy(TObject &ref) const
   target.fSnp           = fSnp;
   target.fTgl           = fTgl;
   target.fdX            = fdX;
+  target.fXref          = fXref;
   target.fReconstructor = fReconstructor;
   
   for(int islice=0; islice < knSlices; islice++) target.fdEdx[islice] = fdEdx[islice];
   for(int ispec=0; ispec<AliPID::kSPECIES; ispec++) target.fProb[ispec] = fProb[ispec];
+  memcpy(target.fRefCov, fRefCov, 3*sizeof(Double_t));
   
   AliTRDseed::Copy(target);
 }
@@ -174,6 +180,11 @@ Bool_t AliTRDseedV1::Init(AliTRDtrackV1 *track)
   fYref[1] = track->GetSnp()/(1. - track->GetSnp()*track->GetSnp());
   fZref[0] = z;
   fZref[1] = track->GetTgl();
+  
+  const Double_t *cov = track->GetCovariance();
+  fRefCov[0] = cov[0]; // Var(y)
+  fRefCov[1] = cov[1]; // Cov(yz)
+  fRefCov[2] = cov[5]; // Var(z)
 
   //printf("Tracklet ref x[%7.3f] y[%7.3f] z[%7.3f], snp[%f] tgl[%f]\n", fX0, fYref[0], fZref[0], track->GetSnp(), track->GetTgl());
   return kTRUE;
index aafc487..bfbac18 100644 (file)
@@ -72,6 +72,7 @@ class AliTRDseedV1 : public AliTRDseed
   inline Float_t   GetChi2Z(const Float_t z = 999.) const;
   inline Float_t   GetChi2Y(const Float_t y = 999.) const;
   void      GetCovAt(Double_t x, Double_t *cov) const;
+  void      GetCovRef(const Double_t *cov) const { cov = &fRefCov[0];}
   Double_t* GetCrossXYZ()            { return &fCross[0];}
   Double_t  GetCrossSz2() const      { return fCross[3];}
   Float_t   GetdX() const            { return fdX;}
@@ -86,6 +87,7 @@ class AliTRDseedV1 : public AliTRDseed
   Double_t* GetProbability();
   Double_t  GetSnp() const           { return fSnp;}
   Double_t  GetTgl() const           { return fTgl;}
+  Float_t   GetXref() const          { return fXref;}
   Double_t  GetYat(Double_t x) const { return fYfit[0] + fYfit[1] * (x-fX0);}
   Double_t  GetZat(Double_t x) const { return fZfit[0] + fZfit[1] * (x-fX0);}
   
@@ -114,11 +116,13 @@ private:
   Float_t          fSnp;                    // sin of track with respect to x direction in XY plane    
   Float_t          fTgl;                    // tg of track with respect to x direction in XZ plane     
   Float_t          fdX;                     // length of time bin
-  Float_t          fdEdx[knSlices];         //  dE/dx measurements for tracklet
-  Double_t         fCross[4];            // spatial parameters of the pad row crossing
+  Float_t          fXref;                   // average radial position of clusters
+  Float_t          fdEdx[knSlices];         // dE/dx measurements for tracklet
+  Double_t         fCross[4];               // spatial parameters of the pad row crossing
+  Double_t         fRefCov[3];              // covariance matrix of the track in the yz plane
   Double_t         fProb[AliPID::kSPECIES]; //  PID probabilities
 
-  ClassDef(AliTRDseedV1, 2)                 //  New TRD seed 
+  ClassDef(AliTRDseedV1, 3)                 //  New TRD seed 
 
 };
 
index 0ba6803..5903d48 100644 (file)
@@ -1083,7 +1083,7 @@ Float_t AliTRDtrackerV1::FitTiltedRieman(AliTRDseedV1 *tracklets, Bool_t sigErro
 
 
 //____________________________________________________________________
-Double_t AliTRDtrackerV1::FitLine(AliTRDtrackV1 *track, AliTRDseedV1 *tracklets, Bool_t err, Int_t np, AliTrackPoint *points)
+Double_t AliTRDtrackerV1::FitLine(const AliTRDtrackV1 *track, AliTRDseedV1 *tracklets, Bool_t err, Int_t np, AliTrackPoint *points)
 {
   AliTRDLeastSquare yfitter, zfitter;
   AliTRDcluster *cl = 0x0;
@@ -1151,7 +1151,7 @@ Double_t AliTRDtrackerV1::FitLine(AliTRDtrackV1 *track, AliTRDseedV1 *tracklets,
 
 
 //_________________________________________________________________________
-Double_t AliTRDtrackerV1::FitRiemanTilt(AliTRDtrackV1 *track, AliTRDseedV1 *tracklets, Bool_t sigError, Int_t np, AliTrackPoint *points)
+Double_t AliTRDtrackerV1::FitRiemanTilt(const AliTRDtrackV1 *track, AliTRDseedV1 *tracklets, Bool_t sigError, Int_t np, AliTrackPoint *points)
 {
   //
   // Performs a Riemann fit taking tilting pad correction into account
index 3053db2..8d4f4c4 100644 (file)
@@ -88,8 +88,8 @@ public:
   static Float_t  FitTiltedRiemanConstraint(AliTRDseedV1 *tracklets, Double_t zVertex);
   static Float_t  FitTiltedRieman(AliTRDseedV1 *tracklets, Bool_t sigError);
   
-       static Double_t FitRiemanTilt(AliTRDtrackV1 *trk, AliTRDseedV1 *tracklets = 0x0, Bool_t err=0, Int_t np = 0, AliTrackPoint *points = 0x0);
-       static Double_t FitLine(AliTRDtrackV1 *trk, AliTRDseedV1 *tracklets = 0x0, Bool_t err=0, Int_t np = 0, AliTrackPoint *points = 0x0);
+       static Double_t FitRiemanTilt(const AliTRDtrackV1 *trk, AliTRDseedV1 *tracklets = 0x0, Bool_t err=0, Int_t np = 0, AliTrackPoint *points = 0x0);
+       static Double_t FitLine(const AliTRDtrackV1 *trk, AliTRDseedV1 *tracklets = 0x0, Bool_t err=0, Int_t np = 0, AliTrackPoint *points = 0x0);
        static Double_t FitKalman(AliTRDtrackV1 *trk, AliTRDseedV1 *tracklets = 0x0, Bool_t up=0, Int_t np = 0, AliTrackPoint *points = 0x0);
 
   Bool_t          IsClustersOwner() const {return TestBit(kOwner);}
index eedcf65..296f234 100644 (file)
@@ -247,6 +247,10 @@ TH1* AliTRDtrackingResolution::PlotTrackletResiduals(const AliTRDtrackV1 *track)
     return 0x0;
   }
 
+  // refit the track 
+  AliTRDtrackerV1::FitRiemanTilt(fTrack, 0x0, kTRUE);
+  //AliTRDtrackerV1::FitLine(fTrack);
+
   Float_t  dydx, dzdx, yref, zref, yfit, zfit, x0, xmean;
   AliTRDseedV1 *fTracklet = 0x0;  
   for(Int_t ily=0; ily<AliTRDgeometry::kNlayer; ily++){
@@ -310,6 +314,10 @@ TH1* AliTRDtrackingResolution::PlotTrackletPhiResiduals(const AliTRDtrackV1 *tra
     return 0x0;
   }
 
+  // refit the track 
+  AliTRDtrackerV1::FitRiemanTilt(fTrack, 0x0, kTRUE);
+  //AliTRDtrackerV1::FitLine(fTrack);
+
   Float_t  dydx_ref, dydx_fit;
   AliTRDseedV1 *fTracklet = 0x0;  
   for(Int_t ily=0; ily<AliTRDgeometry::kNlayer; ily++){