5cf6a8a99adf4237501c51cb4d6689276fc48533
[u/mrichter/AliRoot.git] / STEER / AliAlignmentTracks.h
1 #ifndef ALIALIGNMENTTRACKS_H
2 #define ALIALIGNMENTTRACKS_H
3
4 //*************************************************************************
5 // AliAlignmentTracks: main steering class which deals with the alignment *
6 // procedures based on reconstructed tracks.                              *
7 // More comments will come with the development of the interfaces and     *
8 // functionalities of the class.                                          *
9 //*************************************************************************
10
11 #include <TObject.h>
12
13 #include "AliAlignObj.h"
14
15 class TChain;
16 class AliTrackPointArray;
17 class AliAlignObj;
18 class AliTrackFitter;
19 class AliTrackResiduals;
20
21 class AliAlignmentTracks : public TObject {
22
23  public:
24
25   AliAlignmentTracks();
26   AliAlignmentTracks(TChain *esdchain);
27   AliAlignmentTracks(const char *esdfilename, const char *esdtreename = "esdTree");
28   AliAlignmentTracks(const AliAlignmentTracks & alignment);
29   AliAlignmentTracks& operator= (const AliAlignmentTracks& alignment);
30   virtual ~AliAlignmentTracks();
31
32   void AddESD(TChain *esdchain);
33   void AddESD(const char *esdfilename, const char *esdtreename = "esdTree");
34
35   void SetPointsFilename(const char *pointsfilename = "AliTrackPoints.root") { fPointsFilename = pointsfilename; }
36
37   void ProcessESD(TSelector *selector);
38   void ProcessESD();
39
40   void BuildIndex();
41 /*   void BuildIndexLayer(AliAlignObj::ELayerID layer); */
42 /*   void BuildIndexVolume(UShort_t volid); */
43
44   Bool_t ReadAlignObjs(const char *alignobjfilename = "AlignObjs.root");
45
46   void SetTrackFitter(AliTrackFitter *fitter) { fTrackFitter = fitter; }
47   void SetMinimizer(AliTrackResiduals *minimizer) { fMinimizer = minimizer; }
48
49   void Align(Int_t iterations = 100);
50   void AlignLayer(AliAlignObj::ELayerID layer,
51                   AliAlignObj::ELayerID layerRangeMin = AliAlignObj::kFirstLayer,
52                   AliAlignObj::ELayerID layerRangeMax = AliAlignObj::kLastLayer,
53                   Int_t iterations = 1);
54   void AlignVolume(UShort_t volid,
55                    AliAlignObj::ELayerID layerRangeMin = AliAlignObj::kFirstLayer,
56                    AliAlignObj::ELayerID layerRangeMax = AliAlignObj::kLastLayer);
57
58  protected:
59
60   void InitIndex();
61   void ResetIndex();
62   void DeleteIndex();
63
64   void InitAlignObjs();
65   void ResetAlignObjs();
66   void DeleteAlignObjs();
67
68   Int_t LoadPoints(UShort_t volid, AliTrackPointArray** &points);
69   void  UnloadPoints(Int_t n, AliTrackPointArray **points);
70
71   AliTrackFitter *CreateFitter();
72   AliTrackResiduals *CreateMinimizer();
73
74   TChain           *fESDChain;       //! Chain with ESDs
75   TString           fPointsFilename; //  Name of the file containing the track point arrays
76   TFile            *fPointsFile;     //  File containing the track point arrays
77   TTree            *fPointsTree;     //  Tree with the track point arrays
78   Int_t           **fLastIndex;      //! Last filled index in volume arrays
79   TArrayI        ***fArrayIndex;     //! Volume arrays which contains the tree index
80   Bool_t            fIsIndexBuilt;   //  Is points tree index built
81   AliAlignObj    ***fAlignObjs;      //  Array with alignment objects
82   AliTrackFitter   *fTrackFitter;    //  Pointer to the track fitter
83   AliTrackResiduals*fMinimizer;      //  Pointer to track residuals minimizer
84
85   ClassDef(AliAlignmentTracks,1)
86
87 };
88
89 #endif