New TTask based method to do Digits To clusters. Works with files of multiple
[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 /*
17 $Log$
18 Revision 1.7  2000/12/21 22:12:41  morsch
19 Clean-up of coding rule violations,
20
21 Revision 1.6  2000/10/18 08:41:32  morsch
22 Make NextPad() and MorePads() to iterate until the end.
23
24 Revision 1.5  2000/10/03 21:48:07  morsch
25 Adopt to const declaration of some of the methods in AliSegmentation.
26
27 Revision 1.4  2000/10/02 16:58:29  egangler
28 Cleaning of the code :
29 -> coding conventions
30 -> void Streamers
31 -> some useless includes removed or replaced by "class" statement
32
33 Revision 1.3  2000/07/03 11:54:57  morsch
34 AliMUONSegmentation and AliMUONHitMap have been replaced by AliSegmentation and AliHitMap in STEER
35 The methods GetPadIxy and GetPadXxy of AliMUONSegmentation have changed name to GetPadI and GetPadC.
36
37 Revision 1.2  2000/06/15 07:58:48  morsch
38 Code from MUON-dev joined
39
40 Revision 1.1.2.1  2000/06/09 21:37:56  morsch
41 AliMUONSegmentationV02 code  from  AliMUONSegResV02.cxx
42
43 */
44
45
46
47 /////////////////////////////////////////////////////
48 //  Segmentation and Response classes version 02   //
49 /////////////////////////////////////////////////////
50
51
52 #include "AliMUONSegmentationV02.h"
53 #include "iostream.h"
54
55 //___________________________________________
56 ClassImp(AliMUONSegmentationV02)
57
58     
59 AliMUONSegmentationV02::AliMUONSegmentationV02(Int_t nsec): 
60     AliMUONSegmentationV01(nsec) 
61 {
62 // Non default constructor
63 }
64
65 void AliMUONSegmentationV02::SetPadSize(Float_t p1, Float_t p2)
66 {
67 //  Sets the padsize 
68 //
69     fDpy=p1;
70     fDpx=p2;
71 }
72
73 Int_t AliMUONSegmentationV02::Npx() const
74 // Returns maximum number if pads in x
75 {return AliMUONSegmentationV01::Npy();}
76
77 Int_t AliMUONSegmentationV02::Npy() const
78 // Returns maximum number if pads in y
79 {return AliMUONSegmentationV01::Npx();}
80
81
82 Float_t AliMUONSegmentationV02::Dpx(Int_t isec) const
83 // Returns pad-size in x
84 {return fDpy;}
85
86 Float_t AliMUONSegmentationV02::Dpy(Int_t isec) const
87 // Returns pad-size in y
88 {return (*fDpxD)[isec];}
89
90 Int_t AliMUONSegmentationV02::Sector(Int_t ix, Int_t iy) 
91 // Returns sector number for given pad position
92 //
93 {return AliMUONSegmentationV01::Sector(iy, ix);}
94
95 void AliMUONSegmentationV02::
96 GetPadI(Float_t x, Float_t y, Int_t &ix, Int_t &iy) 
97 //  Returns pad coordinates (ix,iy) for given real coordinates (x,y)
98 //
99 {
100 AliMUONSegmentationV01::GetPadI(y, x, iy, ix); 
101 // printf("\n x,y,ix,iy %f %f %d %d", x,y,ix,iy);
102 }
103
104 void AliMUONSegmentationV02::
105 GetPadC(Int_t ix, Int_t iy, Float_t &x, Float_t &y) 
106 {
107 //  Returns real coordinates (x,y) for given pad coordinates (ix,iy)
108 //
109
110     AliMUONSegmentationV01::GetPadC(iy, ix, y, x);
111 }
112 void AliMUONSegmentationV02::SetPad(Int_t ix,Int_t iy)
113 {
114     //
115     // Sets virtual pad coordinates, needed for evaluating pad response 
116     // outside the tracking program 
117     GetPadC(ix,iy,fX,fY);
118     fSector=Sector(ix,iy);    
119 }
120
121
122
123 void AliMUONSegmentationV02::NextPad()
124 {
125 // Stepper for the iteration over pads
126 //
127   // 
128   // Step to next pad in integration region
129     Float_t xc,yc;
130     Int_t   ixc;
131     
132 //  step up    
133     if (fY < fYmax && fY != 0) {
134         if (fIy==-1) fIy++;
135         fIy++;
136 //  step right 
137     } else if (fIx != fIxmax) {
138         if (fIx==-1) fIx++;
139         fIx++;
140 //      get y-position of next row (yc), xc not used here       
141         GetPadC(fIx,fIy,xc,yc);
142 //      get x-pad coordiante for 1 pad in row (fIx)
143         GetPadI(xc,fYmin,ixc,fIy);
144     } else {
145         fIx=fIy=-1;
146     }
147     GetPadC(fIx,fIy,fX,fY);
148     fSector=Sector(fIx,fIy);
149     if (MorePads() && 
150         (fSector ==-1 || fSector==0 )) 
151         NextPad();
152 //    printf("\n this pad %f %f %d %d \n",fX,fY,fIx,fIy);
153     
154 }
155
156 Int_t AliMUONSegmentationV02::MorePads()
157 {
158 // Stopping condition for the iterator over pads
159 //
160 //
161 // Are there more pads in the integration region
162
163     return  (fIx != -1  || fIy != -1);
164 /*
165     if ((fY >= fYmax  && fIx >= fIxmax) || fX==0) {
166         return 0;
167     } else {
168         return 1;
169     }
170 */
171 }
172
173 void AliMUONSegmentationV02::
174 Neighbours(Int_t iX, Int_t iY, Int_t* Nlist, Int_t Xlist[10], Int_t Ylist[10]) 
175 {
176 // Returns list of next neighbours for given Pad (iX, iY)
177 //
178     Int_t n;
179     AliMUONSegmentationV01::Neighbours(iY, iX, &n, Ylist, Xlist);
180     *Nlist=n;
181 }
182
183
184
185