ATLAS Offline Software
AlMat.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 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 
12 class StatusCode;
13 
14 namespace Trk {
15 
16 class AlVec;
17 class AlSymMatBase;
18 class AlSymMat;
19 class AlSpaMat;
20 
26 class 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 std::string pathBin() const;
102  inline std::string pathTxt() const;
103 
104  private:
105  void copy(const AlMat& m);
106  void copy(const AlSymMatBase& m);
107 
108  protected:
109  int m_ncol;
110  int m_nrow;
111  int m_nele;
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 
133 inline 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 
140 inline 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 
157 inline long int AlMat::nrow() const {
158  if( m_transpose ) return m_ncol;
159  return m_nrow;
160 }
161 
162 inline long int AlMat::ncol() const {
163  if( m_transpose ) return m_nrow;
164  return m_ncol;
165 }
166 
167 inline const double* AlMat::ptrData() const {
168  return m_ptr_data;
169 }
170 
171 inline double* AlMat::ptrData() {
172  return m_ptr_data;
173 }
174 
175 inline std::string AlMat::pathBin() const {
176  return m_pathbin;
177 }
178 
179 inline std::string AlMat::pathTxt() const {
180  return m_pathtxt;
181 }
182 
183 } // end namespace Trk
184 
185 #endif // TRKALGS_ALMAT_H
Trk::AlMat::operator=
AlMat & operator=(const double &)
Definition: AlMat.cxx:126
Trk::AlMat::AlMat_row::AlMat_row
AlMat_row(AlMat &, int)
Definition: AlMat.h:147
beamspotman.r
def r
Definition: beamspotman.py:676
Trk::AlMat::m_pathbin
std::string m_pathbin
Definition: AlMat.h:112
Trk::AlMat::T
AlMat T() const
Definition: AlMat.cxx:289
python.SystemOfUnits.m
int m
Definition: SystemOfUnits.py:91
Trk::AlMat::AlMat
AlMat()
Definition: AlMat.cxx:21
Trk::AlMat::ptrData
const double * ptrData() const
Definition: AlMat.h:167
Trk::AlVec
Definition: AlVec.h:23
Trk::AlSymMatBase
Definition: AlSymMatBase.h:38
hist_file_dump.d
d
Definition: hist_file_dump.py:137
Trk::AlMat::AlMat_row_const::operator[]
const double & operator[](int) const
Definition: AlMat.h:140
Trk::AlMat::m_transpose
bool m_transpose
Definition: AlMat.h:115
Trk::AlMat::operator*
AlMat operator*(const AlMat &m) const
Definition: AlMat.cxx:221
Trk::AlMat::reSize
void reSize(int Nnew, int Mnew)
Definition: AlMat.cxx:338
Trk::AlMat::ReadScalaPack
StatusCode ReadScalaPack(const std::string &)
Definition: AlMat.cxx:364
Trk::AlMat::SetPathTxt
void SetPathTxt(const std::string &)
Definition: AlMat.cxx:403
Trk::AlMat::operator+
AlMat operator+(const AlMat &m) const
Definition: AlMat.cxx:162
Trk::AlMat::m_nrow
int m_nrow
Definition: AlMat.h:110
JetTiledMap::N
@ N
Definition: TiledEtaPhiMap.h:44
Trk::AlMat::Print
const std::string Print(const int NColsPerSet=10)
Definition: AlMat.cxx:452
Trk::AlMat::AlMat_row_const::m_r
int m_r
Definition: AlMat.h:51
Trk::AlMat::ncol
long int ncol() const
Definition: AlMat.h:162
Trk::AlMat::AlMat_row::m_a
AlMat & m_a
Definition: AlMat.h:41
Trk::AlSymMat
Definition: AlSymMat.h:26
Trk::AlMat::operator+=
AlMat & operator+=(const AlMat &m)
Definition: AlMat.cxx:178
Trk::AlMat::invertS
void invertS(int &ierr, double Norm)
Definition: AlMat.cxx:317
Trk::AlMat::pathTxt
std::string pathTxt() const
Definition: AlMat.h:179
Trk::AlMat::pathBin
std::string pathBin() const
Definition: AlMat.h:175
Trk::AlMat::AlMat_row::operator[]
double & operator[](int)
Definition: AlMat.h:133
Trk::AlMat::Transpose
AlMat & Transpose()
Definition: AlMat.cxx:300
Trk::AlMat::AlMat_row_const
Definition: AlMat.h:45
Trk::AlMat::copy
void copy(const AlMat &m)
Definition: AlMat.cxx:62
Trk::AlMat::operator-=
AlMat & operator-=(const AlMat &m)
Definition: AlMat.cxx:208
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
Trk::AlMat::SetPathBin
void SetPathBin(const std::string &)
Definition: AlMat.cxx:397
Trk::AlMat::m_ncol
int m_ncol
Definition: AlMat.h:109
JetVoronoiDiagramHelpers::Norm
Point Norm(const Point &a)
Definition: JetVoronoiDiagramHelpers.cxx:79
Trk::AlMat
Definition: AlMat.h:27
Trk::AlMat::nrow
long int nrow() const
Definition: AlMat.h:157
Trk::AlMat::AlMat_row::m_r
int m_r
Definition: AlMat.h:42
Trk::AlMat::operator[]
AlMat_row operator[](int)
Definition: AlMat.h:123
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition: FakeTrackBuilder.h:9
Trk::AlMat::Write
StatusCode Write(const std::string &, bool, unsigned int precision=6)
Definition: AlMat.cxx:409
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
Trk::AlMat::m_nele
int m_nele
Definition: AlMat.h:111
Trk::AlMat::elemc
double elemc(long int, long int) const
Definition: AlMat.cxx:101
Trk::AlMat::~AlMat
virtual ~AlMat()
Definition: AlMat.cxx:59
Trk::AlMat::AlMat_row_const::AlMat_row_const
AlMat_row_const(const AlMat &, int)
Definition: AlMat.h:152
Trk::AlMat::m_ptr_data
double * m_ptr_data
Definition: AlMat.h:114
a
TList * a
Definition: liststreamerinfos.cxx:10
Trk::AlMat::elemr
double & elemr(long int, long int)
Definition: AlMat.cxx:89
Trk::AlMat::AlMat_row
Definition: AlMat.h:36
Trk::AlMat::Normal
AlMat & Normal()
Definition: AlMat.cxx:308
Trk::AlMat::AlMat_row_const::m_a
const AlMat & m_a
Definition: AlMat.h:50
Trk::AlMat::operator-
AlMat operator-(const AlMat &m) const
Definition: AlMat.cxx:192
Trk::AlMat::operator*=
AlMat & operator*=(const double &d)
Definition: AlMat.cxx:280
python.compressB64.c
def c
Definition: compressB64.py:93
Trk::AlMat::elem
virtual long int elem(long int, long int) const
Definition: AlMat.cxx:113
Trk::v
@ v
Definition: ParamDefs.h:84
Trk::AlMat::m_pathtxt
std::string m_pathtxt
Definition: AlMat.h:113