Added option for different binning of DCAxy axis in THnSparse. Same width for all...
[u/mrichter/AliRoot.git] / ITS / AliITSRealignTracks.h
1 #ifndef ALIITSREALIGNTRACKS_H
2 #define ALIITSREALIGNTRACKS_H
3
4
5 //Class to perform the realignment if the Inner Tracking System 
6 //with an iterative approach based on track to cluster residuals
7 // minimization. More details in .cxx file
8 //
9 //Class by: A. Rossi, andrea,rossi@ts.infn.it
10
11
12 #include "AliGeomManager.h"
13 #include "AliAlignmentTracks.h"
14
15 class TArray;
16 class TGraph;
17 class TCanvas;
18 class TArray;
19 class TFile;
20 class AliAlignObjParams;
21
22
23 /* $Id$ */
24
25
26 class AliITSRealignTracks: public AliAlignmentTracks {
27  public:
28   
29   AliITSRealignTracks():
30     AliAlignmentTracks(),
31     fSurveyObjs(0),
32     fgeomfilename(),
33     fmintracks(0),
34     fUpdateCov(kFALSE),
35     fVarySigmaY(kFALSE),
36     fCorrModules(0),
37     fLimitCorr(0.),
38     fsigmaY(),
39     fDraw(kFALSE),  
40     fAlignDrawObjs(0), 
41     fCanvPar(0), 
42     fCanvGr(0), 
43     fgrIterMeanX(0), 
44     fgrIterRMSX(0),  
45     fgrIterMeanY(0), 
46     fgrIterRMSY(0),  
47     fgrIterMeanZ(0), 
48     fgrIterRMSZ(0),  
49     fgrIterMeanPsi(0), 
50     fgrIterRMSPsi(0),  
51     fgrIterMeanTheta(0), 
52     fgrIterRMSTheta(0),  
53     fgrIterMeanPhi(0), 
54     fgrIterRMSPhi(0)  
55     {SetCovIsUsed(kFALSE);}
56   
57   AliITSRealignTracks(TString minimizer,Int_t fit=0,Bool_t covUsed=kFALSE,TString fileintro="AliTrackPoints.root",TString geometryfile="geometry.root",TString misalignmentFile="",TString startingfile="");
58   AliITSRealignTracks(const AliITSRealignTracks &realignTracks);
59   AliITSRealignTracks& operator=(const AliITSRealignTracks& obj);
60   ~AliITSRealignTracks();
61   
62   void InitAlignObjs();
63   Bool_t InitSurveyObjs(Bool_t infinite=kFALSE,Double_t factor=1.,TString filename="",TString arrayName="");
64   void ResetAlignObjs(Bool_t all,TArrayI *volids=0x0);
65   void ResetCorrModules();
66   void DeleteSurveyObjs();
67   void SetLimitCorr(Double_t limit=0.1){fLimitCorr=limit;}
68   Int_t CheckWithSurvey(Double_t factor=2.,const TArrayI *volids=0x0);
69   Bool_t SelectFitter(Int_t fit,Int_t minTrackPoint=2);
70   Bool_t SelectMinimizer(TString minimizer,Int_t minpoints=1,const Bool_t *coord=0x0);
71   void SetMinNtracks(Int_t minNtracks){fmintracks=minNtracks;}
72   void SetCovUpdate(Bool_t covupdate){fUpdateCov=covupdate;}
73   void SetVarySigmaY(Bool_t varysigmay,Double_t sigmaYfixed=1.);
74   void SetGeomFilename(TString geomfilename){fgeomfilename=geomfilename;}
75   //  Int_t LoadPoints(const TArrayI *volids, AliTrackPointArray** &points);
76   Bool_t ReadAlignObjs(const char *alignObjFileName = "AlignObjs.root", const char* arrayName = "Alignment");
77   void RealignITSVolIndependent(Int_t iter1,Int_t iterations,Int_t minNtracks,Int_t layer=0,Int_t minTrackPoint=6);
78   void RealignITStracks(TString minimizer,Int_t fit,Int_t iter1,Int_t iterations,Int_t minNtracks,Int_t layer,Int_t minTrackPoint,Bool_t covUsed,TString misalignmentFile,TString startingfile,Int_t doGlobal);
79   Bool_t AlignVolumesITS(const TArrayI *volids, const TArrayI *volidsfit,AliGeomManager::ELayerID layerRangeMin,AliGeomManager::ELayerID layerRangeMax,Int_t iterations);
80   Bool_t FirstAlignmentSPD(Int_t minNtracks,Int_t iterations,Bool_t fitall=kTRUE,const TArrayI *volidsSet=0x0);
81   Bool_t FirstAlignmentLayers(const Bool_t *layers,Int_t minNtracks,Int_t iterations,Bool_t fitall=kTRUE,const TArrayI *volidsSet=0x0);
82   Bool_t SPDmodulesAlignToSSD(Int_t minNtracks,Int_t iterations);
83   Bool_t AlignSPDBarrel(Int_t iterations);
84   Bool_t AlignSPDHalfBarrel(Int_t method,Int_t iterations);
85   Bool_t AlignLayer(Int_t layer,Int_t iterations);
86   Bool_t AlignLayersToLayers(const Int_t *layer,Int_t iterations);
87   Bool_t AlignLayerToSPDHalfBarrel(Int_t layer,Int_t updown,Int_t iterations);
88   Bool_t AlignLayerToSector(Int_t layer,Int_t sector,Int_t iterations);
89   Bool_t AlignSPDSectorToOuterLayers(Int_t sector,Int_t iterations);
90   Bool_t AlignSPDSectorWithSectors(Int_t sector,Int_t iterations);
91   Bool_t AlignSPDSectorsWithSectors(const Int_t *sectorIN,const Int_t *sectorFit,Int_t iterations);
92   Bool_t AlignSPDStaves(const Int_t *staves,const Int_t *sectorsIN,const Int_t *sectorsFit,Int_t iterations);
93   Bool_t AlignSPDHalfBarrelToHalfBarrel(Int_t updown,Int_t iterations); 
94   Bool_t AlignSPDHalfBarrelToSectorRef(Int_t sector,Int_t iterations);
95   Bool_t AlignSPD1SectorRef(Int_t sector,Int_t iterations);
96   //masera  void AlignGlobalToSectRef(Int_t sector,Int_t minNtracks=100);
97   TArrayI* GetLayersVolUID(const Int_t *layer);
98   AliAlignObjParams* MediateAlignObj(const TArrayI *volIDs,Int_t lastVolid);
99   TArrayI* GetSPDSectorsVolids(const Int_t *sectors); 
100   TArrayI* GetSPDStavesVolids(const Int_t *sectors,const Int_t* staves);
101   TArrayI* SelectLayerInVolids(const TArrayI *volidsIN,AliGeomManager::ELayerID layer);
102   TArrayI* JoinVolArrays(const TArrayI *vol1,const TArrayI *vol2);
103   TArrayI* IntersectVolArray(const TArrayI *vol1,const TArrayI *vol2);
104   TArrayI* ExcludeVolidsFromVolidsArray(const TArrayI *volidsToExclude,const TArrayI *volStart);
105   TArrayI* GetLayerVolumes(const Int_t *layer);
106   TArrayI* GetAlignedVolumes(char *filename);
107   /*  void AlignGlobalToSectRef(Int_t sector,Int_t minNtracks=100);
108       AliAlignObjParams* MediateAlignObjs(AliAlignObj **alObjs,Int_t nObjs,const Bool_t *coords=0x0,TArrayI *volidArray=0x0,Bool_t local=kFALSE,const char* geometryfile=0x0);
109       Bool_t MediateSectorsVolumes(char *filename,Bool_t local=kFALSE,char *geometryfile=0x0,Bool_t *coord=0x0);
110   */
111   void InitDrawHists();
112   void SetDraw(Bool_t draw,Bool_t refresh);
113   void UpdateDraw(TArrayI *volids,Int_t iter,Int_t color);
114   void DeleteDrawHists();
115   void WriteHists(const char *outfile);
116
117  private:
118   
119   AliAlignObj    ***fSurveyObjs;   // Array with survey measurments 
120   TString          fgeomfilename; // Geometry file name
121   Int_t           fmintracks;   // minimum number of tracks to realign a set of volumes
122   Bool_t             fUpdateCov;   // Update of Covariance for AlignObjs
123   Bool_t            fVarySigmaY;   // If kTRUE the "sigmaY" parameter is changed accordingly to alignObj error
124   Double_t          **fCorrModules;  //  Used to reduce correlations between modules
125   Double_t           fLimitCorr;    // Maximum number of tracks shared between modules
126   Double_t            fsigmaY;    // sigmaY parameter
127   Bool_t              fDraw;     // flag to activate draw objects
128   AliAlignObj  ***fAlignDrawObjs; //Array with reference objects for histograms
129   TCanvas              *fCanvPar; //Canvas with iterations distributions
130   TCanvas               *fCanvGr; //Canvas with iterations results
131   TGraph           *fgrIterMeanX; // graph of Delta X
132   TGraph           *fgrIterRMSX;  // graph of RMS X
133   TGraph           *fgrIterMeanY; // graph of Delta Y
134   TGraph           *fgrIterRMSY;  // graph of RMS Y
135   TGraph           *fgrIterMeanZ; // graph of DeltaZ
136   TGraph           *fgrIterRMSZ;  // TGraphs for displaying results during iterations
137   TGraph           *fgrIterMeanPsi; // graphs during iterations
138   TGraph           *fgrIterRMSPsi;  // graphs during iterations
139   TGraph           *fgrIterMeanTheta; // graphs during iterations
140   TGraph           *fgrIterRMSTheta;  // graphs during iterations
141   TGraph           *fgrIterMeanPhi; // graphs during iterations
142   TGraph           *fgrIterRMSPhi;  // graphs during iterations
143
144   ClassDef(AliITSRealignTracks,3)
145     
146     };
147     
148 #endif