]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONSegmentationSlatModule.h
Segmentation classes for bending and non bending plane slat modules (A. de Falco...
[u/mrichter/AliRoot.git] / MUON / AliMUONSegmentationSlatModule.h
1 #ifndef ALIMUONSEGMENTATIONSLATMODULE_H
2 #define ALIMUONSEGMENTATIONSLATMODULE_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
8 /////////////////////////////////////////////////////
9 //  Segmentation classes for slat modules          //
10 //  to be used with AluMUONSegmentationSlat        //
11 /////////////////////////////////////////////////////
12
13 class TArrayF;
14 class TArrayI;
15 class TObjArray;
16
17 #include  "AliMUONSegmentationV0.h"
18
19 class AliMUONSegmentationSlatModule :
20 public AliMUONSegmentationV0 {
21  public:
22     AliMUONSegmentationSlatModule();
23     virtual ~AliMUONSegmentationSlatModule(){}
24     //    
25     // Set Chamber Segmentation Parameters
26     // 
27     virtual  void    SetPadDivision(Int_t ndiv[4]);
28     // Transform from pad to real coordinates
29     virtual void    GetPadI(Float_t x ,Float_t y ,Int_t   &ix,Int_t &iy);
30     virtual void    GetPadI(Float_t x, Float_t y , Float_t z, Int_t &ix, Int_t &iy)
31         {GetPadI(x, y, ix, iy);}
32     // Transform from real to pad coordinates
33     virtual void    GetPadC(Int_t   ix,Int_t   iy,Float_t &x ,Float_t &y );
34     virtual void    GetPadC(Int_t ix, Int_t iy, Float_t &x, Float_t &y, Float_t &z)
35         {z=0; GetPadC(ix, iy, x , y);}
36     // Initialisation
37     virtual void Init(Int_t chamber);
38     // Set Segmentation Zones (PCB Boards)
39     virtual void SetPcbBoards(Int_t n[4]);
40     //
41     // Get member data
42     //
43     // Pad size in x by Sector
44     virtual Float_t Dpx(Int_t isec) const;
45     // Pad size in y by Sector
46     virtual Float_t Dpy(Int_t isec) const;
47     //
48     virtual void    SetPad(Int_t ix,Int_t iy);
49     virtual void    SetHit(Float_t xhit, Float_t yhit);
50     virtual void    SetHit(Float_t xhit, Float_t yhit, Float_t zhit)
51         {SetHit(xhit, yhit);}
52     //
53     // Iterate over pads
54     // Initialiser
55     virtual void  FirstPad(Float_t xhit, Float_t yhit, Float_t dx, Float_t dy);
56     virtual void  FirstPad(Float_t xhit, Float_t yhit, Float_t zhit, Float_t dx, Float_t dy)
57         {FirstPad(xhit, yhit, dx, dy);}
58     // Stepper
59     virtual void  NextPad();
60     // Condition
61     virtual Int_t MorePads();
62     // Get next neighbours 
63     virtual void Neighbours
64         (Int_t iX, Int_t iY, Int_t* Nlist, Int_t Xlist[10], Int_t Ylist[10]); 
65     //
66     // Current Pad during Integration
67     // current sector
68     virtual Int_t ISector()  {return fSector;}
69     // calculate sector from pad coordinates
70     virtual Int_t Sector(Int_t ix, Int_t iy);
71     //
72     // Integration
73     // Current integration limits
74     virtual void IntegrationLimits
75         (Float_t& x1, Float_t& x2, Float_t& y1, Float_t& y2);
76     //
77     virtual void SetId(Int_t id) {fId=id;}
78     
79  protected:
80     //
81     //  Geometry
82     //
83     Int_t       fId;             // Id of this module
84     Int_t       fNsec;           // Number of sectors
85     TArrayI*    fNDiv;           // Pad size division
86     TArrayF*    fDpxD;           // y pad width per sector
87     
88     // Segmentation map
89     Int_t      fNpxS[10];       // Number of pads per sector in x
90     Int_t      fNpyS[10];       // Number of pads per sector in y    
91     Float_t    fCx[10];         // pad-sector contour x vs y  
92     // Chamber region consideres during disintegration
93     // (lower left and upper right corner)
94     //
95     Float_t fXmin;           // lower left  x
96     Float_t fXmax;           // lower left  y
97     Float_t fYmin;           // upper right x
98     Float_t fYmax;           // upper right y 
99
100     //
101     // Current pad during integration (cursor for disintegration)
102     Int_t   fSector;         // Current sector
103
104     Float_t fDxPCB;          // x-size of PCB board
105     Float_t fDyPCB;          // y-size of PCB board
106     Int_t   fPcbBoards[4];   // number of PCB boards per segmentation region
107     
108     ClassDef(AliMUONSegmentationSlatModule,1) // Segmenation for bending plate slats
109         
110 };
111 #endif
112
113
114
115
116
117