ATLAS Offline Software
Loading...
Searching...
No Matches
AlSymMatBase.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_ALSYMMATBASE_H
6#define TRKALGS_ALSYMMATBASE_H
7
8// AlSymMatBase.h - Base implementation of generic matrices for alignment
9// modified from SiGlobalChi2AlgebrUtils::AlSymMatBase, modified to make
10// pure virtual
11
12#include <exception>
13#include <map>
14#include <vector>
15
16class StatusCode;
17template<class Element> class TMatrixTSparse;
19
20namespace Trk {
21
22class AlVec;
23class AlMat;
24class AlSpaMat;
25
26// definition of custom types used:
27typedef std::pair<long int, long int> indices;
28typedef std::map<indices, double> datamap;
29typedef datamap::iterator mapiterator;
30typedef datamap::const_iterator const_mapiterator;
31
36
40
41 public:
42 virtual ~AlSymMatBase();
43
45 public:
46 inline AlSymMatBase_row(AlSymMatBase&,long int);
47 double & operator[](long int);
48 private:
50 long int m_r;
51 };
52
54 public:
55 inline AlSymMatBase_row_const(const AlSymMatBase&,long int);
56 double operator[](long int) const;
57 private:
59 long int m_r;
60 };
61 // helper class to implement m[i][j]
62
63 inline AlSymMatBase_row operator[] (long int);
64 inline AlSymMatBase_row_const operator[] (long int) const;
65
66 inline long int nrow() const;
67 inline long int ncol() const;
68 inline long int size() const;
69
70 inline int matrix_type() const;
71
72 // pure virtual:
73 virtual void reSize(long int Nnew)=0;
74 virtual double& elemr(long int, long int)=0;
75 virtual double elemc(long int, long int) const=0;
76 virtual int invert() = 0;
77 virtual void RemoveModule(int) = 0;
78 virtual void RemoveAlignPar(int, int) = 0;
79 virtual int RemoveCollsRows(std::vector<int>) = 0;
80 virtual void SetPathBin(const std::string&) = 0;
81 virtual void SetPathTxt(const std::string&) = 0;
82 virtual StatusCode Write(const std::string&, bool, bool, double, float) = 0;
83 virtual StatusCode CheckMatVersion(const std::string&, bool&) = 0;
84 virtual StatusCode Read(const std::string&, int&, bool&, float&) = 0;
85 virtual StatusCode ReadProjected(const std::string&, int&, bool&, float&) = 0;
86 virtual int diagonalize(char jobz, AlVec& w, AlMat& z) = 0;
87 virtual double determinant() = 0;
88
89 inline const datamap * ptrMap() const;
90
92
93
94 protected:
95 AlSymMatBase(); // ensure only create derived classes
96 AlSymMatBase(long int N);
99
102
103 long int m_size = 0;
104 long int m_nele = 0;
105};
106
107// inline operators
108
110 AlSymMatBase_row b(*this,r);
111 return b;
112}
113
115 const AlSymMatBase_row_const b(*this,r);
116 return b;
117}
118
120 if(m_r<0||m_r>=m_a.nrow() || c<0||c>=m_a.ncol()) {
121 throw std::out_of_range( "Range error in AlSymMatBase::operator[][]" );
122 } else {
123 return m_a.elemr(m_r,c);
124 }
125}
126
128 if(m_r<0||m_r>=m_a.nrow() || c<0||c>=m_a.ncol()) {
129 throw std::out_of_range( "Range error in AlSymMatBase::operator[][]" );
130 } else {
131 return m_a.elemc(m_r,c);
132 }
133}
134
138
143
144
145inline long int AlSymMatBase::size() const { return m_size; }
146inline long int AlSymMatBase::nrow() const { return m_size; }
147inline long int AlSymMatBase::ncol() const { return m_size; }
148inline int AlSymMatBase::matrix_type() const { return m_matrix_type; }
149inline const datamap * AlSymMatBase::ptrMap() const { return &m_ptr_map; }
150
151} // end namespace Trk
152
153#endif // TRKALGS_ALSYMMATBASE_H
class TMatrixTSparse< double > TMatrixDSparse
Definition AlSpaMat.h:14
static Double_t a
contains the implementation of the methods of class AlMat, for handling general NxM matrices
Definition AlMat.h:27
contains the implementation for handling sparse matrices
Definition AlSpaMat.h:27
AlSymMatBase_row_const(const AlSymMatBase &, long int)
AlSymMatBase_row(AlSymMatBase &, long int)
virtual int invert()=0
AlSymMatBase & operator=(const AlSymMatBase &)
virtual double determinant()=0
virtual StatusCode CheckMatVersion(const std::string &, bool &)=0
virtual StatusCode Write(const std::string &, bool, bool, double, float)=0
long int nrow() const
virtual ~AlSymMatBase()
virtual TMatrixDSparse * makeTMatrix()=0
const datamap * ptrMap() const
int matrix_type() const
virtual double & elemr(long int, long int)=0
virtual void reSize(long int Nnew)=0
virtual void RemoveAlignPar(int, int)=0
virtual int diagonalize(char jobz, AlVec &w, AlMat &z)=0
long int ncol() const
AlSymMatBase_row operator[](long int)
virtual void RemoveModule(int)=0
virtual void SetPathTxt(const std::string &)=0
virtual StatusCode ReadProjected(const std::string &, int &, bool &, float &)=0
virtual int RemoveCollsRows(std::vector< int >)=0
virtual StatusCode Read(const std::string &, int &, bool &, float &)=0
virtual void SetPathBin(const std::string &)=0
long int size() const
virtual double elemc(long int, long int) const =0
int r
Definition globals.cxx:22
Ensure that the ATLAS eigen extensions are properly loaded.
datamap::iterator mapiterator
datamap::const_iterator const_mapiterator
std::map< indices, double > datamap
@ z
global position (cartesian)
Definition ParamDefs.h:57
std::pair< long int, long int > indices