MNE-CPP  0.1.9
A Framework for Electrophysiology
rtsourceinterpolationmatworker.cpp
Go to the documentation of this file.
1 //=============================================================================================================
36 //=============================================================================================================
37 // INCLUDES
38 //=============================================================================================================
39 
41 
42 #include "../../../../helpers/geometryinfo/geometryinfo.h"
43 #include "../../../../helpers/interpolation/interpolation.h"
44 #include "../../items/common/types.h"
45 
46 //=============================================================================================================
47 // QT INCLUDES
48 //=============================================================================================================
49 
50 //=============================================================================================================
51 // EIGEN INCLUDES
52 //=============================================================================================================
53 
54 //=============================================================================================================
55 // USED NAMESPACES
56 //=============================================================================================================
57 
58 using namespace DISP3DLIB;
59 using namespace MNELIB;
60 using namespace Eigen;
61 using namespace FSLIB;
62 
63 //=============================================================================================================
64 // DEFINE MEMBER METHODS
65 //=============================================================================================================
66 
68 : m_bInterpolationInfoIsInit(false)
69 , m_iVisualizationType(Data3DTreeModelItemRoles::InterpolationBased)
70 , m_bAnnotationInfoIsInit(false)
71 , m_pMatInterpolationMat(QSharedPointer<SparseMatrix<float> >(new SparseMatrix<float>()))
72 , m_pMatAnnotationMat(QSharedPointer<SparseMatrix<float> >(new SparseMatrix<float>()))
73 {
76  m_lInterpolationData.matDistanceMatrix = QSharedPointer<MatrixXd>(new MatrixXd());
77 }
78 
79 //=============================================================================================================
80 
81 void RtSourceInterpolationMatWorker::setInterpolationFunction(const QString &sInterpolationFunction)
82 {
83  //Only supported in interpolation mode
84  if(m_iVisualizationType != Data3DTreeModelItemRoles::InterpolationBased) {
85  return;
86  }
87 
88  if(sInterpolationFunction == QStringLiteral("Linear")) {
90  }
91  else if(sInterpolationFunction == QStringLiteral("Square")) {
93  }
94  else if(sInterpolationFunction == QStringLiteral("Cubic")) {
96  }
97  else if(sInterpolationFunction == QStringLiteral("Gaussian")) {
99  }
100 
101  if(m_bInterpolationInfoIsInit == true){
102  //recalculate Interpolation matrix parameters changed
107 
108  emitMatrix();
109  }
110 }
111 
112 //=============================================================================================================
113 
115 {
116  if(m_iVisualizationType != iVisType) {
117  m_iVisualizationType = iVisType;
118 
119  emitMatrix();
120  }
121 }
122 
123 //=============================================================================================================
124 
126 {
127  //Only supported in interpolation mode
128  if(m_iVisualizationType != Data3DTreeModelItemRoles::InterpolationBased) {
129  return;
130  }
131 
133 
134  //recalculate everything because parameters changed
136 
137  emitMatrix();
138 }
139 
140 //=============================================================================================================
141 
142 void RtSourceInterpolationMatWorker::setInterpolationInfo(const Eigen::MatrixX3f &matVertices,
143  const QVector<QVector<int> > &vecNeighborVertices,
144  const QVector<int> &vecMappedSubset)
145 {
146  if(matVertices.rows() == 0) {
147  qDebug() << "RtSourceInterpolationMatWorker::setInterpolationInfo - Surface data is empty. Returning ...";
148  return;
149  }
150 
151  //set members
152  m_lInterpolationData.matVertices = matVertices;
153  m_lInterpolationData.vecNeighborVertices = vecNeighborVertices;
154  m_lInterpolationData.vecMappedSubset = vecMappedSubset;
155 
157 
159 
160  if(m_iVisualizationType == Data3DTreeModelItemRoles::InterpolationBased) {
162  }
163 }
164 
165 //=============================================================================================================
166 
167 void RtSourceInterpolationMatWorker::setAnnotationInfo(const Eigen::VectorXi &vecLabelIds,
168  const QList<FSLIB::Label> &lLabels,
169  const Eigen::VectorXi &vecVertNo)
170 {
171  if(vecLabelIds.rows() == 0 || lLabels.isEmpty()) {
172  qDebug() << "RtSourceInterpolationMatWorker::setAnnotationInfo - Annotation data is empty. Returning ...";
173  return;
174  }
175 
176  m_lInterpolationData.lLabels = lLabels;
178 
179  //Generate fast lookup map for each source and corresponding label
180  for(qint32 i = 0; i < vecVertNo.rows(); ++i) {
181  m_lInterpolationData.mapLabelIdSources.insert(vecVertNo(i), vecLabelIds(vecVertNo(i)));
182  m_lInterpolationData.vertNos.append(vecVertNo(i));
183  }
184 
186 
188 
189  if(m_iVisualizationType == Data3DTreeModelItemRoles::AnnotationBased) {
191  }
192 }
193 
194 //=============================================================================================================
195 
197 {
199  qDebug() << "RtSourceInterpolationMatWorker::calculateInterpolationOperator - Set interpolation info first.";
200  return;
201  }
202 
203  //SCDC with cancel distance
208 
209  //create Interpolation matrix
214  }
215 
216 //=============================================================================================================
217 
219 {
221  qDebug() << "RtSourceInterpolationMatWorker::calculateAnnotationOperator - Set annotation info first.";
222  return;
223  }
224 
225  int iNumVert = 0;
226  for(int i = 0; i < m_lInterpolationData.lLabels.size(); ++i) {
227  iNumVert += m_lInterpolationData.lLabels.at(i).vertices.rows();
228  }
229 
230  m_pMatAnnotationMat = QSharedPointer<Eigen::SparseMatrix<float> >(new Eigen::SparseMatrix<float>(iNumVert, m_lInterpolationData.vecMappedSubset.size()));
231 
232  //Color all labels respectivley to their activation
233  for(int i = 0; i < m_lInterpolationData.lLabels.size(); ++i) {
235  QList<qint32> listSourcesVertNoLabel = m_lInterpolationData.mapLabelIdSources.keys(label.label_id);
236 
237  for(int j = 0; j < label.vertices.rows(); ++j) {
238  for(int k = 0; k < listSourcesVertNoLabel.size(); ++k) {
239  int colIdx = m_lInterpolationData.vertNos.indexOf(listSourcesVertNoLabel.at(k));
240  m_pMatAnnotationMat->coeffRef(label.vertices(j),colIdx) = 1.0f/listSourcesVertNoLabel.size();
241  }
242  }
243  }
244 }
245 
246 //=============================================================================================================
247 
249 {
250  switch (m_iVisualizationType) {
251  case Data3DTreeModelItemRoles::InterpolationBased:
253  return;
254  }
255 
256  if(m_pMatInterpolationMat->size() == 0) {
258  }
259 
261  break;
262 
263  case Data3DTreeModelItemRoles::AnnotationBased:
264  if(!m_pMatAnnotationMat) {
265  return;
266  }
267 
268  if(m_pMatAnnotationMat->size() == 0) {
269  qDebug() << "RtSourceInterpolationMatWorker::setVisualizationType size == 0 Calculating";
271  }
272 
274  break;
275  }
276 }
DISP3DLIB::RtSourceInterpolationMatWorker::calculateInterpolationOperator
void calculateInterpolationOperator()
Definition: rtsourceinterpolationmatworker.cpp:196
DISP3DLIB::Interpolation::cubic
static double cubic(const double dIn)
Definition: interpolation.cpp:191
DISP3DLIB::RtSourceInterpolationMatWorker::calculateAnnotationOperator
void calculateAnnotationOperator()
Definition: rtsourceinterpolationmatworker.cpp:218
DISP3DLIB::RtSourceInterpolationMatWorker::InterpolationData::dCancelDistance
double dCancelDistance
Definition: rtsourceinterpolationmatworker.h:177
DISP3DLIB::RtSourceInterpolationMatWorker::InterpolationData::lLabels
QList< FSLIB::Label > lLabels
Definition: rtsourceinterpolationmatworker.h:182
DISP3DLIB::RtSourceInterpolationMatWorker::setInterpolationFunction
void setInterpolationFunction(const QString &sInterpolationFunction)
Definition: rtsourceinterpolationmatworker.cpp:81
DISP3DLIB::RtSourceInterpolationMatWorker::InterpolationData::vecNeighborVertices
QVector< QVector< int > > vecNeighborVertices
Definition: rtsourceinterpolationmatworker.h:187
DISP3DLIB::RtSourceInterpolationMatWorker::InterpolationData::vecMappedSubset
QVector< int > vecMappedSubset
Definition: rtsourceinterpolationmatworker.h:186
DISP3DLIB::RtSourceInterpolationMatWorker::InterpolationData::matVertices
Eigen::MatrixX3f matVertices
Definition: rtsourceinterpolationmatworker.h:180
DISP3DLIB::RtSourceInterpolationMatWorker::m_bAnnotationInfoIsInit
bool m_bAnnotationInfoIsInit
Definition: rtsourceinterpolationmatworker.h:193
DISP3DLIB::RtSourceInterpolationMatWorker::InterpolationData::matDistanceMatrix
QSharedPointer< Eigen::MatrixXd > matDistanceMatrix
Definition: rtsourceinterpolationmatworker.h:179
k
int k
Definition: fiff_tag.cpp:322
DISP3DLIB::RtSourceInterpolationMatWorker::setCancelDistance
void setCancelDistance(double dCancelDist)
Definition: rtsourceinterpolationmatworker.cpp:125
FSLIB::Label
Freesurfer/MNE label.
Definition: label.h:80
FSLIB::Label::vertices
Eigen::VectorXi vertices
Definition: label.h:166
FSLIB::Label::label_id
qint32 label_id
Definition: label.h:172
DISP3DLIB::RtSourceInterpolationMatWorker::InterpolationData::mapLabelIdSources
QMap< qint32, qint32 > mapLabelIdSources
Definition: rtsourceinterpolationmatworker.h:184
DISP3DLIB::Interpolation::linear
static double linear(const double dIn)
Definition: interpolation.cpp:170
DISP3DLIB::RtSourceInterpolationMatWorker::setAnnotationInfo
void setAnnotationInfo(const Eigen::VectorXi &vecLabelIds, const QList< FSLIB::Label > &lLabels, const Eigen::VectorXi &vecVertNo)
Definition: rtsourceinterpolationmatworker.cpp:167
DISP3DLIB::RtSourceInterpolationMatWorker::setVisualizationType
void setVisualizationType(int iVisType)
Definition: rtsourceinterpolationmatworker.cpp:114
DISP3DLIB::RtSourceInterpolationMatWorker::emitMatrix
void emitMatrix()
Definition: rtsourceinterpolationmatworker.cpp:248
DISP3DLIB::RtSourceInterpolationMatWorker::m_bInterpolationInfoIsInit
bool m_bInterpolationInfoIsInit
Definition: rtsourceinterpolationmatworker.h:192
DISP3DLIB::RtSourceInterpolationMatWorker::InterpolationData::interpolationFunction
double(* interpolationFunction)(double)
Definition: rtsourceinterpolationmatworker.h:189
rtsourceinterpolationmatworker.h
RtSourceInterpolationMatWorker class declaration.
DISP3DLIB::RtSourceInterpolationMatWorker::setInterpolationInfo
void setInterpolationInfo(const Eigen::MatrixX3f &matVertices, const QVector< QVector< int > > &vecNeighborVertices, const QVector< int > &vecMappedSubset)
Definition: rtsourceinterpolationmatworker.cpp:142
DISP3DLIB::Interpolation::gaussian
static double gaussian(const double dIn)
Definition: interpolation.cpp:177
DISP3DLIB::Interpolation::square
static double square(const double dIn)
Definition: interpolation.cpp:184
DISP3DLIB::RtSourceInterpolationMatWorker::m_lInterpolationData
struct DISP3DLIB::RtSourceInterpolationMatWorker::InterpolationData m_lInterpolationData
DISP3DLIB::Interpolation::createInterpolationMat
static QSharedPointer< Eigen::SparseMatrix< float > > createInterpolationMat(const QVector< int > &vecProjectedSensors, const QSharedPointer< Eigen::MatrixXd > matDistanceTable, double(*interpolationFunction)(double), const double dCancelDist=FLOAT_INFINITY, const QVector< int > &vecExcludeIndex=QVector< int >())
Definition: interpolation.cpp:71
DISP3DLIB::GeometryInfo::scdc
static QSharedPointer< Eigen::MatrixXd > scdc(const Eigen::MatrixX3f &matVertices, const QVector< QVector< int > > &vecNeighborVertices, QVector< int > &pVecVertSubset, double dCancelDist=FLOAT_INFINITY)
scdc Calculates surface constrained distances on a mesh.
Definition: geometryinfo.cpp:78
DISP3DLIB::RtSourceInterpolationMatWorker::m_pMatAnnotationMat
QSharedPointer< Eigen::SparseMatrix< float > > m_pMatAnnotationMat
Definition: rtsourceinterpolationmatworker.h:198
DISP3DLIB::RtSourceInterpolationMatWorker::m_iVisualizationType
int m_iVisualizationType
Definition: rtsourceinterpolationmatworker.h:195
DISP3DLIB::RtSourceInterpolationMatWorker::RtSourceInterpolationMatWorker
RtSourceInterpolationMatWorker()
Definition: rtsourceinterpolationmatworker.cpp:67
DISP3DLIB::RtSourceInterpolationMatWorker::newInterpolationMatrixCalculated
void newInterpolationMatrixCalculated(QSharedPointer< Eigen::SparseMatrix< float > > pMatInterpolationMatrix)
DISP3DLIB::RtSourceInterpolationMatWorker::m_pMatInterpolationMat
QSharedPointer< Eigen::SparseMatrix< float > > m_pMatInterpolationMat
Definition: rtsourceinterpolationmatworker.h:197