Skip to main content

RtHpiWorker

Namespace: RTPROCESSINGLIB  ·  Library: DSP Library

#include <dsp/rt_hpis.h>

class RTPROCESSINGLIB::RtHpiWorker

Real-time HPI worker.

Background worker thread that runs continuous HPI coil localization.

src/examples/ex_dsp_rt/main.cpp
InvHpiDataUpdater updater(hpiInfo); // MEG picks, sensor geometry and digitised coil positions
updater.prepareDataAndProjectors(hpiData, projectors);
const InvHpiModelParameters model(QVector<int>({166, 154, 161, 158}), hpiInfo->sfreq, hpiInfo->linefreq, false);

RtHpiWorker hpiWorker(updater.getSensors());
HpiFitResult workerFit;
QObject::connect(&hpiWorker, &RtHpiWorker::resultReady, [&](const HpiFitResult& fit) { workerFit = fit; });
hpiWorker.doWork(updater.getProjectedData(), updater.getProjectors(), model, updater.getHpiDigitizer());

Inheritance​


Public Methods​

RtHpiWorker(sensorSet)​

Creates the real-time HPI worker object.

Parameters:

  • sensorSet : const InvSensorSet Associated Fiff Information.

doWork(matData, matProjectors, hpiModelParameters, matCoilsHead)​

Perform one single HPI fit.

Parameters:

  • matData : const Eigen::MatrixXd & Data to estimate the HPI positions from.

  • matProjectors : const Eigen::MatrixXd & The projectors to apply. Bad channels are still included.

  • hpiModelParameters : const InvHpiModelParameters & HPI model parameters (coil frequencies, line frequency, ...).

  • matCoilsHead : const Eigen::MatrixXd & Digitized HPI coil positions in head space.


Example​

Used in examples​

ex_dsp_rt​

DSP real-time workers: averaging, covariance, noise spectrum, connectivity, HPI fitting and inverse operators.

src/examples/ex_dsp_rt/main.cpp, line 294
RtHpiWorker hpiWorker(updater.getSensors());
HpiFitResult workerFit;
QObject::connect(&hpiWorker, &RtHpiWorker::resultReady, [&](const HpiFitResult& fit) { workerFit = fit; });
hpiWorker.doWork(updater.getProjectedData(), updater.getProjectors(), model, updater.getHpiDigitizer());
HpiFitResult direct;
InvHpiFit(updater.getSensors()).fit(updater.getProjectedData(), updater.getProjectors(), model, updater.getHpiDigitizer(), direct);
ok &= expect(workerFit.GoF.size() == 4 && workerFit.GoF.minCoeff() > 0.98 && workerFit.devHeadTrans.trans.isApprox(direct.devHeadTrans.trans, 1e-6f),
QString("RtHpiWorker fits 4 coils (GoF >= %1) like InvHpiFit").arg(workerFit.GoF.size() ? workerFit.GoF.minCoeff() : 0.0, 0, 'f', 4));

Authors of this file​