1 #include "AliRICHParam.h"
2 #include "AliRICHConst.h"
8 // RICH main parameters manipulator
9 //__________________________________________________________________________________________________
10 AliRICHParam::AliRICHParam():
28 fProximityGapThickness(0),
56 {//defines the default parameters
57 Segmentation (144,160); //nx,ny for the whole chamber
58 DeadZone (3*kcm); //spacer between PC planes
59 PadSize (8.4*kmm,8.0*kmm);
60 fWirePitch=PadSizeX()/2;
62 Size (132.6*kcm,26*kcm,136.7*kcm); //full length, not GEANT half notation
63 AngleRot (60); //rotation of the whole RICH around Z, deg
64 Angles (20,19.5); //XY angle, YZ angle deg
65 Offset (490*kcm+1.267*kcm); //1.267???????cm distance from IP to the center of module
67 ProximityGapThickness(0.4*kcm);
68 QuartzLength (133*kcm);
69 QuartzWidth (127.9*kcm);
70 QuartzThickness (0.5*kcm);
71 OuterFreonLength (133*kcm);
72 OuterFreonWidth (41.3*kcm);
73 InnerFreonLength (133*kcm);
74 InnerFreonWidth (41.3*kcm);
75 FreonThickness (1.5*kcm);
76 RadiatorToPads (80*kmm);
79 ChargeSpreadX(0.18);ChargeSpreadY(0.18);
91 WireSag(1); // 1->On, 0->Off
92 Voltage(2150); // Should only be 2000, 2050, 2100 or 2150
95 }//AliRICHParam::named ctor
96 //__________________________________________________________________________________________________
97 void AliRICHParam::Recalc()
99 fPcSizeX=Nx()*fPadSizeX+2*fDeadZone;
100 fPcSizeY=Ny()*fPadSizeY+fDeadZone;
101 fSectorSizeX=(fPcSizeX-2*fDeadZone)/3;
102 fSectorSizeY=(fPcSizeY-fDeadZone)/2;
103 }//void AliRICHParam::Recalc()
104 //__________________________________________________________________________________________________
105 Int_t AliRICHParam::Sector(Float_t x, Float_t y)const
106 {//Calculate in which sector is the hit
107 if(TMath::Abs(x)>fPcSizeX/2 || TMath::Abs(y)>fPcSizeY/2){
108 Error("Sector","given position is out of active PC area");
112 if(x<=-fSectorSizeX/2-fDeadZone) sector=1;
113 if(x>=-fSectorSizeX/2 && x<=fSectorSizeX/2) sector=2;
114 if(x>= fSectorSizeX/2+fDeadZone) sector=3;
117 else if(y<=-fDeadZone/2)
121 }//Int_t AliRICHParam::Sector(Float_t x, Float_t y)
122 //__________________________________________________________________________________________________
123 Int_t AliRICHParam::L2P(Float_t x, Float_t y, Int_t &iPadX, Int_t &iPadY)const
124 {//returns pad numbers (iPadX,iPadY) for given point in local coordinates (x,y)
126 // Please check origin of pad numbering !!!
129 Int_t sector=Sector(x,y);
132 iPadX = Int_t ((x-fDeadZone)/fPadSizeX);
133 iPadY = Int_t ((y+fDeadZone/2)/fPadSizeY)-1;
136 iPadX = Int_t ((x-fDeadZone)/fPadSizeX);
137 iPadY = Int_t ((y-fDeadZone/2)/fPadSizeY);
140 iPadX = (x>=0)? iPadX = Int_t (x/fPadSizeX) : iPadX = Int_t (x/fPadSizeX)-1;
141 iPadY = Int_t ((y+fDeadZone/2)/fPadSizeY)-1;
144 iPadX = (x>=0)? iPadX = Int_t (x/fPadSizeX) : iPadX = Int_t (x/fPadSizeX)-1;
145 iPadY = Int_t ((y-fDeadZone/2)/fPadSizeY);
148 iPadX = Int_t ((x+fDeadZone)/fPadSizeX)-1;
149 iPadY = Int_t ((y+fDeadZone/2)/fPadSizeY)-1;
152 iPadX = Int_t ((x+fDeadZone)/fPadSizeX)-1;
153 iPadY = Int_t ((y-fDeadZone/2)/fPadSizeY);
157 if(iPadY> Ny()) iPadY= Ny();
158 if(iPadY<-Ny()) iPadY=-Ny();
159 if(iPadX> Nx()) iPadX= Nx();
160 if(iPadX<-Nx()) iPadX=-Nx();
162 }//void AliRICHParam::L2P(Float_t x, Float_t y, Int_t &iPadX, Int_t &iPadY)
163 //__________________________________________________________________________________________________
164 Float_t AliRICHParam::Gain(Float_t y)
165 {//Calculates the gain
167 Float_t gainK=9e-6*TMath::Power(y,4)+2e-7*TMath::Power(y,3)-0.0316*TMath::Power(y,2)-3e-4*y+25.367;
168 Float_t gain = (ChargeSlope()+ChargeSlope()*gainK/100)*0.9;
169 return -gain*TMath::Log(gRandom->Rndm());
171 return -ChargeSlope()*TMath::Log(gRandom->Rndm());
172 }//Float_t AliRICHParam::IntPH(Float_t yhit)
173 //__________________________________________________________________________________________________
174 Float_t AliRICHParam::TotalCharge(Int_t iPID,Float_t eloss,Float_t y)
175 {//Get number of electrons and return charge
177 if(iPID==kCerenkov||iPID==kFeedback)
180 Int_t iNelectrons=Int_t(eloss/fEIonisation);if(iNelectrons==0) iNelectrons=1;
182 for(Int_t i=1;i<=iNelectrons;i++)
186 }//Float_t AliRICHParam::TotalCharge(Int_t iPID,Float_t eloss, Float_t y)
187 //__________________________________________________________________________________________________