ATLAS Offline Software
Loading...
Searching...
No Matches
MatrixTool.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef TRKALIGNGENTOOLS_MATRIXTOOL_H
6#define TRKALIGNGENTOOLS_MATRIXTOOL_H
7
21
22#include "GaudiKernel/ToolHandle.h"
24
26
27#include <TMatrixDSym.h>
28#include "CLHEP/Matrix/SymMatrix.h"
29
30#include <string>
31
32class TString;
33
45
46namespace Trk {
47
48 class AlSymMatBase;
49 class AlSymMat;
50 class AlMat;
51 class AlVec;
52
53 class IAlignModuleTool;
54
55 class MatrixTool : public AthAlgTool, virtual public IMatrixTool {
56 public:
57
68
70 MatrixTool(const std::string& type, const std::string& name,
71 const IInterface* parent);
72
74 virtual ~MatrixTool();
75
77 StatusCode initialize();
78
80 StatusCode finalize();
81
83 StatusCode allocateMatrix(int nDoF=0);
84
86 void prepareBinaryFiles(int solveOption);
87
90
92 void addFirstDerivatives(std::list<int,double>& derivatives);
93
94 void addFirstDerivative(int irow, double firstderiv);
95
98
100 void addSecondDerivatives(std::list<std::pair<int,int>,double >& derivatives);
101
102 void addSecondDerivative(int irow, int icol, double secondderiv);
103
104
106 bool accumulateFromFiles();
107
110
112 int solve();
113
114
116 void storeInTFile(const TString& filename);
117
120
121 void printModuleSolution(std::ostream & os, const AlignModule * module, const CLHEP::HepSymMatrix * cov) const;
122 void printGlobalSolution(std::ostream & os, const CLHEP::HepSymMatrix * cov);
123 void printGlobalSolution(std::ostream & os, const TMatrixDSym * cov);
124
125 private:
126
127 // private methods
128 int solveROOT();
129 int solveCLHEP();
130 int solveLapack();
131 int solveSparseEigen();
132 int solveLocal();
133
134 StatusCode spuriousRemoval();
135 static int fillVecMods();
136 void postSolvingLapack(AlVec * dChi2, AlSymMat * d2Chi2, AlVec &w, AlMat &z, int size);
137
138 void writeHitmap();
139 void readHitmaps();
140
141 // private variables
142 PublicToolHandle<IAlignModuleTool> m_alignModuleTool{
143 this, "AlignModuleTool", "Trk::AlignModuleTool/AlignModuleTool"};
144
147
149 AlVec* m_bigvector = nullptr;
150
152 Gaudi::Property<bool> m_useSparse{this, "UseSparse", false};
153
154 Gaudi::Property<bool> m_diagonalize{this, "Diagonalize", true,
155 "run diagonalization instead of inversion"};
156 Gaudi::Property<double> m_eigenvaluethreshold
157 {this, "EigenvalueThreshold", 0., "cut on the minimum eigenvalue"};
158
159 Gaudi::Property<int> m_solveOption
160 {this, "SolveOption", NONE, "solving option"};
161 Gaudi::Property<int> m_modcut{this, "ModCut", 0,
162 "cut on the weak modes which number is <par_modcut"};
163 Gaudi::Property<int> m_minNumHits{this, "MinNumHitsPerModule", 0,
164 "cut on the minimum number of hits per module"};
165 Gaudi::Property<int> m_minNumTrks{this, "MinNumTrksPerModule", 0,
166 "cut on the minimum number of tracks per module"};
167 Gaudi::Property<float> m_pullcut{this, "PullCut", 1.0,
168 "pull cut for the automatic weak mode removal method"};
169 Gaudi::Property<float> m_eigenvalueStep{this, "EigenvalueStep", 1e3,
170 "eigenvalue step for the second pass in the automatic weak mode removal method"};
171 Gaudi::Property<float> m_Align_db_step{this, "AlignCorrDBStep", 10.,
172 "corr in the diagonal basis step for the third pass in the auto weak mode removal method"};
173
174 Gaudi::Property<bool> m_calDet{this, "MatrixDet", false,
175 "compute bigmatrix's determinant ?"};
176 Gaudi::Property<bool> m_wSqMatrix{this, "WriteSquareMatrix", false,
177 "write a triangular matrix by default (true: square format) ?"};
178 Gaudi::Property<bool> m_writeMat{this, "WriteMat", true,
179 "write big matrix and vector into files ?"};
180 Gaudi::Property<bool> m_writeMatTxt{this, "WriteMatTxt", true,
181 "also write big matrix and vector into txt files ?"};
182 Gaudi::Property<bool> m_writeEigenMat{this, "WriteEigenMat", true,
183 "write eigenvalues and eigenvectors into files ?"};
184 Gaudi::Property<bool> m_writeEigenMatTxt{this, "WriteEigenMatTxt", true,
185 "also write eigenvalues and eigenvectors into txt files ?"};
186 Gaudi::Property<bool> m_writeModuleNames{this, "WriteModuleNames", false,
187 "write module name instead of Identifier to vector file"};
188
189 Gaudi::Property<bool> m_writeHitmap{this, "WriteHitmap", false,
190 "write hitmap into file"};
191 Gaudi::Property<bool> m_writeHitmapTxt{this, "WriteHitmapTxt", false,
192 "write hitmap into text file"};
193 Gaudi::Property<bool> m_readHitmaps{this, "ReadHitmaps", false,
194 "accumulate hitymap from files"};
195
196 Gaudi::Property<bool> m_writeTFile{this, "WriteTFile", false,
197 "write out files to a root file"};
198 Gaudi::Property<bool> m_readTFiles{this, "ReadTFile", false,
199 "if True then files will be read from TFiles instead of Binary files"};
200
201 Gaudi::Property<bool> m_runLocal{this, "RunLocalMethod", true,
202 "Run solving using Local method"};
203
204 double m_scale = -1.;
205 Gaudi::Property<bool> m_scaleMatrix{this, "ScaleMatrix", false,
206 "scale matrix by number of hits before solving"};
207
208 Gaudi::Property<double> m_softEigenmodeCut{this, "SoftEigenmodeCut", 0.,
209 "add constant to diagonal to effectively cut on weak eigenmodes"};
210
211 Gaudi::Property<double> m_removeSpurious{this, "RemoveSpurious", false,
212 "run spurious removal"};
213
214 Gaudi::Property<double> m_calculateFullCovariance
215 {this, "CalculateFullCovariance", true,
216 "calculate full covariance matrix for Lapack"};
217
218 Gaudi::Property<std::string> m_pathbin{this, "PathBinName", "./",
219 "path binary files (in/out)"};
220 Gaudi::Property<std::string> m_pathtxt{this, "PathTxtName", "./",
221 "path ascii files (in/out)"};
222 Gaudi::Property<std::string> m_prefixName{this, "PrefixName", "",
223 "prefix string to filenames"};
224
225 Gaudi::Property<std::string> m_tfileName
226 {this, "TFileName", "AlignmentTFile.root", "prefix string to filenames"};
227
228 Gaudi::Property<std::string> m_scalaMatName
229 {this, "ScalapackMatrixName", "eigenvectors.bin", "Scalapack matrix name"};
230 Gaudi::Property<std::string> m_scalaVecName
231 {this, "ScalapackVectorName", "eigenvalues.bin", "Scalapack vector name"};
232
233 Gaudi::Property<std::vector<std::string>> m_inputMatrixFiles
234 {this, "InputMatrixFiles", {"matrix.bin"},
235 "input binary files containing matrix terms"};
236 Gaudi::Property<std::vector<std::string>> m_inputVectorFiles
237 {this, "InputVectorFiles", {"vector.bin"},
238 "input binary files containing vector terms"};
239
240 Gaudi::Property<std::vector<std::string>> m_inputHitmapFiles
241 {this, "InputHitmapFiles", {"hitmap.bin"},
242 "input binary files containing the hitmaps"};
243
244 Gaudi::Property<std::vector<std::string>> m_inputTFiles
245 {this, "InputTFiles", {"AlignmentTFile.root"},
246 "input binary files containing matrix terms"};
247
248 std::vector<int> m_activeIndices{};
249 int m_aNDoF = 0;
250
251 Gaudi::Property<int> m_maxReadErrors{this, "MaxReadErrors", 10,
252 "maximum number of reading TFile errors"};
253
254 //To skip IBL or Pixel Alignment
255 Gaudi::Property<bool> m_AlignIBLbutNotPixel
256 {this, "AlignIBLbutNotPixel", false};
257 Gaudi::Property<bool> m_AlignPixelbutNotIBL
258 {this, "AlignPixelbutNotIBL", false};
259 //To Skip Solving of SCT ECA Last Disk
260 Gaudi::Property<bool> m_DeactivateSCT_ECA_LastDisk
261 {this, "DeactivateSCT_ECA_LastDisk", false};
262
263 //By Pixel DoF
264 Gaudi::Property<bool> m_Remove_Pixel_Tx{this, "Remove_Pixel_Tx", false};
265 Gaudi::Property<bool> m_Remove_Pixel_Ty{this, "Remove_Pixel_Ty", false};
266 Gaudi::Property<bool> m_Remove_Pixel_Tz{this, "Remove_Pixel_Tz", false};
267 Gaudi::Property<bool> m_Remove_Pixel_Rx{this, "Remove_Pixel_Rx", false};
268 Gaudi::Property<bool> m_Remove_Pixel_Ry{this, "Remove_Pixel_Ry", false};
269 Gaudi::Property<bool> m_Remove_Pixel_Rz{this, "Remove_Pixel_Rz", false};
270
271 //By IBL DoF
272 Gaudi::Property<bool> m_Remove_IBL_Tx{this, "Remove_IBL_Tx", false};
273 Gaudi::Property<bool> m_Remove_IBL_Ty{this, "Remove_IBL_Ty", false};
274 Gaudi::Property<bool> m_Remove_IBL_Tz{this, "Remove_IBL_Tz", false};
275 Gaudi::Property<bool> m_Remove_IBL_Rx{this, "Remove_IBL_Rx", false};
276 Gaudi::Property<bool> m_Remove_IBL_Ry{this, "Remove_IBL_Ry", false};
277 Gaudi::Property<bool> m_Remove_IBL_Rz{this, "Remove_IBL_Rz", false};
278
279 }; // end of class
280
281} // End of namespace
282
283
284
285#endif // TRKALIGNGENTOOLS_MATRIXTOOL_H
286
287
288
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
contains the implementation of the methods of class AlMat, for handling general NxM matrices
Definition AlMat.h:27
contains the base implementation for handling symmertic matrices
contains the implementation for handling symmetric matrices in triangular representation
Definition AlSymMat.h:26
IMatrixTool()
constructor
Gaudi::Property< std::string > m_tfileName
Definition MatrixTool.h:226
MatrixTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor.
Gaudi::Property< int > m_maxReadErrors
Definition MatrixTool.h:251
Gaudi::Property< std::string > m_prefixName
Definition MatrixTool.h:222
Gaudi::Property< bool > m_AlignIBLbutNotPixel
Definition MatrixTool.h:256
void prepareBinaryFiles(int solveOption)
reads/writes matrix entries from/to binary files as necessary
Gaudi::Property< bool > m_readHitmaps
Definition MatrixTool.h:193
Gaudi::Property< bool > m_wSqMatrix
Definition MatrixTool.h:176
Gaudi::Property< bool > m_Remove_Pixel_Ry
Definition MatrixTool.h:268
Gaudi::Property< bool > m_writeHitmap
Definition MatrixTool.h:189
Gaudi::Property< bool > m_Remove_Pixel_Rz
Definition MatrixTool.h:269
Gaudi::Property< bool > m_writeEigenMatTxt
Definition MatrixTool.h:184
Gaudi::Property< bool > m_Remove_IBL_Rx
Definition MatrixTool.h:275
double m_scale
scale for big matrix and vector normalization
Definition MatrixTool.h:204
Gaudi::Property< bool > m_runLocal
Definition MatrixTool.h:201
StatusCode spuriousRemoval()
Gaudi::Property< double > m_removeSpurious
Definition MatrixTool.h:211
Gaudi::Property< bool > m_Remove_Pixel_Tz
Definition MatrixTool.h:266
StatusCode allocateMatrix(int nDoF=0)
allocates memory for big matrix and big vector
std::vector< int > m_activeIndices
vector of indices which pass the min-hits cut
Definition MatrixTool.h:248
void addSecondDerivative(int irow, int icol, double secondderiv)
Gaudi::Property< bool > m_Remove_IBL_Rz
Definition MatrixTool.h:277
Gaudi::Property< bool > m_Remove_Pixel_Ty
Definition MatrixTool.h:265
bool accumulateFromFiles()
accumulates derivates from files.
Gaudi::Property< std::vector< std::string > > m_inputVectorFiles
Definition MatrixTool.h:237
AlVec * m_bigvector
vector to contain first derivative terms to be used for alignment
Definition MatrixTool.h:149
Gaudi::Property< bool > m_Remove_IBL_Tx
Definition MatrixTool.h:272
Gaudi::Property< int > m_minNumHits
Definition MatrixTool.h:163
static int fillVecMods()
Gaudi::Property< std::vector< std::string > > m_inputMatrixFiles
Definition MatrixTool.h:234
int m_aNDoF
number of active DoF (size of m_activeIndices)
Definition MatrixTool.h:249
Gaudi::Property< bool > m_Remove_Pixel_Tx
Definition MatrixTool.h:264
Gaudi::Property< double > m_calculateFullCovariance
Definition MatrixTool.h:215
Gaudi::Property< std::string > m_scalaVecName
Definition MatrixTool.h:231
Gaudi::Property< bool > m_Remove_IBL_Tz
Definition MatrixTool.h:274
int solve()
solves for alignment parameters
Gaudi::Property< float > m_eigenvalueStep
Definition MatrixTool.h:169
Gaudi::Property< float > m_Align_db_step
Definition MatrixTool.h:171
virtual ~MatrixTool()
Virtual destructor.
Gaudi::Property< bool > m_writeMatTxt
Definition MatrixTool.h:180
Gaudi::Property< std::vector< std::string > > m_inputHitmapFiles
Definition MatrixTool.h:241
void addSecondDerivatives(AlSymMatBase *matrix)
adds second derivatives to matrix
PublicToolHandle< IAlignModuleTool > m_alignModuleTool
Definition MatrixTool.h:142
Gaudi::Property< int > m_solveOption
Definition MatrixTool.h:160
Gaudi::Property< bool > m_writeHitmapTxt
Definition MatrixTool.h:191
bool accumulateFromTFiles()
Store Files in a tfile.
Gaudi::Property< bool > m_scaleMatrix
Definition MatrixTool.h:205
Gaudi::Property< bool > m_DeactivateSCT_ECA_LastDisk
Definition MatrixTool.h:261
Gaudi::Property< bool > m_writeMat
Definition MatrixTool.h:178
void storeInTFile(const TString &filename)
Store Files in a tfile.
void addFirstDerivatives(AlVec *vector)
adds first derivative to vector
void printModuleSolution(std::ostream &os, const AlignModule *module, const CLHEP::HepSymMatrix *cov) const
namespace { class RestoreIOSFlags { public: RestoreIOSFlags (std::ostream &os) : m_os(&os),...
Gaudi::Property< int > m_minNumTrks
Definition MatrixTool.h:165
Gaudi::Property< bool > m_diagonalize
Definition MatrixTool.h:154
Gaudi::Property< double > m_softEigenmodeCut
Definition MatrixTool.h:208
Gaudi::Property< std::vector< std::string > > m_inputTFiles
Definition MatrixTool.h:245
Gaudi::Property< bool > m_writeEigenMat
Definition MatrixTool.h:182
Gaudi::Property< int > m_modcut
Definition MatrixTool.h:161
Gaudi::Property< double > m_eigenvaluethreshold
Definition MatrixTool.h:157
Gaudi::Property< std::string > m_scalaMatName
Definition MatrixTool.h:229
Gaudi::Property< bool > m_writeTFile
Definition MatrixTool.h:196
Gaudi::Property< std::string > m_pathbin
Definition MatrixTool.h:218
Gaudi::Property< bool > m_useSparse
flag to use AlSpaMat for the big matrix (default is AlSymMat)
Definition MatrixTool.h:152
void postSolvingLapack(AlVec *dChi2, AlSymMat *d2Chi2, AlVec &w, AlMat &z, int size)
Gaudi::Property< bool > m_Remove_Pixel_Rx
Definition MatrixTool.h:267
Gaudi::Property< bool > m_calDet
Definition MatrixTool.h:174
AlSymMatBase * m_bigmatrix
matrix to contain second derivative terms to be used for alignment
Definition MatrixTool.h:146
Gaudi::Property< bool > m_AlignPixelbutNotIBL
Definition MatrixTool.h:258
@ SOLVE_FAST
Fast (Eigen method) solving after data accumulation.
Definition MatrixTool.h:61
@ SOLVE_ROOT
computation using ROOT
Definition MatrixTool.h:65
@ SOLVE
solving after data accumulation (LAPACK)
Definition MatrixTool.h:60
@ DIRECT_SOLVE_FAST
direct Fast (Eigen method) solving, already available matrix & vector
Definition MatrixTool.h:63
@ DIRECT_SOLVE
direct solving (LAPACK), already available matrix & vector
Definition MatrixTool.h:62
@ DIRECT_SOLVE_CLUSTER
computation of alignment parameters from SCALAPAK already solved matrix
Definition MatrixTool.h:64
@ NONE
not solve in any case (to be used when ipc)
Definition MatrixTool.h:59
@ SOLVE_CLHEP
computation using CLHEP
Definition MatrixTool.h:66
void addFirstDerivative(int irow, double firstderiv)
StatusCode finalize()
initialize
bool accumulateFromBinaries()
accumulates derivates from binary files
Gaudi::Property< bool > m_Remove_IBL_Ry
Definition MatrixTool.h:276
Gaudi::Property< float > m_pullcut
Definition MatrixTool.h:167
StatusCode initialize()
initialize
Gaudi::Property< bool > m_Remove_IBL_Ty
Definition MatrixTool.h:273
void printGlobalSolution(std::ostream &os, const CLHEP::HepSymMatrix *cov)
Gaudi::Property< bool > m_readTFiles
Definition MatrixTool.h:198
Gaudi::Property< std::string > m_pathtxt
Definition MatrixTool.h:220
Gaudi::Property< bool > m_writeModuleNames
Definition MatrixTool.h:186
Ensure that the ATLAS eigen extensions are properly loaded.
@ z
global position (cartesian)
Definition ParamDefs.h:57