* 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)
{
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;
}
-
-
-
-
-
-