ROOT logo
#ifndef ALIALIGNMENTTRACKS_H
#define ALIALIGNMENTTRACKS_H

//*************************************************************************
// AliAlignmentTracks: main steering class which deals with the alignment *
// procedures based on reconstructed tracks.                              *
// More comments will come with the development of the interfaces and     *
// functionalities of the class.                                          *
//*************************************************************************

class TChain;
class TSelector;
class TFile;
class TTree;
class TArrayI;
class AliTrackPointArray;
class AliAlignObj;
class AliTrackFitter;
class AliTrackResiduals;

#include <TObject.h>
#include "AliAlignObj.h"


class AliAlignmentTracks : public TObject {

 public:

  AliAlignmentTracks();
  AliAlignmentTracks(TChain *esdchain);
  AliAlignmentTracks(const char *esdfilename, const char *esdtreename = "esdTree");
  virtual ~AliAlignmentTracks();

  void AddESD(TChain *esdchain);
  void AddESD(const char *esdfilename, const char *esdtreename = "esdTree");

  void SetPointsFilename(const char *pointsfilename = "AliTrackPoints.root") { fPointsFilename = pointsfilename; }

  void ProcessESD(TSelector *selector);
  void ProcessESD(Bool_t onlyITS=kFALSE,Int_t minITSpts=0,
		  Bool_t cuts=kTRUE,
		  Float_t minAngleWrtITSModulePlanes=0.,
		  Float_t minMom=0.3,Float_t maxMom=1.e9,
		  Float_t minAbsSinPhi=0.,Float_t maxAbsSinPhi=1.,
		  Float_t minSinTheta=0.,Float_t maxSinTheta=1.);
  void ProcessESDCosmics(Bool_t onlyITS=kFALSE,Int_t minITSpts=0,
			 Float_t maxMatchingAngle=0.17, // 10 deg
			 Bool_t cuts=kTRUE,
			 Float_t minAngleWrtITSModulePlanes=0.,
			 Float_t minMom=0.3,Float_t maxMom=1.e9,
			 Float_t minAbsSinPhi=0.,Float_t maxAbsSinPhi=1.,
			 Float_t minSinTheta=0.,Float_t maxSinTheta=1.);

  void BuildIndex();

  Bool_t ReadAlignObjs(const char *alignObjFileName = "AlignObjs.root", const char* arrayName = "Alignment");

  void SetTrackFitter(AliTrackFitter *fitter) { fTrackFitter = fitter; }
  void SetMinimizer(AliTrackResiduals *minimizer) { fMinimizer = minimizer; }

  Bool_t AlignDetector(AliGeomManager::ELayerID firstLayer,
		       AliGeomManager::ELayerID lastLayer,
		       AliGeomManager::ELayerID layerRangeMin = AliGeomManager::kFirstLayer,
		       AliGeomManager::ELayerID layerRangeMax = AliGeomManager::kLastLayer,Int_t iterations = 1);
  Bool_t AlignLayer(AliGeomManager::ELayerID layer,
		    AliGeomManager::ELayerID layerRangeMin = AliGeomManager::kFirstLayer,
		    AliGeomManager::ELayerID layerRangeMax = AliGeomManager::kLastLayer,
		    Int_t iterations = 1);
  Bool_t AlignVolume(UShort_t volId, UShort_t volIdFit,
		     Int_t iterations);
  Bool_t AlignVolumes(const TArrayI *volids, const TArrayI *volidsfit = 0x0,
		      AliGeomManager::ELayerID layerRangeMin = AliGeomManager::kFirstLayer,
		      AliGeomManager::ELayerID layerRangeMax = AliGeomManager::kLastLayer,
		      Int_t iterations = 1);

  AliAlignObj* GetAlignObj(UShort_t volid) const {
    Int_t iModule;
    AliGeomManager::ELayerID iLayer = AliGeomManager::VolUIDToLayer(volid,iModule);
    return fAlignObjs[iLayer-AliGeomManager::kFirstLayer][iModule];
  }
  void    SetUpdate(Bool_t update){fDoUpdate = update;}
  void SetCovIsUsed(Bool_t covisused){fCovIsUsed=covisused;}
  Bool_t  GetUpdate() const { return fDoUpdate;}
  void WriteRealignObjArray(TString outfilename,AliGeomManager::ELayerID layerRangeMin,AliGeomManager::ELayerID layerRangeMax);
  Int_t GetLastIndex(Int_t iLayer,Int_t iModule) const { return fLastIndex[iLayer][iModule]; }  

  Bool_t Misalign(const char *misalignObjFileName, const char* arrayName);

 protected:

  void InitIndex();
  void ResetIndex();
  void DeleteIndex();

  void InitAlignObjs();
  void ResetAlignObjs();
  void DeleteAlignObjs();

  Int_t LoadPoints(const TArrayI *volids, AliTrackPointArray** &points,Int_t &pointsdim);
  void  UnloadPoints(Int_t n, AliTrackPointArray **points);

  AliTrackFitter *CreateFitter();
  AliTrackResiduals *CreateMinimizer();

  TChain           *fESDChain;       //! Chain with ESDs
  TString           fPointsFilename; //  Name of the file containing the track point arrays
  TFile            *fPointsFile;     //  File containing the track point arrays
  TTree            *fPointsTree;     //  Tree with the track point arrays
  Int_t           **fLastIndex;      //! Last filled index in volume arrays
  TArrayI        ***fArrayIndex;     //! Volume arrays which contains the tree index
  Bool_t            fIsIndexBuilt;   //  Is points tree index built
  AliAlignObj    ***fAlignObjs;      //  Array with alignment objects
  AliAlignObj    ***fMisalignObjs;   //  Array with alignment objects used to introduce misalignment of the space-points
  AliTrackFitter   *fTrackFitter;    //  Pointer to the track fitter
  AliTrackResiduals*fMinimizer;      //  Pointer to track residuals minimizer
  Bool_t            fDoUpdate;       //  Indicator - update Alignment object after minimization
  Bool_t            fCovIsUsed;      //  Indicator - use AlignObjs' Cov matrices

 private:
  AliAlignmentTracks(const AliAlignmentTracks & alignment);
  AliAlignmentTracks& operator= (const AliAlignmentTracks& alignment);

  ClassDef(AliAlignmentTracks,2)

};

#endif
 AliAlignmentTracks.h:1
 AliAlignmentTracks.h:2
 AliAlignmentTracks.h:3
 AliAlignmentTracks.h:4
 AliAlignmentTracks.h:5
 AliAlignmentTracks.h:6
 AliAlignmentTracks.h:7
 AliAlignmentTracks.h:8
 AliAlignmentTracks.h:9
 AliAlignmentTracks.h:10
 AliAlignmentTracks.h:11
 AliAlignmentTracks.h:12
 AliAlignmentTracks.h:13
 AliAlignmentTracks.h:14
 AliAlignmentTracks.h:15
 AliAlignmentTracks.h:16
 AliAlignmentTracks.h:17
 AliAlignmentTracks.h:18
 AliAlignmentTracks.h:19
 AliAlignmentTracks.h:20
 AliAlignmentTracks.h:21
 AliAlignmentTracks.h:22
 AliAlignmentTracks.h:23
 AliAlignmentTracks.h:24
 AliAlignmentTracks.h:25
 AliAlignmentTracks.h:26
 AliAlignmentTracks.h:27
 AliAlignmentTracks.h:28
 AliAlignmentTracks.h:29
 AliAlignmentTracks.h:30
 AliAlignmentTracks.h:31
 AliAlignmentTracks.h:32
 AliAlignmentTracks.h:33
 AliAlignmentTracks.h:34
 AliAlignmentTracks.h:35
 AliAlignmentTracks.h:36
 AliAlignmentTracks.h:37
 AliAlignmentTracks.h:38
 AliAlignmentTracks.h:39
 AliAlignmentTracks.h:40
 AliAlignmentTracks.h:41
 AliAlignmentTracks.h:42
 AliAlignmentTracks.h:43
 AliAlignmentTracks.h:44
 AliAlignmentTracks.h:45
 AliAlignmentTracks.h:46
 AliAlignmentTracks.h:47
 AliAlignmentTracks.h:48
 AliAlignmentTracks.h:49
 AliAlignmentTracks.h:50
 AliAlignmentTracks.h:51
 AliAlignmentTracks.h:52
 AliAlignmentTracks.h:53
 AliAlignmentTracks.h:54
 AliAlignmentTracks.h:55
 AliAlignmentTracks.h:56
 AliAlignmentTracks.h:57
 AliAlignmentTracks.h:58
 AliAlignmentTracks.h:59
 AliAlignmentTracks.h:60
 AliAlignmentTracks.h:61
 AliAlignmentTracks.h:62
 AliAlignmentTracks.h:63
 AliAlignmentTracks.h:64
 AliAlignmentTracks.h:65
 AliAlignmentTracks.h:66
 AliAlignmentTracks.h:67
 AliAlignmentTracks.h:68
 AliAlignmentTracks.h:69
 AliAlignmentTracks.h:70
 AliAlignmentTracks.h:71
 AliAlignmentTracks.h:72
 AliAlignmentTracks.h:73
 AliAlignmentTracks.h:74
 AliAlignmentTracks.h:75
 AliAlignmentTracks.h:76
 AliAlignmentTracks.h:77
 AliAlignmentTracks.h:78
 AliAlignmentTracks.h:79
 AliAlignmentTracks.h:80
 AliAlignmentTracks.h:81
 AliAlignmentTracks.h:82
 AliAlignmentTracks.h:83
 AliAlignmentTracks.h:84
 AliAlignmentTracks.h:85
 AliAlignmentTracks.h:86
 AliAlignmentTracks.h:87
 AliAlignmentTracks.h:88
 AliAlignmentTracks.h:89
 AliAlignmentTracks.h:90
 AliAlignmentTracks.h:91
 AliAlignmentTracks.h:92
 AliAlignmentTracks.h:93
 AliAlignmentTracks.h:94
 AliAlignmentTracks.h:95
 AliAlignmentTracks.h:96
 AliAlignmentTracks.h:97
 AliAlignmentTracks.h:98
 AliAlignmentTracks.h:99
 AliAlignmentTracks.h:100
 AliAlignmentTracks.h:101
 AliAlignmentTracks.h:102
 AliAlignmentTracks.h:103
 AliAlignmentTracks.h:104
 AliAlignmentTracks.h:105
 AliAlignmentTracks.h:106
 AliAlignmentTracks.h:107
 AliAlignmentTracks.h:108
 AliAlignmentTracks.h:109
 AliAlignmentTracks.h:110
 AliAlignmentTracks.h:111
 AliAlignmentTracks.h:112
 AliAlignmentTracks.h:113
 AliAlignmentTracks.h:114
 AliAlignmentTracks.h:115
 AliAlignmentTracks.h:116
 AliAlignmentTracks.h:117
 AliAlignmentTracks.h:118
 AliAlignmentTracks.h:119
 AliAlignmentTracks.h:120
 AliAlignmentTracks.h:121
 AliAlignmentTracks.h:122
 AliAlignmentTracks.h:123
 AliAlignmentTracks.h:124
 AliAlignmentTracks.h:125
 AliAlignmentTracks.h:126
 AliAlignmentTracks.h:127