61 updateBadChannels(pFiffInfo);
62 updateChannels(pFiffInfo);
63 updateHpiDigitizer(pFiffInfo->dig);
64 updateSensors(m_lChannels);
71 m_lBads = pFiffInfo->bads;
79 const int iNumCh = pFiffInfo->nchan;
81 m_vecInnerind.clear();
82 for (
int i = 0; i < iNumCh; ++i) {
89 if (!(pFiffInfo->bads.contains(pFiffInfo->ch_names.at(i)))) {
90 m_vecInnerind.append(i);
91 m_lChannels.append(pFiffInfo->chs[i]);
99void InvHpiDataUpdater::updateSensors(
const QList<FIFFLIB::FiffChInfo>& lChannels)
102 m_sensors = m_sensorSetCreator.updateSensorSet(lChannels, accuracy);
107void InvHpiDataUpdater::updateHpiDigitizer(
const QList<FiffDigPoint>& lDig)
110 QList<FiffDigPoint> lHPIPoints;
113 for (
int i = 0; i < lDig.size(); ++i) {
116 lHPIPoints.append(lDig[i]);
121 if (lHPIPoints.size() > 0) {
122 m_matHpiDigitizer = MatrixXd(iNumCoils, 3);
123 for (
int i = 0; i < lHPIPoints.size(); ++i) {
124 m_matHpiDigitizer(i, 0) = lHPIPoints.at(i).r[0];
125 m_matHpiDigitizer(i, 1) = lHPIPoints.at(i).r[1];
126 m_matHpiDigitizer(i, 2) = lHPIPoints.at(i).r[2];
129 std::cout <<
"InvHpiFit::updateHpiDigitizer - No HPI coils digitized. Returning." << std::endl;
138 const bool bUpdate = checkIfChanged(pFiffInfo->bads, pFiffInfo->chs);
140 updateBadChannels(pFiffInfo);
141 updateChannels(pFiffInfo);
142 updateHpiDigitizer(pFiffInfo->dig);
143 updateSensors(m_lChannels);
149bool InvHpiDataUpdater::checkIfChanged(
const QList<QString>& lBads,
const QList<FIFFLIB::FiffChInfo>& lChannels)
151 bool bUpdate =
false;
152 if (!(m_lBads == lBads) || !(m_lChannels == lChannels)) {
162 prepareData(matData);
163 prepareProjectors(matProjectors);
164 m_matDataProjected = m_matProjectors * m_matInnerdata;
169void InvHpiDataUpdater::prepareData(
const Eigen::MatrixXd& matData)
172 m_matInnerdata = MatrixXd(m_vecInnerind.size(), matData.cols());
174 for (
int j = 0; j < m_vecInnerind.size(); ++j) {
175 m_matInnerdata.row(j) << matData.row(m_vecInnerind[j]);
181void InvHpiDataUpdater::prepareProjectors(
const Eigen::MatrixXd& matProjectors)
184 if (m_vecInnerind.size() == 0) {
185 std::cout <<
"InvHpiFit::updateProjectors - No channels. Returning." << std::endl;
190 MatrixXd matProjectorsRows(m_vecInnerind.size(), matProjectors.cols());
191 MatrixXd matProjectorsInnerind(m_vecInnerind.size(), m_vecInnerind.size());
193 for (
int i = 0; i < matProjectorsRows.rows(); ++i) {
194 matProjectorsRows.row(i) = matProjectors.row(m_vecInnerind.at(i));
197 for (
int i = 0; i < matProjectorsInnerind.cols(); ++i) {
198 matProjectorsInnerind.col(i) = matProjectorsRows.col(m_vecInnerind.at(i));
200 m_matProjectors = matProjectorsInnerind;
FIFF channel descriptor record (FIFF_CH_INFO): per-channel logical/scanner numbers,...
#define FIFFV_COIL_BABY_MAG
#define FIFFV_COIL_VV_PLANAR_T1
#define FIFFV_COIL_VV_PLANAR_T2
#define FIFFV_COIL_VV_PLANAR_T3
Full FIFF measurement metadata: everything from FIFFB_MEAS / FIFFB_MEAS_INFO needed to interpret a re...
Pre-processing front-end for HPI fitting — re-shapes raw MEG data, projectors and digitised coils int...
FIFF file I/O, in-memory data structures and high-level readers/writers.
Inverse source estimation (MNE, dSPM, sLORETA, dipole fitting).
QSharedPointer< FiffInfo > SPtr
void checkForUpdate(const QSharedPointer< FIFFLIB::FiffInfo > pFiffInfo)
void prepareDataAndProjectors(const Eigen::MatrixXd &matData, const Eigen::MatrixXd &matProjectors)
InvHpiDataUpdater(const QSharedPointer< FIFFLIB::FiffInfo > pFiffInfo)
Stores MEG sensor geometry (positions, orientations, weights, coil count) for a single sensor type.