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