v2.0.0
Loading...
Searching...
No Matches
geometryinfo.h
Go to the documentation of this file.
1//=============================================================================================================
30
31#ifndef GEOMETRYINFO_H
32#define GEOMETRYINFO_H
33
34//=============================================================================================================
35// INCLUDES
36//=============================================================================================================
37
38#include "../disp3D_global.h"
39
40#include <fiff/fiff_evoked.h>
41
42//=============================================================================================================
43// STL INCLUDES
44//=============================================================================================================
45
46#include <atomic>
47#include <limits>
48#include <functional>
49
50//=============================================================================================================
51// QT INCLUDES
52//=============================================================================================================
53
54#include <QSharedPointer>
55#include <QVector>
56#include <vector>
57
58//=============================================================================================================
59// EIGEN INCLUDES
60//=============================================================================================================
61
62#include <Eigen/Core>
63#include <Eigen/Sparse>
64
65//=============================================================================================================
66// DEFINE NAMESPACE
67//=============================================================================================================
68
69namespace DISP3DLIB {
70
71#define FLOAT_INFINITY std::numeric_limits<float>::infinity()
72
73//=============================================================================================================
79
81{
82
83public:
84 typedef QSharedPointer<GeometryInfo> SPtr;
85 typedef QSharedPointer<const GeometryInfo> ConstSPtr;
86
87 GeometryInfo() = delete;
88
89 //=========================================================================================================
93 static QSharedPointer<Eigen::MatrixXd> scdc(const Eigen::MatrixX3f &matVertices,
94 const std::vector<Eigen::VectorXi> &vecNeighborVertices,
95 Eigen::VectorXi &vecVertSubset,
96 double dCancelDist = FLOAT_INFINITY);
97
98 //=========================================================================================================
114 static QSharedPointer<Eigen::SparseMatrix<float>> scdcInterpolationMat(
115 const Eigen::MatrixX3f &matVertices,
116 const std::vector<Eigen::VectorXi> &vecNeighborVertices,
117 const Eigen::VectorXi &vecVertSubset,
118 double (*interpolationFunction)(double),
119 double dCancelDist,
120 std::function<void(int, int)> progressCallback = nullptr,
121 const std::atomic<bool> *cancelledFlag = nullptr);
122
123 //=========================================================================================================
127 static Eigen::VectorXi projectSensors(const Eigen::MatrixX3f &matVertices,
128 const Eigen::MatrixX3f &matSensorPositions);
129
130 //=========================================================================================================
134 static Eigen::VectorXi filterBadChannels(QSharedPointer<Eigen::MatrixXd> matDistanceTable,
135 const FIFFLIB::FiffInfo& fiffInfo,
136 qint32 iSensorType);
137
138protected:
139 static inline double squared(double dBase);
140
141 static Eigen::VectorXi nearestNeighbor(const Eigen::MatrixX3f &matVertices,
142 const Eigen::MatrixX3f &matSensorPositions,
143 qint32 iBegin,
144 qint32 iEnd);
145
146 static void iterativeDijkstra(QSharedPointer<Eigen::MatrixXd> matOutputDistMatrix,
147 const Eigen::MatrixX3f &matVertices,
148 const std::vector<Eigen::VectorXi> &vecNeighborVertices,
149 const Eigen::VectorXi &vecVertSubset,
150 qint32 iBegin,
151 qint32 iEnd,
152 double dCancelDistance);
153};
154
155//=============================================================================================================
156// INLINE DEFINITIONS
157//=============================================================================================================
158
159double GeometryInfo::squared(double dBase)
160{
161 return dBase * dBase;
162}
163
164} // namespace DISP3DLIB
165
166#endif // GEOMETRYINFO_H
#define FLOAT_INFINITY
Library export/import macros and namespace marker for the disp3D library.
#define DISP3DSHARED_EXPORT
Single averaged evoked response: time axis, samples, baseline, channel info and processing history.
3-D brain visualisation using the Qt RHI rendering backend.
static QSharedPointer< Eigen::SparseMatrix< float > > scdcInterpolationMat(const Eigen::MatrixX3f &matVertices, const std::vector< Eigen::VectorXi > &vecNeighborVertices, const Eigen::VectorXi &vecVertSubset, double(*interpolationFunction)(double), double dCancelDist, std::function< void(int, int)> progressCallback=nullptr, const std::atomic< bool > *cancelledFlag=nullptr)
scdcInterpolationMat Computes geodesic distances (SCDC) and builds the sparse interpolation matrix in...
static Eigen::VectorXi nearestNeighbor(const Eigen::MatrixX3f &matVertices, const Eigen::MatrixX3f &matSensorPositions, qint32 iBegin, qint32 iEnd)
QSharedPointer< GeometryInfo > SPtr
QSharedPointer< const GeometryInfo > ConstSPtr
static Eigen::VectorXi filterBadChannels(QSharedPointer< Eigen::MatrixXd > matDistanceTable, const FIFFLIB::FiffInfo &fiffInfo, qint32 iSensorType)
filterBadChannels Filters bad channels from distance table.
static void iterativeDijkstra(QSharedPointer< Eigen::MatrixXd > matOutputDistMatrix, const Eigen::MatrixX3f &matVertices, const std::vector< Eigen::VectorXi > &vecNeighborVertices, const Eigen::VectorXi &vecVertSubset, qint32 iBegin, qint32 iEnd, double dCancelDistance)
static double squared(double dBase)
static Eigen::VectorXi projectSensors(const Eigen::MatrixX3f &matVertices, const Eigen::MatrixX3f &matSensorPositions)
projectSensors Calculates the nearest neighbor vertex to each sensor.
static QSharedPointer< Eigen::MatrixXd > scdc(const Eigen::MatrixX3f &matVertices, const std::vector< Eigen::VectorXi > &vecNeighborVertices, Eigen::VectorXi &vecVertSubset, double dCancelDist=FLOAT_INFINITY)
scdc Calculates surface constrained distances on a mesh.
Full FIFF measurement info: per-channel descriptors, sampling and filter setup, projectors,...
Definition fiff_info.h:88