Updated macro
[u/mrichter/AliRoot.git] / ITS / AliITSAlignMille.h
CommitLineData
483fd7d8 1#ifndef ALIITSALIGNMILLE_H
2#define ALIITSALIGNMILLE_H
3/* Copyright(c) 2007-2009 , ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
5
6/* $Id$ */
7
8
9/// \ingroup rec
10/// \class AliITSAlignMille
11/// \brief Class for alignment of ITS
12//
13// Authors: Marcello Lunardon
14
15#include <TString.h>
16#include <TObject.h>
17#include "AliTrackPointArray.h"
18
19class AliMillepede;
20class AliAlignObjParams;
21class TGeoManager;
22class TGeoHMatrix;
0856765c 23class AliITSAlignMilleModule;
483fd7d8 24
25// number of used objects
26#define ITSMILLE_NDETELEM 2198
27#define ITSMILLE_NPARCH 6
28#define ITSMILLE_NLOCAL 4
29#define ITSMILLE_NSTDEV 3
30
31class AliITSAlignMille:public TObject
32{
33
34public:
35 AliITSAlignMille(const Char_t *configFilename="AliITSAlignMille.conf", Bool_t initmille=kTRUE);
36 virtual ~AliITSAlignMille();
37
38 // geometry methods
0856765c 39 Int_t GetModuleIndex(const Char_t *symname);
483fd7d8 40 Int_t GetModuleIndex(UShort_t voluid);
41 UShort_t GetModuleVolumeID(const Char_t *symname);
42 UShort_t GetModuleVolumeID(Int_t index);
0856765c 43 void SetCurrentModule(Int_t index);
44 void SetCurrentSensitiveModule(Int_t index); // set as current the SENSITIVE module with index 'index'
483fd7d8 45
46 // configuration methods
47 void SetGeometryFileName(const Char_t* filename="geometry.root")
48 { fGeometryFileName = filename; }
49 const Char_t* GetGeometryFileName() {return fGeometryFileName.Data();}
0856765c 50 const Char_t* GetPreAlignmentFileName() {return fPreAlignmentFileName.Data();}
483fd7d8 51 void PrintCurrentModuleInfo();
0856765c 52 void Print(Option_t*) const;
483fd7d8 53
54 // fitting methods
55 void SetMinNPtsPerTrack(Int_t pts=3) {fMinNPtsPerTrack=pts;}
483fd7d8 56 Int_t ProcessTrack(AliTrackPointArray *track);
57 void InitTrackParams(int meth=1);
58 Int_t InitModuleParams();
59 Int_t CheckCurrentTrack();
0856765c 60 Bool_t CheckVolumeID(UShort_t voluid) const; // checks voluid for sensitive volumes
61 Int_t IsDefined(UShort_t voluid) const;
62 Int_t IsContained(UShort_t voluid) const;
483fd7d8 63 Int_t CalcIntersectionPoint(Double_t *lpar, Double_t *gpar);
64 Int_t CalcDerivatives(Int_t paridx, Bool_t islpar);
65 Double_t* GetLocalIntersectionPoint() {return fPintLoc;}
66 Double_t* GetGlobalIntersectionPoint() {return fPintGlo;}
0856765c 67 void SetInitTrackParamsMeth(Int_t meth=1) {fInitTrackParamsMeth=meth;}
483fd7d8 68
69 // millepede methods
70 void FixParameter(Int_t param, Double_t value);
71 void AddConstraint(Double_t *factor, Double_t value );
72 void InitGlobalParameters(Double_t *par);
73 void SetLocalDerivative(Int_t index, Double_t value)
74 {fLocalDerivatives[index] = value;}
75 void SetGlobalDerivative(Int_t index, Double_t value)
76 {fGlobalDerivatives[index] = value;}
77 void LocalFit(Int_t iTrack, Double_t *lTrackParam, Int_t lSingleFit);
78 void GlobalFit(Double_t *parameters,Double_t *errors,Double_t *pulls);
79 void PrintGlobalParameters();
80 Double_t GetParError(Int_t iPar);
81 Int_t SetLocalEquations();
82
83 // fitting stuffs
84 AliTrackPointArray *GetCurrentTrack() {return fTrack;}
85 AliTrackPoint *GetCurrentCluster() {return &fCluster;}
86
87 // geometry stuffs
88 Int_t GetNModules() const {return fNModules;}
89 Int_t GetCurrentModuleIndex() const {return fCurrentModuleIndex;}
90 TGeoHMatrix *GetCurrentModuleHMatrix() {return fCurrentModuleHMatrix;}
91 Double_t *GetCurrentModuleTranslation() {return fCurrentModuleTranslation;}
92 Int_t GetCurrentModuleInternalIndex() const {return fCurrentModuleInternalIndex;}
93 Int_t *GetModuleIndexArray() {return fModuleIndex;}
0856765c 94 AliITSAlignMilleModule *GetMilleModule(UShort_t voluid); // get pointer to the defined supermodule
95 AliITSAlignMilleModule *GetCurrentModule();
483fd7d8 96 UShort_t *GetModuleVolumeIDArray() {return fModuleVolumeID;}
97
98 private:
99
100 // configuration methods
101 Int_t LoadConfig(const Char_t *cfile="AliITSAlignMille.conf");
0856765c 102 Int_t LoadSuperModuleFile(const Char_t *cfile="ITSMilleSuperModules.root");
483fd7d8 103 void ResetLocalEquation();
104 void InitGeometry();
0856765c 105 Int_t ApplyToGeometry();
483fd7d8 106
107 // millepede methods
108 void Init(Int_t nGlobal, Int_t nLocal, Int_t nStdDev);
109
110 // millepede stuffs
111 AliMillepede *fMillepede; ///< Detector independent alignment class
112 static Int_t fgNParCh; ///< Number of degrees of freedom per chamber
113 static Int_t fgNDetElem; ///< Total number of detection elements
114 Double_t fStartFac; ///< Initial value for chi2 cut
115 ///< if > 1 Iterations in AliMil. are turned on
116 Double_t fResCutInitial; ///< Cut on residual for first iteration
117 Double_t fResCut; ///< Cut on residual for other iterations
118 Int_t fNGlobal; ///< Number of global parameters
119 Int_t fNLocal; ///< Number of local parameters
120 Int_t fNStdDev; ///< Number of standard deviations for chi2 cut
121 Bool_t fIsMilleInit; ///
122 Double_t fParSigTranslations; ///< init sigma for transl. params [cm]
123 Double_t fParSigRotations; ///< init sigma for rot. params [deg]
124
125 // fitting stuffs
126 AliTrackPointArray *fTrack; ///< pointer to current track
127 AliTrackPoint fCluster; ///< current cluster
128 Double_t *fGlobalDerivatives; ///< Array of global derivatives
129 Double_t fLocalDerivatives[ITSMILLE_NLOCAL]; ///< Array of local deriv.
130 Double_t fLocalInitParam[ITSMILLE_NLOCAL]; ///< Array with inital values for local parameters for current track
131 Double_t fModuleInitParam[ITSMILLE_NPARCH]; ///< Array with inital values for current module parameters (init geometry)
132 Double_t fPintLoc[3]; ///
133 Double_t fPintLoc0[3]; ///
134 Double_t fPintGlo[3]; ///
135 Double_t fMeasLoc[3]; // current point local coordinates (the original ones)
136 Double_t fMeasGlo[3]; // current point glob. coord (AliTrackPoint)
137 Double_t fSigmaLoc[3]; // stdev current point
0856765c 138 //TGeoHMatrix *fTempHMat; ///
483fd7d8 139 AliAlignObjParams *fTempAlignObj; ///
140 Double_t fDerivativeXLoc; // localX deriv.
141 Double_t fDerivativeZLoc; // localZ deriv.
142 Double_t fDeltaPar; ///
143 Int_t fMinNPtsPerTrack; ///
0856765c 144 Int_t fInitTrackParamsMeth; ///
145
483fd7d8 146 // geometry stuffs
147 TString fGeometryFileName; ///
0856765c 148 TString fPreAlignmentFileName; ///
483fd7d8 149 TGeoManager *fGeoManager; ///
0856765c 150 Int_t fCurrentModuleIndex; /// SuperModule index
151 Int_t fCurrentModuleInternalIndex; /// SuperModule internal index
152 Int_t fCurrentSensVolIndex; /// Current point (sens. vol.) index
483fd7d8 153 Double_t fCurrentModuleTranslation[3]; ///
154 Int_t fNModules; /// number of defined modules from config file
0856765c 155 Int_t fModuleIndex[ITSMILLE_NDETELEM*2]; ///
156 UShort_t fModuleVolumeID[ITSMILLE_NDETELEM*2]; ///
157 Bool_t fFreeParam[ITSMILLE_NDETELEM*2][ITSMILLE_NPARCH]; ///
483fd7d8 158 Bool_t fUseLocalShifts; ///
0856765c 159 Bool_t fUseSuperModules; ///
160 Bool_t fUsePreAlignment; ///
161 Int_t fNSuperModules; /// number of custom supermodules in SM file
162 TGeoHMatrix *fCurrentModuleHMatrix; /// SuperModule matrix
163
164 AliITSAlignMilleModule *fMilleModule[ITSMILLE_NDETELEM*2]; /// array of super modules to be aligned
165
166 AliITSAlignMilleModule *fSuperModule[ITSMILLE_NDETELEM*2]; /// array of super modules defined in supermodule file
483fd7d8 167
168 AliITSAlignMille(const AliITSAlignMille& rhs);
169 AliITSAlignMille& operator=(const AliITSAlignMille& rhs);
170
171
0856765c 172 ClassDef(AliITSAlignMille, 0)
173
174};
483fd7d8 175
176#endif