MNE-CPP  beta 1.0
fiff_cov.h
Go to the documentation of this file.
1 //=============================================================================================================
36 #ifndef FIFF_COV_H
37 #define FIFF_COV_H
38 
39 //*************************************************************************************************************
40 //=============================================================================================================
41 // FIFF INCLUDES
42 //=============================================================================================================
43 
44 #include "fiff_global.h"
45 #include "fiff_proj.h"
46 #include "fiff_types.h"
47 #include "fiff_info.h"
48 
49 
50 //*************************************************************************************************************
51 //=============================================================================================================
52 // Qt INCLUDES
53 //=============================================================================================================
54 
55 #include <QSharedDataPointer>
56 #include <QSharedPointer>
57 #include <QString>
58 #include <QStringList>
59 
60 
61 
62 //*************************************************************************************************************
63 //=============================================================================================================
64 // Eigen INCLUDES
65 //=============================================================================================================
66 
67 #include <Eigen/Core>
68 
69 #include <iostream>
70 
71 
72 //*************************************************************************************************************
73 //=============================================================================================================
74 // DEFINE NAMESPACE MNELIB
75 //=============================================================================================================
76 
77 namespace FIFFLIB
78 {
79 
80 //*************************************************************************************************************
81 //=============================================================================================================
82 // USED NAMESPACES
83 //=============================================================================================================
84 
85 using namespace Eigen;
86 
87 
88 //=============================================================================================================
94 class FIFFSHARED_EXPORT FiffCov : public QSharedData
95 {
96 public:
97  typedef QSharedPointer<FiffCov> SPtr;
98  typedef QSharedPointer<const FiffCov> ConstSPtr;
99  typedef QSharedDataPointer<FiffCov> SDPtr;
101  //=========================================================================================================
105  FiffCov();
106 
107  //=========================================================================================================
113  FiffCov(QIODevice &p_IODevice);
114 
115  //=========================================================================================================
121  FiffCov(const FiffCov &p_FiffCov);
122 
123  //=========================================================================================================
127  ~FiffCov();
128 
129  //=========================================================================================================
133  void clear();
134 
135  //=========================================================================================================
141  inline bool isEmpty() const;
142 
143  //=========================================================================================================
154  FiffCov pick_channels(const QStringList &p_include = defaultQStringList, const QStringList &p_exclude = defaultQStringList);
155 
156  //=========================================================================================================
165  FiffCov prepare_noise_cov(const FiffInfo& p_info, const QStringList& p_chNames) const;
166 
167  //=========================================================================================================
183  FiffCov regularize(const FiffInfo& p_info, double p_fMag = 0.1, double p_fGrad = 0.1, double p_fEeg = 0.1, bool p_bProj = true, QStringList p_exclude = defaultQStringList) const;
184 
185  //=========================================================================================================
193  FiffCov& operator= (const FiffCov &rhs);
194 
195  //=========================================================================================================
204  friend std::ostream& operator<<(std::ostream& out, const FIFFLIB::FiffCov &p_FiffCov);
205 
206 public:
207  fiff_int_t kind;
208  bool diag;
209  fiff_int_t dim;
210  QStringList names;
211  MatrixXd data;
212  QList<FiffProj> projs;
213  QStringList bads;
214  fiff_int_t nfree;
215  VectorXd eig;
216  MatrixXd eigvec;
217 };
218 
219 
220 //*************************************************************************************************************
221 //=============================================================================================================
222 // INLINE DEFINITIONS
223 //=============================================================================================================
224 
225 inline bool FiffCov::isEmpty() const
226 {
227  return this->dim <= -1;
228 }
229 
230 
231 //*************************************************************************************************************
232 
233 inline std::ostream& operator<<(std::ostream& out, const FIFFLIB::FiffCov &p_FiffCov)
234 {
235  bool t_bIsShort = true;
236  out << "#### Fiff Covariance ####\n";
237  out << "\tKind: " << p_FiffCov.kind << std::endl;
238  out << "\tdiag: " << p_FiffCov.diag << std::endl;
239  out << "\tdim: " << p_FiffCov.dim << std::endl;
240  out << "\tnames " << p_FiffCov.names.size() << ":\n\t";
241 
242  if(t_bIsShort)
243  {
244  qint32 nchan = p_FiffCov.names.size() > 6 ? 6 : p_FiffCov.names.size();
245  for(qint32 i = 0; i < nchan/2; ++i)
246  out << p_FiffCov.names[i].toLatin1().constData() << " ";
247  out << "... ";
248  for(qint32 i = p_FiffCov.names.size() - nchan/2; i < p_FiffCov.names.size(); ++i)
249  out << p_FiffCov.names[i].toLatin1().constData() << " ";
250  out << std::endl;
251  }
252 
253  out << "\tdata " << p_FiffCov.data.rows() << " x " << p_FiffCov.data.cols() << ":\n\t";
254  if(t_bIsShort)
255  {
256  qint32 nrows = p_FiffCov.data.rows() > 6 ? 6 : p_FiffCov.data.rows();
257  qint32 ncols = p_FiffCov.data.cols() > 6 ? 6 : p_FiffCov.data.cols();
258  for(qint32 i = 0; i < nrows/2; ++i)
259  {
260  for(qint32 j = 0; j < ncols/2; ++j)
261  out << p_FiffCov.data(i,j) << " ";
262  out << "... ";
263  for(qint32 j = p_FiffCov.data.cols() - ncols/2; j < p_FiffCov.data.cols(); ++j)
264  out << p_FiffCov.data(i,j) << " ";
265  out << "\n\t";
266  }
267  out << "...\n\t";
268  for(qint32 i = p_FiffCov.data.rows()-nrows/2; i < p_FiffCov.data.rows(); ++i)
269  {
270  for(qint32 j = 0; j < ncols/2; ++j)
271  out << p_FiffCov.data(i,j) << " ";
272  out << "... ";
273  for(qint32 j = p_FiffCov.data.cols() - ncols/2; j < p_FiffCov.data.cols(); ++j)
274  out << p_FiffCov.data(i,j) << " ";
275  out << "\n\t";
276  }
277  out << "\n";
278  }
279  //Projectors
280  out << "\tprojectors " << p_FiffCov.projs.size() << ":\n";
281  for(qint32 i = 0; i < p_FiffCov.projs.size(); ++i)
282  out << "\t" << p_FiffCov.projs[i];
283 
284  //Bads
285  out << "\tbads " << p_FiffCov.bads.size() << ":\n\t";
286  for(qint32 i = 0; i < p_FiffCov.bads.size(); ++i)
287  out << p_FiffCov.bads[i].toLatin1().constData() << " ";
288 
289  out << "\n\tfree: " << p_FiffCov.nfree << std::endl;
290 
291  out << "\teig " << p_FiffCov.eig.size() << ":\n\t";
292  if(t_bIsShort)
293  {
294  qint32 nrows = p_FiffCov.eig.size() > 6 ? 6 : p_FiffCov.eig.size();
295  for(qint32 i = 0; i < nrows/2; ++i)
296  out << p_FiffCov.eig[i] << " ";
297  out << "... ";
298  for(qint32 i = p_FiffCov.eig.size() - nrows/2; i < p_FiffCov.eig.size(); ++i)
299  out << p_FiffCov.eig[i] << " ";
300  out << "\n\t";
301  }
302 
303  out << "\n\teigvec " << p_FiffCov.eigvec.rows() << " x " << p_FiffCov.eigvec.cols() << ":\n\t";
304  if(t_bIsShort)
305  {
306  qint32 nrows = p_FiffCov.eigvec.rows() > 6 ? 6 : p_FiffCov.eigvec.rows();
307  qint32 ncols = p_FiffCov.eigvec.cols() > 6 ? 6 : p_FiffCov.eigvec.cols();
308  for(qint32 i = 0; i < nrows/2; ++i)
309  {
310  for(qint32 j = 0; j < ncols/2; ++j)
311  out << p_FiffCov.eigvec(i,j) << " ";
312  out << "... ";
313  for(qint32 j = p_FiffCov.eigvec.cols() - ncols/2; j < p_FiffCov.eigvec.cols(); ++j)
314  out << p_FiffCov.eigvec(i,j) << " ";
315  out << "\n\t";
316  }
317  out << "...\n\t";
318  for(qint32 i = p_FiffCov.eigvec.rows() - nrows/2; i < p_FiffCov.eigvec.rows(); ++i)
319  {
320  for(qint32 j = 0; j < ncols/2; ++j)
321  out << p_FiffCov.eigvec(i,j) << " ";
322  out << "... ";
323  for(qint32 j = p_FiffCov.eigvec.cols() - ncols/2; j < p_FiffCov.eigvec.cols(); ++j)
324  out << p_FiffCov.eigvec(i,j) << " ";
325  out << "\n\t";
326  }
327  out << "\n";
328  }
329  return out;
330 }
331 
332 } // NAMESPACE
333 
334 #endif // FIFF_COV_H
QSharedDataPointer< FiffCov > SDPtr
Definition: fiff_cov.h:99
MatrixXd data
Definition: fiff_cov.h:211
FIFF measurement file information.
Definition: fiff_info.h:96
QSharedPointer< FiffCov > SPtr
Definition: fiff_cov.h:97
FiffProj class declaration.
Old fiff_type declarations - replace them.
fiff_int_t kind
Definition: fiff_cov.h:207
fiff_int_t nfree
Definition: fiff_cov.h:214
QStringList names
Definition: fiff_cov.h:210
QStringList bads
Definition: fiff_cov.h:213
QSharedPointer< const FiffCov > ConstSPtr
Definition: fiff_cov.h:98
FiffInfo class declaration.
#define FIFFSHARED_EXPORT
Definition: fiff_global.h:58
bool isEmpty() const
Definition: fiff_cov.h:225
Fiff library export/import macros.
fiff_int_t dim
Definition: fiff_cov.h:209
covariance data
Definition: fiff_cov.h:94
MatrixXd eigvec
Definition: fiff_cov.h:216
Definition: fiff.h:98
QList< FiffProj > projs
Definition: fiff_cov.h:212
VectorXd eig
Definition: fiff_cov.h:215