fe4da5cc |
1 | #ifndef MUONv01_H |
2 | #define MUONv01_H |
3 | ///////////////////////////////////////////////////// |
4 | // Segmentation and Response classes version 01 // |
5 | ///////////////////////////////////////////////////// |
6 | |
7 | #include "AliMUON.h" |
8 | #include "TArrayF.h" |
9 | #include "TArrayI.h" |
10 | class AliMUONsegmentationV01 : |
11 | public AliMUONsegmentation { |
12 | public: |
13 | AliMUONsegmentationV01(); |
14 | virtual ~AliMUONsegmentationV01(){} |
15 | // |
16 | // Set Chamber Segmentation Parameters |
17 | virtual void SetPADSIZ(Float_t p1, Float_t p2); |
18 | virtual void SetDAnod(Float_t D) {fWireD = D;}; |
19 | virtual void SetPadDivision(Int_t ndiv[4]); |
20 | virtual void SetSegRadii(Float_t r[4]); |
21 | // |
22 | // Initialisation |
23 | virtual void Init(AliMUONchamber*); |
24 | // |
25 | // Get member data |
26 | virtual Float_t Dpx(){return fDpx;} |
27 | virtual Float_t Dpy(){return fDpy;} |
28 | virtual Int_t Npx(){return fNpx[fNsec-1][1]+1;} |
29 | virtual Int_t Npy(){return fNpy;} |
30 | // |
31 | // Transform from pad (wire) to real coordinates and vice versa |
32 | virtual Float_t GetAnod(Float_t xhit); |
33 | virtual void GetPadIxy(Float_t x ,Float_t y ,Int_t &ix,Int_t &iy); |
34 | virtual void GetPadCxy(Int_t ix,Int_t iy,Float_t &x ,Float_t &y ); |
35 | // |
36 | // Iterate over pads |
37 | virtual void FirstPad(Float_t xhit, Float_t yhit, Float_t dx, Float_t dy); |
38 | virtual void NextPad(); |
39 | virtual Int_t MorePads(); |
40 | // Get next neighbours |
41 | virtual void Neighbours |
42 | (Int_t iX, Int_t iY, Int_t* Nlist, Int_t Xlist[10], Int_t Ylist[10]); |
43 | // Provisory RecCluster coordinates reconstructor |
44 | virtual void FitXY(AliMUONRecCluster* Cluster,TClonesArray* MUONdigits); |
45 | // |
46 | // Current Pad during Integration |
47 | virtual Int_t Ix() {return fix;} |
48 | virtual Int_t Iy() {return fiy;} |
49 | virtual Int_t ISector() {return fSector;} |
50 | // |
51 | // Integration |
52 | virtual void IntegrationLimits |
53 | (Float_t& x1, Float_t& x2, Float_t& y1, Float_t& y2); |
54 | Int_t SigGenCond(Float_t x, Float_t y, Float_t z); |
55 | void SigGenInit(Float_t x, Float_t y, Float_t z); |
56 | // |
57 | // Identification |
fe4da5cc |
58 | ClassDef(AliMUONsegmentationV01,1) |
59 | |
60 | private: |
61 | // Signal Generation Condition during Stepping |
62 | void GetSuperPadIxy(Float_t x, Float_t y, Int_t &ix, Int_t &iy); |
63 | void GetSuperPadCxy(Int_t ix, Int_t iy, Float_t &x, Float_t &y); |
64 | Int_t Sector(Int_t ix, Int_t iy); |
65 | protected: |
66 | // |
67 | // Implementation of the segmentation data |
68 | // Version 0 models rectangular pads with the same dimensions all |
69 | // over the cathode plane |
70 | // |
71 | // geometry |
72 | // |
73 | Int_t fNsec; // Number of sectors |
74 | TArrayF fRSec; // sector outer radia |
75 | TArrayI fNDiv; // pad size division |
76 | Float_t fDpx; // x pad width per sector |
77 | Float_t fDpy; // y pad base width |
78 | TArrayF fDpxD; // y pad width per sector |
79 | Int_t fNpx[10][1000]; // Number of pads per sector in x |
80 | Float_t fCx[10][1000]; // pad-sector contour x vs y |
81 | Int_t fNpy; // Number of pads in y |
82 | Float_t fWireD; // wire pitch |
83 | |
84 | // Chamber region consideres during disintegration |
85 | // (lower left and upper right corner) |
86 | // |
87 | Int_t fixmin; |
88 | Int_t fixmax; |
89 | Int_t fiymin; |
90 | Int_t fiymax; |
91 | Float_t fxmin; |
92 | Float_t fxmax; |
93 | // |
94 | // Current pad during integration (cursor for disintegration) |
95 | Int_t fix; |
96 | Int_t fiy; |
97 | Float_t fx; |
98 | Float_t fy; |
99 | Int_t fSector; |
100 | // |
101 | // Current pad and wire during tracking (cursor at hit centre) |
102 | Int_t fixt; |
103 | Int_t fiyt; |
104 | Int_t fiwt; |
105 | Float_t fxt; |
106 | Float_t fyt; |
e67c69c4 |
107 | |
fe4da5cc |
108 | }; |
109 | #endif |
110 | |
111 | |
112 | |
113 | |
114 | |
115 | |