]>
Commit | Line | Data |
---|---|---|
05da1b4e | 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> | |
fef4baf6 | 12 | #include <THn.h> |
05da1b4e | 13 | |
14 | class AliTPCCorrectionLookupTable : public AliTPCCorrection { | |
15 | ||
16 | public: | |
17 | AliTPCCorrectionLookupTable(); | |
18 | virtual ~AliTPCCorrectionLookupTable(); | |
19 | ||
05da1b4e | 20 | virtual void GetCorrection(const Float_t x[],const Short_t roc,Float_t dx[]); |
21 | virtual void GetDistortion(const Float_t x[],const Short_t roc,Float_t dx[]); | |
22 | ||
8d79bbb7 | 23 | void SetupDefaultLimits(); |
2d4e971f | 24 | void CreateLookupTable(AliTPCCorrection &tpcCorr, Float_t stepSize=5.); |
8d79bbb7 | 25 | void CreateLookupTableSinglePhi(AliTPCCorrection &tpcCorr, Int_t iPhi, Float_t stepSize=5.); |
26 | ||
fef4baf6 | 27 | void CreateLookupTableFromResidualDistortion(THn &resDist); |
637ba19a | 28 | void CreateResidual(AliTPCCorrection *distortion, AliTPCCorrection* correction); |
fef4baf6 | 29 | |
8d79bbb7 | 30 | void MergePhiTables(const char* files); |
05da1b4e | 31 | |
fd245273 | 32 | void SetFillCorrection(Bool_t fill) { fFillCorrection=fill; } |
33 | Bool_t GetFillCorrection() const { return fFillCorrection; } | |
34 | void BuildExactInverse(); | |
35 | ||
8d79bbb7 | 36 | Int_t GetNR() const { return fNR; } |
37 | Int_t GetNPhi() const { return fNPhi; } | |
38 | Int_t GetNZ() const { return fNZ; } | |
05da1b4e | 39 | |
8d79bbb7 | 40 | const TVectorD& GetLimitsR() const { return fLimitsR; } |
41 | const TVectorD& GetLimitsPhi() const { return fLimitsPhi; } | |
42 | const TVectorD& GetLimitsZ() const { return fLimitsZ; } | |
43 | ||
862220e2 | 44 | void SetCorrScaleFactor(Float_t val) { fCorrScaleFactor = val; } |
45 | Float_t GetCorrScaleFactor() const { return fCorrScaleFactor; } | |
46 | ||
2d4e971f | 47 | private: |
05da1b4e | 48 | |
49 | // sizes of lookup tables | |
531a1f0b | 50 | // TODO: Remove, since it will be stored in the TVectorD anyhow? |
2d4e971f | 51 | Int_t fNR; // number of rows (r) used for lookup table |
05da1b4e | 52 | Int_t fNPhi; // number of phi slices used for lookup table |
53 | Int_t fNZ; // number of columns (z) used for lookup table | |
862220e2 | 54 | |
55 | Float_t fCorrScaleFactor; // overall scaling factor for the correction | |
56 | ||
fd245273 | 57 | Bool_t fFillCorrection; // whether to also fill the correction tables |
05da1b4e | 58 | // |
531a1f0b | 59 | TVectorD fLimitsR; // bin limits in row direction |
60 | TVectorD fLimitsPhi; // bin limits in phi direction | |
61 | TVectorD fLimitsZ; // bin limits in z direction | |
05da1b4e | 62 | // for distortion |
63 | TMatrixF **fLookUpDxDist; //[fNPhi] Array to store electric field integral (int Er/Ez) | |
2d4e971f | 64 | TMatrixF **fLookUpDyDist; //[fNPhi] Array to store electric field integral (int Er/Ez) |
65 | TMatrixF **fLookUpDzDist; //[fNPhi] Array to store electric field integral (int Er/Ez) | |
05da1b4e | 66 | |
67 | // for correction | |
68 | TMatrixF **fLookUpDxCorr; //[fNPhi] Array to store electric field integral (int Er/Ez) | |
2d4e971f | 69 | TMatrixF **fLookUpDyCorr; //[fNPhi] Array to store electric field integral (int Er/Ez) |
70 | TMatrixF **fLookUpDzCorr; //[fNPhi] Array to store electric field integral (int Er/Ez) | |
05da1b4e | 71 | |
72 | void InitTables(); | |
8d79bbb7 | 73 | void InitTableArrays(); |
74 | void InitTablesPhiBin(Int_t iPhi); | |
75 | ||
05da1b4e | 76 | void ResetTables(); |
8d79bbb7 | 77 | void ResetLimits(); |
78 | ||
05da1b4e | 79 | void GetInterpolation(const Float_t x[],const Short_t roc,Float_t dx[], |
2d4e971f | 80 | TMatrixF **mR, TMatrixF **mPhi, TMatrixF **mZ); |
05da1b4e | 81 | |
8d79bbb7 | 82 | void CreateLookupTablePhiBin(AliTPCCorrection &tpcCorr, Int_t iPhi, Float_t stepSize); |
fd245273 | 83 | |
84 | void FindClosestPosition(const Int_t binR, const Int_t binZ, const Int_t binPhi, | |
85 | const Float_t xref[3], Float_t xret[3]); | |
05da1b4e | 86 | AliTPCCorrectionLookupTable(const AliTPCCorrectionLookupTable &corr); |
87 | AliTPCCorrectionLookupTable& operator= (const AliTPCCorrectionLookupTable &corr); | |
32d2109a | 88 | |
89 | ClassDef(AliTPCCorrectionLookupTable,3); // TPC corrections dumped into a lookup table | |
05da1b4e | 90 | }; |
91 | ||
92 |