MNE-CPP  beta 1.0
averagemodel.cpp
Go to the documentation of this file.
1 //=============================================================================================================
38 //*************************************************************************************************************
39 //=============================================================================================================
40 // INCLUDES
41 //=============================================================================================================
42 
43 #include "averagemodel.h"
44 
45 
46 //*************************************************************************************************************
47 //=============================================================================================================
48 // USED NAMESPACES
49 //=============================================================================================================
50 
51 using namespace MNEBrowseRawQt;
52 
53 
54 //*************************************************************************************************************
55 //=============================================================================================================
56 // DEFINE MEMBER METHODS
57 //=============================================================================================================
58 
59 AverageModel::AverageModel(QObject *parent)
60 : QAbstractTableModel(parent)
61 , m_bFileloaded(false)
62 , m_pfiffIO(QSharedPointer<FiffIO>(new FiffIO()))
63 {
64 }
65 
66 
67 //*************************************************************************************************************
68 
69 AverageModel::AverageModel(QFile& qFile, QObject *parent)
70 : QAbstractTableModel(parent)
71 , m_bFileloaded(false)
72 , m_pfiffIO(QSharedPointer<FiffIO>(new FiffIO()))
73 {
74  //read evoked fiff data
75  loadEvokedData(qFile);
76 }
77 
78 
79 //*************************************************************************************************************
80 //virtual functions
81 int AverageModel::rowCount(const QModelIndex & /*parent*/) const
82 {
83  //Return number of stored evoked sets
84  if(!m_pEvokedDataSet.evoked.size()==0)
85  return m_pEvokedDataSet.evoked.size();
86  else
87  return 0;
88 }
89 
90 
91 //*************************************************************************************************************
92 
93 int AverageModel::columnCount(const QModelIndex & /*parent*/) const
94 {
95  return 5;
96 }
97 
98 
99 //*************************************************************************************************************
100 
101 QVariant AverageModel::headerData(int section, Qt::Orientation orientation, int role) const
102 {
103  if(role != Qt::DisplayRole && role != Qt::TextAlignmentRole)
104  return QVariant();
105 
106  //Return the number and description/comment of the fiff evoked data in the set as vertical header
107  if(orientation == Qt::Vertical) {
108  if(section<m_pEvokedDataSet.evoked.size())
109  return QString("Set %1").arg(section);
110  }
111 
112  //Return the horizontal header
113  if(orientation == Qt::Horizontal) {
114  switch(section) {
115  case 0:
116  return QString("%1").arg("Comment");
117  break;
118 
119  case 1:
120  return QString("%1").arg("Aspect kind");
121  break;
122 
123  case 2:
124  return QString("%1").arg("First sample");
125  break;
126 
127  case 3:
128  return QString("%1").arg("Last sample");
129  break;
130 
131  case 4:
132  return QString("%1").arg("Data types");
133  break;
134  }
135  }
136 
137  return QVariant();
138 }
139 
140 
141 //*************************************************************************************************************
142 
143 QVariant AverageModel::data(const QModelIndex &index, int role) const
144 {
145  if(index.row() >= m_pEvokedDataSet.evoked.size())
146  return QVariant();
147 
148  if (index.isValid()) {
149  //******** first column (evoked set comment) ********
150  if(index.column()==0) {
151  QVariant v;
152 
153  switch(role) {
154  case Qt::DisplayRole:
155  v.setValue(QString("%1").arg(m_pEvokedDataSet.evoked.at(index.row()).comment));
156  return v;
157  break;
158 
159  case AverageModelRoles::GetComment:
160  v.setValue(m_pEvokedDataSet.evoked.at(index.row()).comment);
161  return v;
162  break;
163 
164  case Qt::TextAlignmentRole:
165  return Qt::AlignHCenter + Qt::AlignVCenter;
166  }
167  }//end column check
168 
169  //******** second column (evoked set aspect kind) ********
170  if(index.column()==1) {
171  QVariant v;
172 
173  switch(role) {
174  case Qt::DisplayRole:
175  v.setValue(QString("%1").arg(m_pEvokedDataSet.evoked.at(index.row()).aspect_kind));
176  return v;
177  break;
178 
179  case AverageModelRoles::GetAspectKind:
180  v.setValue(m_pEvokedDataSet.evoked.at(index.row()).aspect_kind);
181  return v;
182  break;
183 
184  case Qt::TextAlignmentRole:
185  return Qt::AlignHCenter + Qt::AlignVCenter;
186  }
187  }//end column check
188 
189  //******** third column (evoked set first sample) ********
190  if(index.column()==2) {
191  QVariant v;
192 
193  switch(role) {
194  case Qt::DisplayRole:
195  v.setValue(QString("%1").arg(m_pEvokedDataSet.evoked.at(index.row()).first));
196  return v;
197  break;
198 
199  case AverageModelRoles::GetFirstSample:
200  v.setValue(m_pEvokedDataSet.evoked.at(index.row()).first);
201  return v;
202  break;
203 
204  case Qt::TextAlignmentRole:
205  return Qt::AlignHCenter + Qt::AlignVCenter;
206  }
207  }//end column check
208 
209  //******** fourth column (evoked set last sample) ********
210  if(index.column()==3) {
211  QVariant v;
212 
213  switch(role) {
214  case Qt::DisplayRole:
215  v.setValue(QString("%1").arg(m_pEvokedDataSet.evoked.at(index.row()).last));
216  return v;
217  break;
218 
219  case AverageModelRoles::GetLastSample:
220  v.setValue(m_pEvokedDataSet.evoked.at(index.row()).last);
221  return v;
222  break;
223 
224  case Qt::TextAlignmentRole:
225  return Qt::AlignHCenter + Qt::AlignVCenter;
226  }
227  }//end column check
228 
229  //******** fifth column (evoked set data types) ********
230  if(index.column()==4) {
231  QVariant v;
232  RowVectorPair averagedData;
233  const FiffInfo *fiffInfo;
234  RowVectorPairF timeData;
235  RowVectorPair projections;
236 
237  switch(role) {
238  case AverageModelRoles::GetAverageData:
239  averagedData.first = m_pEvokedDataSet.evoked.at(index.row()).data.data();
240  averagedData.second = m_pEvokedDataSet.evoked.at(index.row()).data.cols();
241  v.setValue(averagedData);
242  break;
243 
244  case AverageModelRoles::GetFiffInfo:
245  fiffInfo = &m_pEvokedDataSet.evoked.at(index.row()).info;
246  v.setValue(fiffInfo);
247  break;
248 
249  case AverageModelRoles::GetTimeData:
250  timeData.first = m_pEvokedDataSet.evoked.at(index.row()).times.data();
251  timeData.second = m_pEvokedDataSet.evoked.at(index.row()).times.cols();
252  v.setValue(timeData);
253  break;
254 
255  case AverageModelRoles::GetProjections:
256  projections.first = m_pEvokedDataSet.evoked.at(index.row()).proj.data();
257  projections.second = m_pEvokedDataSet.evoked.at(index.row()).proj.cols();
258  v.setValue(projections);
259  break;
260 
261  case Qt::TextAlignmentRole:
262  return Qt::AlignHCenter + Qt::AlignVCenter;
263  }
264 
265  return v;
266  }//end column check
267  } // end index.valid() check
268 
269  return QVariant();
270 }
271 
272 
273 //*************************************************************************************************************
274 
275 bool AverageModel::insertRows(int position, int span, const QModelIndex & parent)
276 {
277  Q_UNUSED(position);
278  Q_UNUSED(span);
279  Q_UNUSED(parent);
280 
281  return true;
282 }
283 
284 
285 //*************************************************************************************************************
286 
287 bool AverageModel::removeRows(int position, int span, const QModelIndex & parent)
288 {
289  Q_UNUSED(position);
290  Q_UNUSED(span);
291  Q_UNUSED(parent);
292 
293  return true;
294 }
295 
296 
297 //*************************************************************************************************************
298 
299 Qt::ItemFlags AverageModel::flags(const QModelIndex & index) const
300 {
301  Q_UNUSED(index);
302  return Qt::ItemIsEnabled | Qt::ItemIsSelectable /*| Qt::ItemIsEditable*/;
303 }
304 
305 
306 //*************************************************************************************************************
307 
308 bool AverageModel::setData(const QModelIndex & index, const QVariant & value, int role)
309 {
310  Q_UNUSED(index);
311  Q_UNUSED(value);
312  Q_UNUSED(role);
313 
314  return true;
315 }
316 
317 
318 //*************************************************************************************************************
319 
321 {
322  beginResetModel();
323  clearModel();
324 
325  FiffEvokedSet::read(qFile, m_pEvokedDataSet);
326 
327  qDebug()<<"m_pEvokedDataSet.evoked.size()"<<m_pEvokedDataSet.evoked.size();
328 
329  if(!m_pEvokedDataSet.evoked.empty())
330  m_bFileloaded = true;
331  else {
332  qDebug("AverageModel: ERROR! Data set does not contain any evoked data!");
333  endResetModel();
334  m_bFileloaded = false;
335  emit fileLoaded(false);
336  return false;
337  }
338 
339  endResetModel();
340 
341  emit fileLoaded(true);
342  emit dataChanged(createIndex(0,0), createIndex(rowCount(),columnCount()));
343 
344  return true;
345 }
346 
347 
348 //*************************************************************************************************************
349 
351 {
352  Q_UNUSED(qFile);
353 
354  beginResetModel();
355  clearModel();
356 
357  //TODO: Save evoked to file
358 
359  endResetModel();
360  return true;
361 }
362 
363 
364 //*************************************************************************************************************
365 
367 {
368  beginResetModel();
369  //clear average data model structure
371 
372  m_bFileloaded = false;
373 
374  endResetModel();
375 
376  qDebug("AverageModel cleared.");
377 }
bool loadEvokedData(QFile &qFile)
FIFF measurement file information.
Definition: fiff_info.h:96
This class represents the average model of the model/view framework of mne_browse_raw_qt application...
bool saveEvokedData(QFile &qFile)
virtual int rowCount(const QModelIndex &parent=QModelIndex()) const
QList< FiffEvoked > evoked