]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - RICH/AliRICHSegmentationV1.cxx
AliCRTModule added
[u/mrichter/AliRoot.git] / RICH / AliRICHSegmentationV1.cxx
index 509a42b73e055d4c91351a23c86180b672b0dc3a..ef4ec2357f24b2ad3309cbfb0bb298455002121f 100644 (file)
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
-/*
-  $Log$
-  Revision 1.4  2001/01/22 21:35:39  jbarbosa
-  Added deadzone size to data members
-
-  Revision 1.3  2000/10/03 21:44:09  morsch
-  Use AliSegmentation and AliHit abstract base classes.
-
-  Revision 1.2  2000/10/02 15:48:55  jbarbosa
-  Fixed coding conventions.
-
-  Revision 1.1  2000/06/12 15:34:28  jbarbosa
-  Cleaned up version.
-
-*/
-
 #include "AliRICHSegmentationV1.h"
 
-
-//--------------------------------------------------------
 ClassImp(AliRICHSegmentationV1)
-
-//________________________________________________________________________________
+//__________________________________________________________________________________________________
 AliRICHSegmentationV1::AliRICHSegmentationV1()
-{ 
-
-// Default constructor for AliRICHSegmantionV1 (with dead zones)
-
-  fNpx=160;
-  fNpy=144;
-  //fNpx=80;
-  //fNpy=48;
-  fDeadZone=2.6;
-  fSector=-1;
+{// Default constructor for AliRICHSegmantionV1 (with dead zones)
+
+   fNpx=144;      // number of pads along X direction 
+   fNpy=160;      // number of pads along Y direction 
+   fDeadZone=3.0; // space between CsI photocathods in cm
+   fDpx=0.84;     // pad width in cm
+   fDpy=0.80;     // pad heights in cm
+   fWireD=0.84/2;       
+   fSector=-1;
+   Init(0);       // ??? remove 0
 }
-
-//________________________________________________________________________________
-AliRICHSegmentationV1::~AliRICHSegmentationV1()
-{ 
-// Destructor
-
+//__________________________________________________________________________________________________
+void AliRICHSegmentationV1::Init(Int_t /*id*/)
+{//Recalculates all the values after some of them have been changed
+    
+   Float_t csi_length = fNpy*fDpy + fDeadZone;
+   Float_t csi_width = fNpx*fDpx + 2*fDeadZone;
+
+   fPadPlane_Width = (csi_width - 2*fDeadZone)/3;
+   fPadPlane_Length = (csi_length - fDeadZone)/2;
 }
-
-
-// calculate sector from x-y coordinates
-
+//__________________________________________________________________________________________________
 Int_t AliRICHSegmentationV1::Sector(Float_t x, Float_t y)
-{
-
-// Calculate in which sector is the hit
+{// Calculate in which sector is the hit
   
   fSector=-1;
   
-  //old numerical definition
+  //Parametrized definition
 
-  /*if (x<-fDeadZone/2)
+  if (y<-fDeadZone/2)
     {
-      if (y>22.75)
+      if (x> fPadPlane_Width/2 +fDeadZone)
        {
-         if (y<63.1)
+         if ( x<fPadPlane_Width/2 +fDeadZone + fPadPlane_Width)
            fSector=0;
        }
-      if (y<20.15)
+      if (x< fPadPlane_Width/2)
        {
-         if (y>(-20.15))
+         if (x> -( fPadPlane_Width/2))
            fSector=2;
        }
-      if (y<(-22.75))
+      if (x< -( fPadPlane_Width/2 +fDeadZone))
        {
-         if (y>(-63.1))
+         if (x> -( fPadPlane_Width/2 +fDeadZone +  fPadPlane_Width))
            fSector=4;
        }
     }
-  else if (x>fDeadZone/2)
+  else if (y>fDeadZone/2)
     {
-      if (y>22.75)
+      if (x> fPadPlane_Width/2 +fDeadZone)
        {
-         if (y<63.1)
+         if (x< fPadPlane_Width/2 +fDeadZone +  fPadPlane_Width)
            fSector=1;
        }
-      if (y<20.15)
+      if (x< fPadPlane_Width/2)
        {
-         if (y>(-20.15))
+         if (x> -( fPadPlane_Width/2))
            fSector=3;
        }
-      if (y<(-22.75))
+      if (x< -( fPadPlane_Width/2 +fDeadZone))
        {
-         if (y>(-63.1))
+         if (x> -( fPadPlane_Width/2 +fDeadZone +  fPadPlane_Width))
            fSector=5;
        }
-    }*/
-
-  
-  // parametrised definition
-
-  Float_t csi_length = fNpx*Dpx() + fDeadZone;
-  Float_t csi_width = fNpy*Dpy() + 2*fDeadZone;
-
-  fPadPlane_Width = (csi_width - 2*fDeadZone)/3;
-  fPadPlane_Length = (csi_length - fDeadZone)/2;
-
-  //printf("\n\n\n\n\n\n  padplane w: %f l:%f wr: %f   \n\n\n\n\n\n\n\n",  fPadPlane_Width,fPadPlane_Length,63.1-22.75); 
-
-  if (x<-fDeadZone/2)
-    {
-      if (y> fPadPlane_Width/2 +fDeadZone)
-       {
-         if ( fPadPlane_Width/2 +fDeadZone + fPadPlane_Width)
-           fSector=0;
-       }
-      if (y< fPadPlane_Width/2)
-       {
-         if (y> -( fPadPlane_Width/2))
-           fSector=2;
-       }
-      if (y< -( fPadPlane_Width/2 +fDeadZone))
-       {
-         if (y> -( fPadPlane_Width/2 +fDeadZone +  fPadPlane_Width))
-           fSector=4;
-       }
-    }
-  else if (x>fDeadZone/2)
-    {
-      if (y> fPadPlane_Width/2 +fDeadZone)
-       {
-         if ( fPadPlane_Width/2 +fDeadZone +  fPadPlane_Width)
-           fSector=0;
-       }
-      if (y< fPadPlane_Width/2)
-       {
-         if (y> -( fPadPlane_Width/2))
-           fSector=2;
-       }
-      if (y< -( fPadPlane_Width/2 +fDeadZone))
-       {
-         if (y> -( fPadPlane_Width/2 +fDeadZone +  fPadPlane_Width))
-           fSector=4;
-       }
     }
-  
-  //if (fSector==2)
-    //printf("x:%f, y:%f, sector:%d\n",x,y,fSector);
 
   return fSector;
-}
-
-
+}//Sector()
+//__________________________________________________________________________________________________
 void AliRICHSegmentationV1::GetPadI(Float_t x, Float_t y, Int_t &ix, Int_t &iy)
 {
-//  returns pad coordinates (ix,iy) for given real coordinates (x,y)
-//
-// Please check origin of pad numbering !!!
 
-  Int_t sector=Sector(x,y);
+  ix=9999; //PH Fake values which should not be returned
+  iy=9999;
 
-  //printf("Sector: %d\n",sector);
+  Int_t sector=Sector(x,y);
 
 
   if (sector==0)
     {
-      //ix = (x>0)? Int_t(x/fDpx)+1 : Int_t(x/fDpx);
-      //iy = (y>0)? Int_t(y/fDpy)+1 : Int_t(y/fDpy);
-      ix = Int_t (x/fDpx+fDeadZone/2);
-      iy = Int_t (y/fDpy-fDeadZone);
+      ix = Int_t ((x-fDeadZone)/fDpx);
+      iy = Int_t ((y+fDeadZone/2)/fDpy)-1;
     }
   if (sector==1)
     {
-      ix = Int_t (x/fDpx-fDeadZone/2);
-      iy = Int_t (y/fDpy-fDeadZone);
+      ix = Int_t ((x-fDeadZone)/fDpx);
+      iy = Int_t ((y-fDeadZone/2)/fDpy);
     }
   if (sector==2)
     {
-      ix = Int_t (x/fDpx+fDeadZone/2);
-      iy = Int_t (y/fDpy);
+      ix = (x>=0)? ix = Int_t (x/fDpx) : ix = Int_t (x/fDpx)-1;
+      iy = Int_t ((y+fDeadZone/2)/fDpy)-1;
     }
   if (sector==3)
     {
-      ix = Int_t (x/fDpx-fDeadZone);
-      iy = Int_t (y/fDpy);
+      ix = (x>=0)? ix = Int_t (x/fDpx) : ix = Int_t (x/fDpx)-1;
+      iy = Int_t ((y-fDeadZone/2)/fDpy);
     }
   if (sector==4)
     {
-      ix = Int_t (x/fDpx+fDeadZone/2);
-      iy = Int_t (y/fDpy+fDeadZone);
+      ix = Int_t ((x+fDeadZone)/fDpx)-1;
+      iy = Int_t ((y+fDeadZone/2)/fDpy)-1;
     }
   if (sector==5)
     {
-      ix = Int_t (x/fDpx-fDeadZone/2);
-      iy = Int_t (y/fDpy+fDeadZone);
+      ix = Int_t ((x+fDeadZone)/fDpx)-1;
+      iy = Int_t ((y-fDeadZone/2)/fDpy);
     }
-  
-  //ix = Int_t (x/fDpx);
-  //iy = Int_t (y/fDpy);
 
-  //ix = (x>0)? Int_t(x/fDpx)+1 : Int_t(x/fDpx);
-  //iy = (y>0)? Int_t(y/fDpy)+1 : Int_t(y/fDpy);
 
   if (sector==-1)
     {
@@ -220,161 +138,90 @@ void AliRICHSegmentationV1::GetPadI(Float_t x, Float_t y, Int_t &ix, Int_t &iy)
   if (iy < -fNpy) iy=-fNpy;
   if (ix >  fNpx) ix= fNpx;
   if (ix < -fNpx) ix=-fNpx;
-}
-
-void AliRICHSegmentationV1::
-GetPadC(Int_t ix, Int_t iy, Float_t &x, Float_t &y)
-{
-//  returns real coordinates (x,y) for given pad coordinates (ix,iy)
-//
-
-  //Int_t sector=Sector(ix*.8,iy*.84);
-
+}//GetPadI()
+//__________________________________________________________________________________________________
+void AliRICHSegmentationV1::GetPadC(Int_t ix, Int_t iy, Float_t &x, Float_t &y)
+{//  returns real coordinates (x,y) for given pad coordinates (ix,iy)
   Int_t sector=-1;
 
- // old numerical definition
 
- /*if (ix<=0)
+  Float_t padplane_width = fNpx/3;
+  
+  if (iy<0)
     {
-      if (iy<=72)
+      if (ix < fNpx/2)
        {
-         if (iy>24)
+         if (ix >= padplane_width/2)
            sector=0;
        }
-      if (iy<=24)
+      if (ix< padplane_width/2)
        {
-         if (iy>-24)
+         if (ix >= -(padplane_width/2))
            sector=2;
        }
-      if (iy<=-24)
+      if (ix >= -(fNpx/2))
        {
-         if (iy>-72)
+         if (ix < -(padplane_width/2))
            sector=4;
        }
     }
-  if (ix>0)
+  if (iy>=0)
     {
-      if (iy<=72)
+      if (ix < fNpx/2)
        {
-         if (iy>24)
+         if (ix >= padplane_width/2)
            sector=1;
        }
-      if (iy<=24)
+      if (ix< padplane_width/2)
        {
-         if (iy>-24)
+         if (ix >= -(padplane_width/2))
            sector=3;
        }
-      if (iy<=-24)
+      if (ix >= -(fNpx/2))
        {
-         if (iy>-72)
+         if (ix < -(padplane_width/2))
            sector=5;
        }
-    }*/
-  
-  //  parametrised definition
-
-  
-  Float_t padplane_width = fNpy/3;
-  
-  if (ix<=0)
-    {
-      if (iy <= fNpy/2)
-       {
-         if (iy > fNpy/2 - padplane_width)
-           sector=0;
-       }
-      if (iy<= padplane_width/2)
-       {
-         if (iy > -(padplane_width/2))
-           sector=2;
-       }
-      if (iy <= -(padplane_width/2))
-       {
-         if (iy > -(fNpy/2))
-           sector=4;
-       }
-    }
-  if (ix>0)
-    {
-      if (iy <= fNpy/2)
-       {
-         if (iy > fNpy/2 - padplane_width)
-           sector=0;
-       }
-      if (iy<= padplane_width/2)
-       {
-         if (iy > -(padplane_width/2))
-           sector=2;
-       }
-      if (iy <= -(padplane_width/2))
-       {
-         if (iy > -(fNpy/2))
-           sector=4;
-       }
     }
 
   if (sector==0)
     {
       //x = (ix>0) ? Float_t(ix*fDpx)-fDpx/2. : Float_t(ix*fDpx)-fDpx/2.;
       //y = (iy>0) ? Float_t(iy*fDpy)-fDpy/2. : Float_t(iy*fDpy)-fDpy/2.;
-      x = Float_t(ix*fDpx)-fDpx/2.-fDeadZone/2;
-      y = Float_t(iy*fDpy)-fDpy/2.+fDeadZone;
+      x = Float_t(ix)*fDpx+fDpx/2+fDeadZone;
+      y = Float_t(iy)*fDpy+fDpy/2-fDeadZone/2;
     }
   if (sector==1)
     {
-      x = Float_t(ix*fDpx)-fDpx/2.+fDeadZone/2;
-      y = Float_t(iy*fDpy)-fDpy/2.+fDeadZone;
+      x = Float_t(ix)*fDpx+fDpx/2+fDeadZone;
+      y = Float_t(iy)*fDpy+fDpy/2+fDeadZone/2;
     }
   if (sector==2)
     {
-      x = Float_t(ix*fDpx)-fDpx/2.-fDeadZone/2;
-      y = Float_t(iy*fDpy)-fDpy/2.;
+      x = (ix>=0) ? x = Float_t(ix)*fDpx+fDpx/2 : x = Float_t(ix)*fDpx+fDpx/2;
+      y = Float_t(iy)*fDpy+fDpy/2-fDeadZone/2;
     }
   if (sector==3)
     {
-      x = Float_t(ix*fDpx)-fDpx/2.+fDeadZone;
-      y = Float_t(iy*fDpy)-fDpy/2.;
+      x = (ix>=0) ? x = Float_t(ix)*fDpx+fDpx/2 : x = Float_t(ix)*fDpx+fDpx/2;
+      y = Float_t(iy)*fDpy+fDpy/2+fDeadZone/2;
     }
   if (sector==4)
     {
-      x = Float_t(ix*fDpx)-fDpx/2.-fDeadZone/2;
-      y = Float_t(iy*fDpy)-fDpy/2.-fDeadZone;
+      x = Float_t(ix)*fDpx+fDpx/2-fDeadZone;
+      y = Float_t(iy)*fDpy+fDpy/2-fDeadZone/2;
     }
   if (sector==5)
     {
-      x = Float_t(ix*fDpx)-fDpx/2.+fDeadZone/2;
-      y = Float_t(iy*fDpy)-fDpy/2.-fDeadZone;
+      x = Float_t(ix)*fDpx+fDpx/2-fDeadZone;
+      y = Float_t(iy)*fDpy+fDpy/2+fDeadZone/2;
     }
-  
-  //if (sector==2)
-    //printf("fSector:%d x:%f y:%f\n",fSector,x,y);
-  
-}
-
-void AliRICHSegmentationV1::
-IntegrationLimits(Float_t& x1,Float_t& x2,Float_t& y1, Float_t& y2)
+}//GetPadC
+//__________________________________________________________________________________________________
+void AliRICHSegmentationV1::IntegrationLimits(Float_t& x1,Float_t& x2,Float_t& y1, Float_t& y2)
 {
-
-// Calculates integration limits
-
-/*
-  x1=fXt-fX-fDpx/2.;
-  x2=x1+fDpx;
-  y1=fYt-fY-fDpy/2.;
-  y2=y1+fDpy;    
-*/
-  //Int_t sector=Sector(fX,fY);
-
-  //printf("Sector:%d\n",sector);
-
   x1=fXhit-fX-fDpx/2.;
   x2=x1+fDpx;
   y1=fYhit-fY-fDpy/2.;
   y2=y1+fDpy;
 }
-
-
-
-
-
-