MNE-CPP 0.1.9
A Framework for Electrophysiology
Loading...
Searching...
No Matches
fiff_named_matrix.h
Go to the documentation of this file.
1//=============================================================================================================
37#ifndef FIFF_NAMED_MATRIX_H
38#define FIFF_NAMED_MATRIX_H
39
40//=============================================================================================================
41// INCLUDES
42//=============================================================================================================
43
44#include "fiff_global.h"
45#include "fiff_constants.h"
46#include "fiff_types.h"
47
48//=============================================================================================================
49// EIGEN INCLUDES
50//=============================================================================================================
51
52#include <Eigen/Core>
53
54//=============================================================================================================
55// QT INCLUDES
56//=============================================================================================================
57
58#include <QStringList>
59#include <QSharedData>
60#include <QSharedDataPointer>
61#include <QSharedPointer>
62
63//=============================================================================================================
64// DEFINE NAMESPACE FIFFLIB
65//=============================================================================================================
66
67namespace FIFFLIB
68{
69
70//=============================================================================================================
76class FIFFSHARED_EXPORT FiffNamedMatrix : public QSharedData
77{
78public:
79 typedef QSharedPointer<FiffNamedMatrix> SPtr;
80 typedef QSharedPointer<const FiffNamedMatrix> ConstSPtr;
81 typedef QSharedDataPointer<FiffNamedMatrix> SDPtr;
83 //=========================================================================================================
88
89 //=========================================================================================================
99 explicit FiffNamedMatrix(fiff_int_t p_nrow,
100 fiff_int_t p_ncol,
101 const QStringList& p_row_names,
102 const QStringList& p_col_names,
103 const Eigen::MatrixXd& p_data);
104
105 //=========================================================================================================
111 FiffNamedMatrix(const FiffNamedMatrix& p_FiffNamedMatrix);
112
113 //=========================================================================================================
117 ~FiffNamedMatrix() = default;
118
119 //=========================================================================================================
123 void clear();
124
125 //=========================================================================================================
131 inline bool isEmpty() const;
132
133 //ToDo return the transposed matrix instead of applying it to its members
134 //=========================================================================================================
140 void transpose_named_matrix();
141
142// //=========================================================================================================
143// /**
144// * Assignment Operator
145// *
146// * @return rhs named matrix which hould be assigned.
147// */
148// inline FiffNamedMatrix& operator=(const FiffNamedMatrix& rhs);
149
150 //=========================================================================================================
159 friend std::ostream& operator<<(std::ostream& out, const FIFFLIB::FiffNamedMatrix &p_FiffNamedMatrix);
160
168 friend bool operator==(const FiffNamedMatrix &a, const FiffNamedMatrix &b);
169
170public:
171 fiff_int_t nrow;
172 fiff_int_t ncol;
173 QStringList row_names;
174 QStringList col_names;
175 Eigen::MatrixXd data;
177// ### OLD STRUCT ###
178//typedef struct { /* Matrix specification with a channel list */
179// int nrow; /* Number of rows */
180// int ncol; /* Number of columns */
181// char **rowlist; /* Name list for the rows (may be NULL) */
182// char **collist; /* Name list for the columns (may be NULL) */
183// float **data; /* The data itself (dense) */
184//} *mneNamedMatrix,mneNamedMatrixRec;
185};
186
187//=============================================================================================================
188// INLINE DEFINITIONS
189//=============================================================================================================
190
191//inline FiffNamedMatrix& FiffNamedMatrix::operator=(const FiffNamedMatrix& rhs)
192//{
193// // Check for self-assignment!
194// if (this == &rhs)
195// return *this;
196// //Else
197// nrow = rhs.nrow;
198// ncol = rhs.ncol;
199// row_names = rhs.row_names;
200// col_names = rhs.col_names;
201// data = rhs.data;
202
203// return *this;
204//}
205
206inline bool FiffNamedMatrix::isEmpty() const
207{
208 return !(this->data.size() > 0);
209}
210
211//=============================================================================================================
212
213inline std::ostream& operator<<(std::ostream& out, const FIFFLIB::FiffNamedMatrix &p_FiffNamedMatrix)
214{
215 bool t_bIsShort = true;
216 out << "#### Fiff Named Matrix ####\n";
217 out << "\tnrow: " << p_FiffNamedMatrix.nrow << std::endl;
218 out << "\tncol: " << p_FiffNamedMatrix.ncol << std::endl;
219
220 Eigen::MatrixXd data;
222 out << "\trow_names " << p_FiffNamedMatrix.row_names.size() << ":\n\t";
223 if(t_bIsShort)
224 {
225 qint32 nchan = p_FiffNamedMatrix.row_names.size() > 6 ? 6 : p_FiffNamedMatrix.row_names.size();
226 for(qint32 i = 0; i < nchan/2; ++i)
227 out << p_FiffNamedMatrix.row_names[i].toUtf8().constData() << " ";
228 out << "... ";
229 for(qint32 i = p_FiffNamedMatrix.row_names.size() - nchan/2; i < p_FiffNamedMatrix.row_names.size(); ++i)
230 out << p_FiffNamedMatrix.row_names[i].toUtf8().constData() << " ";
231 out << std::endl;
232 }
233
234 out << "\tcol_names " << p_FiffNamedMatrix.col_names.size() << ":\n\t";
235 if(t_bIsShort)
236 {
237 qint32 nchan = p_FiffNamedMatrix.col_names.size() > 6 ? 6 : p_FiffNamedMatrix.col_names.size();
238 for(qint32 i = 0; i < nchan/2; ++i)
239 out << p_FiffNamedMatrix.col_names[i].toUtf8().constData() << " ";
240 out << "... ";
241 for(qint32 i = p_FiffNamedMatrix.col_names.size() - nchan/2; i < p_FiffNamedMatrix.col_names.size(); ++i)
242 out << p_FiffNamedMatrix.col_names[i].toUtf8().constData() << " ";
243 out << std::endl;
244 }
245
246 out << "\tdata " << p_FiffNamedMatrix.data.rows() << " x " << p_FiffNamedMatrix.data.cols() << ":\n\t";
247 if(t_bIsShort)
248 {
249 qint32 nrows = p_FiffNamedMatrix.data.rows() > 6 ? 6 : p_FiffNamedMatrix.data.rows();
250 qint32 ncols = p_FiffNamedMatrix.data.cols() > 6 ? 6 : p_FiffNamedMatrix.data.cols();
251 if(nrows == 1)
252 {
253 for(qint32 i = 0; i < nrows; ++i)
254 {
255 for(qint32 j = 0; j < ncols/2; ++j)
256 out << p_FiffNamedMatrix.data(i,j) << " ";
257 out << "... ";
258 for(qint32 j = p_FiffNamedMatrix.data.cols() - ncols/2; j < p_FiffNamedMatrix.data.cols(); ++j)
259 out << p_FiffNamedMatrix.data(i,j) << " ";
260 out << "\n\t";
261 }
262 }
263 else
264 {
265 for(qint32 i = 0; i < nrows/2; ++i)
266 {
267 for(qint32 j = 0; j < ncols/2; ++j)
268 out << p_FiffNamedMatrix.data(i,j) << " ";
269 out << "... ";
270 for(qint32 j = p_FiffNamedMatrix.data.cols() - ncols/2; j < p_FiffNamedMatrix.data.cols(); ++j)
271 out << p_FiffNamedMatrix.data(i,j) << " ";
272 out << "\n\t";
273 }
274 out << "...\n\t";
275 for(qint32 i = p_FiffNamedMatrix.data.rows()-nrows/2; i < p_FiffNamedMatrix.data.rows(); ++i)
276 {
277 for(qint32 j = 0; j < ncols/2; ++j)
278 out << p_FiffNamedMatrix.data(i,j) << " ";
279 out << "... ";
280 for(qint32 j = p_FiffNamedMatrix.data.cols() - ncols/2; j < p_FiffNamedMatrix.data.cols(); ++j)
281 out << p_FiffNamedMatrix.data(i,j) << " ";
282 out << "\n\t";
283 }
284 }
285 out << "\n";
286 }
287
288 return out;
289}
290
291//=============================================================================================================
292
293inline bool operator== (const FiffNamedMatrix &a, const FiffNamedMatrix &b)
294{
295 return (a.nrow == b.nrow &&
296 a.ncol == b.ncol &&
297 a.row_names == b.row_names &&
298 a.col_names == b.col_names &&
299 a.data.isApprox(b.data, 0.0001));
300}
301} // NAMESPACE
302
303#endif // FIFF_SOLUTION_H
Fiff library export/import macros.
#define FIFFSHARED_EXPORT
Definition fiff_global.h:56
Fiff constants.
bool operator==(const FiffCoordTransOld &a, const FiffCoordTransOld &b)
std::ostream & operator<<(std::ostream &out, const FIFFLIB::FiffCov &p_FiffCov)
Definition fiff_cov.h:237
Definitions for describing the objects in a FIFF file.
QSharedDataPointer< FiffNamedMatrix > SDPtr
FiffNamedMatrix(fiff_int_t p_nrow, fiff_int_t p_ncol, const QStringList &p_row_names, const QStringList &p_col_names, const Eigen::MatrixXd &p_data)
QSharedPointer< const FiffNamedMatrix > ConstSPtr
QSharedPointer< FiffNamedMatrix > SPtr