Skip to main content

FineCalibration

Namespace: RTPROCESSINGLIB  ·  Library: DSP Library

Python equivalent

mne.preprocessing.read_fine_calibration in MNE-Python.

#include <dsp/fine_calibration.h>

class UTILSLIB::FineCalibration

Fine calibration data for SSS.

A fine calibration file (.dat) has one line per MEG sensor, as read and written by mne.preprocessing.read_fine_calibration / write_fine_calibration: channel_number position(3) x_axis(3) y_axis(3) z_axis(3) imbalance(1 or 3)

src/examples/ex_dsp_maxwell/main.cpp
FineCalibration calibration;
FineCalEntry magnetometer;
magnetometer.chNumber = 111; // numbers ending in 1 are magnetometers
magnetometer.position = Vector3d(-0.1066, 0.0464, -0.0604);
magnetometer.imbalance = VectorXd::Constant(1, 0.996645); // calibration factor
calibration.addEntry(magnetometer);
const QString calPath = dir.filePath("sss_cal.dat"); // the format of mne.preprocessing.write_fine_calibration
const bool calWritten = calibration.write(calPath);
const FineCalibration calBack = FineCalibration::read(calPath);

Public Methods​

FineCalibration()​


write(sPath)​

Write fine calibration to a .dat file.

Parameters:

  • sPath : const QString & Output file path.

Returns:

  • bool — true if successful.

entries()​

Get the calibration entries.

Returns:

  • const QList< FineCalEntry > & — Const reference to the list of per-channel calibration entries.

size()​

Get the number of entries.

Returns:

  • int — Number of calibration entries (one per MEG channel).

isEmpty()​

Check if empty.

Returns:

  • bool — True if no calibration entries are stored.

findEntry(chNumber, entry)​

Find entry by channel number.

Parameters:

  • chNumber : int Channel number to find.

  • entry : FineCalEntry & Found entry (if any).

Returns:

  • bool — true if found.

addEntry(entry)​

Add an entry.

Parameters:

  • entry : const FineCalEntry & Calibration entry appended to the end of the list.

gainVector()​

Magnetometer calibration factors.

Returns:

  • Eigen::VectorXd — One factor per entry: the single calibration term of a magnetometer (channel number ending in 1), 1.0 for gradiometers.

imbalanceMatrix()​

Gradiometer imbalance terms.

Returns:

  • Eigen::MatrixXd — Matrix (n_entries × 3): the one or three imbalance terms of each gradiometer, zero-padded; zero rows for magnetometers.

Static Methods​

read(sPath)​

Read a fine calibration file (.dat format).

Each line has 14 or 16 whitespace-separated columns (see the class description); lines starting with '#' are comments and malformed lines are skipped.

Parameters:

  • sPath : const QString & Path to .dat file.

Returns:


Example​

Used in examples​

ex_dsp_maxwell​

DSP Maxwell filtering: SSS, bad-channel detection, movement compensation, fine calibration and cHPI removal.

src/examples/ex_dsp_maxwell/main.cpp, line 174
FineCalibration calibration;
FineCalEntry magnetometer;
magnetometer.chNumber = 111; // numbers ending in 1 are magnetometers
magnetometer.position = Vector3d(-0.1066, 0.0464, -0.0604);
magnetometer.imbalance = VectorXd::Constant(1, 0.996645); // calibration factor
calibration.addEntry(magnetometer);
const QString calPath = dir.filePath("sss_cal.dat"); // the format of mne.preprocessing.write_fine_calibration
const bool calWritten = calibration.write(calPath);
const FineCalibration calBack = FineCalibration::read(calPath);
ok &= expect(calWritten && calBack.size() == 1 && calBack.gainVector()(0) == 0.996645 && calBack.entries().first().position.isApprox(magnetometer.position),
"FineCalibration round-trips a magnetometer line");

Authors of this file​