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#include <memory>
63
64//=============================================================================================================
65// DEFINE NAMESPACE FIFFLIB
66//=============================================================================================================
67
68namespace FIFFLIB
69{
70
71//=============================================================================================================
77class FIFFSHARED_EXPORT FiffNamedMatrix : public QSharedData
78{
79public:
80 using SPtr = QSharedPointer<FiffNamedMatrix>;
81 using ConstSPtr = QSharedPointer<const FiffNamedMatrix>;
82 using UPtr = std::unique_ptr<FiffNamedMatrix>;
83 using ConstUPtr = std::unique_ptr<const FiffNamedMatrix>;
84 using SDPtr = QSharedDataPointer<FiffNamedMatrix>;
85
86 //=========================================================================================================
91
92 //=========================================================================================================
103 fiff_int_t p_ncol,
104 const QStringList& p_row_names,
105 const QStringList& p_col_names,
106 const Eigen::MatrixXd& p_data);
107
108 //=========================================================================================================
114 FiffNamedMatrix(const FiffNamedMatrix& p_FiffNamedMatrix);
115
116 //=========================================================================================================
120 ~FiffNamedMatrix() = default;
121
122 //=========================================================================================================
126 void clear();
127
128 //=========================================================================================================
134 inline bool isEmpty() const;
135
136 //ToDo return the transposed matrix instead of applying it to its members
137 //=========================================================================================================
142
143// //=========================================================================================================
144// /**
145// * Assignment Operator
146// *
147// * @return rhs named matrix which hould be assigned.
148// */
149// inline FiffNamedMatrix& operator=(const FiffNamedMatrix& rhs);
150
151 //=========================================================================================================
160 friend std::ostream& operator<<(std::ostream& out, const FIFFLIB::FiffNamedMatrix &p_FiffNamedMatrix);
161
169 friend bool operator==(const FiffNamedMatrix &a, const FiffNamedMatrix &b);
170
171public:
174 QStringList row_names;
175 QStringList col_names;
176 Eigen::MatrixXd data;
177
178};
179
180//=============================================================================================================
181// INLINE DEFINITIONS
182//=============================================================================================================
183
184//inline FiffNamedMatrix& FiffNamedMatrix::operator=(const FiffNamedMatrix& rhs)
185//{
186// // Check for self-assignment!
187// if (this == &rhs)
188// return *this;
189// //Else
190// nrow = rhs.nrow;
191// ncol = rhs.ncol;
192// row_names = rhs.row_names;
193// col_names = rhs.col_names;
194// data = rhs.data;
195
196// return *this;
197//}
198
199inline bool FiffNamedMatrix::isEmpty() const
200{
201 return !(this->data.size() > 0);
202}
203
204//=============================================================================================================
205
206inline std::ostream& operator<<(std::ostream& out, const FIFFLIB::FiffNamedMatrix &p_FiffNamedMatrix)
207{
208 bool t_bIsShort = true;
209 out << "#### Fiff Named Matrix ####\n";
210 out << "\tnrow: " << p_FiffNamedMatrix.nrow << std::endl;
211 out << "\tncol: " << p_FiffNamedMatrix.ncol << std::endl;
212
213 Eigen::MatrixXd data;
214
215 out << "\trow_names " << p_FiffNamedMatrix.row_names.size() << ":\n\t";
216 if(t_bIsShort)
217 {
218 qint32 nchan = p_FiffNamedMatrix.row_names.size() > 6 ? 6 : p_FiffNamedMatrix.row_names.size();
219 for(qint32 i = 0; i < nchan/2; ++i)
220 out << p_FiffNamedMatrix.row_names[i].toUtf8().constData() << " ";
221 out << "... ";
222 for(qint32 i = p_FiffNamedMatrix.row_names.size() - nchan/2; i < p_FiffNamedMatrix.row_names.size(); ++i)
223 out << p_FiffNamedMatrix.row_names[i].toUtf8().constData() << " ";
224 out << std::endl;
225 }
226
227 out << "\tcol_names " << p_FiffNamedMatrix.col_names.size() << ":\n\t";
228 if(t_bIsShort)
229 {
230 qint32 nchan = p_FiffNamedMatrix.col_names.size() > 6 ? 6 : p_FiffNamedMatrix.col_names.size();
231 for(qint32 i = 0; i < nchan/2; ++i)
232 out << p_FiffNamedMatrix.col_names[i].toUtf8().constData() << " ";
233 out << "... ";
234 for(qint32 i = p_FiffNamedMatrix.col_names.size() - nchan/2; i < p_FiffNamedMatrix.col_names.size(); ++i)
235 out << p_FiffNamedMatrix.col_names[i].toUtf8().constData() << " ";
236 out << std::endl;
237 }
238
239 out << "\tdata " << p_FiffNamedMatrix.data.rows() << " x " << p_FiffNamedMatrix.data.cols() << ":\n\t";
240 if(t_bIsShort)
241 {
242 qint32 nrows = p_FiffNamedMatrix.data.rows() > 6 ? 6 : p_FiffNamedMatrix.data.rows();
243 qint32 ncols = p_FiffNamedMatrix.data.cols() > 6 ? 6 : p_FiffNamedMatrix.data.cols();
244 if(nrows == 1)
245 {
246 for(qint32 i = 0; i < nrows; ++i)
247 {
248 for(qint32 j = 0; j < ncols/2; ++j)
249 out << p_FiffNamedMatrix.data(i,j) << " ";
250 out << "... ";
251 for(qint32 j = p_FiffNamedMatrix.data.cols() - ncols/2; j < p_FiffNamedMatrix.data.cols(); ++j)
252 out << p_FiffNamedMatrix.data(i,j) << " ";
253 out << "\n\t";
254 }
255 }
256 else
257 {
258 for(qint32 i = 0; i < nrows/2; ++i)
259 {
260 for(qint32 j = 0; j < ncols/2; ++j)
261 out << p_FiffNamedMatrix.data(i,j) << " ";
262 out << "... ";
263 for(qint32 j = p_FiffNamedMatrix.data.cols() - ncols/2; j < p_FiffNamedMatrix.data.cols(); ++j)
264 out << p_FiffNamedMatrix.data(i,j) << " ";
265 out << "\n\t";
266 }
267 out << "...\n\t";
268 for(qint32 i = p_FiffNamedMatrix.data.rows()-nrows/2; i < p_FiffNamedMatrix.data.rows(); ++i)
269 {
270 for(qint32 j = 0; j < ncols/2; ++j)
271 out << p_FiffNamedMatrix.data(i,j) << " ";
272 out << "... ";
273 for(qint32 j = p_FiffNamedMatrix.data.cols() - ncols/2; j < p_FiffNamedMatrix.data.cols(); ++j)
274 out << p_FiffNamedMatrix.data(i,j) << " ";
275 out << "\n\t";
276 }
277 }
278 out << "\n";
279 }
280
281 return out;
282}
283
284//=============================================================================================================
285
286inline bool operator== (const FiffNamedMatrix &a, const FiffNamedMatrix &b)
287{
288 return (a.nrow == b.nrow &&
289 a.ncol == b.ncol &&
290 a.row_names == b.row_names &&
291 a.col_names == b.col_names &&
292 a.data.isApprox(b.data, 0.0001));
293}
294} // NAMESPACE
295
296#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.
bool operator==(const BIDSPath &a, const BIDSPath &b)
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:274
qint32 fiff_int_t
Definition fiff_types.h:89
bool operator==(const FiffChInfo &a, const FiffChInfo &b)
std::unique_ptr< FiffNamedMatrix > UPtr
std::unique_ptr< const FiffNamedMatrix > ConstUPtr
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< FiffNamedMatrix > SPtr
QSharedDataPointer< FiffNamedMatrix > SDPtr
QSharedPointer< const FiffNamedMatrix > ConstSPtr