MNE-CPP 0.1.9
A Framework for Electrophysiology
Loading...
Searching...
No Matches
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
55using namespace DISP3DLIB;
56using namespace MNELIB;
57using namespace FIFFLIB;
58using namespace Eigen;
59
60//=============================================================================================================
61// DEFINE MEMBER METHODS
62//=============================================================================================================
63
71
72//=============================================================================================================
73
74void 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
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
107void 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;
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) {
128 if(info.kind == m_lInterpolationData.iSensorType &&
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) {
166 if(info.kind == m_lInterpolationData.iSensorType &&
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
RtSensorInterpolationMatWorker class declaration.
void setInterpolationFunction(const QString &sInterpolationFunction)
void newInterpolationMatrixCalculated(QSharedPointer< Eigen::SparseMatrix< float > > pMatInterpolationMatrix)
void setInterpolationInfo(const Eigen::MatrixX3f &matVertices, const QVector< QVector< int > > &vecNeighborVertices, const QVector< Eigen::Vector3f > &vecSensorPos, const FIFFLIB::FiffInfo &fiffInfo, int iSensorType)
struct DISP3DLIB::RtSensorInterpolationMatWorker::InterpolationData m_lInterpolationData
static QVector< int > filterBadChannels(QSharedPointer< Eigen::MatrixXd > matDistanceTable, const FIFFLIB::FiffInfo &fiffInfo, qint32 iSensorType)
filterBadChannels Filters bad channels from distance table
static QVector< int > projectSensors(const Eigen::MatrixX3f &matVertices, const QVector< Eigen::Vector3f > &vecSensorPositions)
Calculates the nearest neighbor (euclidian distance) vertex to each sensor.
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 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 double gaussian(const double dIn)
static double linear(const double dIn)
static double cubic(const double dIn)
static double square(const double dIn)
Channel info descriptor.
FIFF measurement file information.
Definition fiff_info.h:85
QList< FiffChInfo > chs