Fix for #87488 Commit + port request. New methods in AliStrLine
authorhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 10 Oct 2011 15:43:50 +0000 (15:43 +0000)
committerhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 10 Oct 2011 15:43:50 +0000 (15:43 +0000)
STEER/ESD/AliStrLine.cxx
STEER/ESD/AliStrLine.h

index 099df02..3e08814 100644 (file)
@@ -372,3 +372,33 @@ Double_t AliStrLine::GetDistFromPoint(const Double_t *point) const
   AliStrLine tmpline(point, fCd, kFALSE);
   return GetDCA(&tmpline);
 }
+
+//________________________________________________________
+Bool_t AliStrLine::GetParamAtRadius(Double_t r,Double_t &t1,Double_t &t2) const
+{
+  // Input: radial distance from the origin (x=0, x=0) in the bending plane
+  // Returns a boolean: kTRUE if the line crosses the cylinder of radius r
+  // and axis coincident with the z axis. It returns kFALSE otherwise
+  // Output: t1 and t2 in ascending order. The parameters of the line at 
+  // the two intersections with the cylinder
+  Double_t p1= fCd[0]*fP0[0]+fCd[1]*fP0[1];
+  Double_t p2=fCd[0]*fCd[0]+fCd[1]*fCd[1];
+  Double_t delta=p1*p1-p2*(fP0[0]*fP0[0]+fP0[1]*fP0[1]-r*r);
+  if(delta<0.){
+    t1=-1000.;
+    t2=t1;
+    return kFALSE;
+  }
+  delta=TMath::Sqrt(delta);
+  t1=(-p1-delta)/p2;
+  t2=(-p1+delta)/p2;
+
+  if(t2<t1){
+    // use delta as a temporary buffer
+    delta=t1;
+    t1=t2;
+    t2=delta;
+  }
+  if(TMath::AreEqualAbs(t1,t2,1.e-9))t1=t2;
+  return kTRUE;
+}
index 38110ff..0b593cb 100644 (file)
@@ -50,6 +50,9 @@ public:
     Int_t Cross(AliStrLine *line, Double_t *point);
     Double_t GetDCA(const AliStrLine *line) const;
     Double_t GetDistFromPoint(const Double_t *point) const;
+    Bool_t GetParamAtRadius(Double_t r,Double_t &t1,Double_t &t2) const;
+    void ComputePointAtT(Double_t t,Double_t *p) const {
+      for(Int_t i=0;i<3;i++)p[i]=fP0[i]+fCd[i]*t; }
  protected:
     void InitDirection(const Double_t *const point, const Double_t *const cd);
     void InitTwoPoints(const Double_t *const pA, const Double_t *const pB);