]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TPC/AliTPCPRF2D.h
NodeName array dimension enlarged
[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 //  Manager class for AliTPCPRF2D             //
9 ////////////////////////////////////////////////
10   
11
12 // include files and class forward declarations
13 //DSTEP in cm
14 //NPRF in number of interpolation points
15
16
17 #include "TObject.h"
18 #include "TMath.h"
19 class TF2;
20 class TArrayF;
21
22 class AliTPCPRF2D : public TObject {
23 public : 
24   AliTPCPRF2D();
25   ~AliTPCPRF2D();
26   void Update();  //recalculate tables for charge calculation
27   Float_t GetGRF(Float_t xin, Float_t yin); 
28   //return generic response function  in xin
29   Float_t GetPRF(Float_t xin, Float_t yin, Bool_t inter=kFALSE); 
30   //return PRF in point xin,yin
31   void DrawX(Float_t x1, Float_t x2,Float_t y, Bool_t inter=kFALSE);  
32   //draw one dimensional response for
33   //fixed y
34   // void DrawY(Float_t y1, Float_t y2,Float_t x);
35   //draw one dimensional response for fixed x
36   void Draw(Float_t x1, Float_t x2, Float_t y1, Float_t y2,
37             Bool_t inter=kFALSE, Int_t Nx=20, Int_t Ny=20);
38   //draw two dimensional PRF
39
40   void DrawDist(Float_t x1, Float_t x2, Float_t y1, Float_t y2,
41                 Bool_t inter=kFALSE, Int_t Nx=20, Int_t Ny=20, 
42                 Float_t  thr=0);
43   //draw distortion of COG method
44   //we suppose threshold equal to thr
45
46   void SetPad(Float_t width, Float_t height);
47   //set base chevron parameters
48   void SetChevron(Float_t hstep, Float_t shifty, Float_t fac);
49   //set chevron parameters   
50   void SetChParam(Float_t width, Float_t height,
51                   Float_t hstep, Float_t shifty, Float_t fac);
52   //set all geometrical parameters     
53   void SetY(Float_t y1, Float_t y2, Int_t nYdiv) ;
54   void SetChargeAngle(Float_t angle){fChargeAngle = angle;} //set angle of pad and charge distribution
55                                                             //axes
56   void SetGauss(Float_t sigmaX,Float_t sigmaY , Float_t kNorm=1);
57   //adjust PRF with GAUSIAN as generic GRF 
58   //if  direct = kTRUE then it does't convolute distribution
59   void SetCosh(Float_t sigmaX,Float_t sigmaY , Float_t kNorm=1);
60   //adjust PRF with 1/Cosh  as generic GRF
61   void  SetGati(Float_t K3X, Float_t K3Y,
62                      Float_t padDistance,
63                      Float_t kNorm=1);
64   void SetParam(TF2 * GRF,Float_t kNorm, 
65                 Float_t sigmaX=0, Float_t sigmaY=0);
66   void SetNdiv(Int_t Ndiv){fNdiv=Ndiv;}
67   Float_t GetSigmaX() const {return fSigmaX;}
68   Float_t GetSigmaY() const {return fSigmaY;}
69   
70   
71 protected:
72   void Update1(); 
73   void UpdateSigma();  //recalculate sigma of PRF
74   Float_t GetPRFActiv(Float_t xin); //return PRF in point xin and actual y
75   Float_t  * fcharge; //field with PRF 
76   Float_t fY1;        //position of first "virtual" vire 
77   Float_t fY2;        //position of last virtual vire
78   Int_t fNYdiv;       //number of wires
79   Float_t * ffcharge;  //pointer to array of arrays
80
81 private: 
82
83   //chevron parameters
84   Float_t fHeightFull;  //height of the full pad
85   Float_t fHeightS;     //height of the one step
86   Float_t fShiftY;      //shift of the step
87   Float_t fWidth;       //width of the pad
88   Float_t fK;           //k factor of the chewron
89
90   Double_t funParam[5];//parameters of used charge function
91   Int_t  fNPRF;      //number of interpolations point
92   Int_t  fNdiv;      //number of division to calculate integral
93   Float_t fDStep;    //element step for point 
94   Float_t fkNorm;     //normalisation factor of the charge integral
95   Float_t fInteg;     //integral of GRF on +- infinity
96   TF2 *  fGRF;        //charge distribution function
97
98   Float_t fK3X;       //KX parameter (only for Gati parametrization)
99   Float_t fK3Y;       //KY parameter (only for Gati parametrisation)
100   Float_t fPadDistance; //pad anode distnce (only for Gati parametrisation)
101
102   Float_t  fOrigSigmaX; //sigma of original distribution;  
103   Float_t  fOrigSigmaY; //sigma of original distribution;  
104   Float_t  fChargeAngle;//'angle' of charge distribution refernce system to pad reference system
105   Float_t  fCosAngle;   //'angle' of the pad assymetry
106
107   Float_t  fSigmaX;    //sigma X of PAD response function
108   Float_t  fSigmaY;    //sigma Y of PAD response function
109   Float_t  fMeanX;     //mean X value
110   Float_t  fMeanY;     //mean Y value
111   //calculated during update
112
113    
114
115   char  fType[5];       //charge type
116   Float_t fCurrentY;    //in reality we calculate PRF only for one fixed y 
117   Float_t fDYtoWire;    //! used to make PRF calculation faster in GetPRF
118   Float_t fDStepM1;     //! used in GetPRFActiv to make calculation faster
119   ClassDef(AliTPCPRF2D,1) 
120 }; 
121
122 #endif /* ALITPCPRF2D_H */
123