MNE-CPP  0.1.9
A Framework for Electrophysiology
data3Dtreemodel.cpp
Go to the documentation of this file.
1 //=============================================================================================================
38 //=============================================================================================================
39 // INCLUDES
40 //=============================================================================================================
41 
42 #include "data3Dtreemodel.h"
43 #include "items/bem/bemtreeitem.h"
49 #include "items/mri/mritreeitem.h"
53 
55 
56 #include <fs/surfaceset.h>
57 #include <fs/annotationset.h>
58 
60 
61 //=============================================================================================================
62 // QT INCLUDES
63 //=============================================================================================================
64 
65 #include <QSharedPointer>
66 #include <Qt3DCore/QEntity>
67 #include <QSurfaceFormat>
68 #include <QGLFormat>
69 
70 //=============================================================================================================
71 // EIGEN INCLUDES
72 //=============================================================================================================
73 
74 //=============================================================================================================
75 // USED NAMESPACES
76 //=============================================================================================================
77 
78 using namespace FSLIB;
79 using namespace MNELIB;
80 using namespace DISP3DLIB;
81 using namespace INVERSELIB;
82 using namespace CONNECTIVITYLIB;
83 using namespace Eigen;
84 using namespace FIFFLIB;
85 
86 //=============================================================================================================
87 // DEFINE MEMBER METHODS
88 //=============================================================================================================
89 
90 Data3DTreeModel::Data3DTreeModel(QObject* parent)
91 : QStandardItemModel(parent)
92 , m_pModelEntity(new Qt3DCore::QEntity())
93 {
94  m_pRootItem = this->invisibleRootItem();
95  m_pRootItem->setText("Loaded 3D Data");
96 
97  initMetatypes();
98 }
99 
100 //=============================================================================================================
101 
102 QVariant Data3DTreeModel::data(const QModelIndex& index,
103  int role) const
104 {
105 // qDebug() << "Data3DTreeModel::data - index.column(): " << index.column();
106 
107 // if(index.column() == 1) {
108 // QVariant data;
109 // data.setValue(QString("test"));
110 // return data;
111 // }
112 
113  return QStandardItemModel::data(index, role);
114 }
115 
116 //=============================================================================================================
117 
118 int Data3DTreeModel::columnCount(const QModelIndex &parent) const
119 {
120  Q_UNUSED(parent);
121  // Return 2 to activate item description in tree view
122  return 1;
123 }
124 
125 //=============================================================================================================
126 
127 QVariant Data3DTreeModel::headerData(int section, Qt::Orientation orientation,
128  int role) const
129 {
130  if (orientation == Qt::Horizontal && role == Qt::DisplayRole) {
131  QVariant data;
132  if(section == 0) {
133  data.setValue(QString("Data"));
134  } else if(section == 1) {
135  data.setValue(QString("Description"));
136  }
137 
138  return data;
139  }
140 
141  return QVariant();
142 }
143 
144 //=============================================================================================================
145 
146 Qt::ItemFlags Data3DTreeModel::flags(const QModelIndex &index) const
147 {
148  //Do not allow items from column 1 (0 based counting) to be edited
149  if(index.column() == 1) {
150  return Qt::ItemIsEnabled;
151  }
152 
153  return QStandardItemModel::flags(index);
154 }
155 
156 //=============================================================================================================
157 
158 QList<FsSurfaceTreeItem*> Data3DTreeModel::addSurfaceSet(const QString& sSubject,
159  const QString& sMriSetName,
160  const SurfaceSet& surfaceSet,
161  const AnnotationSet& annotationSet)
162 {
163  QList<FsSurfaceTreeItem*> returnItemList;
164 
165  for(int i = 0; i < surfaceSet.size(); ++i) {
166  if(i < annotationSet.size()) {
167  returnItemList.append(addSurface(sSubject, sMriSetName, surfaceSet[i], annotationSet[i]));
168  } else {
169  returnItemList.append(addSurface(sSubject, sMriSetName,surfaceSet[i], Annotation()));
170  }
171  }
172 
173  return returnItemList;
174 }
175 
176 //=============================================================================================================
177 
179  const QString& sMriSetName,
180  const Surface& surface,
181  const Annotation &annotation)
182 {
183  FsSurfaceTreeItem* pReturnItem = Q_NULLPTR;
184 
185  //Handle subject item
186  SubjectTreeItem* pSubjectItem = addSubject(subject);
187 
188  //Find already existing MRI items and add the new data to the first search result
189  QList<QStandardItem*> itemList = pSubjectItem->findChildren(sMriSetName);
190 
191  if(!itemList.isEmpty()) {
192  MriTreeItem* pMriItem = dynamic_cast<MriTreeItem*>(itemList.first());
193  pReturnItem = pMriItem->addData(surface, annotation, m_pModelEntity);
194  } else {
195  MriTreeItem* pMriItem = new MriTreeItem(Data3DTreeModelItemTypes::MriItem, sMriSetName);
196  AbstractTreeItem::addItemWithDescription(pSubjectItem, pMriItem);
197  pReturnItem = pMriItem->addData(surface, annotation, m_pModelEntity);
198  }
199 
200  return pReturnItem;
201 }
202 
203 //=============================================================================================================
204 
205 QList<SourceSpaceTreeItem*> Data3DTreeModel::addSourceSpace(const QString& sSubject,
206  const QString& sMeasurementSetName,
207  const MNESourceSpace& sourceSpace)
208 {
209  QList<SourceSpaceTreeItem*> pReturnItem;
210 
211  //Handle subject item
212  SubjectTreeItem* pSubjectItem = addSubject(sSubject);
213 
214  //Find already existing surface items and add the new data to the first search result
215  QList<QStandardItem*> itemList = pSubjectItem->findChildren(sMeasurementSetName);
216 
217  if(!itemList.isEmpty()) {
218  MeasurementTreeItem* pMeasurementItem = dynamic_cast<MeasurementTreeItem*>(itemList.first());
219  pReturnItem = pMeasurementItem->addData(sourceSpace, m_pModelEntity);
220  } else {
221  MeasurementTreeItem* pMeasurementItem = new MeasurementTreeItem(Data3DTreeModelItemTypes::MeasurementItem, sMeasurementSetName);
222  AbstractTreeItem::addItemWithDescription(pSubjectItem, pMeasurementItem);
223  pReturnItem = pMeasurementItem->addData(sourceSpace, m_pModelEntity);
224  }
225 
226  return pReturnItem;
227 }
228 
229 //=============================================================================================================
230 
231 QList<SourceSpaceTreeItem*> Data3DTreeModel::addForwardSolution(const QString& sSubject,
232  const QString& sMeasurementSetName,
233  const MNEForwardSolution& forwardSolution)
234 {
235  return this->addSourceSpace(sSubject, sMeasurementSetName, forwardSolution.src);
236 }
237 
238 //=============================================================================================================
239 
241  const QString& sMeasurementSetName,
242  const MNESourceEstimate& tSourceEstimate,
243  const MNELIB::MNEForwardSolution& tForwardSolution,
244  const FSLIB::SurfaceSet& tSurfSet,
245  const FSLIB::AnnotationSet& tAnnotSet)
246 {
247  bool bUseGPU = false;
248 
249  // Only support CPU support until we figured out the QBuffer memory problem when dealing with large matrices
250 // if(QGLFormat::openGLVersionFlags() >= QGLFormat::OpenGL_Version_4_3) {
251 // bUseGPU = true;
252 // qDebug("Using compute shader version for 3D visualization.");
253 // }
254 
255  MneDataTreeItem* pReturnItem = Q_NULLPTR;
256 
257  //Handle subject item
258  SubjectTreeItem* pSubjectItem = addSubject(sSubject);
259 
260  //Find already existing surface items and add the new data to the first search result
261  QList<QStandardItem*> itemList = pSubjectItem->findChildren(sMeasurementSetName);
262 
263  //Find the "set" items and add the sensor data as items
264  if(!itemList.isEmpty() && (itemList.first()->type() == Data3DTreeModelItemTypes::MeasurementItem)) {
265  if(MeasurementTreeItem* pMeasurementItem = dynamic_cast<MeasurementTreeItem*>(itemList.first())) {
266  pReturnItem = pMeasurementItem->addData(tSourceEstimate,
267  tForwardSolution,
268  tSurfSet,
269  tAnnotSet,
271  bUseGPU);
272  }
273  } else {
274  MeasurementTreeItem* pMeasurementItem = new MeasurementTreeItem(Data3DTreeModelItemTypes::MeasurementItem, sMeasurementSetName);
275  AbstractTreeItem::addItemWithDescription(pSubjectItem, pMeasurementItem);
276  pReturnItem = pMeasurementItem->addData(tSourceEstimate,
277  tForwardSolution,
278  tSurfSet,
279  tAnnotSet,
281  bUseGPU);
282  }
283 
284  return pReturnItem;
285 }
286 
287 //=============================================================================================================
288 
290  const QString& sSet,
291  const INVERSELIB::ECDSet& ecdSet)
292 {
293  EcdDataTreeItem* pReturnItem = Q_NULLPTR;
294 
295  //Handle subject item
296  SubjectTreeItem* pSubjectItem = addSubject(sSubject);
297 
298  //Find already existing surface items and add the new data to the first search result
299  QList<QStandardItem*> itemList = pSubjectItem->findChildren(sSet);
300 
301  //Find the "set" items and add the dipole fits as items
302  if(!itemList.isEmpty() && (itemList.first()->type() == Data3DTreeModelItemTypes::MeasurementItem)) {
303  if(MeasurementTreeItem* pMeasurementItem = dynamic_cast<MeasurementTreeItem*>(itemList.first())) {
304  pReturnItem = pMeasurementItem->addData(ecdSet, m_pModelEntity);
305  }
306  } else {
307  MeasurementTreeItem* pMeasurementItem = new MeasurementTreeItem(Data3DTreeModelItemTypes::MeasurementItem, sSet);
308  AbstractTreeItem::addItemWithDescription(pSubjectItem, pMeasurementItem);
309  pReturnItem = pMeasurementItem->addData(ecdSet, m_pModelEntity);
310  }
311 
312  return pReturnItem;
313 }
314 
315 //=============================================================================================================
316 
317 QList<NetworkTreeItem*> Data3DTreeModel::addConnectivityData(const QString& sSubject,
318  const QString& sMeasurementSetName,
319  const QList<Network>& networkData)
320 {
321  QList<NetworkTreeItem*> returnList;
322 
323  for(int i = 0; i < networkData.size(); ++i) {
324  returnList.append(addConnectivityData(sSubject,
325  sMeasurementSetName,
326  networkData.at(i)));
327  }
328 
329  return returnList;
330 }
331 
332 //=============================================================================================================
333 
335  const QString& sMeasurementSetName,
336  const Network& networkData)
337 {
338  NetworkTreeItem* pReturnItem = Q_NULLPTR;
339 
340  //Handle subject item
341  SubjectTreeItem* pSubjectItem = addSubject(sSubject);
342 
343  //Find already existing surface items and add the new data to the first search result
344  QList<QStandardItem*> itemList = pSubjectItem->findChildren(sMeasurementSetName);
345 
346  if(!itemList.isEmpty() && (itemList.first()->type() == Data3DTreeModelItemTypes::MeasurementItem)) {
347  if(MeasurementTreeItem* pMeasurementItem = dynamic_cast<MeasurementTreeItem*>(itemList.first())) {
348  pReturnItem = pMeasurementItem->addData(networkData, m_pModelEntity);
349  }
350  } else {
351  MeasurementTreeItem* pMeasurementItem = new MeasurementTreeItem(Data3DTreeModelItemTypes::MeasurementItem, sMeasurementSetName);
352  AbstractTreeItem::addItemWithDescription(pSubjectItem, pMeasurementItem);
353  pReturnItem = pMeasurementItem->addData(networkData, m_pModelEntity);
354  }
355 
356  return pReturnItem;
357 }
358 
359 //=============================================================================================================
360 
361 BemTreeItem* Data3DTreeModel::addBemData(const QString& sSubject,
362  const QString& sBemSetName,
363  const MNELIB::MNEBem& bem)
364 {
365  BemTreeItem* pReturnItem = Q_NULLPTR;
366 
367  //Handle subject item
368  SubjectTreeItem* pSubjectItem = addSubject(sSubject);
369 
370  //Find already existing surface items and add the new data to the first search result
371  QList<QStandardItem*> itemList = pSubjectItem->findChildren(sBemSetName);
372 
373  if(!itemList.isEmpty() && (itemList.first()->type() == Data3DTreeModelItemTypes::BemItem)) {
374  pReturnItem = dynamic_cast<BemTreeItem*>(itemList.first());
375  pReturnItem->addData(bem, m_pModelEntity);
376  } else {
377  pReturnItem = new BemTreeItem(Data3DTreeModelItemTypes::BemItem, sBemSetName);
378  AbstractTreeItem::addItemWithDescription(pSubjectItem, pReturnItem);
379  pReturnItem->addData(bem, m_pModelEntity);
380  }
381 
382  return pReturnItem;
383 }
384 
385 //=============================================================================================================
386 
388  const QString& sSensorSetName,
389  const QList<FIFFLIB::FiffChInfo>& lChInfo,
390  const MNELIB::MNEBem& sensor,
391  const QStringList& bads)
392 {
393  SensorSetTreeItem* pReturnItem = Q_NULLPTR;
394 
395  //Handle subject item
396  SubjectTreeItem* pSubjectItem = addSubject(sSubject);
397 
398  //Find already existing surface items and add the new data to the first search result
399  QList<QStandardItem*> itemList = pSubjectItem->findChildren(sSensorSetName);
400 
401  if(!itemList.isEmpty() && (itemList.first()->type() == Data3DTreeModelItemTypes::SensorSetItem)) {
402  pReturnItem = dynamic_cast<SensorSetTreeItem*>(itemList.first());
403  if(pReturnItem == Q_NULLPTR){
404  qDebug()<<"Dynamic cast failed, returning null pointer";
405  } else {
406  pReturnItem->addData(sensor, lChInfo, "MEG", bads, m_pModelEntity);
407  }
408  } else {
409  pReturnItem = new SensorSetTreeItem(Data3DTreeModelItemTypes::SensorSetItem, sSensorSetName);
410  AbstractTreeItem::addItemWithDescription(pSubjectItem, pReturnItem);
411  pReturnItem->addData(sensor, lChInfo, "MEG", bads, m_pModelEntity);
412  }
413 
414  return pReturnItem;
415 }
416 
417 //=============================================================================================================
418 
420  const QString& sSensorSetName,
421  const QList<FIFFLIB::FiffChInfo>& lChInfo,
422  const QStringList& bads)
423 {
424  SensorSetTreeItem* pReturnItem = Q_NULLPTR;
425 
426  //Handle subject item
427  SubjectTreeItem* pSubjectItem = addSubject(sSubject);
428 
429  //Find already existing surface items and add the new data to the first search result
430  QList<QStandardItem*> itemList = pSubjectItem->findChildren(sSensorSetName);
431 
432  MNEBem tempBem = MNEBem();
433 
434  if(!itemList.isEmpty() && (itemList.first()->type() == Data3DTreeModelItemTypes::SensorSetItem)) {
435  pReturnItem = dynamic_cast<SensorSetTreeItem*>(itemList.first());
436  if(pReturnItem == Q_NULLPTR){
437  qDebug() << "Dynamic cast failed, returning null pointer";
438  pReturnItem = Q_NULLPTR;
439  } else {
440  pReturnItem->addData(tempBem, lChInfo, "EEG", bads, m_pModelEntity);
441  }
442  } else {
443  pReturnItem = new SensorSetTreeItem(Data3DTreeModelItemTypes::SensorSetItem, sSensorSetName);
444  AbstractTreeItem::addItemWithDescription(pSubjectItem, pReturnItem);
445  pReturnItem->addData(tempBem, lChInfo, "EEG", bads, m_pModelEntity);
446  }
447 
448  return pReturnItem;
449 }
450 
451 //=============================================================================================================
452 
454  const QString& sMeasurementSetName,
455  const FIFFLIB::FiffDigPointSet& digitizer)
456 {
457  DigitizerSetTreeItem* pReturnItem = Q_NULLPTR;
458 
459  //Handle subject item
460  SubjectTreeItem* pSubjectItem = addSubject(sSubject);
461 
462  //Find already existing set items and add the new data to the first search result
463  QList<QStandardItem*> itemList = pSubjectItem->findChildren(sMeasurementSetName);
464 
465  if(!itemList.isEmpty() && (itemList.first()->type() == Data3DTreeModelItemTypes::MeasurementItem)) {
466  MeasurementTreeItem* pMeasurementItem = dynamic_cast<MeasurementTreeItem*>(itemList.first());
467  pReturnItem = pMeasurementItem->addData(digitizer, m_pModelEntity);
468  } else {
469  MeasurementTreeItem* pMeasurementItem = new MeasurementTreeItem(Data3DTreeModelItemTypes::MeasurementItem, sMeasurementSetName);
470  AbstractTreeItem::addItemWithDescription(pSubjectItem, pMeasurementItem);
471  pReturnItem = pMeasurementItem->addData(digitizer, m_pModelEntity);
472  }
473 
474  return pReturnItem;
475 }
476 
477 //=============================================================================================================
478 
480  const QString& sMeasurementSetName,
481  const MatrixXd& matSensorData,
482  const MNEBemSurface& tBemSurface,
483  const FiffInfo& fiffInfo,
484  const QString& sDataType)
485 {
486  bool bUseGPU = false;
487 
488  // Only support CPU support until we figured out the QBuffer memory problem when dealing with large matrices
489 // if(QGLFormat::openGLVersionFlags() >= QGLFormat::OpenGL_Version_4_3) {
490 // bUseGPU = true;
491 // qDebug("Using compute shader version for 3D visualization.");
492 // }
493 
494  SensorDataTreeItem* pReturnItem = Q_NULLPTR;
495 
496  //Handle subject item
497  SubjectTreeItem* pSubjectItem = addSubject(sSubject);
498 
499  //Find already existing surface items and add the new data to the first search result
500  QList<QStandardItem*> itemList = pSubjectItem->findChildren(sMeasurementSetName);
501 
502  //Find the "set" items and add the sensor data as items
503  if(!itemList.isEmpty() && (itemList.first()->type() == Data3DTreeModelItemTypes::MeasurementItem)) {
504  if(MeasurementTreeItem* pMeasurementItem = dynamic_cast<MeasurementTreeItem*>(itemList.first())) {
505  pReturnItem = pMeasurementItem->addData(matSensorData,
506  tBemSurface,
507  fiffInfo,
508  sDataType,
510  bUseGPU);
511  }
512  } else {
513  MeasurementTreeItem* pMeasurementItem = new MeasurementTreeItem(Data3DTreeModelItemTypes::MeasurementItem, sMeasurementSetName);
514  AbstractTreeItem::addItemWithDescription(pSubjectItem, pMeasurementItem);
515  pReturnItem = pMeasurementItem->addData(matSensorData,
516  tBemSurface,
517  fiffInfo,
518  sDataType,
520  bUseGPU);
521  }
522 
523  return pReturnItem;
524 }
525 
526 //=============================================================================================================
527 
528 QPointer<Qt3DCore::QEntity> Data3DTreeModel::getRootEntity()
529 {
530  return m_pModelEntity;
531 }
532 
533 //=============================================================================================================
534 
536 {
537  SubjectTreeItem* pReturnItem= Q_NULLPTR;
538 
539  //Find the subject
540  QList<QStandardItem*> itemSubjectList = this->findItems(sSubject);
541 
542  //If subject does not exist, create a new one
543  if(itemSubjectList.size() == 0) {
544  pReturnItem = new SubjectTreeItem(Data3DTreeModelItemTypes::SubjectItem, sSubject);
545  itemSubjectList << pReturnItem;
546  itemSubjectList << new QStandardItem(pReturnItem->toolTip());
547  m_pRootItem->appendRow(itemSubjectList);
548  } else {
549  pReturnItem = dynamic_cast<SubjectTreeItem*>(itemSubjectList.first());
550  }
551 
552  return pReturnItem;
553 }
554 
555 //=============================================================================================================
556 
558 {
559  //Init metatypes
560  qRegisterMetaType<QVector<QVector<int> > >();
561  qRegisterMetaType<QVector<int> >();
562 
563  qRegisterMetaType<QVector<Vector3f> >();
564  qRegisterMetaType<QVector<Eigen::Vector3f> >();
565 
566  qRegisterMetaType<QList<FSLIB::Label> >();
567  qRegisterMetaType<QList<Label> >();
568 
569  qRegisterMetaType<FIFFLIB::FiffInfo>();
570  qRegisterMetaType<FiffInfo>();
571 
572  qRegisterMetaType<Eigen::MatrixX3i>();
573  qRegisterMetaType<MatrixX3i>();
574 
575  qRegisterMetaType<Eigen::MatrixXd>();
576  qRegisterMetaType<MatrixXd>();
577 
578  qRegisterMetaType<Eigen::MatrixX3f>();
579  qRegisterMetaType<MatrixX3f>();
580 
581  qRegisterMetaType<Eigen::MatrixX4f>();
582  qRegisterMetaType<MatrixX4f>();
583 
584  qRegisterMetaType<Eigen::VectorXf>();
585  qRegisterMetaType<VectorXf>();
586 
587  qRegisterMetaType<Eigen::VectorXi>();
588  qRegisterMetaType<VectorXi>();
589 
590  qRegisterMetaType<Eigen::VectorXd>();
591  qRegisterMetaType<VectorXd>();
592 
593  qRegisterMetaType<Eigen::RowVectorXf>();
594  qRegisterMetaType<RowVectorXf>();
595 
596  qRegisterMetaType<Eigen::Vector3f>();
597  qRegisterMetaType<Vector3f>();
598 
599  qRegisterMetaType<Eigen::SparseMatrix<float> >();
600  qRegisterMetaType<SparseMatrix<float> >();
601 
602  qRegisterMetaType<QSharedPointer<Eigen::SparseMatrix<float> > >();
603  qRegisterMetaType<QSharedPointer<SparseMatrix<float> > >();
604 }
void addData(const CONNECTIVITYLIB::Network &tNetworkData)
QList< QStandardItem * > findChildren(int type)
static void addItemWithDescription(QStandardItem *pItemParent, QStandardItem *pItemAdd)
FreeSurfer surface mesh.
Definition: surface.h:75
Renderable3DEntity class declaration.
SensorDataTreeItem * addSensorData(const QString &sSubject, const QString &sMeasurementSetName, const Eigen::MatrixXd &matSensorData, const MNELIB::MNEBemSurface &tBemSurface, const FIFFLIB::FiffInfo &fiffInfo, const QString &sDataType)
SensorSetTreeItem class declaration.
This item integrates GeometryInfo and Interpolation into Disp3D structure.
FIFF measurement file information.
Definition: fiff_info.h:84
Provides a generic MeasurementTreeItem.
BEM surface provides geometry information.
BemTreeItem * addBemData(const QString &sSubject, const QString &sBemSetName, const MNELIB::MNEBem &bem)
Provides a generic brain tree item to hold real time data.
Annotation set.
Definition: annotationset.h:80
Provides a generic SensorSetTreeItem.
void addData(const MNELIB::MNEBem &tBem, Qt3DCore::QEntity *p3DEntityParent=0)
EcdDataTreeItem * addDipoleFitData(const QString &sSubject, const QString &sSet, const INVERSELIB::ECDSet &ecdSet)
Provides a generic brain tree item to hold real time data.
QPointer< Qt3DCore::QEntity > getRootEntity()
BEM descritpion.
Definition: mne_bem.h:89
SurfaceSet class declaration.
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const
Provides a generic SubjectTreeItem.
Holds a set of Electric Current Dipoles.
Definition: ecd_set.h:80
Provides a generic brain tree item to hold real time data.
Free surfer annotation.
Definition: annotation.h:80
void addData(const MNELIB::MNESourceEstimate &tSourceEstimate)
DigitizerSetTreeItem * addDigitizerData(const QString &sSubject, const QString &sMeasurementSetName, const FIFFLIB::FiffDigPointSet &digitizer)
void addData(const INVERSELIB::ECDSet &pECDSet)
FiffDigPointSet class declaration.
QPointer< Qt3DCore::QEntity > m_pModelEntity
Source Space descritpion.
MeasurementTreeItem class declaration.
SensorSetTreeItem * addMegSensorInfo(const QString &sSubject, const QString &sSensorSetName, const QList< FIFFLIB::FiffChInfo > &lChInfo, const MNELIB::MNEBem &sensor=MNELIB::MNEBem(), const QStringList &bads=QStringList())
A hemisphere set of surfaces.
Definition: surfaceset.h:71
FsSurfaceTreeItem class declaration.
Holds a set of digitizer points.
SubjectTreeItem * addSubject(const QString &sSubject)
QList< SourceSpaceTreeItem * > addForwardSolution(const QString &sSubject, const QString &sMeasurementSetName, const MNELIB::MNEForwardSolution &forwardSolution)
This class holds information about a network, can compute a distance table and provide network metric...
Definition: network.h:87
Provides a generic brain tree item.
void addData(const MNELIB::MNEBem &tSensor, const QList< FIFFLIB::FiffChInfo > &lChInfo, const QString &sDataType, const QStringList &bads=QStringList(), Qt3DCore::QEntity *p3DEntityParent=0)
qint32 size() const
Definition: surfaceset.h:264
DigitizerSetTreeItem provides a tree item to hold the set of digitizer data.
SensorSetTreeItem * addEegSensorInfo(const QString &sSubject, const QString &sSensorSetName, const QList< FIFFLIB::FiffChInfo > &lChInfo, const QStringList &bads=QStringList())
FiffDigPointSet class declaration.
BemTreeItem provides a tree item to hold BEM models.
Definition: bemtreeitem.h:88
MriTreeItem class declaration.
qint32 size() const
QList< NetworkTreeItem * > addConnectivityData(const QString &sSubject, const QString &sMeasurementSetName, const QList< CONNECTIVITYLIB::Network > &networkData)
QList< SourceSpaceTreeItem * > addSourceSpace(const QString &sSubject, const QString &sMeasurementSetName, const MNELIB::MNESourceSpace &sourceSpace)
AnnotationSet class declaration.
MneDataTreeItem * addSourceData(const QString &sSubject, const QString &sMeasurementSetName, const MNELIB::MNESourceEstimate &tSourceEstimate, const MNELIB::MNEForwardSolution &tForwardSolution, const FSLIB::SurfaceSet &tSurfSet, const FSLIB::AnnotationSet &tAnnotSet)
SubjectTreeItem class declaration.
BemTreeItem class declaration.
Data3DTreeModel class declaration.
QList< FsSurfaceTreeItem * > addSurfaceSet(const QString &sSubject, const QString &sMriSetName, const FSLIB::SurfaceSet &surfaceSet, const FSLIB::AnnotationSet &annotationSet=FSLIB::AnnotationSet())
FsSurfaceTreeItem * addSurface(const QString &sSubject, const QString &sSet, const FSLIB::Surface &surface, const FSLIB::Annotation &annotation=FSLIB::Annotation())
virtual void addData(const Eigen::MatrixXd &tSensorData)
Provides a generic MriTreeItem.
Definition: mritreeitem.h:92
SourceSpaceTreeItem class declaration.
DigitizerTreeItem class declaration.
QList< FsSurfaceTreeItem * > addData(const FSLIB::SurfaceSet &tSurfaceSet, const FSLIB::AnnotationSet &tAnnotationSet, Qt3DCore::QEntity *p3DEntityParent=0)
Definition: mritreeitem.cpp:85
QList< SourceSpaceTreeItem * > addData(const MNELIB::MNESourceSpace &tSourceSpace, Qt3DCore::QEntity *p3DEntityParent=0)