v2.0.0
Loading...
Searching...
No Matches
fiff_sparse_matrix.h
Go to the documentation of this file.
1//=============================================================================================================
36
37#ifndef FIFFSPARSEMATRIX_H
38#define FIFFSPARSEMATRIX_H
39
40//=============================================================================================================
41// INCLUDES
42//=============================================================================================================
43
44#include "fiff_global.h"
45#include "fiff_types.h"
46#include "fiff_tag.h"
47
48//=============================================================================================================
49// EIGEN INCLUDES
50//=============================================================================================================
51
52#include <Eigen/Core>
53#include <Eigen/SparseCore>
54
55//=============================================================================================================
56// STL INCLUDES
57//=============================================================================================================
58
59#include <memory>
60
61//=============================================================================================================
62// QT INCLUDES
63//=============================================================================================================
64
65#include <QSharedPointer>
66#include <QDebug>
67
68//=============================================================================================================
69// DEFINE NAMESPACE FIFFLIB
70//=============================================================================================================
71
72namespace FIFFLIB
73{
74
75//=============================================================================================================
86{
87public:
88 using SPtr = QSharedPointer<FiffSparseMatrix>;
89 using ConstSPtr = QSharedPointer<const FiffSparseMatrix>;
90 using UPtr = std::unique_ptr<FiffSparseMatrix>;
91 using ConstUPtr = std::unique_ptr<const FiffSparseMatrix>;
92
93 //=========================================================================================================
98
99 //=========================================================================================================
106 explicit FiffSparseMatrix(Eigen::SparseMatrix<float>&& mat,
108
109 //=========================================================================================================
113 FiffSparseMatrix(const FiffSparseMatrix& mat) = default;
114
115 //=========================================================================================================
120
121 //=========================================================================================================
126
127 //=========================================================================================================
132
133 //=========================================================================================================
137 ~FiffSparseMatrix() = default;
138
139 //============================= Eigen access =============================
140
145 inline Eigen::SparseMatrix<float>& eigen() { return m_eigen; }
146
151 inline const Eigen::SparseMatrix<float>& eigen() const { return m_eigen; }
152
156 inline operator const Eigen::SparseMatrix<float>&() const { return m_eigen; }
157
161 inline int rows() const { return static_cast<int>(m_eigen.rows()); }
162
166 inline int cols() const { return static_cast<int>(m_eigen.cols()); }
167
171 inline int nonZeros() const { return static_cast<int>(m_eigen.nonZeros()); }
172
173 //============================= fiff_sparse.c =============================
174
182 static std::vector<int> fiff_get_matrix_sparse_dims(const FIFFLIB::FiffTag::UPtr& tag);
183
191 static FiffSparseMatrix::UPtr fiff_get_float_sparse_matrix(const FIFFLIB::FiffTag::UPtr& tag);
192
193 //============================= mne_sparse_matop.c =============================
194
206 static FiffSparseMatrix::UPtr create_sparse_rcs(int nrow,
207 int ncol,
208 int *nnz,
209 int **colindex,
210 float **vals);
211
217 FiffSparseMatrix::UPtr mne_add_upper_triangle_rcs();
218
224 FiffSparseMatrix::UPtr pickLowerTriangleRcs() const;
225
231 inline bool is_empty() const;
232
238 inline Eigen::SparseMatrix<double> toEigenSparse() const;
239
248 static FiffSparseMatrix fromEigenSparse(const Eigen::SparseMatrix<double>& mat);
249
257 static FiffSparseMatrix fromEigenSparse(const Eigen::SparseMatrix<float>& mat);
258
259public:
261
262private:
263 Eigen::SparseMatrix<float> m_eigen;
264};
265
266//=============================================================================================================
267// INLINE DEFINITIONS
268//=============================================================================================================
269
270inline bool FiffSparseMatrix::is_empty() const
271{
272 return m_eigen.nonZeros() <= 0;
273}
274
275inline Eigen::SparseMatrix<double> FiffSparseMatrix::toEigenSparse() const
276{
277 return m_eigen.cast<double>();
278}
279
280} // NAMESPACE FIFFLIB
281
282#endif // FIFFSPARSEMATRIX_H
Fiff library export/import macros.
#define FIFFSHARED_EXPORT
Definition fiff_global.h:52
Old fiff_type declarations - replace them.
#define FIFFTS_MC_RCS
Definition fiff_file.h:270
FiffTag class declaration, which provides fiff tag I/O and processing methods.
FIFF file I/O and data structures (raw, epochs, evoked, covariance, forward).
qint32 fiff_int_t
Definition fiff_types.h:89
FIFF sparse matrix storage backed by Eigen.
Eigen::SparseMatrix< float > & eigen()
FiffSparseMatrix & operator=(const FiffSparseMatrix &)=default
FiffSparseMatrix(const FiffSparseMatrix &mat)=default
FiffSparseMatrix(FiffSparseMatrix &&mat)=default
QSharedPointer< FiffSparseMatrix > SPtr
const Eigen::SparseMatrix< float > & eigen() const
QSharedPointer< const FiffSparseMatrix > ConstSPtr
Eigen::SparseMatrix< double > toEigenSparse() const
FiffSparseMatrix & operator=(FiffSparseMatrix &&)=default
std::unique_ptr< const FiffSparseMatrix > ConstUPtr
std::unique_ptr< FiffSparseMatrix > UPtr
std::unique_ptr< FiffTag > UPtr
Definition fiff_tag.h:158