]> git.uio.no Git - u/mrichter/AliRoot.git/blob - RICH/AliRICHSegRes.h
Bari's pattern recognition algorithm
[u/mrichter/AliRoot.git] / RICH / AliRICHSegRes.h
1 #ifndef RICHSegRes_H
2 #define RICHSegRes_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 #include "TObject.h"
10 #include "TClonesArray.h"
11 #include "TF1.h"
12 class AliRICHChamber;
13
14 class AliRICHSegmentation :
15 public TObject {
16     
17  public:
18     
19     // Set Chamber Segmentation Parameters
20     //
21     // Pad size Dx*Dy 
22     virtual void    SetPadSize(Float_t p1, Float_t p2)  =0;
23     // Anod Pitch
24     virtual void    SetDAnod(Float_t D)                 =0;
25     
26     //
27     // Anod wire coordinate closest to xhit
28     virtual Float_t GetAnod(Float_t xhit)               =0;
29     // Transform from pad (wire) to real coordinates
30     virtual void    GetPadIxy(Float_t x ,Float_t y ,Int_t   &ix,Int_t   &iy)=0;
31     // Transform from real to pad coordinates
32     virtual void    GetPadCxy(Int_t   ix,Int_t   iy,Float_t &x ,Float_t &y )=0;
33     //
34     // Initialisation
35     virtual void Init(AliRICHChamber*)                  =0;
36     //
37     // Get member data
38     //
39     // Pad size in x
40     virtual Float_t Dpx()                               =0;
41     // Pad size in y
42     virtual Float_t Dpy()                               =0;
43     // Pad size in x by Sector 
44     virtual Float_t Dpx(Int_t)                          =0;
45     // Pad size in y by Sector 
46     virtual Float_t Dpy(Int_t)                          =0;
47     // Max number of Pads in x
48     virtual Int_t Npx()                                 =0;
49     // Max number of Pads in y
50     virtual Int_t Npy()                                 =0;
51     
52
53     // set pad position
54     virtual void     SetPad(Int_t, Int_t)               =0;
55     // set hit position
56     virtual void     SetHit(Float_t, Float_t)           =0;
57     //
58     // Iterate over pads
59     // Initialiser
60     virtual void  FirstPad(Float_t xhit, Float_t yhit, Float_t dx, Float_t dy) =0;
61     // Stepper
62     virtual void  NextPad()=0;
63     // Condition
64     virtual Int_t MorePads()                           =0;
65     //
66     // Distance between 1 pad and a position
67     virtual Float_t Distance2AndOffset(Int_t iX, Int_t iY, Float_t X, Float_t Y, Int_t *dummy) =0;
68     // Number of pads read in parallel and offset to add to x 
69     // (specific to LYON, but mandatory for display)
70     virtual void GetNParallelAndOffset(Int_t iX, Int_t iY,
71                                        Int_t *Nparallel, Int_t *Offset) =0;
72     // Get next neighbours 
73     virtual void Neighbours
74         (Int_t iX, Int_t iY, Int_t* Nlist, Int_t Xlist[10], Int_t Ylist[10])     =0;
75     //
76     // Current pad cursor during disintegration
77     // x-coordinate
78     virtual Int_t  Ix()                                =0;
79     // y-coordinate
80     virtual Int_t  Iy()                                =0;
81     // current Sector
82     virtual Int_t  ISector()                           =0;
83     // calculate sector from pad coordinates
84     virtual Int_t  Sector(Float_t ix, Float_t iy)          =0;
85     //
86     // Signal Generation Condition during Stepping
87     virtual Int_t SigGenCond(Float_t x, Float_t y, Float_t z) = 0;
88     // Initialise signal gneration at coord (x,y,z)
89     virtual void  SigGenInit(Float_t x, Float_t y, Float_t z) = 0;
90     // Current integration limits 
91     virtual void  IntegrationLimits
92         (Float_t& x1, Float_t& x2, Float_t& y1, Float_t& y2)  = 0;
93     // Test points for auto calibration
94     virtual void GiveTestPoints(Int_t &n, Float_t *x, Float_t *y) = 0;
95     // Debug utilities
96     virtual void Draw()                                           = 0;
97     // Function for systematic corrections
98     virtual void SetCorrFunc(Int_t, TF1*)                         = 0;
99     virtual TF1* CorrFunc(Int_t)                                  = 0;
100     ClassDef(AliRICHSegmentation,1)
101         };
102 //----------------------------------------------
103 //
104 // Chamber response virtual base class
105 //
106 class AliRICHResponse :
107 public TObject {
108  public:
109     //
110     // Configuration methods
111     //
112     // Number of sigmas over which cluster didintegration is performed
113     virtual void    SetSigmaIntegration(Float_t p1)           =0;
114     virtual Float_t SigmaIntegration()                        =0;
115     // charge slope in ADC/e
116     virtual void    SetChargeSlope(Float_t p1)                =0;
117     virtual Float_t ChargeSlope()                             =0;
118     // sigma of the charge spread function
119     virtual void    SetChargeSpread(Float_t p1, Float_t p2)   =0;
120     virtual Float_t ChargeSpreadX()                           =0;
121     virtual Float_t ChargeSpreadY()                           =0;
122     // Adc-count saturation value
123     virtual void    SetMaxAdc(Float_t p1)                     =0;
124     virtual Float_t MaxAdc()                                  =0;
125     // anode cathode Pitch
126     virtual void    SetPitch(Float_t)                         =0;
127     virtual Float_t Pitch()                                   =0;
128     // alpha feedback
129     virtual void    SetAlphaFeedback(Float_t)                 =0;
130     virtual Float_t AlphaFeedback()                           =0;
131     // ionisation enrgy
132     virtual void    SetEIonisation(Float_t)                   =0;
133     virtual Float_t EIonisation()                             =0;
134     // Chamber response methods
135     // Pulse height from scored quantity (eloss)
136     virtual Float_t IntPH(Float_t eloss)                       =0;
137     virtual Float_t IntPH()                                    =0;
138     // Charge disintegration
139     virtual Float_t IntXY(AliRICHSegmentation *)                 =0;
140     virtual Int_t   FeedBackPhotons(Float_t *source, Float_t qtot) =0;
141     //
142     // Mathieson parameters
143     virtual void   SetSqrtKx3(Float_t p1)                        =0;
144     virtual void   SetKx2(Float_t p1)                            =0;
145     virtual void   SetKx4(Float_t p1)                            =0;
146     virtual void   SetSqrtKy3(Float_t p1)                        =0;
147     virtual void   SetKy2(Float_t p1)                            =0;
148     virtual void   SetKy4(Float_t p1)                            =0;
149     ClassDef(AliRICHResponse,1)
150 };
151
152 //----------------------------------------------
153 //
154 // Chamber geometry virtual base class
155 //
156 class AliRICHGeometry :
157 public TObject {
158  public:
159     //
160     // Configuration methods
161     //
162    // Radiator Thickness 
163     virtual void   SetGapThickness(Float_t t)      =0;
164     // Proximity Gap Thickness
165     virtual void   SetProximityGapThickness(Float_t t)           =0;
166     // Quartz Length
167     virtual void   SetQuartzLength(Float_t t)           =0;
168     // Quartz Width
169     virtual void   SetQuartzWidth(Float_t t)            =0;
170     // Quartz Thickness
171     virtual void   SetQuartzThickness(Float_t t)        =0;
172     // Freon Length
173     virtual void   SetOuterFreonLength(Float_t t)           =0;
174     // Freon Width
175     virtual void   SetOuterFreonWidth(Float_t t)            =0;
176     // Freon Length
177     virtual void   SetInnerFreonLength(Float_t t)           =0;
178     // Freon Width
179     virtual void   SetInnerFreonWidth(Float_t t)            =0;
180     // Quartz Thickness
181     virtual void   SetFreonThickness(Float_t t)        =0;
182     // Distance between radiator and pads
183     virtual void   SetRadiatorToPads(Float_t)                =0;
184
185     // Radiator thickness
186     virtual Float_t  GetGapThickness()             =0;
187     // Proximity Gap thickness
188     virtual Float_t  GetProximityGapThickness()                  =0;
189     // Quartz Length
190     virtual Float_t  GetQuartzLength()                  =0;
191     // Quartz Width
192     virtual Float_t  GetQuartzWidth()                   =0;
193     // Quartz Thickness
194     virtual Float_t  GetQuartzThickness()               =0;
195     // Freon Length
196     virtual Float_t  GetOuterFreonLength()              =0;
197     // Freon Width
198     virtual Float_t  GetOuterFreonWidth()               =0;
199     // Freon Length
200     virtual Float_t  GetInnerFreonLength()              =0;
201     // Freon Width
202     virtual Float_t  GetInnerFreonWidth()               =0;
203     // Freon Thickness
204     virtual Float_t  GetFreonThickness()                =0;
205     // Get distance between radiator and pads
206     virtual Float_t  GetRadiatorToPads()                =0;
207
208     ClassDef(AliRICHGeometry,1)
209 };
210
211 #endif