Line data Source code
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 0 : AliAlignmentTracks(),
31 0 : fSurveyObjs(0),
32 0 : fgeomfilename(),
33 0 : fmintracks(0),
34 0 : fUpdateCov(kFALSE),
35 0 : fVarySigmaY(kFALSE),
36 0 : fCorrModules(0),
37 0 : fLimitCorr(0.),
38 0 : fsigmaY(),
39 0 : fDraw(kFALSE),
40 0 : fAlignDrawObjs(0),
41 0 : fCanvPar(0),
42 0 : fCanvGr(0),
43 0 : fgrIterMeanX(0),
44 0 : fgrIterRMSX(0),
45 0 : fgrIterMeanY(0),
46 0 : fgrIterRMSY(0),
47 0 : fgrIterMeanZ(0),
48 0 : fgrIterRMSZ(0),
49 0 : fgrIterMeanPsi(0),
50 0 : fgrIterRMSPsi(0),
51 0 : fgrIterMeanTheta(0),
52 0 : fgrIterRMSTheta(0),
53 0 : fgrIterMeanPhi(0),
54 0 : fgrIterRMSPhi(0)
55 0 : {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 0 : 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 0 : void SetMinNtracks(Int_t minNtracks){fmintracks=minNtracks;}
72 0 : void SetCovUpdate(Bool_t covupdate){fUpdateCov=covupdate;}
73 : void SetVarySigmaY(Bool_t varysigmay,Double_t sigmaYfixed=1.);
74 0 : 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 116 : ClassDef(AliITSRealignTracks,3)
145 :
146 : };
147 :
148 : #endif
|