1 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
2 * See cxx source for full Copyright notice */
4 ////////////////////////////////////////////////////////////////////////////
5 // AliTPCCorrectionLookupTable class //
6 // Authors: Jens Wiechula //
7 ////////////////////////////////////////////////////////////////////////////
9 #include "AliTPCCorrection.h"
11 #include <TMatrixFfwd.h>
13 class AliTPCCorrectionLookupTable : public AliTPCCorrection {
16 AliTPCCorrectionLookupTable();
17 virtual ~AliTPCCorrectionLookupTable();
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[]);
22 void SetupDefaultLimits();
23 void CreateLookupTable(AliTPCCorrection &tpcCorr, Float_t stepSize=5.);
24 void CreateLookupTableSinglePhi(AliTPCCorrection &tpcCorr, Int_t iPhi, Float_t stepSize=5.);
26 void MergePhiTables(const char* files);
28 void SetFillCorrection(Bool_t fill) { fFillCorrection=fill; }
29 Bool_t GetFillCorrection() const { return fFillCorrection; }
30 void BuildExactInverse();
32 Int_t GetNR() const { return fNR; }
33 Int_t GetNPhi() const { return fNPhi; }
34 Int_t GetNZ() const { return fNZ; }
36 const TVectorD& GetLimitsR() const { return fLimitsR; }
37 const TVectorD& GetLimitsPhi() const { return fLimitsPhi; }
38 const TVectorD& GetLimitsZ() const { return fLimitsZ; }
40 void SetCorrScaleFactor(Float_t val) { fCorrScaleFactor = val; }
41 Float_t GetCorrScaleFactor() const { return fCorrScaleFactor; }
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
51 Float_t fCorrScaleFactor; // overall scaling factor for the correction
53 Bool_t fFillCorrection; // whether to also fill the correction tables
55 TVectorD fLimitsR; // bin limits in row direction
56 TVectorD fLimitsPhi; // bin limits in phi direction
57 TVectorD fLimitsZ; // bin limits in z direction
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)
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)
69 void InitTableArrays();
70 void InitTablesPhiBin(Int_t iPhi);
75 void GetInterpolation(const Float_t x[],const Short_t roc,Float_t dx[],
76 TMatrixF **mR, TMatrixF **mPhi, TMatrixF **mZ);
78 void CreateLookupTablePhiBin(AliTPCCorrection &tpcCorr, Int_t iPhi, Float_t stepSize);
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);
85 ClassDef(AliTPCCorrectionLookupTable,3); // TPC corrections dumped into a lookup table