v2.0.0
Loading...
Searching...
No Matches
fiff_sparse_matrix.h
Go to the documentation of this file.
1//=============================================================================================================
23
24#ifndef FIFFSPARSEMATRIX_H
25#define FIFFSPARSEMATRIX_H
26
27//=============================================================================================================
28// INCLUDES
29//=============================================================================================================
30
31#include "fiff_global.h"
32#include "fiff_types.h"
33#include "fiff_tag.h"
34
35//=============================================================================================================
36// EIGEN INCLUDES
37//=============================================================================================================
38
39#include <Eigen/Core>
40#include <Eigen/SparseCore>
41
42//=============================================================================================================
43// STL INCLUDES
44//=============================================================================================================
45
46#include <memory>
47
48//=============================================================================================================
49// QT INCLUDES
50//=============================================================================================================
51
52#include <QSharedPointer>
53#include <QDebug>
54
55//=============================================================================================================
56// DEFINE NAMESPACE FIFFLIB
57//=============================================================================================================
58
59namespace FIFFLIB
60{
61
62//=============================================================================================================
72{
73public:
74 using SPtr = QSharedPointer<FiffSparseMatrix>;
75 using ConstSPtr = QSharedPointer<const FiffSparseMatrix>;
76 using UPtr = std::unique_ptr<FiffSparseMatrix>;
77 using ConstUPtr = std::unique_ptr<const FiffSparseMatrix>;
78
79 //=========================================================================================================
84
85 //=========================================================================================================
92 explicit FiffSparseMatrix(Eigen::SparseMatrix<float>&& mat,
93 FIFFLIB::fiff_int_t coding = FIFFTS_MC_RCS);
94
95 //=========================================================================================================
99 FiffSparseMatrix(const FiffSparseMatrix& mat) = default;
100
101 //=========================================================================================================
106
107 //=========================================================================================================
112
113 //=========================================================================================================
118
119 //=========================================================================================================
123 ~FiffSparseMatrix() = default;
124
125 //============================= Eigen access =============================
126
131 inline Eigen::SparseMatrix<float>& eigen() { return m_eigen; }
132
137 inline const Eigen::SparseMatrix<float>& eigen() const { return m_eigen; }
138
142 inline operator const Eigen::SparseMatrix<float>&() const { return m_eigen; }
143
147 inline int rows() const { return static_cast<int>(m_eigen.rows()); }
148
152 inline int cols() const { return static_cast<int>(m_eigen.cols()); }
153
157 inline int nonZeros() const { return static_cast<int>(m_eigen.nonZeros()); }
158
159 //============================= fiff_sparse.c =============================
160
168 static std::vector<int> fiff_get_matrix_sparse_dims(const FIFFLIB::FiffTag::UPtr& tag);
169
177 static FiffSparseMatrix::UPtr fiff_get_float_sparse_matrix(const FIFFLIB::FiffTag::UPtr& tag);
178
179 //============================= mne_sparse_matop.c =============================
180
192 static FiffSparseMatrix::UPtr create_sparse_rcs(int nrow,
193 int ncol,
194 int *nnz,
195 int **colindex,
196 float **vals);
197
203 FiffSparseMatrix::UPtr mne_add_upper_triangle_rcs();
204
210 FiffSparseMatrix::UPtr pickLowerTriangleRcs() const;
211
217 inline bool is_empty() const;
218
224 inline Eigen::SparseMatrix<double> toEigenSparse() const;
225
234 static FiffSparseMatrix fromEigenSparse(const Eigen::SparseMatrix<double>& mat);
235
243 static FiffSparseMatrix fromEigenSparse(const Eigen::SparseMatrix<float>& mat);
244
245public:
246 FIFFLIB::fiff_int_t coding;
247
248private:
249 Eigen::SparseMatrix<float> m_eigen;
250};
251
252//=============================================================================================================
253// INLINE DEFINITIONS
254//=============================================================================================================
255
256inline bool FiffSparseMatrix::is_empty() const
257{
258 return m_eigen.nonZeros() <= 0;
259}
260
261inline Eigen::SparseMatrix<double> FiffSparseMatrix::toEigenSparse() const
262{
263 return m_eigen.cast<double>();
264}
265
266} // NAMESPACE FIFFLIB
267
268#endif // FIFFSPARSEMATRIX_H
#define FIFFTS_MC_RCS
Definition fiff_file.h:263
Export/import macros and build-info accessors for the FIFFLIB shared library.
#define FIFFSHARED_EXPORT
Definition fiff_global.h:44
FIFF tag: the 16-byte tag header (kind, type, size, next) plus its decoded payload.
Primitive scalar typedefs and forward-compatible aliases backing the FIFF type system.
FIFF file I/O, in-memory data structures and high-level readers/writers.
Sparse FIFF matrix: CCS or RCS storage with the value / index / pointer triple as written by FiffStre...
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:164