New version of MUON from M.Bondila & A.Morsch
[u/mrichter/AliRoot.git] / MUON / AliMUONSegResV01.h
1 #ifndef MUONSegResV01_H
2 #define MUONSegResV01_H
3 /////////////////////////////////////////////////////
4 //  Segmentation and Response classes version 01   //
5 /////////////////////////////////////////////////////
6  
7 #include "AliMUON.h"
8 #include "AliMUONSegResV0.h"
9 #include "TArrayF.h"
10 #include "TArrayI.h"
11 #include "TObjArray.h"
12
13 class AliMUONsegmentationV01 :
14 public AliMUONsegmentationV0 {
15  public:
16     AliMUONsegmentationV01();
17     virtual ~AliMUONsegmentationV01(){}
18     //    
19     // Set Chamber Segmentation Parameters
20     // 
21     virtual  void    SetPadDivision(Int_t ndiv[4]);
22     // Radii
23     virtual  void    SetSegRadii(Float_t  r[4]);
24     //
25     // Transform from pad (wire) to real coordinates and vice versa
26     //
27     // Transform from pad to real coordinates
28     virtual void    GetPadIxy(Float_t x ,Float_t y ,Int_t   &ix,Int_t   &iy);
29     // Transform from real to pad coordinates
30     virtual void    GetPadCxy(Int_t   ix,Int_t   iy,Float_t &x ,Float_t &y );    
31     //
32     // Initialisation
33     virtual void Init(AliMUONchamber*);
34     //
35     // Get member data
36     //
37     // Pad size in x by Sector
38     virtual Float_t Dpx(Int_t isec);
39     // Pad size in y by Sector
40     virtual Float_t Dpy(Int_t isec);
41     // Max number of Pads in x
42     virtual Int_t   Npx(){return fNpxS[fNsec-1][1]+1;}
43     //
44     virtual void     SetPad(Int_t,Int_t);
45     //
46     // Iterate over pads
47     // Initialiser
48     virtual void  FirstPad(Float_t xhit, Float_t yhit, Float_t dx, Float_t dy);
49     // Stepper
50     virtual void  NextPad();
51     // Condition
52     virtual Int_t MorePads();
53     // Get next neighbours 
54     virtual void Neighbours
55         (Int_t iX, Int_t iY, Int_t* Nlist, Int_t Xlist[10], Int_t Ylist[10]);
56     // Provisory RecCluster coordinates reconstructor
57     virtual void FitXY(AliMUONRecCluster* Cluster,TClonesArray* MUONdigits);
58     //
59     // Current Pad during Integration
60     // current sector
61     virtual Int_t ISector()  {return fSector;}
62     // calculate sector from pad coordinates
63     virtual Int_t Sector(Int_t ix, Int_t iy);
64     //
65     // Integration
66     // Current integration limits
67      virtual void IntegrationLimits
68         (Float_t& x1, Float_t& x2, Float_t& y1, Float_t& y2);
69      // Test points for auto calibration
70     void GiveTestPoints(Int_t &n, Float_t *x, Float_t *y);
71     //
72     // Debugging utilities
73     virtual void Draw();
74     // Function for systematic corrections
75     virtual void SetCorrFunc(Int_t dum, TF1* func);
76     virtual TF1* CorrFunc(Int_t);
77     
78
79     ClassDef(AliMUONsegmentationV01,1)
80  protected:
81     //
82     // Implementation of the segmentation data
83     // Version 0 models rectangular pads with the same dimensions all
84     // over the cathode plane
85     //
86     //  geometry
87     //
88     Int_t      fNsec;           // Number of sectors
89     TArrayF    fRSec;           // sector outer radia
90     TArrayI    fNDiv;           // pad size division
91     TArrayF    fDpxD;           // y pad width per sector
92     Int_t      fNpxS[10][1000]; // Number of pads per sector in x
93     Float_t    fCx[10][1000];   // pad-sector contour x vs y  
94     // Chamber region consideres during disintegration
95     // (lower left and upper right corner)
96     //
97     Float_t fxmin;
98     Float_t fxmax;
99     Float_t fymin;
100     Float_t fymax;
101
102     //
103     // Current pad during integration (cursor for disintegration)
104     Int_t   fSector;
105     TObjArray *fCorr;
106 };
107 #endif
108
109
110
111
112
113