]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TPC/Base/AliTPCCorrectionLookupTable.h
9a9e6a8c55ed3193c8c0b5f7d1515c22b4282676
[u/mrichter/AliRoot.git] / TPC / Base / AliTPCCorrectionLookupTable.h
1 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
2  * See cxx source for full Copyright notice                               */
3
4 ////////////////////////////////////////////////////////////////////////////
5 // AliTPCCorrectionLookupTable class                                              //
6 // Authors: Jens Wiechula                                            //
7 ////////////////////////////////////////////////////////////////////////////
8
9 #include "AliTPCCorrection.h"
10 #include <TVectorD.h>
11 #include <TMatrixFfwd.h>
12
13 class AliTPCCorrectionLookupTable : public AliTPCCorrection {
14
15 public:
16   AliTPCCorrectionLookupTable();
17   virtual ~AliTPCCorrectionLookupTable();
18
19   virtual void GetCorrection(const Float_t x[],const Short_t roc,Float_t dx[]);
20   virtual void GetDistortion(const Float_t x[],const Short_t roc,Float_t dx[]);
21
22   void SetupDefaultLimits();
23   void CreateLookupTable(AliTPCCorrection &tpcCorr, Float_t stepSize=5.);
24   void CreateLookupTableSinglePhi(AliTPCCorrection &tpcCorr, Int_t iPhi, Float_t stepSize=5.);
25
26   void MergePhiTables(const char* files);
27
28   void   SetFillCorrection(Bool_t fill) { fFillCorrection=fill;   }
29   Bool_t GetFillCorrection() const      { return fFillCorrection; }
30   void BuildExactInverse();
31
32   Int_t GetNR()   const { return fNR;   }
33   Int_t GetNPhi() const { return fNPhi; }
34   Int_t GetNZ()   const { return fNZ;   }
35
36   const TVectorD& GetLimitsR()   const { return fLimitsR; }
37   const TVectorD& GetLimitsPhi() const { return fLimitsPhi; }
38   const TVectorD& GetLimitsZ()   const { return fLimitsZ; }
39   
40   void SetCorrScaleFactor(Float_t    val) { fCorrScaleFactor = val; }
41   Float_t    GetCorrScaleFactor() const { return fCorrScaleFactor; }
42   
43 private:
44
45   // sizes of lookup tables
46   // TODO: Remove, since it will be stored in the TVectorD anyhow?
47   Int_t     fNR;                   // number of rows (r) used for lookup table
48   Int_t     fNPhi;                 // number of phi slices used for lookup table
49   Int_t     fNZ;                   // number of columns (z) used for lookup table
50
51   Float_t   fCorrScaleFactor;      // overall scaling factor for the correction
52   
53   Bool_t    fFillCorrection;       // whether to also fill the correction tables
54   //
55   TVectorD  fLimitsR;              // bin limits in row direction
56   TVectorD  fLimitsPhi;            // bin limits in phi direction
57   TVectorD  fLimitsZ;              // bin limits in z direction
58   // for distortion
59   TMatrixF **fLookUpDxDist;        //[fNPhi] Array to store electric field integral (int Er/Ez)
60   TMatrixF **fLookUpDyDist;        //[fNPhi] Array to store electric field integral (int Er/Ez)
61   TMatrixF **fLookUpDzDist;        //[fNPhi] Array to store electric field integral (int Er/Ez)
62
63   // for correction
64   TMatrixF **fLookUpDxCorr;        //[fNPhi] Array to store electric field integral (int Er/Ez)
65   TMatrixF **fLookUpDyCorr;        //[fNPhi] Array to store electric field integral (int Er/Ez)
66   TMatrixF **fLookUpDzCorr;        //[fNPhi] Array to store electric field integral (int Er/Ez)
67
68   void InitTables();
69   void InitTableArrays();
70   void InitTablesPhiBin(Int_t iPhi);
71   
72   void ResetTables();
73   void ResetLimits();
74   
75   void GetInterpolation(const Float_t x[],const Short_t roc,Float_t dx[],
76                         TMatrixF **mR, TMatrixF **mPhi, TMatrixF **mZ);
77
78   void CreateLookupTablePhiBin(AliTPCCorrection &tpcCorr, Int_t iPhi, Float_t stepSize);
79
80   void FindClosestPosition(const Int_t binR, const Int_t binZ, const Int_t binPhi,
81                            const Float_t xref[3], Float_t xret[3]);
82   AliTPCCorrectionLookupTable(const AliTPCCorrectionLookupTable &corr);
83   AliTPCCorrectionLookupTable& operator= (const AliTPCCorrectionLookupTable &corr);
84   
85   ClassDef(AliTPCCorrectionLookupTable,3);  // TPC corrections dumped into a lookup table
86 };
87
88