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