v2.0.0
Loading...
Searching...
No Matches
fiff_named_matrix.h
Go to the documentation of this file.
1//=============================================================================================================
36
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;
82
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 //=========================================================================================================
139
140// //=========================================================================================================
141// /**
142// * Assignment Operator
143// *
144// * @return rhs named matrix which hould be assigned.
145// */
146// inline FiffNamedMatrix& operator=(const FiffNamedMatrix& rhs);
147
148 //=========================================================================================================
157 friend std::ostream& operator<<(std::ostream& out, const FIFFLIB::FiffNamedMatrix &p_FiffNamedMatrix);
158
166 friend bool operator==(const FiffNamedMatrix &a, const FiffNamedMatrix &b);
167
168public:
171 QStringList row_names;
172 QStringList col_names;
173 Eigen::MatrixXd data;
174
175};
176
177//=============================================================================================================
178// INLINE DEFINITIONS
179//=============================================================================================================
180
181//inline FiffNamedMatrix& FiffNamedMatrix::operator=(const FiffNamedMatrix& rhs)
182//{
183// // Check for self-assignment!
184// if (this == &rhs)
185// return *this;
186// //Else
187// nrow = rhs.nrow;
188// ncol = rhs.ncol;
189// row_names = rhs.row_names;
190// col_names = rhs.col_names;
191// data = rhs.data;
192
193// return *this;
194//}
195
196inline bool FiffNamedMatrix::isEmpty() const
197{
198 return !(this->data.size() > 0);
199}
200
201//=============================================================================================================
202
203inline std::ostream& operator<<(std::ostream& out, const FIFFLIB::FiffNamedMatrix &p_FiffNamedMatrix)
204{
205 bool t_bIsShort = true;
206 out << "#### Fiff Named Matrix ####\n";
207 out << "\tnrow: " << p_FiffNamedMatrix.nrow << std::endl;
208 out << "\tncol: " << p_FiffNamedMatrix.ncol << std::endl;
209
210 Eigen::MatrixXd data;
211
212 out << "\trow_names " << p_FiffNamedMatrix.row_names.size() << ":\n\t";
213 if(t_bIsShort)
214 {
215 qint32 nchan = p_FiffNamedMatrix.row_names.size() > 6 ? 6 : p_FiffNamedMatrix.row_names.size();
216 for(qint32 i = 0; i < nchan/2; ++i)
217 out << p_FiffNamedMatrix.row_names[i].toUtf8().constData() << " ";
218 out << "... ";
219 for(qint32 i = p_FiffNamedMatrix.row_names.size() - nchan/2; i < p_FiffNamedMatrix.row_names.size(); ++i)
220 out << p_FiffNamedMatrix.row_names[i].toUtf8().constData() << " ";
221 out << std::endl;
222 }
223
224 out << "\tcol_names " << p_FiffNamedMatrix.col_names.size() << ":\n\t";
225 if(t_bIsShort)
226 {
227 qint32 nchan = p_FiffNamedMatrix.col_names.size() > 6 ? 6 : p_FiffNamedMatrix.col_names.size();
228 for(qint32 i = 0; i < nchan/2; ++i)
229 out << p_FiffNamedMatrix.col_names[i].toUtf8().constData() << " ";
230 out << "... ";
231 for(qint32 i = p_FiffNamedMatrix.col_names.size() - nchan/2; i < p_FiffNamedMatrix.col_names.size(); ++i)
232 out << p_FiffNamedMatrix.col_names[i].toUtf8().constData() << " ";
233 out << std::endl;
234 }
235
236 out << "\tdata " << p_FiffNamedMatrix.data.rows() << " x " << p_FiffNamedMatrix.data.cols() << ":\n\t";
237 if(t_bIsShort)
238 {
239 qint32 nrows = p_FiffNamedMatrix.data.rows() > 6 ? 6 : p_FiffNamedMatrix.data.rows();
240 qint32 ncols = p_FiffNamedMatrix.data.cols() > 6 ? 6 : p_FiffNamedMatrix.data.cols();
241 if(nrows == 1)
242 {
243 for(qint32 i = 0; i < nrows; ++i)
244 {
245 for(qint32 j = 0; j < ncols/2; ++j)
246 out << p_FiffNamedMatrix.data(i,j) << " ";
247 out << "... ";
248 for(qint32 j = p_FiffNamedMatrix.data.cols() - ncols/2; j < p_FiffNamedMatrix.data.cols(); ++j)
249 out << p_FiffNamedMatrix.data(i,j) << " ";
250 out << "\n\t";
251 }
252 }
253 else
254 {
255 for(qint32 i = 0; i < nrows/2; ++i)
256 {
257 for(qint32 j = 0; j < ncols/2; ++j)
258 out << p_FiffNamedMatrix.data(i,j) << " ";
259 out << "... ";
260 for(qint32 j = p_FiffNamedMatrix.data.cols() - ncols/2; j < p_FiffNamedMatrix.data.cols(); ++j)
261 out << p_FiffNamedMatrix.data(i,j) << " ";
262 out << "\n\t";
263 }
264 out << "...\n\t";
265 for(qint32 i = p_FiffNamedMatrix.data.rows()-nrows/2; i < p_FiffNamedMatrix.data.rows(); ++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 }
275 out << "\n";
276 }
277
278 return out;
279}
280
281//=============================================================================================================
282
283inline bool operator== (const FiffNamedMatrix &a, const FiffNamedMatrix &b)
284{
285 return (a.nrow == b.nrow &&
286 a.ncol == b.ncol &&
287 a.row_names == b.row_names &&
288 a.col_names == b.col_names &&
289 a.data.isApprox(b.data, 0.0001));
290}
291} // NAMESPACE
292
293#endif // FIFF_NAMED_MATRIX_H
Fiff library export/import macros.
#define FIFFSHARED_EXPORT
Definition fiff_global.h:52
Fiff constants.
Old fiff_type declarations - replace them.
FIFF file I/O and data structures (raw, epochs, evoked, covariance, forward).
std::ostream & operator<<(std::ostream &out, const FIFFLIB::FiffCov &p_FiffCov)
Definition fiff_cov.h:271
qint32 fiff_int_t
Definition fiff_types.h:89
bool operator==(const FiffChInfo &a, const FiffChInfo &b)
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)
friend std::ostream & operator<<(std::ostream &out, const FIFFLIB::FiffNamedMatrix &p_FiffNamedMatrix)
QSharedPointer< const FiffNamedMatrix > ConstSPtr
friend bool operator==(const FiffNamedMatrix &a, const FiffNamedMatrix &b)
QSharedPointer< FiffNamedMatrix > SPtr