MNE-CPP  0.1.9
A Framework for Electrophysiology
rtsensorinterpolationmatworker.cpp
Go to the documentation of this file.
1 //=============================================================================================================
35 //=============================================================================================================
36 // INCLUDES
37 //=============================================================================================================
38 
40 #include "../../../../helpers/geometryinfo/geometryinfo.h"
41 #include "../../../../helpers/interpolation/interpolation.h"
42 
43 //=============================================================================================================
44 // QT INCLUDES
45 //=============================================================================================================
46 
47 //=============================================================================================================
48 // EIGEN INCLUDES
49 //=============================================================================================================
50 
51 //=============================================================================================================
52 // USED NAMESPACES
53 //=============================================================================================================
54 
55 using namespace DISP3DLIB;
56 using namespace MNELIB;
57 using namespace FIFFLIB;
58 using namespace Eigen;
59 
60 //=============================================================================================================
61 // DEFINE MEMBER METHODS
62 //=============================================================================================================
63 
65 : m_bInterpolationInfoIsInit(false)
66 {
69  m_lInterpolationData.matDistanceMatrix = QSharedPointer<MatrixXd>(new MatrixXd());
70 }
71 
72 //=============================================================================================================
73 
74 void RtSensorInterpolationMatWorker::setInterpolationFunction(const QString &sInterpolationFunction)
75 {
76  if(sInterpolationFunction == "Linear") {
78  }
79  else if(sInterpolationFunction == "Square") {
81  }
82  else if(sInterpolationFunction == "Cubic") {
84  }
85  else if(sInterpolationFunction == "Gaussian") {
87  }
88 
89  if(m_bInterpolationInfoIsInit == true){
90  //recalculate Interpolation matrix parameters changed
91  emitMatrix();
92  }
93 }
94 
95 //=============================================================================================================
96 
98 {
100 
101  //recalculate everything because parameters changed
103 }
104 
105 //=============================================================================================================
106 
107 void RtSensorInterpolationMatWorker::setInterpolationInfo(const Eigen::MatrixX3f &matVertices,
108  const QVector<QVector<int> > &vecNeighborVertices,
109  const QVector<Vector3f> &vecSensorPos,
110  const FiffInfo &fiffInfo,
111  int iSensorType)
112 {
113  if(matVertices.rows() == 0) {
114  qDebug() << "RtSensorInterpolationMatWorker::calculateSurfaceData - Surface data is empty. Returning ...";
115  return;
116  }
117 
118  //set members
119  m_lInterpolationData.matVertices = matVertices;
120  m_lInterpolationData.fiffInfo = fiffInfo;
121  m_lInterpolationData.iSensorType = iSensorType;
122  m_lInterpolationData.vecNeighborVertices = vecNeighborVertices;
123 
124  //set vecExcludeIndex
126  int iCounter = 0;
127  for(const FiffChInfo &info : m_lInterpolationData.fiffInfo.chs) {
129  (info.unit == FIFF_UNIT_T || info.unit == FIFF_UNIT_V)) {
130  if(m_lInterpolationData.fiffInfo.bads.contains(info.ch_name)) {
131  m_lInterpolationData.vecExcludeIndex.push_back(iCounter);
132  }
133  iCounter++;
134  }
135  }
136 
137  //sensor projecting: One time operation because surface and sensors can not change
139  vecSensorPos);
140 
142 
144 }
145 
146 //=============================================================================================================
147 
149 {
151  qDebug() << "RtSensorInterpolationMatWorker::updateBadChannels - Set interpolation info first.";
152  return;
153  }
154 
156 
157  //filtering of bad channels out of the distance table
161 
162  //set vecExcludeIndex
164  int iCounter = 0;
165  for(const FiffChInfo &info : m_lInterpolationData.fiffInfo.chs) {
167  (info.unit == FIFF_UNIT_T || info.unit == FIFF_UNIT_V)) {
168  if(m_lInterpolationData.fiffInfo.bads.contains(info.ch_name)) {
169  m_lInterpolationData.vecExcludeIndex.push_back(iCounter);
170  }
171  iCounter++;
172  }
173  }
174 
175  emitMatrix();
176 }
177 
178 //=============================================================================================================
179 
181 {
183  qDebug() << "RtSensorInterpolationMatWorker::calculateInterpolationOperator - Set interpolation info first.";
184  return;
185  }
186 
187  //SCDC with cancel distance
192 
193  //filtering of bad channels out of the distance table
197 
198  emitMatrix();
199 }
200 
201 //=============================================================================================================
202 
204 {
205  //create Interpolation matrix
211 }
static double gaussian(const double dIn)
Channel info descriptor.
Definition: fiff_ch_info.h:74
FIFF measurement file information.
Definition: fiff_info.h:84
static double cubic(const double dIn)
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.
static double square(const double dIn)
RtSensorInterpolationMatWorker class declaration.
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 >())
static QVector< int > projectSensors(const Eigen::MatrixX3f &matVertices, const QVector< Eigen::Vector3f > &vecSensorPositions)
Calculates the nearest neighbor (euclidian distance) vertex to each sensor.
struct DISP3DLIB::RtSensorInterpolationMatWorker::InterpolationData m_lInterpolationData
void newInterpolationMatrixCalculated(QSharedPointer< Eigen::SparseMatrix< float > > pMatInterpolationMatrix)
void setInterpolationFunction(const QString &sInterpolationFunction)
static double linear(const double dIn)
static QVector< int > filterBadChannels(QSharedPointer< Eigen::MatrixXd > matDistanceTable, const FIFFLIB::FiffInfo &fiffInfo, qint32 iSensorType)
filterBadChannels Filters bad channels from distance table
void setInterpolationInfo(const Eigen::MatrixX3f &matVertices, const QVector< QVector< int > > &vecNeighborVertices, const QVector< Eigen::Vector3f > &vecSensorPos, const FIFFLIB::FiffInfo &fiffInfo, int iSensorType)
QList< FiffChInfo > chs