# Order of EEG channel names

**URL:** <https://mne.discourse.group/t/order-of-eeg-channel-names/8490>\
**Category:** Support & Discussions\
**Tags:** eeg\
**Created:** [March 17, 2024, 9:19am UTC](https://mne.discourse.group/t/order-of-eeg-channel-names/8490 "2024-03-17T09:19:39Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![bhawna](https://avatars.discourse-cdn.com/v4/letter/b/eb9ed0/32.png) [@bhawna](https://mne.discourse.group/u/bhawna)\
**Post date:** [March 17, 2024, 9:19am UTC](https://mne.discourse.group/t/order-of-eeg-channel-names/8490/1 "2024-03-17T09:19:39Z")

</div>

- 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  
Bhawna

---

<div class="post-metadata">

**Author:** ![mscheltienne](https://yyz2.discourse-cdn.com/free1/user_avatar/mne.discourse.group/mscheltienne/32/827_2.png) [@mscheltienne](https://mne.discourse.group/u/mscheltienne)\
**Post date:** [March 17, 2024, 11:38am UTC](https://mne.discourse.group/t/order-of-eeg-channel-names/8490/2 "2024-03-17T11:38:40Z")

</div>

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:

```python
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"
};

```

Mathieu

---

<div class="post-metadata">

**Author:** ![bhawna](https://avatars.discourse-cdn.com/v4/letter/b/eb9ed0/32.png) [@bhawna](https://mne.discourse.group/u/bhawna)\
**Post date:** [March 17, 2024, 3:37pm UTC](https://mne.discourse.group/t/order-of-eeg-channel-names/8490/3 "2024-03-17T15:37:51Z")

</div>

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  
Bhawna

---

<div class="post-metadata">

**Author:** ![mscheltienne](https://yyz2.discourse-cdn.com/free1/user_avatar/mne.discourse.group/mscheltienne/32/827_2.png) [@mscheltienne](https://mne.discourse.group/u/mscheltienne)\
**Post date:** [March 17, 2024, 9:49pm UTC](https://mne.discourse.group/t/order-of-eeg-channel-names/8490/4 "2024-03-17T21:49:16Z")

</div>

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.

Mathieu

---

<div class="post-metadata">

**Author:** ![bhawna](https://avatars.discourse-cdn.com/v4/letter/b/eb9ed0/32.png) [@bhawna](https://mne.discourse.group/u/bhawna)\
**Post date:** [March 19, 2024, 9:45am UTC](https://mne.discourse.group/t/order-of-eeg-channel-names/8490/5 "2024-03-19T09:45:13Z")

</div>

Got it. Thank you so much for explaining!

Bhawna

---

<div class="post-metadata">

**Author:** ![system](https://global.discourse-cdn.com/free1/uploads/mne/original/1X/85cc6bd2b69cb698a166dc6d880fb550510d0144.jpeg) [@system](https://mne.discourse.group/u/system)\
**Post date:** [March 26, 2024, 9:45am UTC](https://mne.discourse.group/t/order-of-eeg-channel-names/8490/6 "2024-03-26T09:45:21Z")

</div>

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