2ee94e81bfb13060c4a4496a99cdec168eff2db2
[u/mrichter/AliRoot.git] / RICH / AliRICHSegmentationV1.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 /* $Id$ */
17
18 #include "AliRICHSegmentationV1.h"
19
20 ClassImp(AliRICHSegmentationV1)
21
22 AliRICHSegmentationV1::AliRICHSegmentationV1()
23
24
25 // Default constructor for AliRICHSegmantionV1 (with dead zones)
26
27    fNpx=144;      // number of pads along X direction 
28    fNpy=160;      // number of pads along Y direction 
29    fDeadZone=3.0; // space between CsI photocathods in cm
30    fDpx=0.84;     // pad width in cm
31    fDpy=0.80;     // pad heights in cm
32    fWireD=0.84/2;        
33    fSector=-1;
34    Init(0);       // ??? remove 0
35 }
36
37 void AliRICHSegmentationV1::Init(Int_t id)
38 {
39 // Recalculates all the values after some of them have been changed
40
41    Float_t csi_length = fNpy*fDpy + fDeadZone;
42    Float_t csi_width = fNpx*fDpx + 2*fDeadZone;
43
44    fPadPlane_Width = (csi_width - 2*fDeadZone)/3;
45    fPadPlane_Length = (csi_length - fDeadZone)/2;
46 }
47
48 // calculate sector from x-y coordinates
49
50 Int_t AliRICHSegmentationV1::Sector(Float_t x, Float_t y)
51 {
52
53 // Calculate in which sector is the hit
54   
55   fSector=-1;
56   
57   //old numerical definition
58
59   /*if (x<-fDeadZone/2)
60     {
61       if (y>22.75)
62         {
63           if (y<63.1)
64             fSector=0;
65         }
66       if (y<20.15)
67         {
68           if (y>(-20.15))
69             fSector=2;
70         }
71       if (y<(-22.75))
72         {
73           if (y>(-63.1))
74             fSector=4;
75         }
76     }
77   else if (x>fDeadZone/2)
78     {
79       if (y>22.75)
80         {
81           if (y<63.1)
82             fSector=1;
83         }
84       if (y<20.15)
85         {
86           if (y>(-20.15))
87             fSector=3;
88         }
89       if (y<(-22.75))
90         {
91           if (y>(-63.1))
92             fSector=5;
93         }
94     }*/
95
96   //Parametrized definition
97
98   if (y<-fDeadZone/2)
99     {
100       if (x> fPadPlane_Width/2 +fDeadZone)
101         {
102           if ( x<fPadPlane_Width/2 +fDeadZone + fPadPlane_Width)
103             fSector=0;
104         }
105       if (x< fPadPlane_Width/2)
106         {
107           if (x> -( fPadPlane_Width/2))
108             fSector=2;
109         }
110       if (x< -( fPadPlane_Width/2 +fDeadZone))
111         {
112           if (x> -( fPadPlane_Width/2 +fDeadZone +  fPadPlane_Width))
113             fSector=4;
114         }
115     }
116   else if (y>fDeadZone/2)
117     {
118       if (x> fPadPlane_Width/2 +fDeadZone)
119         {
120           if (x< fPadPlane_Width/2 +fDeadZone +  fPadPlane_Width)
121             fSector=1;
122         }
123       if (x< fPadPlane_Width/2)
124         {
125           if (x> -( fPadPlane_Width/2))
126             fSector=3;
127         }
128       if (x< -( fPadPlane_Width/2 +fDeadZone))
129         {
130           if (x> -( fPadPlane_Width/2 +fDeadZone +  fPadPlane_Width))
131             fSector=5;
132         }
133     }
134
135   
136   //if (fSector==2)
137     //printf("x:%f, y:%f, sector:%d\n",x,y,fSector);
138
139   return fSector;
140 }
141
142
143 void AliRICHSegmentationV1::GetPadI(Float_t x, Float_t y, Int_t &ix, Int_t &iy)
144 {
145 //  returns pad coordinates (ix,iy) for given real coordinates (x,y)
146 //
147 // Please check origin of pad numbering !!!
148
149   Int_t sector=Sector(x,y);
150
151   //printf("Sector: %d\n",sector);
152
153   if (sector==0)
154     {
155       //ix = (x>0)? Int_t(x/fDpx)+1 : Int_t(x/fDpx);
156       //iy = (y>0)? Int_t(y/fDpy)+1 : Int_t(y/fDpy);
157       ix = Int_t ((x-fDeadZone)/fDpx);
158       iy = Int_t ((y+fDeadZone/2)/fDpy)-1;
159     }
160   if (sector==1)
161     {
162       ix = Int_t ((x-fDeadZone)/fDpx);
163       iy = Int_t ((y-fDeadZone/2)/fDpy);
164     }
165   if (sector==2)
166     {
167       ix = (x>=0)? ix = Int_t (x/fDpx) : ix = Int_t (x/fDpx)-1;
168       iy = Int_t ((y+fDeadZone/2)/fDpy)-1;
169     }
170   if (sector==3)
171     {
172       ix = (x>=0)? ix = Int_t (x/fDpx) : ix = Int_t (x/fDpx)-1;
173       iy = Int_t ((y-fDeadZone/2)/fDpy);
174     }
175   if (sector==4)
176     {
177       ix = Int_t ((x+fDeadZone)/fDpx)-1;
178       iy = Int_t ((y+fDeadZone/2)/fDpy)-1;
179     }
180   if (sector==5)
181     {
182       ix = Int_t ((x+fDeadZone)/fDpx)-1;
183       iy = Int_t ((y-fDeadZone/2)/fDpy);
184     }
185
186   
187   //ix = Int_t (x/fDpx);
188   //iy = Int_t (y/fDpy);
189
190   //ix = (x>0)? Int_t(x/fDpx)+1 : Int_t(x/fDpx);
191   //iy = (y>0)? Int_t(y/fDpy)+1 : Int_t(y/fDpy);
192
193   if (sector==-1)
194     {
195       ix = fIxmax;
196       iy = fIymax;
197     }
198
199   if (iy >  fNpy) iy= fNpy;
200   if (iy < -fNpy) iy=-fNpy;
201   if (ix >  fNpx) ix= fNpx;
202   if (ix < -fNpx) ix=-fNpx;
203 }
204
205 void AliRICHSegmentationV1::
206 GetPadC(Int_t ix, Int_t iy, Float_t &x, Float_t &y)
207 {
208 //  returns real coordinates (x,y) for given pad coordinates (ix,iy)
209 //
210
211   //Int_t sector=Sector(ix*.8,iy*.84);
212
213   Int_t sector=-1;
214
215  // old numerical definition
216
217  /*if (ix<=0)
218     {
219       if (iy<=72)
220         {
221           if (iy>24)
222             sector=0;
223         }
224       if (iy<=24)
225         {
226           if (iy>-24)
227             sector=2;
228         }
229       if (iy<=-24)
230         {
231           if (iy>-72)
232             sector=4;
233         }
234     }
235   if (ix>0)
236     {
237       if (iy<=72)
238         {
239           if (iy>24)
240             sector=1;
241         }
242       if (iy<=24)
243         {
244           if (iy>-24)
245             sector=3;
246         }
247       if (iy<=-24)
248         {
249           if (iy>-72)
250             sector=5;
251         }
252     }*/
253   
254   //  parametrised definition
255
256   Float_t padplane_width = fNpx/3;
257   
258   if (iy<0)
259     {
260       if (ix < fNpx/2)
261         {
262           if (ix >= padplane_width/2)
263             sector=0;
264         }
265       if (ix< padplane_width/2)
266         {
267           if (ix >= -(padplane_width/2))
268             sector=2;
269         }
270       if (ix >= -(fNpx/2))
271         {
272           if (ix < -(padplane_width/2))
273             sector=4;
274         }
275     }
276   if (iy>=0)
277     {
278       if (ix < fNpx/2)
279         {
280           if (ix >= padplane_width/2)
281             sector=1;
282         }
283       if (ix< padplane_width/2)
284         {
285           if (ix >= -(padplane_width/2))
286             sector=3;
287         }
288       if (ix >= -(fNpx/2))
289         {
290           if (ix < -(padplane_width/2))
291             sector=5;
292         }
293     }
294
295   if (sector==0)
296     {
297       //x = (ix>0) ? Float_t(ix*fDpx)-fDpx/2. : Float_t(ix*fDpx)-fDpx/2.;
298       //y = (iy>0) ? Float_t(iy*fDpy)-fDpy/2. : Float_t(iy*fDpy)-fDpy/2.;
299       x = Float_t(ix)*fDpx+fDpx/2+fDeadZone;
300       y = Float_t(iy)*fDpy+fDpy/2-fDeadZone/2;
301     }
302   if (sector==1)
303     {
304       x = Float_t(ix)*fDpx+fDpx/2+fDeadZone;
305       y = Float_t(iy)*fDpy+fDpy/2+fDeadZone/2;
306     }
307   if (sector==2)
308     {
309       x = (ix>=0) ? x = Float_t(ix)*fDpx+fDpx/2 : x = Float_t(ix)*fDpx+fDpx/2;
310       y = Float_t(iy)*fDpy+fDpy/2-fDeadZone/2;
311     }
312   if (sector==3)
313     {
314       x = (ix>=0) ? x = Float_t(ix)*fDpx+fDpx/2 : x = Float_t(ix)*fDpx+fDpx/2;
315       y = Float_t(iy)*fDpy+fDpy/2+fDeadZone/2;
316     }
317   if (sector==4)
318     {
319       x = Float_t(ix)*fDpx+fDpx/2-fDeadZone;
320       y = Float_t(iy)*fDpy+fDpy/2-fDeadZone/2;
321     }
322   if (sector==5)
323     {
324       x = Float_t(ix)*fDpx+fDpx/2-fDeadZone;
325       y = Float_t(iy)*fDpy+fDpy/2+fDeadZone/2;
326     }
327  
328   
329   //if (sector==2)
330     //printf("fSector:%d x:%f y:%f\n",fSector,x,y);
331   
332 }
333
334 void AliRICHSegmentationV1::
335 IntegrationLimits(Float_t& x1,Float_t& x2,Float_t& y1, Float_t& y2)
336 {
337
338 // Calculates integration limits
339
340 /*
341   x1=fXt-fX-fDpx/2.;
342   x2=x1+fDpx;
343   y1=fYt-fY-fDpy/2.;
344   y2=y1+fDpy;    
345 */
346   //Int_t sector=Sector(fX,fY);
347
348   //printf("Sector:%d\n",sector);
349
350   x1=fXhit-fX-fDpx/2.;
351   x2=x1+fDpx;
352   y1=fYhit-fY-fDpy/2.;
353   y2=y1+fDpy;
354 }
355
356
357
358
359
360