Code from MUON-dev joined
[u/mrichter/AliRoot.git] / MUON / AliMUONSegmentationV01.h
1 #ifndef ALIMUONSEGMENTATIONV01_H
2 #define ALIMUONSEGMENTATIONV01_H
3
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice                               */
6
7 /* $Id$ */
8
9 /////////////////////////////////////////////////////
10 //  Segmentation and Response classes version 01   //
11 /////////////////////////////////////////////////////
12 class AliMUON;
13 class TArrayF;
14 class TArrayI;
15 class TObjArray;
16
17
18
19 #include "AliMUONSegmentationV0.h"
20 #include "TArrayI.h"
21 #include "TArrayF.h"
22
23 class AliMUONSegmentationV01 :
24 public AliMUONSegmentationV0 {
25  public:
26     AliMUONSegmentationV01();
27     AliMUONSegmentationV01(const AliMUONSegmentationV01 & segmentation);
28     
29     virtual ~AliMUONSegmentationV01(){}
30     //    
31     // Set Chamber Segmentation Parameters
32     // 
33     virtual  void    SetPadDivision(Int_t ndiv[4]);
34     // Radii
35     virtual  void    SetSegRadii(Float_t  r[4]);
36     //
37     // Transform from pad (wire) to real coordinates and vice versa
38     //
39     // Transform from pad to real coordinates
40     virtual void    GetPadIxy(Float_t x ,Float_t y ,Int_t   &ix,Int_t   &iy);
41     // Transform from real to pad coordinates
42     virtual void    GetPadCxy(Int_t   ix,Int_t   iy,Float_t &x ,Float_t &y );    
43     //
44     // Initialisation
45     virtual void Init(AliMUONChamber* chamber);
46     //
47     // Get member data
48     //
49     // Pad size in x by Sector
50     virtual Float_t Dpx(Int_t isec);
51     // Pad size in y by Sector
52     virtual Float_t Dpy(Int_t isec);
53     // Max number of Pads in x
54     virtual Int_t   Npx(){return fNpxS[fNsec-1][1]+1;}
55     //
56     virtual void    SetPad(Int_t ix,Int_t iy);
57     //
58     // Iterate over pads
59     // Initialiser
60     virtual void  FirstPad(Float_t xhit, Float_t yhit, Float_t dx, Float_t dy);
61     // Stepper
62     virtual void  NextPad();
63     // Condition
64     virtual Int_t MorePads();
65     // Get next neighbours 
66     virtual void Neighbours
67         (Int_t iX, Int_t iY, Int_t* Nlist, Int_t Xlist[10], Int_t Ylist[10]);
68     //
69     // Current Pad during Integration
70     // current sector
71     virtual Int_t ISector()  {return fSector;}
72     // calculate sector from pad coordinates
73     virtual Int_t Sector(Int_t ix, Int_t iy);
74     //
75     // Integration
76     // Current integration limits
77      virtual void IntegrationLimits
78         (Float_t& x1, Float_t& x2, Float_t& y1, Float_t& y2);
79     // Test points for auto calibration
80     void GiveTestPoints(Int_t &n, Float_t *x, Float_t *y);
81     //
82     // Draw segmentation zones
83     virtual void Draw();
84     // Function for systematic corrections
85     // Set the correction function
86     virtual void SetCorrFunc(Int_t dum, TF1* func);
87     // Get the correction function
88     virtual TF1* CorrFunc(Int_t iZone);
89     // assignment operator
90     AliMUONSegmentationV01& operator=(const AliMUONSegmentationV01& rhs);
91     ClassDef(AliMUONSegmentationV01,1) // Segmentation approximating circular zones with different pad size
92  protected:
93     //  Geometry
94     //
95     Int_t      fNsec;           // Number of sectors
96     TArrayF    fRSec;           // Sector outer radia
97     TArrayI    fNDiv;           // Pad size division
98     TArrayF    fDpxD;           // y pad width per sector
99     // Segmentation map
100     Int_t      fNpxS[10][1000]; // Number of pads per sector in x
101     Float_t    fCx[10][1000];   // pad-sector contour x vs y  
102     // Chamber region consideres during disintegration
103     // (lower left and upper right corner)
104     //
105     Float_t fxmin; // lower left  x
106     Float_t fxmax; // lower left  y
107     Float_t fymin; // upper right x
108     Float_t fymax; // upper right y 
109
110     //
111     // Current pad during integration (cursor for disintegration)
112     Int_t   fSector; // Current sector
113     //
114     TObjArray *fCorr; // Correction functions
115 };
116 #endif
117
118
119
120
121
122
123
124