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;
21 class AliTPCcalibAlign:public AliTPCcalibBase {
23 enum HistoType {kY=0, kZ =1, kPhi=2, kTheta=3};
24 enum FitType{ k6=0, k9=1, k12};
26 AliTPCcalibAlign(const Text_t *name, const Text_t *title);
27 virtual ~AliTPCcalibAlign();
28 virtual void Process(AliTPCseed *track);
29 virtual void Analyze();
30 virtual void Terminate();
32 virtual void EvalFitters();
33 TH1 * GetHisto(HistoType type, Int_t s1, Int_t s2, Bool_t force=kFALSE);
34 void MakeTree(const char *fname="alignTree.root");
35 TGraphErrors * MakeGraph(Int_t sec0, Int_t sec1, Int_t dsec,
36 Int_t i0, Int_t i1, FitType type);
37 void ProcessTracklets(const AliExternalTrackParam &t1,
38 const AliExternalTrackParam &t2,
39 const AliTPCseed * seed,
41 inline Int_t GetIndex(Int_t s1,Int_t s2){return 72*s1+s2;}
43 inline TLinearFitter* GetFitter12(Int_t s1,Int_t s2);
44 inline TLinearFitter* GetFitter9(Int_t s1,Int_t s2);
45 inline TLinearFitter* GetFitter6(Int_t s1,Int_t s2);
47 Bool_t GetTransformation12(Int_t s1,Int_t s2,TMatrixD &a);
48 Bool_t GetTransformation9(Int_t s1,Int_t s2,TMatrixD &a);
49 Bool_t GetTransformation6(Int_t s1,Int_t s2,TMatrixD &a);
51 void ProcessDiff(const AliExternalTrackParam &t1,
52 const AliExternalTrackParam &t2,
53 const AliTPCseed *seed,
56 // Bool_t GetTransformationCovar12(Int_t s1,Int_t s2,TMatrixD &a, Bool_t norm=kFALSE);
57 // Bool_t GetTransformationCovar9(Int_t s1,Int_t s2,TMatrixD &a, Bool_t norm=kFALSE);
58 // Bool_t GetTransformationCovar6(Int_t s1,Int_t s2,TMatrixD &a, Bool_t norm=kFALSE);
61 void FillHisto(const AliExternalTrackParam &t1,
62 const AliExternalTrackParam &t2,
65 void Process12(const Double_t *t1, const Double_t *t2,
66 TLinearFitter *fitter);
67 void Process9(Double_t *t1, Double_t *t2, TLinearFitter *fitter);
68 void Process6(Double_t *t1, Double_t *t2, TLinearFitter *fitter);
69 TLinearFitter* GetOrMakeFitter12(Int_t s1,Int_t s2);
70 TLinearFitter* GetOrMakeFitter9(Int_t s1,Int_t s2);
71 TLinearFitter* GetOrMakeFitter6(Int_t s1,Int_t s2);
72 TObjArray fDphiHistArray; // array of residual histograms phi
73 TObjArray fDthetaHistArray; // array of residual histograms theta
74 TObjArray fDyHistArray; // array of residual histograms y
75 TObjArray fDzHistArray; // array of residual histograms z
76 TObjArray fFitterArray12; // array of fitters
77 TObjArray fFitterArray9; // array of fitters
78 TObjArray fFitterArray6; // array of fitters
79 Int_t fPoints[72*72]; // number of points in the fitter
80 ClassDef(AliTPCcalibAlign,1)
84 TLinearFitter* AliTPCcalibAlign::GetFitter12(Int_t s1,Int_t s2) {
85 return static_cast<TLinearFitter*>(fFitterArray12[GetIndex(s1,s2)]);
87 TLinearFitter* AliTPCcalibAlign::GetFitter9(Int_t s1,Int_t s2) {
88 return static_cast<TLinearFitter*>(fFitterArray9[GetIndex(s1,s2)]);
90 TLinearFitter* AliTPCcalibAlign::GetFitter6(Int_t s1,Int_t s2) {
91 return static_cast<TLinearFitter*>(fFitterArray6[GetIndex(s1,s2)]);