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