Changes to work correctly with laser tracks (M.Ivanov)
authorhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 8 Mar 2006 16:30:51 +0000 (16:30 +0000)
committerhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 8 Mar 2006 16:30:51 +0000 (16:30 +0000)
TPC/AliTPCReconstructor.cxx
TPC/AliTPCReconstructor.h
TPC/AliTPCseed.cxx
TPC/AliTPCtrack.cxx
TPC/AliTPCtrackerMI.cxx

index a491a17..aa3b9f0 100644 (file)
@@ -34,6 +34,8 @@
 ClassImp(AliTPCReconstructor)
 
 Double_t AliTPCReconstructor::fgCtgRange = 1.05;
+Double_t AliTPCReconstructor::fgMaxSnpTracker   = 0.95;   // max tangent in tracker - correspond to 3    
+Double_t AliTPCReconstructor::fgMaxSnpTrack     = 0.999;  // tangent    
 
 //_____________________________________________________________________________
 void AliTPCReconstructor::Reconstruct(AliRunLoader* runLoader) const
index 8949a8e..208ede5 100644 (file)
@@ -42,11 +42,17 @@ public:
   static void SetCtgRange(Double_t ctgRange = 1.05) {fgCtgRange = ctgRange;}
   static Double_t GetCtgRange(){ return fgCtgRange;}
 
+  static void SetMaxSnpTracker(Double_t maxSnp) {fgMaxSnpTracker = maxSnp;}
+  static Double_t GetMaxSnpTracker(){ return fgMaxSnpTracker;}
+  static void SetMaxSnpTrack(Double_t maxSnp) {fgMaxSnpTrack = maxSnp;}
+  static Double_t GetMaxSnpTrack(){ return fgMaxSnpTrack;}
+
 private:
   AliTPCParam*         GetTPCParam(AliRunLoader* runLoader) const;
 
   static Double_t fgCtgRange; //! +-fCtgRange is the ctg(Theta) window used for clusterization and tracking (MI) 
-
+  static Double_t fgMaxSnpTracker;   // max sin of local angle  - for TPC tracker
+  static Double_t fgMaxSnpTrack;   // max sin of local angle  - for track 
   ClassDef(AliTPCReconstructor, 0)   // class for the TPC reconstruction
 };
 
index bc32387..c54f3e9 100644 (file)
@@ -23,6 +23,7 @@
 //-----------------------------------------------------------------
 #include "TClonesArray.h"
 #include "AliTPCseed.h"
+#include "AliTPCReconstructor.h"
 
 ClassImp(AliTPCseed)
 
@@ -300,7 +301,7 @@ Int_t  AliTPCseed::GetProlongation(Double_t xk, Double_t &y, Double_t & z) const
   
   Double_t x1=fX, x2=x1+(xk-x1), dx=x2-x1;
 
-  if (TMath::Abs(fP4*xk - fP2) >= 0.999) {   
+  if (TMath::Abs(fP4*xk - fP2) >= AliTPCReconstructor::GetMaxSnpTrack()) {   
     return 0;
   }
 
@@ -414,7 +415,7 @@ Int_t AliTPCseed::Update(const AliCluster *c, Double_t chisq, UInt_t /*index*/)
 
   Double_t dy=c->GetY() - fP0, dz=c->GetZ() - fP1;
   Double_t cur=fP4 + k40*dy + k41*dz, eta=fP2 + k20*dy + k21*dz;
-  if (TMath::Abs(cur*fX-eta) >= 0.9) {
+  if (TMath::Abs(cur*fX-eta) >= AliTPCReconstructor::GetMaxSnpTrack()) {
     return 0;
   }
 
index 9195cfb..1b2b476 100644 (file)
@@ -26,6 +26,7 @@
 #include "AliTPCtrack.h"
 #include "AliCluster.h"
 #include "AliESDtrack.h"
+#include "AliTPCReconstructor.h"
 
 ClassImp(AliTPCtrack)
 
@@ -233,13 +234,13 @@ Double_t AliTPCtrack::GetYat(Double_t xk) const {
 //-----------------------------------------------------------------
 // This function calculates the Y-coordinate of a track at the plane x=xk.
 //-----------------------------------------------------------------
-  if (TMath::Abs(fP4*fX - fP2)>0.9999) return 1e10; //patch 01 jan 06
+  if (TMath::Abs(fP4*fX - fP2)>AliTPCReconstructor::GetMaxSnpTrack()) return 0.; //patch 01 jan 06
     Double_t c1=fP4*fX - fP2, r1=TMath::Sqrt(1.- c1*c1);
     Double_t c2=fP4*xk - fP2;
-    if (c2*c2>0.99999) {
-       Int_t n=GetNumberOfClusters();
-       if (n>4) cerr<<n<<"AliTPCtrack::GetYat: can't evaluate the y-coord !\n";
-       return 1e10;
+    if (c2*c2>AliTPCReconstructor::GetMaxSnpTrack()) {
+      //       Int_t n=GetNumberOfClusters();
+      // if (n>4) cerr<<n<<"AliTPCtrack::GetYat: can't evaluate the y-coord !\n";
+       return 0;
     } 
     Double_t r2=TMath::Sqrt(1.- c2*c2);
     return fP0 + (xk-fX)*(c1+c2)/(r1+r2);
@@ -250,7 +251,7 @@ Int_t AliTPCtrack::PropagateTo(Double_t xk,Double_t /*x0*/,Double_t rho) {
   //-----------------------------------------------------------------
   // This function propagates a track to a reference plane x=xk.
   //-----------------------------------------------------------------
-  if (TMath::Abs(fP4*xk - fP2) >= 0.9) {
+  if (TMath::Abs(fP4*xk - fP2) >= AliTPCReconstructor::GetMaxSnpTrack()) {
     //    Int_t n=GetNumberOfClusters();
     //if (n>4) cerr<<n<<" AliTPCtrack warning: Propagation failed !\n";
     return 0;
@@ -395,7 +396,7 @@ Int_t AliTPCtrack::Update(const AliCluster *c, Double_t chisq, UInt_t index) {
 
   Double_t dy=c->GetY() - fP0, dz=c->GetZ() - fP1;
   Double_t cur=fP4 + k40*dy + k41*dz, eta=fP2 + k20*dy + k21*dz;
-  if (TMath::Abs(cur*fX-eta) >= 0.9) {
+  if (TMath::Abs(cur*fX-eta) >= AliTPCReconstructor::GetMaxSnpTrack()) {
     //    Int_t n=GetNumberOfClusters();
     //if (n>4) cerr<<n<<" AliTPCtrack warning: Filtering failed !\n";
     return 0;
@@ -448,23 +449,23 @@ Int_t AliTPCtrack::Rotate(Double_t alpha)
   Double_t ca=cos(alpha), sa=sin(alpha);
   Double_t r1=fP4*fX - fP2;
   
-  if (TMath::Abs(r1)>=0.9999) return 0; //patch 01 jan 06
+  if (TMath::Abs(r1)>=AliTPCReconstructor::GetMaxSnpTrack()) return 0; //patch 01 jan 06
 
   fX = x1*ca + y1*sa;
   fP0=-x1*sa + y1*ca;
   fP2=fP2*ca + (fP4*y1 + sqrt(1.- r1*r1))*sa;
   
   Double_t r2=fP4*fX - fP2;
-  if (TMath::Abs(r2) >= 0.99999) {
-    Int_t n=GetNumberOfClusters();
-    if (n>4) cerr<<n<<" AliTPCtrack warning: Rotation failed !\n";
+  if (TMath::Abs(r2) >= AliTPCReconstructor::GetMaxSnpTrack()) {
+    //Int_t n=GetNumberOfClusters();
+    //    if (n>4) cerr<<n<<" AliTPCtrack warning: Rotation failed !\n";
     return 0;
   }
   
   Double_t y0=fP0 + sqrt(1.- r2*r2)/fP4;
   if ((fP0-y0)*fP4 >= 0.) {
-    Int_t n=GetNumberOfClusters();
-    if (n>4) cerr<<n<<" AliTPCtrack warning: Rotation failed !!!\n";
+    //Int_t n=GetNumberOfClusters();
+    //    if (n>4) cerr<<n<<" AliTPCtrack warning: Rotation failed !!!\n";
     return 0;
   }
 
index 2952f54..a0d7f53 100644 (file)
@@ -128,7 +128,7 @@ Int_t AliTPCtrackerMI::UpdateTrack(AliTPCseed * track, Int_t accept){
   track->fClusterPointer[track->fRow] = c;  
   //
 
-  Float_t angle2 = track->GetSnp()*track->GetSnp();
+  Double_t angle2 = track->GetSnp()*track->GetSnp();
   angle2 = TMath::Sqrt(angle2/(1-angle2)); 
   //
   //SET NEW Track Point
@@ -645,7 +645,7 @@ Double_t AliTPCtrackerMI::ErrY2(AliTPCseed* seed, AliTPCclusterMI * cl){
   Float_t z = TMath::Abs(fParam->GetZLength()-TMath::Abs(seed->GetZ()));
   Int_t ctype = cl->GetType();  
   Float_t padlength= GetPadPitchLength(seed->fRow);
-  Float_t angle2 = seed->GetSnp()*seed->GetSnp();
+  Double_t angle2 = seed->GetSnp()*seed->GetSnp();
   angle2 = angle2/(1-angle2); 
   //
   //cluster "quality"
@@ -780,7 +780,7 @@ Double_t AliTPCtrackerMI::ErrZ2(AliTPCseed* seed, AliTPCclusterMI * cl){
   Int_t ctype = cl->GetType();  
   Float_t padlength= GetPadPitchLength(seed->fRow);
   //
-  Float_t angle2 = seed->GetSnp()*seed->GetSnp();
+  Double_t angle2 = seed->GetSnp()*seed->GetSnp();
   //  if (angle2<0.6) angle2 = 0.6;
   angle2 = seed->GetTgl()*seed->GetTgl()*(1+angle2/(1-angle2)); 
   //
@@ -1370,9 +1370,9 @@ Int_t AliTPCtrackerMI::FollowToNext(AliTPCseed& t, Int_t nr) {
       if (TMath::Abs(angle-t.GetAlpha())>0.001){
        Double_t rotation = angle-t.GetAlpha();
        t.fRelativeSector= relativesector;
-       t.Rotate(rotation);     
+       if (!t.Rotate(rotation)) return 0;      
       }
-      t.PropagateTo(x);
+      if (!t.PropagateTo(x)) return 0;
       //
       t.fCurrentCluster = cl; 
       t.fRow = nr;
@@ -1392,7 +1392,12 @@ Int_t AliTPCtrackerMI::FollowToNext(AliTPCseed& t, Int_t nr) {
       }    
     }
   }
-  if (fIteration>1) {t.fNFoundable++; return 0;}  // not look for new cluster during refitting
+  if (TMath::Abs(t.GetSnp())>AliTPCReconstructor::GetMaxSnpTracker()) return 0;  // cut on angle
+  if (fIteration>1){
+    // not look for new cluster during refitting    
+    t.fNFoundable++; 
+    return 0;
+  }
   //
   UInt_t index=0;
   //  if (TMath::Abs(t.GetSnp())>0.95 || TMath::Abs(x*t.GetC()-t.GetEta())>0.95) return 0;// patch 28 fev 06
@@ -1429,7 +1434,8 @@ Int_t AliTPCtrackerMI::FollowToNext(AliTPCseed& t, Int_t nr) {
   } 
   else
     {
-      if (TMath::Abs(z)<(AliTPCReconstructor::GetCtgRange()*x+10) && TMath::Abs(z)<fParam->GetZLength() ) t.fNFoundable++;
+      if (TMath::Abs(z)<(AliTPCReconstructor::GetCtgRange()*x+10) && TMath::Abs(z)<fParam->GetZLength() && (TMath::Abs(t.GetSnp())<AliTPCReconstructor::GetMaxSnpTracker())) 
+       t.fNFoundable++;
       else
        return 0;
     }   
@@ -1645,7 +1651,7 @@ Int_t AliTPCtrackerMI::UpdateClusters(AliTPCseed& t,  Int_t nr) {
     //y = t.GetY();    
   }
   //
-
+  if (TMath::Abs(t.GetSnp())>AliTPCReconstructor::GetMaxSnpTracker()) return 0;
   AliTPCRow &krow=GetRow(t.fRelativeSector,nr);
 
   if (TMath::Abs(TMath::Abs(y)-ymax)<krow.fDeadZone){
@@ -1655,7 +1661,7 @@ Int_t AliTPCtrackerMI::UpdateClusters(AliTPCseed& t,  Int_t nr) {
   } 
   else
     {
-      if (TMath::Abs(t.GetZ())<(AliTPCReconstructor::GetCtgRange()*t.GetX()+10)) t.fNFoundable++;
+      if (TMath::Abs(t.GetZ())<(AliTPCReconstructor::GetCtgRange()*t.GetX()+10) && (TMath::Abs(t.GetSnp())<AliTPCReconstructor::GetMaxSnpTracker())) t.fNFoundable++;
       else
        return 0;      
     }
@@ -6014,7 +6020,7 @@ void  AliTPCtrackerMI::GetShape(AliTPCseed * seed, Int_t row)
   Float_t padlength =  GetPadPitchLength(row);
   //
   Float_t sresy = (seed->fSector < fParam->GetNSector()/2) ? 0.2 :0.3;
-  Float_t angulary  = seed->GetSnp();
+  Double_t angulary  = seed->GetSnp();
   angulary = angulary*angulary/(1-angulary*angulary);
   seed->fCurrentSigmaY2 = sd2+padlength*padlength*angulary/12.+sresy*sresy;  
   //