MNE-CPP  beta 1.0
main.cpp
1 //=============================================================================================================
36 //*************************************************************************************************************
37 //=============================================================================================================
38 // MNE INCLUDES
39 //=============================================================================================================
40 
41 #include <fiff/fiff_cov.h>
42 #include <fiff/fiff_evoked.h>
43 #include <mne/mne_sourceestimate.h>
45 
46 
47 //*************************************************************************************************************
48 //=============================================================================================================
49 // STL INCLUDES
50 //=============================================================================================================
51 
52 #include <iostream>
53 
54 
55 //*************************************************************************************************************
56 //=============================================================================================================
57 // QT INCLUDES
58 //=============================================================================================================
59 
60 #include <QtCore/QCoreApplication>
61 
62 
63 //*************************************************************************************************************
64 //=============================================================================================================
65 // USED NAMESPACES
66 //=============================================================================================================
67 
68 using namespace FIFFLIB;
69 using namespace MNELIB;
70 using namespace INVERSELIB;
71 
72 
73 //*************************************************************************************************************
74 //=============================================================================================================
75 // MAIN
76 //=============================================================================================================
77 
78 //=============================================================================================================
87 int main(int argc, char *argv[])
88 {
89  QCoreApplication a(argc, argv);
90 
91  QFile t_fileFwdMeeg("./MNE-sample-data/MEG/sample/sample_audvis-meg-eeg-oct-6-fwd.fif");
92  QFile t_fileFwdEeg("./MNE-sample-data/MEG/sample/sample_audvis-eeg-oct-6-fwd.fif");
93  QFile t_fileCov("./MNE-sample-data/MEG/sample/sample_audvis-cov.fif");
94  QFile t_fileEvoked("./MNE-sample-data/MEG/sample/sample_audvis-ave.fif");
95 
96  double snr = 3.0;
97  double lambda2 = 1.0 / pow(snr, 2);
98  QString method("dSPM"); //"MNE" | "dSPM" | "sLORETA"
99 
100  // Load data
101  fiff_int_t setno = 0;
102  QPair<QVariant, QVariant> baseline(QVariant(), 0);
103  FiffEvoked evoked(t_fileEvoked, setno, baseline);
104  if(evoked.isEmpty())
105  return 1;
106 
107  MNEForwardSolution t_forwardMeeg(t_fileFwdMeeg, false, true);
108 
109  FiffCov noise_cov(t_fileCov);
110 
111  // regularize noise covariance
112  noise_cov = noise_cov.regularize(evoked.info, 0.05, 0.05, 0.1, true);
113 
114  // Restrict forward solution as necessary for MEG
115  MNEForwardSolution t_forwardMeg = t_forwardMeeg.pick_types(true, false);
116  // Alternatively, you can just load a forward solution that is restricted
117  MNEForwardSolution t_forwardEeg(t_fileFwdEeg, false, true);
118 
119  // make an M/EEG, MEG-only, and EEG-only inverse operators
120  FiffInfo info = evoked.info;
121 
122  MNEInverseOperator inverse_operator_meeg(info, t_forwardMeeg, noise_cov, 0.2f, 0.8f);
123  MNEInverseOperator inverse_operator_meg(info, t_forwardMeg, noise_cov, 0.2f, 0.8f);
124  MNEInverseOperator inverse_operator_eeg(info, t_forwardEeg, noise_cov, 0.2f, 0.8f);
125 
126  // Compute inverse solution
127  MinimumNorm minimumNorm_meeg(inverse_operator_meeg, lambda2, method);
128  MNESourceEstimate sourceEstimate_meeg = minimumNorm_meeg.calculateInverse(evoked);
129 
130  MinimumNorm minimumNorm_meg(inverse_operator_meg, lambda2, method);
131  MNESourceEstimate sourceEstimate_meg = minimumNorm_meg.calculateInverse(evoked);
132 
133  MinimumNorm minimumNorm_eeg(inverse_operator_eeg, lambda2, method);
134  MNESourceEstimate sourceEstimate_eeg = minimumNorm_eeg.calculateInverse(evoked);
135 
136  if(sourceEstimate_meeg.isEmpty() || sourceEstimate_meg.isEmpty() || sourceEstimate_eeg.isEmpty())
137  return 1;
138 
139  // View activation time-series
140  std::cout << "\nsourceEstimate_meeg:\n" << sourceEstimate_meeg.data.block(0,0,10,10) << std::endl;
141  std::cout << "time\n" << sourceEstimate_meeg.times.block(0,0,1,10) << std::endl;
142 
143  std::cout << "\nsourceEstimate_meg:\n" << sourceEstimate_meg.data.block(0,0,10,10) << std::endl;
144  std::cout << "time\n" << sourceEstimate_meg.times.block(0,0,1,10) << std::endl;
145 
146  std::cout << "\nsourceEstimate_eeg:\n" << sourceEstimate_eeg.data.block(0,0,10,10) << std::endl;
147  std::cout << "time\n" << sourceEstimate_eeg.times.block(0,0,1,10) << std::endl;
148 
149  return a.exec();
150 }
MNEForwardSolution pick_types(bool meg, bool eeg, const QStringList &include=defaultQStringList, const QStringList &exclude=defaultQStringList) const
FIFF measurement file information.
Definition: fiff_info.h:96
evoked data
Definition: fiff_evoked.h:91
Minimum norm class declaration.
covariance data
Definition: fiff_cov.h:94
Definition: fiff.h:98
MNESourceEstimate class declaration.
Minimum norm estimation.
Definition: minimumnorm.h:82
FiffCov class declaration.