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 class FwdCoil;
52 class FwdCoilSet;
53}
54
55namespace FIFFLIB{
56 class FiffCoordTrans;
57 class FiffDigPointSet;
58 class FiffChInfo;
59}
60
61//=============================================================================================================
62// DEFINE NAMESPACE HPILIB
63//=============================================================================================================
64
65namespace INVLIB
66{
67enum class Accuracy : int{high = 2, medium = 1, low = 0};
68
73
74public:
75 typedef QSharedPointer<InvSensorSet> SPtr;
76 typedef QSharedPointer<const InvSensorSet> ConstSPtr;
77
78 //=========================================================================================================
82 explicit InvSensorSet() = default;
83
84 //=========================================================================================================
91 explicit InvSensorSet(const QSharedPointer<FWDLIB::FwdCoilSet> pFwdCoilSet);
92
93 inline int np() const;
94 inline int ncoils() const;
95 inline Eigen::VectorXd ez(int iSensor) const;
96 inline Eigen::MatrixXd ez() const;
97
98 inline Eigen::VectorXd r0(int iSensor) const;
99 inline Eigen::MatrixXd r0() const;
100
101 inline Eigen::MatrixXd rmag(int iSensor) const;
102 inline Eigen::MatrixXd rmag() const;
103
104 inline Eigen::MatrixXd cosmag(int iSensor) const;
105 inline Eigen::MatrixXd cosmag() const;
106
107 inline Eigen::MatrixXd tra(int iSensor) const;
108 inline Eigen::MatrixXd tra() const;
109
110 inline Eigen::RowVectorXd w(int iSensor) const;
111 inline Eigen::RowVectorXd w() const;
112
113 inline bool operator== (const InvSensorSet &b) const;
114 inline bool operator!= (const InvSensorSet &b) const;
115
116private:
117 //=========================================================================================================
123 void initFromFwdCoilSet(const QSharedPointer<FWDLIB::FwdCoilSet> pFwdCoilSet);
124
125 //=========================================================================================================
131 void initMatrices(int iNchan, int iNp);
132
133 Eigen::MatrixXd m_ez{Eigen::MatrixXd(0,0)};
134 Eigen::MatrixXd m_r0{Eigen::MatrixXd(0,0)};
135 Eigen::MatrixXd m_rmag{Eigen::MatrixXd(0,0)};
136 Eigen::MatrixXd m_cosmag{Eigen::MatrixXd(0,0)};
137 Eigen::MatrixXd m_tra{Eigen::MatrixXd(0,0)};
138 Eigen::RowVectorXd m_w{Eigen::RowVectorXd(0)};
139 int m_ncoils{0};
140 int m_np{0};
141};
142
143//=============================================================================================================
144// INLINE DEFINITIONS
145//=============================================================================================================
146
147inline int InvSensorSet::np() const
148{
149 return m_np;
150}
151
152inline int InvSensorSet::ncoils() const
153{
154 return m_ncoils;
155}
156
157inline Eigen::VectorXd InvSensorSet::ez(int iSensor) const
158{
159 return m_ez.row(iSensor);
160}
161
162inline Eigen::MatrixXd InvSensorSet::ez() const
163{
164 return m_ez;
165}
166
167inline Eigen::VectorXd InvSensorSet::r0(int iSensor) const
168{
169 return m_r0.row(iSensor);
170}
171
172inline Eigen::MatrixXd InvSensorSet::r0() const
173{
174 return m_r0;
175}
176
177inline Eigen::RowVectorXd InvSensorSet::w(int iSensor) const
178{
179 return m_w.segment(iSensor*m_np,m_np);
180}
181
182inline Eigen::RowVectorXd InvSensorSet::w() const
183{
184 return m_w;
185}
186
187inline Eigen::MatrixXd InvSensorSet::rmag(int iSensor) const
188{
189 return m_rmag.block(iSensor*m_np,0,m_np,3);
190}
191
192inline Eigen::MatrixXd InvSensorSet::rmag() const
193{
194 return m_rmag;
195}
196
197inline Eigen::MatrixXd InvSensorSet::cosmag(int iSensor) const
198{
199 return m_cosmag.block(iSensor*m_np,0,m_np,3);
200}
201
202inline Eigen::MatrixXd InvSensorSet::cosmag() const
203{
204 return m_cosmag;
205}
206
207inline Eigen::MatrixXd InvSensorSet::tra() const
208{
209 return m_tra;
210}
211//=============================================================================================================
212
213inline bool InvSensorSet::operator== (const InvSensorSet &b) const
214{
215 return (this->ez() == b.ez() &&
216 this->r0() == b.r0() &&
217 this->rmag() == b.rmag() &&
218 this->cosmag() == b.cosmag() &&
219 this->tra() == b.tra() &&
220 this->w() == b.w() &&
221 this->np() == b.np() &&
222 this->ncoils() == b.ncoils());
223}
224
225//=============================================================================================================
226
227inline bool InvSensorSet::operator!= (const InvSensorSet &b) const
228{
229 bool equal = this==&b;
230 return !(equal);
231}
232
233//=============================================================================================================
240{
241
242public:
243 typedef QSharedPointer<InvSensorSetCreator> SPtr;
244 typedef QSharedPointer<const InvSensorSetCreator> ConstSPtr;
245
246 //=========================================================================================================
250 explicit InvSensorSetCreator();
251
252 //=========================================================================================================
260 InvSensorSet updateSensorSet(const QList<FIFFLIB::FiffChInfo>& channelList,
261 const Accuracy& accuracy);
262
263private:
264 QSharedPointer<FWDLIB::FwdCoilSet> m_pCoilDefinitions{nullptr}; // the coil definitions as template
265};
266
267//=============================================================================================================
268// INLINE DEFINITIONS
269//=============================================================================================================
270
271} // namespace INVLIB
272
273#endif // INV_SENSOR_SET_H
274
bool operator==(const BIDSPath &a, const BIDSPath &b)
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:83
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:88
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)