Order of EEG channel names

  • MNE version: 1.6.1
  • operating system: Windows 11

I am acquiring EEG data from a 64-channel EEG cap (ANT Neuro) through pylsl.
After that I am using mne.create_info to create a basic Info instance. One of the parameters in this function is ch_names.

I want to pass a list of str of channel names. But I don’t know in which order I should write the channel names of the 64 channels.
I am working on this for the first time. Any help would be appreciated.

Warm Regards

Which LSL application did you use to stream the data?
The app is streaming your data as a (n_samples, n_channels) array, with the n_channels dimension in an order defined by the app. If the app you used directly interacted with ANT SDK and did not modify the channel order, I guess it should be close to:

static const std::vector<std::string> electrodeMap_208 = {
    "Fp1",       "Fpz",       "Fp2",       "F7",        "F3",        "Fz",        "F4",
    "F8",        "FC5",       "FC1",       "FC2",       "FC6",       "M1",        "T7",
    "C3",        "Cz",        "C4",        "T8",        "M2",        "CP5",       "CP1",
    "CP2",       "CP6",       "P7",        "P3",        "Pz",        "P4",        "P8",
    "POz",       "O1",        "O2",        "EOG",       "AF7",       "AF3",       "AF4",
    "AF8",       "F5",        "F1",        "F2",        "F6",        "FC3",       "FCz",
    "FC4",       "C5",        "C1",        "C2",        "C6",        "CP3",       "CP4",
    "P5",        "P1",        "P2",        "P6",        "PO5",       "PO3",       "PO4",
    "PO6",       "FT7",       "FT8",       "TP7",       "TP8",       "PO7",       "PO8",
    "OZ",        "TRIGGER",   "SAMPLECOUNT"



I am using OpenVibe Aquisition Server to stream the data.
Thank you for the solution. Also how did you determine the order of the channels? I know it is a basic question, but I am new in this field so there are many things I don’t know yet.

Warm Regards

With LSL, the server side (also called LSL App) is responsible for:

  • communication with the device
  • streaming of data including metadata (channel names, types, …)

The LSL App should populate the assiociated StreamInfo with the correct metadata in the desc XML tree. But this is not an hard requirement and is not always the case.

The channel names I provided above correspond to the channel names populated by an in-house LSL App we have for our eego amplifiers. IIRC, it corresponds to the ‘default’ order as returned by ANT’s SDK. But anyway, there is no guarantee that a different LSL App will provide the channels in the same order and/or with the same names. I am not familiar with OpenVibe, thus I would dig in their documentation for answers.

Note however that ANT’s software (among the latest versions) support LSL natively and it should be the preferred way of using LSL with their amplifiers.

Finally, for the client side, you have pylsl or mne-lsl. If you use pylsl, make sure to use the dest_obj argument in the pulling functions to avoid tanking real-time performance through painful memory allocation. If you use mne-lsl, you don’t have to bother with memory allocation and an mne.Info will be automatically parsed from the provided stream metadata (although if the server is not providing anything, then this info will basically corresponds to channels of type misc with names [str(k) for k in range(n_channels)].

If you don’t find anything in OpenVibe or in the StreamInfo.desc XML tree, then the best solution to figure out the channel order is an hardware test. Assume the order I provided above (default of the SDK), dip the EEG cap in a saline solution, and touch contacts one by one with a real-time viewer showing the data. If the channels are numbered in your client, you could try to figure out if they match the pin layout as described in the cap manual; and then match the pin with the electrode name.


1 Like

Got it. Thank you so much for explaining!


This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.