]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONSegmentationV02.cxx
mapping/data/station2/non-bending_plane/zones_special_outer.dat
[u/mrichter/AliRoot.git] / MUON / AliMUONSegmentationV02.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 /////////////////////////////////////////////////////
19 //  Segmentation and Response classes version 02   //
20 /////////////////////////////////////////////////////
21
22 #include <TArrayF.h>
23
24 #include "AliMUONSegmentationV02.h"
25
26 //___________________________________________
27 ClassImp(AliMUONSegmentationV02)
28
29     
30 AliMUONSegmentationV02::AliMUONSegmentationV02()
31   : AliMUONSegmentationV01() 
32 {
33 // Default constructor
34 }
35
36 AliMUONSegmentationV02::AliMUONSegmentationV02(Int_t nsec) 
37   : AliMUONSegmentationV01(nsec) 
38 {
39 // Non default constructor
40 }
41
42 void AliMUONSegmentationV02::SetPadSize(Float_t p1, Float_t p2)
43 {
44 //  Sets the padsize 
45 //
46     fDpy=p1;
47     fDpx=p2;
48 }
49
50 Int_t AliMUONSegmentationV02::Npx() const
51 // Returns maximum number if pads in x
52 {return AliMUONSegmentationV01::Npy();}
53
54 Int_t AliMUONSegmentationV02::Npy() const
55 // Returns maximum number if pads in y
56 {return AliMUONSegmentationV01::Npx();}
57
58
59 Float_t AliMUONSegmentationV02::Dpx(Int_t /*isec*/) const
60 // Returns pad-size in x
61 {return fDpy;}
62
63 Float_t AliMUONSegmentationV02::Dpy(Int_t isec) const
64 // Returns pad-size in y
65 {return (*fDpxD)[isec];}
66
67 void  AliMUONSegmentationV02::Draw(const char * /*opt*/) const 
68 {}
69
70 Int_t AliMUONSegmentationV02::Sector(Int_t ix, Int_t iy) 
71 // Returns sector number for given pad position
72 //
73 {return AliMUONSegmentationV01::Sector(iy, ix);}
74
75 void AliMUONSegmentationV02::
76 GetPadI(Float_t x, Float_t y, Int_t &ix, Int_t &iy) 
77 //  Returns pad coordinates (ix,iy) for given real coordinates (x,y)
78 //
79 {
80 AliMUONSegmentationV01::GetPadI(y, x, iy, ix); 
81 // printf("\n x,y,ix,iy %f %f %d %d", x,y,ix,iy);
82 }
83
84 void AliMUONSegmentationV02::GetPad(Float_t x, Float_t y , Float_t /*z*/, Int_t &ix, Int_t &iy) 
85 {
86   GetPadI(x, y, ix, iy);
87 }
88
89 void AliMUONSegmentationV02::
90 GetPadC(Int_t ix, Int_t iy, Float_t &x, Float_t &y) 
91 {
92 //  Returns real coordinates (x,y) for given pad coordinates (ix,iy)
93 //
94
95     AliMUONSegmentationV01::GetPadC(iy, ix, y, x);
96 }
97 void AliMUONSegmentationV02::SetPad(Int_t ix,Int_t iy)
98 {
99     //
100     // Sets virtual pad coordinates, needed for evaluating pad response 
101     // outside the tracking program 
102     GetPadC(ix,iy,fX,fY);
103     fSector=Sector(ix,iy);    
104 }
105
106
107
108 void AliMUONSegmentationV02::NextPad()
109 {
110 // Stepper for the iteration over pads
111 //
112   // 
113   // Step to next pad in integration region
114     Float_t xc,yc;
115     Int_t   ixc;
116     
117 //  step up    
118     if (fY < fYmax && fY != 0) {
119         if (fIy==-1) fIy++;
120         fIy++;
121 //  step right 
122     } else if (fIx != fIxmax) {
123         if (fIx==-1) fIx++;
124         fIx++;
125 //      get y-position of next row (yc), xc not used here       
126         GetPadC(fIx,fIy,xc,yc);
127 //      get x-pad coordiante for 1 pad in row (fIx)
128         GetPadI(xc,fYmin,ixc,fIy);
129     } else {
130         fIx=fIy=-1;
131     }
132     GetPadC(fIx,fIy,fX,fY);
133     fSector=Sector(fIx,fIy);
134     if (MorePads() && 
135         (fSector ==-1 || fSector==0 )) 
136         NextPad();
137 //    printf("\n this pad %f %f %d %d \n",fX,fY,fIx,fIy);
138     
139 }
140
141 Int_t AliMUONSegmentationV02::MorePads()
142 {
143 // Stopping condition for the iterator over pads
144 //
145 //
146 // Are there more pads in the integration region
147
148     return  (fIx != -1  || fIy != -1);
149 /*
150     if ((fY >= fYmax  && fIx >= fIxmax) || fX==0) {
151         return 0;
152     } else {
153         return 1;
154     }
155 */
156 }
157
158 void AliMUONSegmentationV02::
159 Neighbours(Int_t iX, Int_t iY, Int_t* Nlist, Int_t Xlist[10], Int_t Ylist[10]) 
160 {
161 // Returns list of next neighbours for given Pad (iX, iY)
162 //
163     Int_t n;
164     AliMUONSegmentationV01::Neighbours(iY, iX, &n, Ylist, Xlist);
165     *Nlist=n;
166 }
167
168
169
170