ATLAS Offline Software
Loading...
Searching...
No Matches
AlMat.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef TRKALGS_ALMAT_H
6#define TRKALGS_ALMAT_H
7
8#include <iostream>
9#include <string>
10#include <exception>
11
12class StatusCode;
13
14namespace Trk {
15
16class AlVec;
17class AlSymMatBase;
18class AlSymMat;
19class AlSpaMat;
20
25
27class AlMat {
29 public:
30 AlMat(int N, int M);
31 AlMat();
32 AlMat(const AlMat& m);
33
34 virtual ~AlMat();
35
36 class AlMat_row {
37 public:
38 inline AlMat_row(AlMat&,int);
39 double & operator[](int);
40 private:
42 int m_r;
43 };
44
46 public:
47 inline AlMat_row_const(const AlMat&,int);
48 const double & operator[](int) const;
49 private:
50 const AlMat& m_a;
51 int m_r;
52 };
53 // helper class to implement m[i][j]
54
55 inline AlMat_row operator[] (int);
56 inline AlMat_row_const operator[] (int) const;
57
58 inline long int nrow() const;
59 inline long int ncol() const;
60
61 const std::string Print(const int NColsPerSet=10);
62
63 AlMat& operator=(const double&);
64 AlMat& operator=(const AlMat& m);
65 AlMat& operator=(const AlSymMat& m);
66 AlMat operator+(const AlMat& m) const;
67 AlMat& operator+=(const AlMat& m);
68 AlMat operator-(const AlMat& m) const;
69 AlMat& operator-=(const AlMat& m);
70 AlMat operator*(const AlMat& m) const;
71 AlMat operator*(const AlSymMatBase& m) const;
72 AlVec operator*(const AlVec& v) const;
73 AlMat& operator*=(const double& d);
74
75 // transposition
76 AlMat T() const; // creates a transposed copy. To be avoided!
77 AlMat& Transpose(); // sets the m_transpose flag (ultrafast!)
78 AlMat& Normal(); // unsets the m_transpose flag (ultrafast!)
79
80 //invert sym matrix declared as non-symetric for convenience
81 void invertS(int& ierr, double Norm);
82
83 // reSize method
84 void reSize (int Nnew, int Mnew);
85
86 StatusCode ReadScalaPack(const std::string&);
87
88 void SetPathBin(const std::string&);
89 void SetPathTxt(const std::string&);
90
91 // write method
92 // arguments are filename, flag for binary (true) or text file (false), text printout precision
93 StatusCode Write(const std::string&, bool, unsigned int precision=6);
94
95 double& elemr(long int, long int);
96 double elemc(long int, long int) const;
97
98 inline const double* ptrData() const;
99 inline double* ptrData();
100
101 inline const std::string& pathBin() const;
102 inline const std::string& pathTxt() const;
103
104 private:
105 void copy(const AlMat& m);
106 void copy(const AlSymMatBase& m);
107
108 protected:
112 std::string m_pathbin;
113 std::string m_pathtxt;
114 double* m_ptr_data;
116
117 virtual long int elem(long int, long int) const;
118
119};
120
121// inline operators
122
124 AlMat_row b(*this,r);
125 return b;
126}
127
129 const AlMat_row_const b(*this,r);
130 return b;
131}
132
133inline double &AlMat::AlMat_row::operator[](int c){
134 if(m_r<0||m_r>=m_a.nrow() || c<0||c>=m_a.ncol())
135 throw std::out_of_range( "Range error in AlMat::operator[][]" );
136
137 return *(m_a.m_ptr_data+m_r*m_a.ncol()+c);
138}
139
140inline const double & AlMat::AlMat_row_const::operator[](int c) const {
141 if(m_r<0||m_r>=m_a.nrow() || c<0||c>=m_a.ncol())
142 throw std::out_of_range( "Range error in AlMat::operator[][]" );
143
144 return *(m_a.m_ptr_data+m_r*m_a.ncol()+c);
145}
146
148 : m_a(a), m_r(r)
149{}
150
152(const AlMat&a,int r)
153 : m_a(a), m_r(r)
154{}
155
156
157inline long int AlMat::nrow() const {
158 if( m_transpose ) return m_ncol;
159 return m_nrow;
160}
161
162inline long int AlMat::ncol() const {
163 if( m_transpose ) return m_nrow;
164 return m_ncol;
165}
166
167inline const double* AlMat::ptrData() const {
168 return m_ptr_data;
169}
170
171inline double* AlMat::ptrData() {
172 return m_ptr_data;
173}
174
175inline const std::string& AlMat::pathBin() const {
176 return m_pathbin;
177}
178
179inline const std::string& AlMat::pathTxt() const {
180 return m_pathtxt;
181}
182
183} // end namespace Trk
184
185#endif // TRKALGS_ALMAT_H
static Double_t a
const AlMat & m_a
Definition AlMat.h:50
AlMat_row_const(const AlMat &, int)
Definition AlMat.h:152
const double & operator[](int) const
Definition AlMat.h:140
double & operator[](int)
Definition AlMat.h:133
AlMat_row(AlMat &, int)
Definition AlMat.h:147
const std::string & pathBin() const
Definition AlMat.h:175
AlMat operator+(const AlMat &m) const
Definition AlMat.cxx:170
AlMat & Normal()
Definition AlMat.cxx:316
AlMat & operator=(const double &)
Definition AlMat.cxx:134
StatusCode ReadScalaPack(const std::string &)
Definition AlMat.cxx:372
const double * ptrData() const
Definition AlMat.h:167
int m_ncol
Definition AlMat.h:109
AlMat & operator+=(const AlMat &m)
Definition AlMat.cxx:186
AlMat & Transpose()
Definition AlMat.cxx:308
long int nrow() const
Definition AlMat.h:157
std::string m_pathbin
Definition AlMat.h:112
AlMat_row operator[](int)
Definition AlMat.h:123
AlMat operator*(const AlMat &m) const
Definition AlMat.cxx:229
double * m_ptr_data
Definition AlMat.h:114
AlMat(int N, int M)
Definition AlMat.cxx:40
virtual long int elem(long int, long int) const
Definition AlMat.cxx:121
std::string m_pathtxt
Definition AlMat.h:113
double elemc(long int, long int) const
Definition AlMat.cxx:109
StatusCode Write(const std::string &, bool, unsigned int precision=6)
Definition AlMat.cxx:414
const std::string & pathTxt() const
Definition AlMat.h:179
void reSize(int Nnew, int Mnew)
Definition AlMat.cxx:346
void copy(const AlMat &m)
Definition AlMat.cxx:70
bool m_transpose
Definition AlMat.h:115
int m_nrow
Definition AlMat.h:110
void SetPathBin(const std::string &)
Definition AlMat.cxx:402
void SetPathTxt(const std::string &)
Definition AlMat.cxx:408
void invertS(int &ierr, double Norm)
Definition AlMat.cxx:325
virtual ~AlMat()
Definition AlMat.cxx:67
AlMat T() const
Definition AlMat.cxx:297
AlMat & operator*=(const double &d)
Definition AlMat.cxx:288
int m_nele
Definition AlMat.h:111
double & elemr(long int, long int)
Definition AlMat.cxx:97
AlMat operator-(const AlMat &m) const
Definition AlMat.cxx:200
long int ncol() const
Definition AlMat.h:162
const std::string Print(const int NColsPerSet=10)
Definition AlMat.cxx:457
AlMat & operator-=(const AlMat &m)
Definition AlMat.cxx:216
contains the implementation for handling sparse matrices
Definition AlSpaMat.h:27
contains the base implementation for handling symmertic matrices
contains the implementation for handling symmetric matrices in triangular representation
Definition AlSymMat.h:26
void Norm(TH1 *h, double scale)
Definition computils.cxx:67
int r
Definition globals.cxx:22
Ensure that the ATLAS eigen extensions are properly loaded.
@ v
Definition ParamDefs.h:78