]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDtrackingSector.cxx
MixWith method has been corrected: only one event per file is in the folder
[u/mrichter/AliRoot.git] / TRD / AliTRDtrackingSector.cxx
index ae58d2c43a3e2a8624296c9f0fc44579969ba4fa..68a517135cb5f1d0f0a4cb672193f1d74956b93b 100644 (file)
 
 /*
 $Log$
+Revision 1.5  2000/12/08 16:07:02  cblume
+Update of the tracking by Sergei
+
+Revision 1.4  2000/10/16 01:16:53  cblume
+Changed timebin 0 to be the one closest to the readout
+
+Revision 1.3  2000/10/15 23:40:01  cblume
+Remove AliTRDconst
+
+Revision 1.2  2000/10/06 16:49:46  cblume
+Made Getters const
+
 Revision 1.1.2.2  2000/10/04 16:34:58  cblume
 Replace include files by forward declarations
 
@@ -28,14 +40,11 @@ Add the tracking code
 #include "AliRun.h"
 
 #include "AliTRD.h" 
-#include "AliTRDconst.h"
 #include "AliTRDgeometry.h" 
 #include "AliTRDcluster.h" 
 #include "AliTRDtimeBin.h" 
-
 #include "AliTRDtrackingSector.h" 
 
-
 ClassImp(AliTRDtrackingSector) 
 
 //_______________________________________________________
@@ -65,13 +74,13 @@ AliTRDtimeBin &AliTRDtrackingSector::operator[](Int_t i)
 
 void AliTRDtrackingSector::SetUp()
 { 
-
   AliTRD *TRD = (AliTRD*) gAlice->GetDetector("TRD");
   fGeom = TRD->GetGeometry();
 
   fTimeBinSize = fGeom->GetTimeBinSize();
 
-  fN = kNplan * (Int_t(kDrThick/fTimeBinSize) + 1);
+  fN = AliTRDgeometry::Nplan() * (Int_t(AliTRDgeometry::DrThick()
+                                       /fTimeBinSize) + 1);
 
   fTimeBin = new AliTRDtimeBin[fN]; 
 
@@ -79,22 +88,20 @@ void AliTRDtrackingSector::SetUp()
 
 //______________________________________________________
 
-Double_t AliTRDtrackingSector::GetX(Int_t l) const
+Double_t AliTRDtrackingSector::GetX(Int_t tb) const
 {
-  if( (l<0) || (l>fN-1)) {
+  if( (tb<0) || (tb>fN-1)) {
     fprintf(stderr,"AliTRDtrackingSector::GetX: TimeBin index is out of range !\n");
     return -99999.;
   }
   else { 
     
-    Int_t tb_per_plane = fN/kNplan;
-    Int_t plane = l/tb_per_plane;
-    Int_t time_slice = l%(Int_t(kDrThick/fTimeBinSize) + 1);
+    Int_t tb_per_plane = fN/AliTRDgeometry::Nplan();
+    Int_t local_tb = tb_per_plane - tb%tb_per_plane - 1;
 
+    Int_t plane = tb/tb_per_plane;
     Float_t t0 = fGeom->GetTime0(plane);
-    Double_t x = t0 + time_slice * fTimeBinSize;
-
-    //    cerr<<"plane, tb, x = "<<plane<<","<<time_slice<<","<<x<<endl;
+    Double_t x = t0 - (local_tb + 0.5) * fTimeBinSize;
 
     return x;
   }
@@ -102,45 +109,31 @@ Double_t AliTRDtrackingSector::GetX(Int_t l) const
 
 //______________________________________________________
 
-Double_t AliTRDtrackingSector::GetMaxY(Int_t l) const 
-{ 
-
-  if((l<(fN-1)) && (l>-1)) { 
-    Int_t tb_per_plane = fN/kNplan;
-    Int_t plane = l/tb_per_plane;
-    return fGeom->GetChamberWidth(plane); 
-  }
-  else {
-    fprintf(stderr,
-    "AliTRDtrackingSector::GetMaxY: TimeBin index is out of range !\n");
-    if(l<0) return fGeom->GetChamberWidth(0);
-    else return fGeom->GetChamberWidth(kNplan-1);
-  }
-}
-
-//______________________________________________________
-
 Int_t AliTRDtrackingSector::GetTimeBinNumber(Double_t x) const
 {
-  Float_t r_out = fGeom->GetTime0(kNplan-1) + kDrThick
-  Float_t r_in = fGeom->GetTime0(0);
-  //  cerr<<"GetTimeBinNumber: r_in,r_out = "<<r_in<<","<<r_out<<endl;
+  Float_t r_out = fGeom->GetTime0(AliTRDgeometry::Nplan()-1)
+  Float_t r_in = fGeom->GetTime0(0) - AliTRDgeometry::DrThick();
+
 
   if(x >= r_out) return fN-1;
   if(x <= r_in) return 0;
 
-  Float_t gap = fGeom->GetTime0(1) - fGeom->GetTime0(0);
-  //  cerr<<"GetTimeBinNumber: gap = "<<gap<<endl;
-
-  Int_t plane = Int_t((x - r_in + fTimeBinSize/2)/gap);
-  //  cerr<<"GetTimeBinNumber: plane="<<plane<<endl;
-
-  Int_t local_tb = Int_t((x-fGeom->GetTime0(plane))/fTimeBinSize + 0.5);
-  //  cerr<<"GetTimeBinNumber: local_tb="<<local_tb<<endl;
-
-  Int_t time_bin = plane * (Int_t(kDrThick/fTimeBinSize) + 1) + local_tb;
-  //  cerr<<"GetTimeBinNumber: time_bin = "<<time_bin<<endl;
-  
+  Int_t plane;
+  for (plane = AliTRDgeometry::Nplan()-1; plane >= 0; plane--) {
+    if(x > (fGeom->GetTime0(plane) - AliTRDgeometry::DrThick())) break;
+  }  
+  Int_t tb_per_plane = fN/AliTRDgeometry::Nplan();
+  Int_t local_tb = Int_t((fGeom->GetTime0(plane)-x)/fTimeBinSize);
+
+  if((local_tb < 0) || (local_tb >= tb_per_plane)) {
+    printf("AliTRDtrackingSector::GetTimeBinNumber: \n");
+    printf("local time bin %d is out of bounds [0..%d]: x = %f \n",
+          local_tb,tb_per_plane-1,x);
+    return -1;
+  }
+      
+  Int_t time_bin = (plane + 1) * tb_per_plane - 1 - local_tb;
 
   return time_bin;
 }
@@ -151,7 +144,51 @@ Int_t AliTRDtrackingSector::GetTimeBin(Int_t det, Int_t local_tb) const
 {
   Int_t plane = fGeom->GetPlane(det);
 
-  Int_t time_bin = plane * (Int_t(kDrThick/fTimeBinSize) + 1) + local_tb;  
+  Int_t tb_per_plane = fN/AliTRDgeometry::Nplan();
+
+  Int_t time_bin = (plane + 1) * tb_per_plane - 1 - local_tb;
+
   return time_bin;
 }
 
+
+//______________________________________________________
+
+Bool_t AliTRDtrackingSector::TECframe(Int_t tb, Double_t y, Double_t z) const
+{
+// 
+// Returns <true> if point defined by <x(tb),y,z> is within 
+// the TEC G10 frame, otherwise returns <false>  
+//  
+
+  if((tb > (fN-1)) || (tb < 0)) return kFALSE; 
+
+  Int_t tb_per_plane = fN/AliTRDgeometry::Nplan();
+  Int_t plane = tb/tb_per_plane;
+  
+  Double_t x = GetX(tb);
+  y = TMath::Abs(y);
+
+  if((y > fGeom->GetChamberWidth(plane)/2.) &&
+     (y < x*TMath::Tan(0.5*AliTRDgeometry::GetAlpha()))) return kTRUE; 
+
+  Double_t zmin, zmax;
+  Float_t  fRowPadSize, fRow0;
+  Int_t    nPadRows;
+
+  for(Int_t iCha = 1; iCha < AliTRDgeometry::Ncham(); iCha++) {
+
+    fRow0 = fGeom->GetRow0(plane,iCha-1,0);
+    fRowPadSize = fGeom->GetRowPadSize(plane,iCha-1,0);
+    nPadRows = fGeom->GetRowMax(plane,iCha-1,0);
+    zmin = fRow0 - fRowPadSize/2 + fRowPadSize * nPadRows;
+
+    fRow0 = fGeom->GetRow0(plane,iCha,0);
+    fRowPadSize = fGeom->GetRowPadSize(plane,iCha,0);
+    zmax = fRow0 - fRowPadSize/2;
+
+    if((z > zmin) && (z < zmax)) return kTRUE;     
+  }
+
+  return kFALSE;
+}