]> git.uio.no Git - u/mrichter/AliRoot.git/blob - RICH/AliRICHSegmentationV0.h
Adding track references at decay points (M.Ivanov)
[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) {GetPadI(x, y, ix, iy);}
33     // Transform from real to pad coordinates
34     virtual void    GetPadC(Int_t ix, Int_t iy, Float_t &x, Float_t &y);
35     virtual void    GetPadC(Int_t ix, Int_t iy, Float_t &x, Float_t &y, Float_t &z) 
36         {z=0; GetPadC(ix, iy, x , y);}
37     //
38     // Initialisation
39     virtual void Init(Int_t i);
40     //
41     // Get member data
42     //
43     // Pad size in x
44     virtual Float_t Dpx() const {return fDpx;}
45     //
46     // Pad size in y
47     virtual Float_t Dpy() const {return fDpy;}
48     // Pad size in x by Sector
49     virtual Float_t Dpx(Int_t) const {return fDpx;}
50     // Pad size in y by Sector
51     virtual Float_t Dpy(Int_t) const {return fDpy;}
52     // Max number of Pads in x
53     virtual Int_t   Npx() const {return fNpx;}
54     // Max number of Pads in y
55     virtual Int_t   Npy() const {return fNpy;}
56     // Dead zone width
57     virtual Float_t   DeadZone() const {return fDeadZone;}
58     
59     // Getters for padplane dimensions
60     virtual Float_t GetPadPlaneWidth()  const {return fPadPlane_Width;}
61     virtual Float_t GetPadPlaneLength() const {return fPadPlane_Length;}
62     
63
64     // set pad position
65     virtual void     SetPad(Int_t ix, Int_t iy);
66     // set hit position
67     virtual void     SetHit(Float_t xhit , Float_t yhit);
68     virtual void     SetHit(Float_t xhit, Float_t yhit, Float_t /*zhit*/){SetHit(xhit, yhit);}
69     //
70     // Iterate over pads
71     // Initialiser
72     virtual void  FirstPad(Float_t xhit, Float_t yhit, Float_t dx, Float_t dy);
73     virtual void  FirstPad(Float_t xhit, Float_t yhit, Float_t /*zhit*/, Float_t dx, Float_t dy){FirstPad(xhit, yhit, dx, dy);}
74     // Stepper
75     virtual void  NextPad();
76     // Condition
77     virtual Int_t MorePads();
78     //
79     // Distance between 1 pad and a position
80     virtual Float_t Distance2AndOffset(Int_t iX, Int_t iY, Float_t X, Float_t Y, Int_t *
81                                        dummy);
82     // Number of pads read in parallel and offset to add to x 
83     // (specific to LYON, but mandatory for display)
84     virtual void GetNParallelAndOffset(Int_t /*iX*/, Int_t /*iY*/,Int_t *Nparallel, Int_t *Offset) {*Nparallel=1;*Offset=0;}
85     // Get next neighbours 
86     virtual void Neighbours     (Int_t iX, Int_t iY, Int_t* Nlist, Int_t Xlist[10], Int_t Ylist[10]);
87     //
88     // Current Pad during Integration
89     // x-coordinate
90     virtual Int_t  Ix() {return fIx;}
91     // y-coordinate
92     virtual Int_t  Iy() {return fIy;}
93     // current sector
94     virtual Int_t  ISector() {return 1;}
95     // calculate sector from x-y coordinates
96     virtual Int_t  Sector(Int_t,Int_t) {return 1;}
97     virtual Int_t  Sector(Float_t,Float_t) {return 1;}
98     //
99     // Signal Generation Condition during Stepping
100     virtual Int_t SigGenCond(Float_t x, Float_t y, Float_t z);
101     // Initialise signal gneration at coord (x,y,z)
102     virtual void  SigGenInit(Float_t x, Float_t y, Float_t z);
103     // Current integration limits
104     virtual void IntegrationLimits
105         (Float_t& x1, Float_t& x2, Float_t& y1, Float_t& y2);
106     // Test points for auto calibration
107     virtual void GiveTestPoints(Int_t &n, Float_t *x, Float_t *y) const;
108     // Debugging utilities
109     virtual void Draw(const char* = "") const; 
110     // Function for systematic corrections
111     virtual void SetCorrFunc(Int_t /*dum*/, TF1* func) {fCorr=func;}
112
113     virtual TF1* CorrFunc(Int_t) const {return fCorr;} 
114     ClassDef(AliRICHSegmentationV0,1)
115         protected:
116     //
117     // Implementation of the segmentation data
118     // Version 0 models rectangular pads with the same dimensions all
119     // over the cathode plane
120     //
121     //  geometry
122     //
123     Float_t    fDpx;             // x pad width per sector  
124     Float_t    fDpy;             // y pad base width
125     Int_t      fNpx;             // Number of pads in x
126     Int_t      fNpy;             // Number of pads in y
127     Int_t      fSector;          // Current padplane
128     Float_t    fWireD;           // wire pitch
129     
130     Float_t fDeadZone;               //width of deadzones beteween CsI padplanes
131     Float_t fPadPlane_Width;         //width of CsI padplanes
132     Float_t fPadPlane_Length;        //length of CsI padplanes
133
134         
135     // Chamber region consideres during disintegration (lower left and upper right corner)
136     //
137     Int_t fIxmin; // lower left  x
138     Int_t fIxmax; // lower left  y
139     Int_t fIymin; // upper right x
140     Int_t fIymax; // upper right y 
141     //
142     // Current pad during integration (cursor for disintegration)
143     Int_t fIx;  // pad coord. x 
144     Int_t fIy;  // pad coord. y 
145     Float_t fX; // x
146     Float_t fY; // y
147     //
148     // Current pad and wire during tracking (cursor at hit centre)
149     Float_t fXhit;   //x position
150     Float_t fYhit;   //y position
151     // Reference point to define signal generation condition
152     Int_t fIxt;     // pad coord. x
153     Int_t fIyt;     // pad coord. y
154     Int_t fIwt;     // wire number
155     Float_t fXt;    // x
156     Float_t fYt;    // y
157     TF1*    fCorr;  // correction function
158 };
159 #endif
160
161