1 #ifndef ALITPCTRANSFORMATION_H
2 #define ALITPCTRANSFORMATION_H
8 class TTreeSRedirector;
9 class AliTrackPointArray;
15 class AliTPCTransformation: public TNamed{
17 typedef Double_t (*GenFuncG)(const Double_t*,const Double_t*);
18 AliTPCTransformation();
19 AliTPCTransformation(const char *name,TBits *mask, const char *fx, const char *fy, const char *fz, Int_t coord);
20 AliTPCTransformation(const AliTPCTransformation&trafo);
21 ~AliTPCTransformation();
23 virtual Double_t GetDeltaXYZ(Int_t coord, Int_t volID, Double_t param, Double_t x, Double_t y, Double_t z);
24 void SetParams(Double_t param, Double_t sigma, Double_t sigma2Time, TVectorD* fixedParams);
26 void SetActive(Bool_t flag){ fIsActive = flag;}
27 Bool_t IsActive(){return fIsActive;}
30 static TBits * BitsSide(Bool_t aside);
31 static TBits * BitsAll();
32 static void RegisterFormula(const char * name, GenFuncG formula);
33 static AliTPCTransformation::GenFuncG FindFormula(const char * name);
34 static Double_t Eval(const char * name, const Double_t*x,const Double_t*par);
37 TString * fNameX; // x formula
38 TString * fNameY; // y formula
39 TString * fNameZ; // z formula
41 TBits * fBitMask; // bitmaps - transformation only for specified volID
42 Int_t fCoordSystem; // coord system of output deltas
43 Double_t fParam; // free parameter of transformation
44 Double_t fSigma; // error of the parameter
45 Double_t fSigmaMax; // maximal sigma (Not allowed to increase in propagate time by bigger factor)
46 Double_t fSigma2Time; // change of the error in time (per hour) - (For kalman filter)
47 TVectorD *fFixedParam; // fixed parameters of tranformation
48 Bool_t fIsActive; // switch - is transformation active
50 // predefined formulas
52 static Int_t BuildBasicFormulas(); //build list of basic formulas
53 static Double_t TPCscalingRPol(Double_t *xyz, Double_t * param);
54 static Double_t TPCscalingZDrift(Double_t *xyz, Double_t * param);
55 static Double_t TPCscalingZDriftGy(Double_t *xyz, Double_t * param);
56 static Double_t TPCscalingZDriftT0(Double_t *xyz, Double_t * param);
57 static Double_t TPCscalingPhiLocal(Double_t *xyz, Double_t * param);
58 static Double_t TPClocalRPhiEdge(Double_t *xyz, Double_t * param);
60 // TPC Field cage + ROC misalingment induced distortion
62 static Double_t TPCscalingRIFC(Double_t *xyz, Double_t * param); // inner field cage r distorion
63 static Double_t TPCscalingROFC(Double_t *xyz, Double_t * param); // outer field cage r distorion
65 // TPC field cage + ROC misalignemnt induced distortion
67 static Double_t TPCdeltaFCROC(Double_t *xyz, Double_t * param);
68 static Double_t TPCdeltaFCCE(Double_t *xyz, Double_t * param);
71 // TPC local misalignment
73 static Double_t TPClocaldLxdGX(Double_t *xyz, Double_t * param);
74 static Double_t TPClocaldLxdGY(Double_t *xyz, Double_t * param);
75 static Double_t TPClocaldLydGX(Double_t *xyz, Double_t * param);
76 static Double_t TPClocaldLydGY(Double_t *xyz, Double_t * param);
77 static Double_t TPClocaldRzdGX(Double_t *xyz, Double_t * param);
78 static Double_t TPClocaldRzdGY(Double_t *xyz, Double_t * param);
81 // TPC quadrant misalignment
83 // static Double_t TPCQuadrantDr(Double_t *xyz, Double_t * param){return 0;}
84 //static Double_t TPCQuadrantDrphi(Double_t *xyz, Double_t * param){return 0;}
88 static Double_t TPCDeltaZ(Double_t *xyz, Double_t * param);
89 static Double_t TPCDeltaZMediumLong(Double_t *xyz, Double_t * param);
90 static Double_t TPCTiltingZ(Double_t *xyz, Double_t * param);
92 Bool_t fInit; // initialization flag
93 GenFuncG fFormulaX; //! x formula
94 GenFuncG fFormulaY; //! y formula
95 GenFuncG fFormulaZ; //! z formula
96 static GenFuncG fgFormulas[10000]; //! array of pointers to formula
97 static TObjArray* fgFormulasName; //! array of formalas name
99 AliTPCTransformation &operator=(const AliTPCTransformation&); // not implemented
101 ClassDef(AliTPCTransformation,2);