MNE-CPP  beta 1.0
fiff_named_matrix.h
Go to the documentation of this file.
1 //=============================================================================================================
36 #ifndef FIFF_NAMED_MATRIX_H
37 #define FIFF_NAMED_MATRIX_H
38 
39 //*************************************************************************************************************
40 //=============================================================================================================
41 // INCLUDES
42 //=============================================================================================================
43 
44 #include "fiff_global.h"
45 #include "fiff_constants.h"
46 #include "fiff_types.h"
47 
48 
49 //*************************************************************************************************************
50 //=============================================================================================================
51 // Eigen INCLUDES
52 //=============================================================================================================
53 
54 #include <Eigen/Core>
55 
56 
57 //*************************************************************************************************************
58 //=============================================================================================================
59 // QT INCLUDES
60 //=============================================================================================================
61 
62 #include <QDebug>
63 #include <QFile>
64 #include <QList>
65 #include <QStringList>
66 #include <QSharedData>
67 #include <QSharedDataPointer>
68 #include <QSharedPointer>
69 
70 
71 //*************************************************************************************************************
72 //=============================================================================================================
73 // DEFINE NAMESPACE FIFFLIB
74 //=============================================================================================================
75 
76 namespace FIFFLIB
77 {
78 
79 
80 //*************************************************************************************************************
81 //=============================================================================================================
82 // USED NAMESPACES
83 //=============================================================================================================
84 
85 using namespace Eigen;
86 
87 
88 //=============================================================================================================
94 class FIFFSHARED_EXPORT FiffNamedMatrix : public QSharedData
95 {
96 public:
97  typedef QSharedPointer<FiffNamedMatrix> SPtr;
98  typedef QSharedPointer<const FiffNamedMatrix> ConstSPtr;
99  typedef QSharedDataPointer<FiffNamedMatrix> SDPtr;
101  //=========================================================================================================
105  FiffNamedMatrix();
106 
107  //=========================================================================================================
117  explicit FiffNamedMatrix( fiff_int_t p_nrow,
118  fiff_int_t p_ncol,
119  const QStringList& p_row_names,
120  const QStringList& p_col_names,
121  const MatrixXd& p_data);
122 
123  //=========================================================================================================
129  FiffNamedMatrix(const FiffNamedMatrix& p_FiffNamedMatrix);
130 
131  //=========================================================================================================
135  ~FiffNamedMatrix();
136 
137  //=========================================================================================================
141  void clear();
142 
143  //=========================================================================================================
149  inline bool isEmpty() const;
150 
151  //ToDo return the transposed matrix instead of applying it to its members
152  //=========================================================================================================
158  void transpose_named_matrix();
159 
160 // //=========================================================================================================
161 // /**
162 // * Assignment Operator
163 // *
164 // * @return rhs named matrix which hould be assigned.
165 // */
166 // inline FiffNamedMatrix& operator=(const FiffNamedMatrix& rhs);
167 
168  //=========================================================================================================
177  friend std::ostream& operator<<(std::ostream& out, const FIFFLIB::FiffNamedMatrix &p_FiffNamedMatrix);
178 
179 public:
180  fiff_int_t nrow;
181  fiff_int_t ncol;
182  QStringList row_names;
183  QStringList col_names;
184  MatrixXd data;
185 };
186 
187 
188 //*************************************************************************************************************
189 //=============================================================================================================
190 // INLINE DEFINITIONS
191 //=============================================================================================================
192 
193 //inline FiffNamedMatrix& FiffNamedMatrix::operator=(const FiffNamedMatrix& rhs)
194 //{
195 // // Check for self-assignment!
196 // if (this == &rhs)
197 // return *this;
198 // //Else
199 // nrow = rhs.nrow;
200 // ncol = rhs.ncol;
201 // row_names = rhs.row_names;
202 // col_names = rhs.col_names;
203 // data = rhs.data;
204 
205 // return *this;
206 //}
207 
208 
209 inline bool FiffNamedMatrix::isEmpty() const
210 {
211  return !(this->data.size() > 0);
212 }
213 
214 
215 //*************************************************************************************************************
216 
217 inline std::ostream& operator<<(std::ostream& out, const FIFFLIB::FiffNamedMatrix &p_FiffNamedMatrix)
218 {
219  bool t_bIsShort = true;
220  out << "#### Fiff Named Matrix ####\n";
221  out << "\tnrow: " << p_FiffNamedMatrix.nrow << std::endl;
222  out << "\tncol: " << p_FiffNamedMatrix.ncol << std::endl;
223 
224  MatrixXd data;
226  out << "\trow_names " << p_FiffNamedMatrix.row_names.size() << ":\n\t";
227  if(t_bIsShort)
228  {
229  qint32 nchan = p_FiffNamedMatrix.row_names.size() > 6 ? 6 : p_FiffNamedMatrix.row_names.size();
230  for(qint32 i = 0; i < nchan/2; ++i)
231  out << p_FiffNamedMatrix.row_names[i].toLatin1().constData() << " ";
232  out << "... ";
233  for(qint32 i = p_FiffNamedMatrix.row_names.size() - nchan/2; i < p_FiffNamedMatrix.row_names.size(); ++i)
234  out << p_FiffNamedMatrix.row_names[i].toLatin1().constData() << " ";
235  out << std::endl;
236  }
237 
238  out << "\tcol_names " << p_FiffNamedMatrix.col_names.size() << ":\n\t";
239  if(t_bIsShort)
240  {
241  qint32 nchan = p_FiffNamedMatrix.col_names.size() > 6 ? 6 : p_FiffNamedMatrix.col_names.size();
242  for(qint32 i = 0; i < nchan/2; ++i)
243  out << p_FiffNamedMatrix.col_names[i].toLatin1().constData() << " ";
244  out << "... ";
245  for(qint32 i = p_FiffNamedMatrix.col_names.size() - nchan/2; i < p_FiffNamedMatrix.col_names.size(); ++i)
246  out << p_FiffNamedMatrix.col_names[i].toLatin1().constData() << " ";
247  out << std::endl;
248  }
249 
250  out << "\tdata " << p_FiffNamedMatrix.data.rows() << " x " << p_FiffNamedMatrix.data.cols() << ":\n\t";
251  if(t_bIsShort)
252  {
253  qint32 nrows = p_FiffNamedMatrix.data.rows() > 6 ? 6 : p_FiffNamedMatrix.data.rows();
254  qint32 ncols = p_FiffNamedMatrix.data.cols() > 6 ? 6 : p_FiffNamedMatrix.data.cols();
255  if(nrows == 1)
256  {
257  for(qint32 i = 0; i < nrows; ++i)
258  {
259  for(qint32 j = 0; j < ncols/2; ++j)
260  out << p_FiffNamedMatrix.data(i,j) << " ";
261  out << "... ";
262  for(qint32 j = p_FiffNamedMatrix.data.cols() - ncols/2; j < p_FiffNamedMatrix.data.cols(); ++j)
263  out << p_FiffNamedMatrix.data(i,j) << " ";
264  out << "\n\t";
265  }
266  }
267  else
268  {
269  for(qint32 i = 0; i < nrows/2; ++i)
270  {
271  for(qint32 j = 0; j < ncols/2; ++j)
272  out << p_FiffNamedMatrix.data(i,j) << " ";
273  out << "... ";
274  for(qint32 j = p_FiffNamedMatrix.data.cols() - ncols/2; j < p_FiffNamedMatrix.data.cols(); ++j)
275  out << p_FiffNamedMatrix.data(i,j) << " ";
276  out << "\n\t";
277  }
278  out << "...\n\t";
279  for(qint32 i = p_FiffNamedMatrix.data.rows()-nrows/2; i < p_FiffNamedMatrix.data.rows(); ++i)
280  {
281  for(qint32 j = 0; j < ncols/2; ++j)
282  out << p_FiffNamedMatrix.data(i,j) << " ";
283  out << "... ";
284  for(qint32 j = p_FiffNamedMatrix.data.cols() - ncols/2; j < p_FiffNamedMatrix.data.cols(); ++j)
285  out << p_FiffNamedMatrix.data(i,j) << " ";
286  out << "\n\t";
287  }
288  }
289  out << "\n";
290  }
291 
292  return out;
293 }
294 
295 } // NAMESPACE
296 
297 #endif // FIFF_SOLUTION_H
Old fiff_type declarations - replace them.
QSharedDataPointer< FiffNamedMatrix > SDPtr
Fiff constants.
QSharedPointer< FiffNamedMatrix > SPtr
#define FIFFSHARED_EXPORT
Definition: fiff_global.h:58
Fiff library export/import macros.
Definition: fiff.h:98
QSharedPointer< const FiffNamedMatrix > ConstSPtr