3646f77448f6c1c7ea37c0ded22d4a6c68bcb91b
[u/mrichter/AliRoot.git] / TPC / AliTPCPRF2D.h
1 #ifndef ALITPCPRF2D_H
2 #define ALITPCPRF2D_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id$ */
7
8 ////////////////////////////////////////////////
9 //  Manager class for AliTPCPRF2D                  //
10 ////////////////////////////////////////////////
11   
12
13 // include files and class forward declarations
14 //DSTEP in cm
15 //NPRF in number of interpolation points
16
17
18 #include "TObject.h"
19 #include "TMath.h"
20 class TF2;
21 class TArrayF; 
22
23 class AliTPCPRF2D : public TObject {
24 public : 
25   AliTPCPRF2D();
26   ~AliTPCPRF2D();
27
28   Float_t GetGRF(Float_t xin, Float_t yin); 
29   //return generic response function  in xin
30   Float_t GetPRF(Float_t xin, Float_t yin, Bool_t inter=kFALSE); 
31   //return PRF in point xin,yin
32   void SetY(Float_t y1, Float_t y2, Int_t nYdiv) ;
33   void DrawX(Float_t x1, Float_t x2,Float_t y, Bool_t inter=kFALSE);  
34   //draw one dimensional response for
35   //fixed y
36   // void DrawY(Float_t y1, Float_t y2,Float_t x);
37   //draw one dimensional response for fixed x
38   void Draw(Option_t *) {}
39   void Draw(Float_t x1, Float_t x2, Float_t y1, Float_t y2,
40             Bool_t inter=kFALSE, Int_t Nx=20, Int_t Ny=20);
41   //draw two dimensional PRF
42
43   void DrawDist(Float_t x1, Float_t x2, Float_t y1, Float_t y2,
44                 Bool_t inter=kFALSE, Int_t Nx=20, Int_t Ny=20, 
45                 Float_t  thr=0);
46   //draw distortion of COG method
47   //we suppose threshold equal to thr
48    
49   void SetGauss(Float_t sigmaX,Float_t sigmaY , Float_t kNorm=1);
50   //adjust PRF with GAUSIAN as generic GRF 
51   //if  direct = kTRUE then it does't convolute distribution
52   void SetCosh(Float_t sigmaX,Float_t sigmaY , Float_t kNorm=1);
53   //adjust PRF with 1/Cosh  as generic GRF
54   void  SetGati(Float_t K3X, Float_t K3Y,
55                      Float_t padDistance,
56                      Float_t kNorm=1);
57   void SetParam(TF2 * GRF,Float_t kNorm, 
58                 Float_t sigmaX=0, Float_t sigmaY=0);
59   void SetPad(Float_t width, Float_t height);
60   //set base chevron parameters
61   void SetChevron(Float_t hstep, Float_t shifty, Float_t fac);
62   //set chevron parameters   
63   void SetChParam(Float_t width, Float_t height,
64                   Float_t hstep, Float_t shifty, Float_t fac);
65   //set all geometrical parameters  
66   void SetNdiv(Int_t Ndiv){fNdiv=Ndiv;}
67   void Update();  
68 protected:
69   void Update1();  
70   Float_t GetPRFActiv(Float_t xin); //return PRF in point xin and actual y
71   Float_t  * fcharge; // field with PRF 
72   Float_t fY1;
73   Float_t fY2;
74   Int_t fNYdiv;  
75   Float_t * ffcharge;  //pointer to array of arrays
76
77 private: 
78   Double_t funParam[5];//parameters of used charge function
79   Int_t  fNPRF;      //number of interpolations point
80   Int_t  fNdiv;      //number of division to calculate integral
81   Float_t fDStep;    //element step for point 
82   Float_t fkNorm;     //normalisation factor of the charge integral
83   Float_t fInteg;     //integral of GRF on +- infinity
84   TF2 *  fGRF;        //charge distribution function
85
86   Float_t fK3X;
87   Float_t fK3Y;
88   Float_t fPadDistance;
89
90   Float_t  forigsigmaX;//sigma of original distribution;  
91   Float_t  forigsigmaY;//sigma of original distribution;  
92   Float_t fSigmaX;     //sigma of PAD response function
93   //calculated during update
94
95   //chewron parameters
96   Float_t fHeightFull;  //height of the full pad
97   Float_t fHeightS;     //height of the one step
98   Float_t fShiftY;  //shift of the step
99   Float_t fWidth;       //width of the pad
100   Float_t fK;           //k factor of the chewron
101   Float_t fActualY;          //in reality we calculate PRF only for 
102   //one fixed y
103   char  fType[5];  //charge type
104   //to make calculation faster we reduce  division
105   Float_t fDYtoWire;    //used to make PRF calculation faster in GetPRF
106   Float_t fDStepM1;     //used in GetPRFActiv
107   ClassDef(AliTPCPRF2D,1) 
108 }; 
109
110 #endif /* ALITPCPRF2D_H */
111