3ceb7f6f3f30256decf367f389a0e0c2b9f5bb47
[u/mrichter/AliRoot.git] / MUON / AliMUONv01.h
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
58     virtual char* YourName() {return fName;}
59
60     ClassDef(AliMUONsegmentationV01,1)
61     
62  private:
63     // Signal Generation Condition during Stepping
64     void  GetSuperPadIxy(Float_t x, Float_t y, Int_t  &ix, Int_t  &iy);
65     void  GetSuperPadCxy(Int_t  ix, Int_t  iy, Float_t &x, Float_t &y);
66     Int_t Sector(Int_t ix, Int_t iy);
67  protected:
68     //
69     // Implementation of the segmentation data
70     // Version 0 models rectangular pads with the same dimensions all
71     // over the cathode plane
72     //
73     //  geometry
74     //
75     Int_t      fNsec;          // Number of sectors
76     TArrayF    fRSec;          // sector outer radia
77     TArrayI    fNDiv;          // pad size division
78     Float_t    fDpx;           // x pad width per sector  
79     Float_t    fDpy;           // y pad base width
80     TArrayF    fDpxD;          // y pad width per sector
81     Int_t      fNpx[10][1000]; // Number of pads per sector in x
82     Float_t    fCx[10][1000];  // pad-sector contour x vs y  
83     Int_t      fNpy;           // Number of pads in y
84     Float_t    fWireD;         // wire pitch
85     
86     // Chamber region consideres during disintegration
87     // (lower left and upper right corner)
88     //
89     Int_t  fixmin;
90     Int_t  fixmax;
91     Int_t  fiymin;
92     Int_t  fiymax;
93     Float_t fxmin;
94     Float_t fxmax;
95     //
96     // Current pad during integration (cursor for disintegration)
97     Int_t fix;
98     Int_t fiy;
99     Float_t fx;
100     Float_t fy;
101     Int_t   fSector;
102     //
103     // Current pad and wire during tracking (cursor at hit centre)
104     Int_t fixt;
105     Int_t fiyt;
106     Int_t fiwt;
107     Float_t fxt;
108     Float_t fyt;
109     //
110     // Version Identifier
111     char    *fName;       
112 };
113 #endif
114
115
116
117
118
119