Remove several warnings
[u/mrichter/AliRoot.git] / MUON / AliMUONSegResV0.h
1 #ifndef MUONSegResV0_H
2 #define MUONSegResV0_H
3
4 #include "AliMUONSegRes.h"
5 class AliMUONchamber;
6
7 class AliMUONsegmentationV0 :
8 public AliMUONsegmentation {
9  public:
10     AliMUONsegmentationV0(){}
11     virtual ~AliMUONsegmentationV0(){}
12     // Set Chamber Segmentation Parameters
13     //
14     // Pad size Dx*Dy 
15     virtual  void    SetPADSIZ(Float_t p1, Float_t p2);
16     // Anod Pitch
17     virtual  void    SetDAnod(Float_t D) {fWireD = D;};
18     // Transform from pad (wire) to real coordinates and vice versa
19     //
20     // Anod wire coordinate closest to xhit
21     virtual Float_t GetAnod(Float_t xhit);
22     // Transform from pad to real coordinates
23     virtual void    GetPadIxy(Float_t x ,Float_t y ,Int_t   &ix,Int_t   &iy);
24     // Transform from real to pad coordinates
25     virtual void    GetPadCxy(Int_t   ix,Int_t   iy,Float_t &x ,Float_t &y );
26     //
27     // Initialisation
28     virtual void Init(AliMUONchamber*);
29     //
30     // Get member data
31     //
32     // Pad size in x
33     virtual Float_t Dpx(){return fDpx;}
34     // Pad size in y
35     virtual Float_t Dpy(){return fDpy;}
36     // Pad size in x by Sector
37     virtual Float_t Dpx(Int_t) {return fDpx;}
38     // Pad size in y by Secto
39     virtual Float_t Dpy(Int_t) {return fDpy;}
40     // Max number of Pads in x
41     virtual Int_t   Npx(){return fNpx;}
42     // max number of Pads in y
43     virtual Int_t   Npy(){return fNpy;}
44     // set pad position
45     virtual void     SetPad(Int_t, Int_t);
46     // set hit position
47     virtual void     SetHit(Float_t, Float_t);
48     //
49     // Iterate over pads
50     // Initialiser
51     virtual void  FirstPad(Float_t xhit, Float_t yhit, Float_t dx, Float_t dy);
52     // Stepper
53     virtual void  NextPad();
54     // Condition
55     virtual Int_t MorePads();
56     //
57     // Distance between 1 pad and a position
58     virtual Float_t Distance2AndOffset(Int_t iX, Int_t iY, Float_t X, Float_t Y, Int_t *
59 dummy);
60     // Number of pads read in parallel and offset to add to x 
61     // (specific to LYON, but mandatory for display)
62     virtual void GetNParallelAndOffset(Int_t, Int_t ,
63         Int_t *Nparallel, Int_t *Offset) {*Nparallel=1;*Offset=0;}
64     // Get next neighbours 
65     virtual void Neighbours
66         (Int_t iX, Int_t iY, Int_t* Nlist, Int_t Xlist[10], Int_t Ylist[10]);
67     // Current Pad during Integration
68     // x-coordinaten
69     virtual Int_t  Ix(){return fix;}
70     // y-coordinate
71     virtual Int_t  Iy(){return fiy;}
72     // current sector
73     virtual Int_t  ISector(){return 1;}
74     // calculate sector from pad coordinates
75     virtual Int_t  Sector(Int_t , Int_t ) {return 1;}
76     //
77     // Signal Generation Condition during Stepping
78     virtual Int_t SigGenCond(Float_t x, Float_t y, Float_t z);
79     // Initialise signal gneration at coord (x,y,z)
80     virtual void  SigGenInit(Float_t x, Float_t y, Float_t z);
81     // Current integration limits
82     virtual void IntegrationLimits
83         (Float_t& x1, Float_t& x2, Float_t& y1, Float_t& y2);
84     // Test points for auto calibration
85     virtual void GiveTestPoints(Int_t &n, Float_t *x, Float_t *y);
86     // Debugging utilities
87     virtual void Draw(Option_t *);
88     // Function for systematic corrections
89     virtual void SetCorrFunc(Int_t, TF1* func) {fCorr=func;}
90     
91     virtual TF1* CorrFunc(Int_t) {return fCorr;} 
92
93     
94     ClassDef(AliMUONsegmentationV0,1)
95          protected:
96     //
97     // Implementation of the segmentation data
98     // Version 0 models rectangular pads with the same dimensions all
99     // over the cathode plane
100     //
101     //  geometry
102     //
103     Float_t    fDpx;           // x pad width per sector  
104     Float_t    fDpy;           // y pad base width
105     Int_t      fNpx;           // Number of pads in x
106     Int_t      fNpy;           // Number of pads in y
107     Float_t    fWireD;         // wire pitch
108     Float_t    fRmin;          // inner radius
109     Float_t    fRmax;          // outer radius
110     
111     
112     // Chamber region consideres during disintegration   
113     Int_t fixmin; // lower left  x
114     Int_t fixmax; // lower left  y
115     Int_t fiymin; // upper right x
116     Int_t fiymax; // upper right y 
117     //
118     // Current pad during integration (cursor for disintegration)
119     Int_t fix;  // pad coord. x 
120     Int_t fiy;  // pad coord. y 
121     Float_t fx; // x
122     Float_t fy; // y
123     //
124     // Current pad and wire during tracking (cursor at hit centre)
125     //
126     //
127     Float_t fxhit;
128     Float_t fyhit;
129     // Reference point to define signal generation condition
130     Int_t fixt;     // pad coord. x
131     Int_t fiyt;     // pad coord. y
132     Int_t fiwt;     // wire number
133     Float_t fxt;    // x
134     Float_t fyt;    // y
135     TF1*    fCorr;  // correction function
136     
137 };
138
139 class AliMUONresponseV0 : //Mathieson response
140 public AliMUONresponse {
141  public:
142     AliMUONresponseV0(){}
143     virtual ~AliMUONresponseV0(){}
144     //
145     // Configuration methods
146     //
147     // Number of sigmas over which cluster didintegration is performed
148     virtual void    SetSigmaIntegration(Float_t p1) {fSigmaIntegration=p1;}
149     virtual Float_t SigmaIntegration() {return fSigmaIntegration;}    
150     // charge slope in ADC/e
151     virtual void    SetChargeSlope(Float_t p1) {fChargeSlope=p1;}
152     virtual Float_t ChargeSlope()      {return fChargeSlope;}
153     // sigma of the charge spread function
154     virtual void    SetChargeSpread(Float_t p1, Float_t p2)
155         {fChargeSpreadX=p1; fChargeSpreadY=p2;}
156     virtual Float_t ChargeSpreadX()    {return fChargeSpreadX;}    
157     virtual Float_t ChargeSpreadY()    {return fChargeSpreadY;}        
158     // Adc-count saturation value
159     virtual void    SetMaxAdc(Float_t p1) {fMaxAdc=p1;}
160     virtual Float_t MaxAdc()           {return fMaxAdc;}
161     // anode cathode Pitch
162     virtual Float_t Pitch()            {return fPitch;}
163     virtual void    SetPitch(Float_t p1) {fPitch=p1;};
164     // Mathieson parameters
165     virtual void    SetSqrtKx3(Float_t p1) {fSqrtKx3=p1;};
166     virtual void    SetKx2(Float_t p1) {fKx2=p1;};
167     virtual void    SetKx4(Float_t p1) {fKx4=p1;};
168     virtual void    SetSqrtKy3(Float_t p1) {fSqrtKy3=p1;};
169     virtual void    SetKy2(Float_t p1) {fKy2=p1;};
170     virtual void    SetKy4(Float_t p1) {fKy4=p1;};
171
172     //  
173     // Chamber response methods
174     // Pulse height from scored quantity (eloss)
175     virtual Float_t  IntPH(Float_t eloss);
176     // Charge disintegration
177     virtual Float_t  IntXY(AliMUONsegmentation * segmentation);
178
179     ClassDef(AliMUONresponseV0,1)
180  protected:
181     Float_t fChargeSlope;              // Slope of the charge distribution
182     Float_t fChargeSpreadX;            // Width of the charge distribution in x
183     Float_t fChargeSpreadY;            // Width of the charge distribution in y
184     Float_t fSigmaIntegration;         // Number of sigma's used for charge distribution
185     Float_t fMaxAdc;                   // Maximum ADC channel
186     Float_t fSqrtKx3;                  // Mathieson parameters for x
187     Float_t fKx2;
188     Float_t fKx4;
189     Float_t fSqrtKy3;                  // Mathieson parameters for y
190     Float_t fKy2;
191     Float_t fKy4;
192     Float_t fPitch;                    //anode-cathode pitch
193 };
194 #endif
195
196
197
198
199
200
201
202
203
204
205