The Init method of AliITSreconstruction has to be called by the user. This was done...
[u/mrichter/AliRoot.git] / RICH / AliRICHSegmentationV0.h
1 #ifndef ALIRICHSEGMENTATIONV0_H
2 #define ALIRICHSEGMENTATIONV0_H
3
4
5 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
6  * See cxx source for full Copyright notice                               */
7
8 /* $Id$ */
9
10 #include "AliSegmentation.h"
11
12 class AliRICHSegmentationV0 :
13 public AliSegmentation {
14  public:
15   AliRICHSegmentationV0();
16     virtual ~AliRICHSegmentationV0(){}
17     //    
18     // Set Chamber Segmentation Parameters
19     //
20     // Pad size Dx*Dy 
21     virtual  void    SetPadSize(Float_t p1, Float_t p2);
22     // Anod Pitch
23     virtual  void    SetDAnod(Float_t D) {fWireD = D;};
24         
25     //
26     // Transform from pad (wire) to real coordinates and vice versa
27     //
28     // Anod wire coordinate closest to xhit
29     virtual Float_t GetAnod(Float_t xhit) const;
30     // Transform from pad to real coordinates
31     virtual void    GetPadI(Float_t x, Float_t y , Int_t &ix, Int_t &iy);
32     virtual void    GetPadI(Float_t x, Float_t y , Float_t z, Int_t &ix, Int_t &iy)  
33         {GetPadI(x, y, ix, iy);}
34     // Transform from real to pad coordinates
35     virtual void    GetPadC(Int_t ix, Int_t iy, Float_t &x, Float_t &y);
36     virtual void    GetPadC(Int_t ix, Int_t iy, Float_t &x, Float_t &y, Float_t &z) 
37         {z=0; GetPadC(ix, iy, x , y);}
38     //
39     // Initialisation
40     virtual void Init(Int_t id);
41     //
42     // Get member data
43     //
44     // Pad size in x
45     virtual Float_t Dpx() const {return fDpx;}
46     //
47     // Pad size in y
48     virtual Float_t Dpy() const {return fDpy;}
49     // Pad size in x by Sector
50     virtual Float_t Dpx(Int_t) const {return fDpx;}
51     // Pad size in y by Sector
52     virtual Float_t Dpy(Int_t) const {return fDpy;}
53     // Max number of Pads in x
54     virtual Int_t   Npx() const {return fNpx;}
55     // Max number of Pads in y
56     virtual Int_t   Npy() const {return fNpy;}
57     // Dead zone width
58     virtual Float_t   DeadZone() const {return fDeadZone;}
59     
60     // Getters for padplane dimensions
61     virtual Float_t GetPadPlaneWidth()  const {return fPadPlane_Width;}
62     virtual Float_t GetPadPlaneLength() const {return fPadPlane_Length;}
63     
64
65     // set pad position
66     virtual void     SetPad(Int_t ix, Int_t iy);
67     // set hit position
68     virtual void     SetHit(Float_t xhit , Float_t yhit);
69     virtual void     SetHit(Float_t xhit, Float_t yhit, Float_t zhit)
70         {SetHit(xhit, yhit);}
71     //
72     // Iterate over pads
73     // Initialiser
74     virtual void  FirstPad(Float_t xhit, Float_t yhit, Float_t dx, Float_t dy);
75     virtual void  FirstPad(Float_t xhit, Float_t yhit, Float_t zhit, Float_t dx, Float_t dy)
76         {FirstPad(xhit, yhit, dx, dy);}
77     // Stepper
78     virtual void  NextPad();
79     // Condition
80     virtual Int_t MorePads();
81     //
82     // Distance between 1 pad and a position
83     virtual Float_t Distance2AndOffset(Int_t iX, Int_t iY, Float_t X, Float_t Y, Int_t *
84                                        dummy);
85     // Number of pads read in parallel and offset to add to x 
86     // (specific to LYON, but mandatory for display)
87     virtual void GetNParallelAndOffset(Int_t iX, Int_t iY,
88                                        Int_t *Nparallel, Int_t *Offset) {*Nparallel=1;*Offset=0;}
89     // Get next neighbours 
90     virtual void Neighbours
91         (Int_t iX, Int_t iY, Int_t* Nlist, Int_t Xlist[10], Int_t Ylist[10]);
92     //
93     // Current Pad during Integration
94     // x-coordinate
95     virtual Int_t  Ix() {return fIx;}
96     // y-coordinate
97     virtual Int_t  Iy() {return fIy;}
98     // current sector
99     virtual Int_t  ISector() {return 1;}
100     // calculate sector from x-y coordinates
101     virtual Int_t  Sector(Int_t ix, Int_t iy) {return 1;}
102     //
103     // Signal Generation Condition during Stepping
104     virtual Int_t SigGenCond(Float_t x, Float_t y, Float_t z);
105     // Initialise signal gneration at coord (x,y,z)
106     virtual void  SigGenInit(Float_t x, Float_t y, Float_t z);
107     // Current integration limits
108     virtual void IntegrationLimits
109         (Float_t& x1, Float_t& x2, Float_t& y1, Float_t& y2);
110     // Test points for auto calibration
111     virtual void GiveTestPoints(Int_t &n, Float_t *x, Float_t *y) const;
112     // Debugging utilities
113     virtual void Draw(const char* = "") const; 
114     // Function for systematic corrections
115     virtual void SetCorrFunc(Int_t dum, TF1* func) {fCorr=func;}
116
117     virtual TF1* CorrFunc(Int_t) const {return fCorr;} 
118     ClassDef(AliRICHSegmentationV0,1)
119         protected:
120     //
121     // Implementation of the segmentation data
122     // Version 0 models rectangular pads with the same dimensions all
123     // over the cathode plane
124     //
125     //  geometry
126     //
127     Float_t    fDpx;             // x pad width per sector  
128     Float_t    fDpy;             // y pad base width
129     Int_t      fNpx;             // Number of pads in x
130     Int_t      fNpy;             // Number of pads in y
131     Int_t      fSector;          // Current padplane
132     Float_t    fWireD;           // wire pitch
133     
134     Float_t fDeadZone;               //width of deadzones beteween CsI padplanes
135     Float_t fPadPlane_Width;         //width of CsI padplanes
136     Float_t fPadPlane_Length;        //length of CsI padplanes
137
138         
139     // Chamber region consideres during disintegration (lower left and upper right corner)
140     //
141     Int_t fIxmin; // lower left  x
142     Int_t fIxmax; // lower left  y
143     Int_t fIymin; // upper right x
144     Int_t fIymax; // upper right y 
145     //
146     // Current pad during integration (cursor for disintegration)
147     Int_t fIx;  // pad coord. x 
148     Int_t fIy;  // pad coord. y 
149     Float_t fX; // x
150     Float_t fY; // y
151     //
152     // Current pad and wire during tracking (cursor at hit centre)
153     Float_t fXhit;   //x position
154     Float_t fYhit;   //y position
155     // Reference point to define signal generation condition
156     Int_t fIxt;     // pad coord. x
157     Int_t fIyt;     // pad coord. y
158     Int_t fIwt;     // wire number
159     Float_t fXt;    // x
160     Float_t fYt;    // y
161     TF1*    fCorr;  // correction function
162 };
163 #endif
164
165