Tutorial: NIRS data importation, visualization and response estimate in the optode space

[TUTORIAL UNDER DEVELOPMENT: NOT READY FOR PUBLIC USE]

Author: Thomas Vincent, PERFORM Centre, Concordia University, Montreal, Canada (thomas.vincent at concordia dot ca)

Collaborators: Christophe Grova, PERFORM Centre and physics dpt., Concordia University, Montreal, Canada Jean-Marc Lina, Electrical Engineering Dpt, Ecole de Technologie Supérieure, Montréal, Canada Louis Bherer, Centre de recherche, Institut de Cardiologie de Montréal, Montréal, Canada

This tutorial illustrates how to import and process NIRS recordings in Brainstorm.

Presentation of the experiment

Download and installation

Import anatomy

Import NIRS functional data

The functional data used in this tutorial was produced by the Brainsight acquisition software and is available in the data subfolder of the nirs sample folder. It contains the following files:

To import this dataset in Brainstorm:

Registration

In the same way as in the tutorial "Channel file / MEG-MRI coregistration", the registration between the MRI and the NIRS is first based on three reference points Nasion, Left and Right ears. It can then be refined with the either the full head shape of the subject or with manual adjustment.

To review this registration:

As reference, the following figures show the position of fiducials [blue] (inion and nose tip are extra positions), sources [orange] and detectors [green] as they were digitized by Brainsight:

NIRSTORM_tut_nirs_tapping_brainsight_head_mesh_fiducials_1.gif NIRSTORM_tut_nirs_tapping_brainsight_head_mesh_fiducials_2.gif NIRSTORM_tut_nirs_tapping_brainsight_head_mesh_fiducials_3.gif

Review Channel information

The resulting data organization should be:

NIRSTORM_tut_nirs_tapping_func_organization.png

This indicates that the data comes from the Brainsight system (BRS) and comprises 97 channels (96 NIRS channels + 1 auxiliary signals).

To review the content of channels, right-click on the channel file > Edit channel file.

NIRSTORM_tut_nirs_tapping_channel_table.png

Visualize NIRS signals

Select "Subject01/S01_Block_FO_LH_Run01/Link to raw file -> NIRS -> Display time series" It will open a new figure with superimposed channels

NIRSTORM_tut_nirs_tapping_time_series_stacked.png

Which can also be viewed in butterfly mode

NIRSTORM_tut_nirs_tapping_time_series_butterfly.png

To view the auxiliary data, select "Subject01/S01_Block_FO_LH_Run01/Link to raw file -> NIRS_AUX -> Display time series"

NIRSTORM_tut_nirs_tapping_time_series_AUX_stacked.gif

Montage selection

/!\ TODO add dynamic montages

/!\ Add screenshot

Extract stimulation events

During the experiment, the stimulation paradigm was run under matlab and sent triggers through the parallel port to the acquisition device. These stimulation events are then stored as a box signal in channel AUX2: values above a certain threshold indicate a stimulation block.

To transform this signal into Brainstorm events, drag and drop the NIRS data "S01_Block_FO_LH_Run01" in the Brainstorm process window. Click on "Run" and select Process "Events -> Read from channel".

NIRSTORM_tut_nirs_tapping_detect_events.gif

Use the following parameters:

Run the process.

Then right-click on "Link to raw file" under "S01_Block_FO_LH_Run01" then "NIRS -> Display time series". There should be an event group called "AUX1". Rename it to "MOTOR" using "Events -> Rename Group".

NIRSTORM_tut_nirs_tapping_nirs_time_series_motor_events.gif

The "MOTOR" event group has 10 events which are shown in green on the top of the plot.

Movement correction

In fNIRS data, a movement usually induces a spiked signal variation and shifts the signal baseline. A movement artefact spreads to all channels as the whole is moving. The correction process available is semi-atomatic as it requires the user to tag the movement events. The method used to correct movement is based on spline interpolation.

To tag specific events (see this tutorial for a complete presentation of event marking), double-click on "Link to raw file" under "S01_Block_FO_LH_Run01" then in the "Events" menu, select "Add group" and enter "NIRS_mvt".

On the time-series, we can identify 3 obvious movement events, highlighted in blue here:

NIRSTORM_tut_nirs_tapping_mvts_preview.png

Use shift-left-click to position the temporal marker at the beginning of the movement. Then use the middle mouse wheel to zoom on it and use shift-left-click again to precisely adjust the position of the start of the movement event. Drag until the end of the movement event and use CTRL+E to mark the event.

NIRSTORM_tut_nirs_tapping_mvt_marking.png

Repeat the operation for all 3 movement events. You should end up with the following event definitions:

NIRSTORM_tut_nirs_tapping_mvts_events.png

After saving and closing all graphic windows, drag and drop "Link to raw file" int to process field and press "Run". In the process menu, select "NIRSTORM > Motion correction".

In the process option window, set "Movement event name" to "NIRS_mvt" then click "Run". To check the result, open the obtained time-series along with the raw one and zoom at the end of the time-series (shilft+left-click then mouse wheel):

NIRSTORM_tut_nirs_tapping_mvt_corr_result.png

As we can see, the two last movement artefacts are well corrected but the first one is not. This highlights the fact that the motion correction method corrects for rather smooth variations in the signal and spiking events (very rapid movement) are not filtered. However, this is not troubling as spiking artifacts should be filtered out during bandpass filtering.

Note taht marked movement events are removed in the resulting data set.

Bad channel tagging

NIRS measurement are heterogeneous (long distance measurements, movements, occlusion by hair) and the signal in several channels might not be properly analysed. A first pre-processing step hence consists in removing those channels.

The following criterions may be applied to reject channels:

Drag and drop the NIRS data "S01_Block_FO_LH_Run01" in the Brainstorm process window. Click on "Run" and select Process "NIRSTORM -> Tag bad channels".

NIRSTORM_tut_nirs_tapping_remove_bad_channels.png

This process is performed "in place": the channel flags of the given data are modified. To view the result, right-click on "S01_Block_FO_LH_Run01 > Link to raw file" then "Good/Bad Channels > View all bad channels" or "Edit good/bad channels".

Compute [Hb] variations - Modified Beer-Lambert Law

This process computes variations of concentration of oxy-hemoglobin (HbO), deoxy-hemoglobin (HbR) and total hemoglobin (HbT) from the measured light intensity time courses at different wavelengths.

Note that the channel definition will differ from the raw data. Previously there was one channel per wavelength, now there will be one channel per Hb type (HbO, HbR or HbT). The total number of channels may change.

For a given pair, the formula used is:

where:

NIRSTORM_tut_nirs_tapping_MBLL.png

Process parameters:

This process creates a new condition, here "S01_Block_FO_LH_Run01_Hb", because the montage is redefined.

Under "S01_Block_FO_LH_Run01_Hb", double-click on "Hb" to browse the delta [Hb] time-series.

/!\ TODO: make new snapshot with dynamic montages NIRSTORM_tut_nirs_tapping_view_hb.png

As shown on the left part, all recorded optode pairs are available as montages to enable the display of overlapping HbO, HbR and HbT. /!\ TODO: Adapt to use dynamic montage

Linear detrend

This filter process removes any linear trend in the signal.

Clear the process window and drag and drop the item named "[Hb]" into it. Click on "Run" then select "Pre-process -> Remove linear trend"

NIRSTORM_tut_nirs_tapping_detrend_parameters.png

Parameters:

This process creates an item called "Hb | detrend"

Infinite Impulse Response filtering

So far, the signal still contains a lot of physiological components of non-interest: heart beats, breathing and Mayer waves. As the evoked signal of interest should be distinct from those components in terms of frequency bands, we can get rid of them by filtering.

NIRSTORM_tut_nirs_tapping_iir_filter_parameters.png

Parameters:

This process creates an item called "[Hb] | detrend | IIR filtered"

Window averaging

the goal is to get the response elicited by the motor paradigm. For this, we perform window-averaging time-locked on each motor onset while correcting for baseline differences across trials.

The first step is to split the data into chunks corresponding to the window over which we want to average. The average window is wider than the stimulation events: we'd like to see the return to baseline / undershoot after stimulation. If we directly use the extended MOTOR events to split data, the window will be constrain to the event durations.

To avoid this, define new "simple" events from the existing ones: Double-click on "Hb | detrend | IIR filtered", then in the right panel select the MOTOR event type, click on "Events -> convert to simple events" and select "start". Then click on "File -> Save modifications". This defines the temporal origin point of the peri-stimulus averaging window.

Right-click on "Hb | detrend | IIR filtered -> Import in database"

NIRSTORM_tut_nirs_tapping_import_data_chunks.png

Ensure that "Use events" is checked and that the MOTOR events are selected. The epoch time should be: -5000 to 55000 ms. This means that there will be 5 seconds prior to the stimulation event to check if the signal is steady. There will also be 25 seconds after the stimulation to check the return to baseline / undershoot. In the "Pre-processing" panel, check "Remove DC offset" and use a Time range of -5000 to -100 ms. This will set a reference window prior over which to remove chunk offsets. All signals will be zero-centered according to this window. Finally, ensure that the option "Create a separate folder for each event type" is checked".

After clicking on "import", we end up with 10 "MOTOR" data chunks.

The last step is to actually compute the average of these chunks. Clear the process panel then drag and drop the item "MOTOR (10 files)" into it. Click on "run" and select the process "Average -> Average files".

NIRSTORM_tut_nirs_tapping_average_files_process.png

Use Group files: Everything and Function: Arithmetic average + Standard deviation.

To see the results, double click on the created item "AvgStd: MOTOR (10)". You can again browse by measurement pair by using the different montages in the record panel.

NIRSTORM_tut_nirs_tapping_averaged_response.png

Tutorials/NIRSFingerTapping (last edited 2017-06-19 21:42:48 by ?ThomasVincent)