re-activate contrib code
[u/mrichter/AliRoot.git] / TRD / AliTRDseedV1.h
index 2f15ce0..a8dd3b4 100644 (file)
@@ -91,8 +91,8 @@ public:
   void      CookLabels();
   Bool_t    CookPID();
   Bool_t    Fit(UChar_t opt=0); // OBSOLETE
-  Bool_t    FitRobust(AliTRDpadPlane *pp, Int_t opt=0);
-  Double_t  EstimatedCrossPoint(AliTRDpadPlane *pp);
+  Bool_t    FitRobust(AliTRDpadPlane *pp, TGeoHMatrix *mdet, Float_t bz, Int_t chg, Int_t opt=0);
+  Double_t  EstimatedCrossPoint(AliTRDpadPlane *pp, Float_t bz);
   Bool_t    Init(const AliTRDtrackV1 *track);
   void      Init(const AliRieman *fit);
   Bool_t    IsEqual(const TObject *inTracklet) const;
@@ -153,8 +153,11 @@ public:
   Float_t*  GetProbability(Bool_t force=kFALSE);
   Float_t   GetPt() const            { return fPt; }
   inline Double_t  GetPID(Int_t is=-1) const;
-  Float_t   GetS2Y() const           { return fS2Y;}
+  Float_t   GetS2Y() const           { return fCov[0];}
   Float_t   GetS2Z() const           { return fS2Z;}
+  Double_t  GetS2DYDX(Float_t) const { return fCov[2];}
+  inline Double_t  GetS2DZDX(Float_t) const;
+  inline Double_t  GetS2XcrossDZDX(Double_t absdzdx) const;
   Float_t   GetSigmaY() const        { return fS2Y > 0. ? TMath::Sqrt(fS2Y) : 0.2;}
   Float_t   GetSnp() const           { return fYref[1]/TMath::Sqrt(1+fYref[1]*fYref[1]);}
   Float_t   GetTgl() const           { return fZref[1]/TMath::Sqrt(1+fYref[1]*fYref[1]);}
@@ -163,6 +166,7 @@ public:
   UShort_t  GetVolumeId() const;
   Float_t   GetX0() const            { return fX0;}
   Float_t   GetX() const             { return fX0 - fX;}
+  Float_t   GetXcross() const        { return fS2Y;}
   Float_t   GetY() const             { return TMath::Abs(fY)<1.e-15?GetLocalY():fY;/*fYfit[0] - fYfit[1] * fX;*/}
   Double_t  GetYat(Double_t x) const { return fY/*fit[0]*/ - fYfit[1] * (fX0-x);}
   Float_t   GetYfit(Int_t id) const  { return fYfit[id];}
@@ -212,6 +216,8 @@ public:
 
 protected:
   void      Copy(TObject &ref) const;
+  void      UnbiasDZDX(Bool_t rc, Float_t bz);
+  Double_t  UnbiasY(Bool_t rc, Float_t bz);
 
 private:
   inline void SetN(Int_t n);
@@ -245,7 +251,7 @@ private:
   Float_t          fX;                      // local radial offset from anode wire where tracklet position is estimated
   Float_t          fY;                      // r-phi position of the tracklet  in TrackingCoordinates (alignment included)
   Float_t          fZ;                      // z position of the tracklet in TrackingCoordinates (alignment included)
-  Float_t          fS2Y;                    // estimated resolution in the r-phi direction 
+  Float_t          fS2Y;                    // estimated radial cross point (chmb. coord.) in case of RC tracklets 
   Float_t          fS2Z;                    // estimated resolution in the z direction 
   Float_t          fC[2];                   // Curvature for standalone [0] rieman [1] vertex constrained 
   Float_t          fChi2;                   // Global chi2  
@@ -296,6 +302,28 @@ inline Double_t AliTRDseedV1::GetPID(Int_t is) const
 }
 
 //____________________________________________________________
+Double_t AliTRDseedV1::GetS2XcrossDZDX(Double_t absdzdx) const
+{
+  // correct sigma(x_cross) for the width of the crossing area
+  if(absdzdx>0.05) return TMath::Exp(-1.58839-absdzdx*3.24116);
+  else return 0.957043-absdzdx*12.4597;
+}
+
+//____________________________________________________________
+Double_t AliTRDseedV1::GetS2DZDX(Float_t dzdx) const
+{
+  // Error parametrization for dzdx.
+  // TODO Should be layer dependent 
+  
+  Double_t p0[] = {0.02835, 0.03925},
+           p1[] = {0.04746, 0.06316};
+           
+  Double_t s2(p0[IsRowCross()]+p1[IsRowCross()]*dzdx*dzdx);
+  s2*=s2;
+  return s2;
+}
+
+  //____________________________________________________________
 inline AliTRDcluster* AliTRDseedV1::NextCluster()
 {
 // Mimic the usage of STL iterators.
@@ -412,4 +440,3 @@ inline void AliTRDseedV1::Swap(Double_t &d1, Double_t &d2) const
 
 
 
-