]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONSegmentationSlat.h
Coding Convention Violations
[u/mrichter/AliRoot.git] / MUON / AliMUONSegmentationSlat.h
1 #ifndef ALIMUONSEGMENTATIONSLAT_H
2 #define ALIMUONSEGMENTATIONSLAT_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id$ */
7 // Revision of includes 07/05/2004
8
9 /////////////////////////////////////////////////////
10 //  Segmentation classes for slat modules          //
11 //  to be used with AluMUONSegmentationSlat        //
12 /////////////////////////////////////////////////////
13
14 #include "AliSegmentation.h"
15
16 class TArrayI;
17 class TObjArray;
18
19 class AliMUONSegmentationSlatModule;
20 class AliMUONChamber;
21
22 class AliMUONSegmentationSlat : public AliSegmentation 
23 {
24  public:
25     AliMUONSegmentationSlat();
26     AliMUONSegmentationSlat(Int_t nsec);    
27     virtual ~AliMUONSegmentationSlat();
28     //    
29     // Set Chamber Segmentation Parameters
30     //
31     // Pad size Dx*Dy 
32     virtual  void    SetPadSize(Float_t p1, Float_t p2);
33     // Anod Pitch
34     virtual  void    SetDAnod(Float_t D) {fWireD = D;};
35     
36     // Anod wire coordinate closest to xhit
37     virtual Float_t GetAnod(Float_t xhit) const;
38     
39     void SetPadDivision(Int_t ndiv[4]);
40     
41     // Transform from pad to real coordinates
42     virtual void    GetPadI(Float_t x, Float_t y , Float_t z, Int_t &ix, Int_t &iy);
43     // Transform from real to pad coordinates
44     virtual void    GetPadC(Int_t ix, Int_t iy, Float_t &x, Float_t &y, Float_t &z);
45      // Initialisation
46     virtual void Init(Int_t chamber);
47     //
48     // Get member data
49     //
50     //
51     // Pad size in x
52     virtual Float_t Dpx() const {return fDpx;}
53     
54     // Pad size in y 
55     virtual Float_t Dpy() const {return fDpy;}
56     // Pad size in x by Sector
57     virtual Float_t Dpx(Int_t isec) const;
58     // Pad size in y by Sector
59     virtual Float_t Dpy(Int_t isec) const;
60     // Maximum number of Pads in x
61     virtual Int_t    Npx() const {return fNpx;}
62     // Maximum number of Pads in y
63     virtual Int_t    Npy() const {return fNpy;}
64     //
65     virtual void     SetPad(Int_t ix,Int_t iy);
66     
67     virtual void     SetHit(Float_t xhit, Float_t yhit, Float_t zhit);
68     //
69     // Iterate over pads
70     // Initialiser
71     virtual void  FirstPad(Float_t xhit, Float_t yhit, Float_t zhit, Float_t dx, Float_t dy);
72     // Stepper
73     virtual void  NextPad();
74     // Condition
75     virtual Int_t MorePads();
76     // Get next neighbours 
77     virtual void Neighbours
78         (Int_t iX, Int_t iY, Int_t* Nlist, Int_t Xlist[10], Int_t Ylist[10]);
79     virtual Float_t Distance2AndOffset(Int_t iX, Int_t iY, Float_t X, Float_t Y, Int_t *dummy);
80     virtual void GetNParallelAndOffset(Int_t iX, Int_t iY, Int_t *Nparallel, Int_t *Offset);
81     //
82     // Current Pad during Integration
83     // x-coordinate
84     virtual Int_t  Ix();
85     // y-coordinate
86     virtual Int_t  Iy();
87     // current sector
88     virtual Int_t ISector();
89     // calculate sector from pad coordinates
90     virtual Int_t Sector(Int_t ix, Int_t iy);
91     virtual Int_t Sector(Float_t  x, Float_t y)
92         {
93             Int_t ix, iy;
94             GetPadI(x,y,0.,ix,iy);
95             return Sector(ix,iy);
96         }
97     
98     //
99     // Signal Generation Condition during Stepping
100     virtual Int_t SigGenCond(Float_t x, Float_t y, Float_t z);
101     // Initialise signal generation at coord (x,y,z)
102     virtual void  SigGenInit(Float_t x, Float_t y, Float_t z);
103
104     //
105     // Integration
106     // Current integration limits
107     virtual void IntegrationLimits
108         (Float_t& x1, Float_t& x2, Float_t& y1, Float_t& y2);
109     //
110     // Class specific methods
111     virtual void SetNSlats(Int_t nslats) {fNSlats = nslats;}
112     virtual void SetShift(Float_t shift) {fShift = shift;}
113     virtual void SetNPCBperSector(Int_t *npcb);
114     virtual void SetSlatXPositions(Float_t *xpos);
115     virtual void SetSlatYPositions(Float_t *ypos);    
116     virtual AliMUONSegmentationSlatModule* Slat(Int_t index) const;
117     
118 // Not used
119     // Test points for auto calibration
120     virtual void GiveTestPoints(Int_t &n, Float_t *x, Float_t *y) const;
121     // Draw the segmentation zones
122     virtual void Draw(const char *opt = "");
123
124     
125     // Function for systematic corrections
126     // Set the correction function
127     virtual void SetCorrFunc(Int_t, TF1*) {;}
128     
129     // Get the correction Function
130     virtual TF1* CorrFunc(Int_t) const {return NULL;}
131  protected:
132     AliMUONSegmentationSlat(const AliMUONSegmentationSlat& rhs);
133     AliMUONSegmentationSlat& operator=(const AliMUONSegmentationSlat& rhs);
134     
135     virtual void GlobalToLocal(
136         Float_t x, Float_t y, Float_t z,  Int_t &islat, Float_t &xlocal, Float_t &ylocal);
137     virtual void GlobalToLocal(
138         Int_t ix, Int_t iy, Int_t &islat, Int_t &ixlocal, Int_t &iylocal) const;
139
140     virtual void LocalToGlobal (
141          Int_t islat, Float_t xlocal, Float_t ylocal, Float_t &x, Float_t  &y, Float_t &z) const; 
142     virtual void LocalToGlobal (
143          Int_t islat, Int_t ixlocal, Int_t iylocal, Int_t &ix, Int_t &iy) const;
144     virtual void SetSymmetry(Int_t   ix);
145     virtual void SetSymmetry(Float_t  x);
146    // Factory method for associated slat module class  
147     virtual AliMUONSegmentationSlatModule* CreateSlatModule() const;
148     
149  protected:
150
151     AliMUONChamber*      fChamber;               // Parent Chamber
152     Int_t                fId;                    // Identifier
153     //
154     //  Geometry
155     //
156     Float_t    fWireD;                            // Wire Pitch
157     Int_t      fNSlats;                           // Number of slats
158     Int_t      fPcb[15][4];                       // PcbSegmentation
159     Float_t    fXPosition[15];                    // x-position of slats
160     Float_t    fYPosOrigin;                       // y-Position of lowest slat
161     Float_t    fYPosition[15];                    // y-position of slats
162     Float_t    fSlatX[15];                        // Slat x-dimension
163     Float_t    fSlatY;                            // Slat y-dimension
164     Float_t    fDpx;                              // Pad size x
165     Float_t    fDpy;                              // Pad size y
166     Int_t      fNpx;                              // maximum number of pads in x
167     Int_t      fNpy;                              // maximum number of pads in y
168     Int_t      fSym;                              // signs for symmetry trafo
169     Float_t    fShift;                            // Half overlap of pad planes
170     Float_t    fDzSlat;                           // Half distance between slat planes
171     Float_t    fDzCh;                             // Half distance between half-chamber planes
172
173     TArrayI*    fNDiv;                             // Pad size division
174     // Slats
175     TObjArray*  fSlats;                            // Array of Slats
176     // Proxy data
177     AliMUONSegmentationSlatModule* fCurrentSlat;   // Pointer to current slat
178     Int_t       fSlatIndex;                        // Current slat index
179     ClassDef(AliMUONSegmentationSlat,2)            // Segmentation for Muon Chamber built from Slat Modules
180 };
181         
182
183 #endif
184
185
186
187
188
189
190
191
192