1 #ifndef ALITPCCALIBALIGN_H
2 #define ALITPCCALIBALIGN_H
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5 * See cxx source for full Copyright notice */
12 #include "TObjArray.h"
13 #include "TLinearFitter.h"
14 #include "AliTPCcalibBase.h"
17 class AliExternalTrackParam;
23 class AliTPCcalibAlign:public AliTPCcalibBase {
25 enum HistoType {kY=0, kZ =1, kPhi=2, kTheta=3,
27 kYz=6,kZz=7,kPhiZ=8,kThetaZ=9};
28 enum FitType{ k6=0, k9=1, k12=2};
30 AliTPCcalibAlign(const Text_t *name, const Text_t *title);
31 AliTPCcalibAlign(const AliTPCcalibAlign &align);
33 virtual ~AliTPCcalibAlign();
34 virtual void Process(AliTPCseed *track);
35 virtual void Analyze();
36 virtual void Terminate();
37 virtual Long64_t Merge(TCollection* list);
39 virtual void EvalFitters();
40 TH1 * GetHisto(HistoType type, Int_t s1, Int_t s2, Bool_t force=kFALSE);
41 void MakeTree(const char *fname="alignTree.root");
42 TGraphErrors * MakeGraph(Int_t sec0, Int_t sec1, Int_t dsec,
43 Int_t i0, Int_t i1, FitType type);
44 void ProcessTracklets(const AliExternalTrackParam &t1,
45 const AliExternalTrackParam &t2,
46 const AliTPCseed * seed,
48 inline Int_t GetIndex(Int_t s1,Int_t s2){return 72*s1+s2;}
50 inline const TMatrixD * GetTransformation(Int_t s1,Int_t s2, Int_t fitType);
52 inline TLinearFitter* GetFitter12(Int_t s1,Int_t s2);
53 inline TLinearFitter* GetFitter9(Int_t s1,Int_t s2);
54 inline TLinearFitter* GetFitter6(Int_t s1,Int_t s2);
56 Bool_t GetTransformation12(Int_t s1,Int_t s2,TMatrixD &a);
57 Bool_t GetTransformation9(Int_t s1,Int_t s2,TMatrixD &a);
58 Bool_t GetTransformation6(Int_t s1,Int_t s2,TMatrixD &a);
59 Bool_t AcceptTracklet(const AliExternalTrackParam &tp1,
60 const AliExternalTrackParam &tp2);
62 void ProcessDiff(const AliExternalTrackParam &t1,
63 const AliExternalTrackParam &t2,
64 const AliTPCseed *seed,
66 void ProcessAlign(Double_t * t1, Double_t * t2, Int_t s1,Int_t s2);
68 // Bool_t GetTransformationCovar12(Int_t s1,Int_t s2,TMatrixD &a, Bool_t norm=kFALSE);
69 // Bool_t GetTransformationCovar9(Int_t s1,Int_t s2,TMatrixD &a, Bool_t norm=kFALSE);
70 // Bool_t GetTransformationCovar6(Int_t s1,Int_t s2,TMatrixD &a, Bool_t norm=kFALSE);
71 void Add(AliTPCcalibAlign * align);
72 Int_t *GetPoints() {return fPoints;}
73 void Process(AliESDtrack *track, Int_t runNo=-1){AliTPCcalibBase::Process(track,runNo);};
74 void Process(AliESDEvent *event){AliTPCcalibBase::Process(event);}
75 TLinearFitter* GetOrMakeFitter12(Int_t s1,Int_t s2);
76 TLinearFitter* GetOrMakeFitter9(Int_t s1,Int_t s2);
77 TLinearFitter* GetOrMakeFitter6(Int_t s1,Int_t s2);
78 void Process12(const Double_t *t1, const Double_t *t2,
79 TLinearFitter *fitter);
80 void Process9(Double_t *t1, Double_t *t2, TLinearFitter *fitter);
81 void Process6(Double_t *t1, Double_t *t2, TLinearFitter *fitter);
82 void ProcessTree(TTree * tree);
84 // For visualization and test purposes
86 Double_t Correct(Int_t type, Int_t value, Int_t s1, Int_t s2, Double_t x, Double_t y, Double_t z, Double_t phi,Double_t theta);
87 static Double_t SCorrect(Int_t type, Int_t value, Int_t s1, Int_t s2, Double_t x, Double_t y, Double_t z, Double_t phi,Double_t theta){return Instance()->Correct(type,value,s1,s2,x,y,z,phi,theta);}
88 static AliTPCcalibAlign* Instance();
89 void SetInstance(AliTPCcalibAlign*param){fgInstance = param;}
92 void FillHisto(const AliExternalTrackParam &t1,
93 const AliExternalTrackParam &t2,
96 TObjArray fDphiHistArray; // array of residual histograms phi -kPhi
97 TObjArray fDthetaHistArray; // array of residual histograms theta -kTheta
98 TObjArray fDyHistArray; // array of residual histograms y -kY
99 TObjArray fDzHistArray; // array of residual histograms z -kZ
101 TObjArray fDyPhiHistArray; // array of residual histograms y -kYPhi
102 TObjArray fDzThetaHistArray; // array of residual histograms z-z -kZTheta
104 TObjArray fDphiZHistArray; // array of residual histograms phi -kPhiz
105 TObjArray fDthetaZHistArray; // array of residual histograms theta -kThetaz
106 TObjArray fDyZHistArray; // array of residual histograms y -kYz
107 TObjArray fDzZHistArray; // array of residual histograms z -kZz
110 TObjArray fFitterArray12; // array of fitters
111 TObjArray fFitterArray9; // array of fitters
112 TObjArray fFitterArray6; // array of fitters
114 TObjArray fMatrixArray12; // array of transnformtation matrix
115 TObjArray fMatrixArray9; // array of transnformtation matrix
116 TObjArray fMatrixArray6; // array of transnformtation matrix
118 Int_t fPoints[72*72]; // number of points in the fitter
119 static AliTPCcalibAlign* fgInstance; //! Instance of this class (singleton implementation)
120 ClassDef(AliTPCcalibAlign,1)
124 TLinearFitter* AliTPCcalibAlign::GetFitter12(Int_t s1,Int_t s2) {
125 return static_cast<TLinearFitter*>(fFitterArray12[GetIndex(s1,s2)]);
127 TLinearFitter* AliTPCcalibAlign::GetFitter9(Int_t s1,Int_t s2) {
128 return static_cast<TLinearFitter*>(fFitterArray9[GetIndex(s1,s2)]);
130 TLinearFitter* AliTPCcalibAlign::GetFitter6(Int_t s1,Int_t s2) {
131 return static_cast<TLinearFitter*>(fFitterArray6[GetIndex(s1,s2)]);
134 const TMatrixD * AliTPCcalibAlign::GetTransformation(Int_t s1,Int_t s2, Int_t fitType){
135 if (fitType==0) return static_cast<TMatrixD*>(fMatrixArray6[GetIndex(s1,s2)]);
136 if (fitType==1) return static_cast<TMatrixD*>(fMatrixArray9[GetIndex(s1,s2)]);
137 if (fitType==2) return static_cast<TMatrixD*>(fMatrixArray12[GetIndex(s1,s2)]);