In [ ]:
%matplotlib inline

The :class:Info <mne.Info> data structure

The :class:Info <mne.Info> data object is typically created when data is imported into MNE-Python and contains details such as:

  • date, subject information, and other recording details
  • the sampling rate
  • information about the data channels (name, type, position, etc.)
  • digitized points
  • sensor–head coordinate transformation matrices

and so forth. See the :class:the API reference <mne.Info> for a complete list of all data fields. Once created, this object is passed around throughout the data analysis pipeline.


In [ ]:
import mne
import os.path as op

:class:mne.Info behaves as a nested Python dictionary:


In [ ]:
# Read the info object from an example recording
info = mne.io.read_info(
    op.join(mne.datasets.sample.data_path(), 'MEG', 'sample',
            'sample_audvis_raw.fif'), verbose=False)

List all the fields in the info object


In [ ]:
print('Keys in info dictionary:\n', info.keys())

Obtain the sampling rate of the data


In [ ]:
print(info['sfreq'], 'Hz')

List all information about the first data channel


In [ ]:
print(info['chs'][0])

Obtaining subsets of channels

There are a number of convenience functions to obtain channel indices, given an :class:mne.Info object.

Get channel indices by name


In [ ]:
channel_indices = mne.pick_channels(info['ch_names'], ['MEG 0312', 'EEG 005'])

Get channel indices by regular expression


In [ ]:
channel_indices = mne.pick_channels_regexp(info['ch_names'], 'MEG *')

Channel types

MNE supports different channel types:

  • eeg : For EEG channels with data stored in Volts (V)
  • meg (mag) : For MEG magnetometers channels stored in Tesla (T)
  • meg (grad) : For MEG gradiometers channels stored in Tesla/Meter (T/m)
  • ecg : For ECG channels stored in Volts (V)
  • seeg : For Stereotactic EEG channels in Volts (V).
  • ecog : For Electrocorticography (ECoG) channels in Volts (V).
  • fnirs (HBO) : Functional near-infrared spectroscopy oxyhemoglobin data.
  • fnirs (HBR) : Functional near-infrared spectroscopy deoxyhemoglobin data.
  • emg : For EMG channels stored in Volts (V)
  • bio : For biological channels (AU).
  • stim : For the stimulus (a.k.a. trigger) channels (AU)
  • resp : For the response-trigger channel (AU)
  • chpi : For HPI coil channels (T).
  • exci : Flux excitation channel used to be a stimulus channel.
  • ias : For Internal Active Shielding data (maybe on Triux only).
  • syst : System status channel information (on Triux systems only).

Get channel indices by type


In [ ]:
channel_indices = mne.pick_types(info, meg=True)  # MEG only
channel_indices = mne.pick_types(info, eeg=True)  # EEG only

MEG gradiometers and EEG channels


In [ ]:
channel_indices = mne.pick_types(info, meg='grad', eeg=True)

Get a dictionary of channel indices, grouped by channel type


In [ ]:
channel_indices_by_type = mne.io.pick.channel_indices_by_type(info)
print('The first three magnetometers:', channel_indices_by_type['mag'][:3])

Obtaining information about channels


In [ ]:
# Channel type of a specific channel
channel_type = mne.io.pick.channel_type(info, 75)
print('Channel #75 is of type:', channel_type)

Channel types of a collection of channels


In [ ]:
meg_channels = mne.pick_types(info, meg=True)[:10]
channel_types = [mne.io.pick.channel_type(info, ch) for ch in meg_channels]
print('First 10 MEG channels are of type:\n', channel_types)

Dropping channels from an info structure

It is possible to limit the info structure to only include a subset of channels with the :func:mne.pick_info function:


In [ ]:
# Only keep EEG channels
eeg_indices = mne.pick_types(info, meg=False, eeg=True)
reduced_info = mne.pick_info(info, eeg_indices)

print(reduced_info)