]> git.uio.no Git - u/mrichter/AliRoot.git/blame - STEER/STEER/AliAlignmentTracks.h
Update master to aliroot
[u/mrichter/AliRoot.git] / STEER / STEER / AliAlignmentTracks.h
CommitLineData
98937d93 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
98937d93 11class TChain;
0e37fcb7 12class TSelector;
13class TFile;
14class TTree;
15class TArrayI;
98937d93 16class AliTrackPointArray;
17class AliAlignObj;
18class AliTrackFitter;
19class AliTrackResiduals;
20
0e37fcb7 21#include <TObject.h>
22#include "AliAlignObj.h"
23
24
98937d93 25class AliAlignmentTracks : public TObject {
26
27 public:
28
29 AliAlignmentTracks();
30 AliAlignmentTracks(TChain *esdchain);
31 AliAlignmentTracks(const char *esdfilename, const char *esdtreename = "esdTree");
98937d93 32 virtual ~AliAlignmentTracks();
33
34 void AddESD(TChain *esdchain);
35 void AddESD(const char *esdfilename, const char *esdtreename = "esdTree");
36
37 void SetPointsFilename(const char *pointsfilename = "AliTrackPoints.root") { fPointsFilename = pointsfilename; }
38
39 void ProcessESD(TSelector *selector);
babbb915 40 void ProcessESD(Bool_t onlyITS=kFALSE,Int_t minITSpts=0,
41 Bool_t cuts=kTRUE,
d6116b3f 42 Float_t minAngleWrtITSModulePlanes=0.,
9a1304f0 43 Float_t minMom=0.3,Float_t maxMom=1.e9,
babbb915 44 Float_t minAbsSinPhi=0.,Float_t maxAbsSinPhi=1.,
45 Float_t minSinTheta=0.,Float_t maxSinTheta=1.);
46 void ProcessESDCosmics(Bool_t onlyITS=kFALSE,Int_t minITSpts=0,
9a1304f0 47 Float_t maxMatchingAngle=0.17, // 10 deg
48 Bool_t cuts=kTRUE,
d6116b3f 49 Float_t minAngleWrtITSModulePlanes=0.,
9a1304f0 50 Float_t minMom=0.3,Float_t maxMom=1.e9,
51 Float_t minAbsSinPhi=0.,Float_t maxAbsSinPhi=1.,
52 Float_t minSinTheta=0.,Float_t maxSinTheta=1.);
98937d93 53
54 void BuildIndex();
98937d93 55
46ae650f 56 Bool_t ReadAlignObjs(const char *alignObjFileName = "AlignObjs.root", const char* arrayName = "Alignment");
98937d93 57
58 void SetTrackFitter(AliTrackFitter *fitter) { fTrackFitter = fitter; }
59 void SetMinimizer(AliTrackResiduals *minimizer) { fMinimizer = minimizer; }
60
6fdedff6 61 Bool_t AlignDetector(AliGeomManager::ELayerID firstLayer,
62 AliGeomManager::ELayerID lastLayer,
63 AliGeomManager::ELayerID layerRangeMin = AliGeomManager::kFirstLayer,
64 AliGeomManager::ELayerID layerRangeMax = AliGeomManager::kLastLayer,Int_t iterations = 1);
65 Bool_t AlignLayer(AliGeomManager::ELayerID layer,
66 AliGeomManager::ELayerID layerRangeMin = AliGeomManager::kFirstLayer,
67 AliGeomManager::ELayerID layerRangeMax = AliGeomManager::kLastLayer,
68 Int_t iterations = 1);
69 Bool_t AlignVolume(UShort_t volId, UShort_t volIdFit,
70 Int_t iterations);
71 Bool_t AlignVolumes(const TArrayI *volids, const TArrayI *volidsfit = 0x0,
72 AliGeomManager::ELayerID layerRangeMin = AliGeomManager::kFirstLayer,
73 AliGeomManager::ELayerID layerRangeMax = AliGeomManager::kLastLayer,
74 Int_t iterations = 1);
98937d93 75
cc345ce3 76 AliAlignObj* GetAlignObj(UShort_t volid) const {
77 Int_t iModule;
25be1e5c 78 AliGeomManager::ELayerID iLayer = AliGeomManager::VolUIDToLayer(volid,iModule);
79 return fAlignObjs[iLayer-AliGeomManager::kFirstLayer][iModule];
cc345ce3 80 }
91264393 81 void SetUpdate(Bool_t update){fDoUpdate = update;}
6b7c7eba 82 void SetCovIsUsed(Bool_t covisused){fCovIsUsed=covisused;}
91264393 83 Bool_t GetUpdate() const { return fDoUpdate;}
193b509e 84 void WriteRealignObjArray(TString outfilename,AliGeomManager::ELayerID layerRangeMin,AliGeomManager::ELayerID layerRangeMax);
6d210c37 85 Int_t GetLastIndex(Int_t iLayer,Int_t iModule) const { return fLastIndex[iLayer][iModule]; }
86
52338825 87 Bool_t Misalign(const char *misalignObjFileName, const char* arrayName);
88
98937d93 89 protected:
90
91 void InitIndex();
92 void ResetIndex();
93 void DeleteIndex();
94
95 void InitAlignObjs();
96 void ResetAlignObjs();
97 void DeleteAlignObjs();
98
a5b84e94 99 Int_t LoadPoints(const TArrayI *volids, AliTrackPointArray** &points,Int_t &pointsdim);
98937d93 100 void UnloadPoints(Int_t n, AliTrackPointArray **points);
101
102 AliTrackFitter *CreateFitter();
103 AliTrackResiduals *CreateMinimizer();
104
105 TChain *fESDChain; //! Chain with ESDs
106 TString fPointsFilename; // Name of the file containing the track point arrays
107 TFile *fPointsFile; // File containing the track point arrays
108 TTree *fPointsTree; // Tree with the track point arrays
109 Int_t **fLastIndex; //! Last filled index in volume arrays
110 TArrayI ***fArrayIndex; //! Volume arrays which contains the tree index
111 Bool_t fIsIndexBuilt; // Is points tree index built
112 AliAlignObj ***fAlignObjs; // Array with alignment objects
46ae650f 113 AliAlignObj ***fMisalignObjs; // Array with alignment objects used to introduce misalignment of the space-points
98937d93 114 AliTrackFitter *fTrackFitter; // Pointer to the track fitter
115 AliTrackResiduals*fMinimizer; // Pointer to track residuals minimizer
91264393 116 Bool_t fDoUpdate; // Indicator - update Alignment object after minimization
6b7c7eba 117 Bool_t fCovIsUsed; // Indicator - use AlignObjs' Cov matrices
75e3794b 118
119 private:
120 AliAlignmentTracks(const AliAlignmentTracks & alignment);
121 AliAlignmentTracks& operator= (const AliAlignmentTracks& alignment);
122
91264393 123 ClassDef(AliAlignmentTracks,2)
98937d93 124
125};
126
127#endif