v2.0.0
Loading...
Searching...
No Matches
inv_sensor_set.h
Go to the documentation of this file.
1//=============================================================================================================
23
24#ifndef INV_SENSOR_SET_H
25#define INV_SENSOR_SET_H
26
27//=============================================================================================================
28// INCLUDES
29//=============================================================================================================
30
31#include "../inv_global.h"
32
33//=============================================================================================================
34// QT INCLUDES
35//=============================================================================================================
36
37#include <QObject>
38#include <QSharedPointer>
39
40//=============================================================================================================
41// EIGEN INCLUDES
42//=============================================================================================================
43
44#include <Eigen/Core>
45
46//=============================================================================================================
47// FORWARD DECLARATIONS
48//=============================================================================================================
49
50namespace FWDLIB
51{
52class FwdCoil;
53class FwdCoilSet;
54}
55
56namespace FIFFLIB
57{
58class FiffCoordTrans;
59class FiffDigPointSet;
60class FiffChInfo;
61}
62
63//=============================================================================================================
64// DEFINE NAMESPACE HPILIB
65//=============================================================================================================
66
67namespace INVLIB
68{
69enum class Accuracy : int
70{
71 high = 2,
72 medium = 1,
73 low = 0
74};
75
82{
83public:
84 typedef QSharedPointer<InvSensorSet> SPtr;
85 typedef QSharedPointer<const InvSensorSet> ConstSPtr;
86
87 //=========================================================================================================
91 explicit InvSensorSet() = default;
92
93 //=========================================================================================================
100 explicit InvSensorSet(const QSharedPointer<FWDLIB::FwdCoilSet> pFwdCoilSet);
101
102 inline int np() const;
103 inline int ncoils() const;
104 inline Eigen::VectorXd ez(int iSensor) const;
105 inline Eigen::MatrixXd ez() const;
106
107 inline Eigen::VectorXd r0(int iSensor) const;
108 inline Eigen::MatrixXd r0() const;
109
110 inline Eigen::MatrixXd rmag(int iSensor) const;
111 inline Eigen::MatrixXd rmag() const;
112
113 inline Eigen::MatrixXd cosmag(int iSensor) const;
114 inline Eigen::MatrixXd cosmag() const;
115
116 inline Eigen::MatrixXd tra(int iSensor) const;
117 inline Eigen::MatrixXd tra() const;
118
119 inline Eigen::RowVectorXd w(int iSensor) const;
120 inline Eigen::RowVectorXd w() const;
121
122 inline bool operator==(const InvSensorSet& b) const;
123 inline bool operator!=(const InvSensorSet& b) const;
124
125private:
126 //=========================================================================================================
133 void initFromFwdCoilSet(const QSharedPointer<FWDLIB::FwdCoilSet> pFwdCoilSet);
134
135 //=========================================================================================================
141 void initMatrices(int iNchan, int iNp);
142
143 Eigen::MatrixXd m_ez{Eigen::MatrixXd(0, 0)};
144 Eigen::MatrixXd m_r0{Eigen::MatrixXd(0, 0)};
145 Eigen::MatrixXd m_rmag{Eigen::MatrixXd(0, 0)};
146 Eigen::MatrixXd m_cosmag{Eigen::MatrixXd(0, 0)};
147 Eigen::MatrixXd m_tra{Eigen::MatrixXd(0, 0)};
148 Eigen::RowVectorXd m_w{Eigen::RowVectorXd(0)};
149 int m_ncoils{0};
150 int m_np{0};
151};
152
153//=============================================================================================================
154// INLINE DEFINITIONS
155//=============================================================================================================
156
157inline int InvSensorSet::np() const
158{
159 return m_np;
160}
161
162inline int InvSensorSet::ncoils() const
163{
164 return m_ncoils;
165}
166
167inline Eigen::VectorXd InvSensorSet::ez(int iSensor) const
168{
169 return m_ez.row(iSensor);
170}
171
172inline Eigen::MatrixXd InvSensorSet::ez() const
173{
174 return m_ez;
175}
176
177inline Eigen::VectorXd InvSensorSet::r0(int iSensor) const
178{
179 return m_r0.row(iSensor);
180}
181
182inline Eigen::MatrixXd InvSensorSet::r0() const
183{
184 return m_r0;
185}
186
187inline Eigen::RowVectorXd InvSensorSet::w(int iSensor) const
188{
189 return m_w.segment(iSensor * m_np, m_np);
190}
191
192inline Eigen::RowVectorXd InvSensorSet::w() const
193{
194 return m_w;
195}
196
197inline Eigen::MatrixXd InvSensorSet::rmag(int iSensor) const
198{
199 return m_rmag.block(iSensor * m_np, 0, m_np, 3);
200}
201
202inline Eigen::MatrixXd InvSensorSet::rmag() const
203{
204 return m_rmag;
205}
206
207inline Eigen::MatrixXd InvSensorSet::cosmag(int iSensor) const
208{
209 return m_cosmag.block(iSensor * m_np, 0, m_np, 3);
210}
211
212inline Eigen::MatrixXd InvSensorSet::cosmag() const
213{
214 return m_cosmag;
215}
216
217inline Eigen::MatrixXd InvSensorSet::tra() const
218{
219 return m_tra;
220}
221//=============================================================================================================
222
223inline bool InvSensorSet::operator==(const InvSensorSet& b) const
224{
225 return (this->ez() == b.ez() &&
226 this->r0() == b.r0() &&
227 this->rmag() == b.rmag() &&
228 this->cosmag() == b.cosmag() &&
229 this->tra() == b.tra() &&
230 this->w() == b.w() &&
231 this->np() == b.np() &&
232 this->ncoils() == b.ncoils());
233}
234
235//=============================================================================================================
236
237inline bool InvSensorSet::operator!=(const InvSensorSet& b) const
238{
239 bool equal = this == &b;
240 return !(equal);
241}
242
243//=============================================================================================================
252{
253public:
254 typedef QSharedPointer<InvSensorSetCreator> SPtr;
255 typedef QSharedPointer<const InvSensorSetCreator> ConstSPtr;
256
257 //=========================================================================================================
261 explicit InvSensorSetCreator();
262
263 //=========================================================================================================
272 InvSensorSet updateSensorSet(const QList<FIFFLIB::FiffChInfo>& channelList,
273 const Accuracy& accuracy);
274
275private:
276 QSharedPointer<FWDLIB::FwdCoilSet> m_pCoilDefinitions{nullptr}; // the coil definitions as template
277};
278
279//=============================================================================================================
280// INLINE DEFINITIONS
281//=============================================================================================================
282
283} // namespace INVLIB
284
285#endif // INV_SENSOR_SET_H
INVLIB library export/import macros, build-info accessors, and namespace docstring for the inverse-so...
#define INVSHARED_EXPORT
Definition inv_global.h:38
FIFF file I/O, in-memory data structures and high-level readers/writers.
Inverse source estimation (MNE, dSPM, sLORETA, dipole fitting).
Forward modelling — BEM solver, spherical models, sensor/coil definitions and the lead-field assembly...
Definition compute_fwd.h:85
Per-channel FIFF descriptor: identifiers, kind, calibration, coil type, channel-frame coil position a...
Labelled 4x4 FIFF affine: source frame, destination frame, rotation, translation and cached inverse.
Collection of FiffDigPoint records as parsed from a FIFFB_ISOTRAK block.
Single MEG sensor coil or EEG electrode — stores the coil-local frame and the (r_mag,...
Definition fwd_coil.h:93
Container of FwdCoil instances acting both as the in-memory image of the coil_def....
Stores MEG sensor geometry (positions, orientations, weights, coil count) for a single sensor type.
Eigen::VectorXd r0(int iSensor) const
Eigen::MatrixXd rmag(int iSensor) const
bool operator!=(const InvSensorSet &b) const
Eigen::MatrixXd tra() const
Eigen::RowVectorXd w() const
Eigen::MatrixXd cosmag() const
Eigen::RowVectorXd w(int iSensor) const
Eigen::MatrixXd ez() const
Eigen::MatrixXd r0() const
Eigen::MatrixXd cosmag(int iSensor) const
QSharedPointer< const InvSensorSet > ConstSPtr
bool operator==(const InvSensorSet &b) const
Eigen::MatrixXd tra(int iSensor) const
InvSensorSet(const QSharedPointer< FWDLIB::FwdCoilSet > pFwdCoilSet)
QSharedPointer< InvSensorSet > SPtr
Eigen::MatrixXd rmag() const
Eigen::VectorXd ez(int iSensor) const
QSharedPointer< InvSensorSetCreator > SPtr
QSharedPointer< const InvSensorSetCreator > ConstSPtr
InvSensorSet updateSensorSet(const QList< FIFFLIB::FiffChInfo > &channelList, const Accuracy &accuracy)