Which recordings belong to an EEG2025 mini release?#

Estimated reading time:4 minutes

Inspect the R5 challenge catalogue without reading signal payloads. The mini list defines eligible participants; catalogue recording counts depend on task availability. Challenge data are 100 Hz, 0.5–50 Hz filtered derivatives and must not be confused with the original HBN OpenNeuro recordings.

Before you start#

Use an installed EEGDash environment and an internet connection to the catalogue. This page requests metadata only; it needs neither a GPU nor a signal download. EEGDASH_CACHE_DIR selects a reusable cache, defaulting to ~/.eegdash_cache. Reading a recording’s .raw later is a separate step that acquires its signal and sidecars.

The question is whether a proposed cohort contains the participants and tasks you expect. There is no prediction target or train/test score on this page. p_factor is requested to inspect available participant metadata, not to construct a new target or infer that every participant has a valid value.

import os
from pathlib import Path

from eegdash import EEGChallengeDataset
from eegdash.const import SUBJECT_MINI_RELEASE_MAP

Select the challenge release#

release="R5" selects the challenge’s release mapping; mini=True restricts eligibility to its curated participant list. No task filter is used, so several tasks and runs may belong to the same person. The challenge loader also selects the preprocessed challenge storage location. Replacing it with an OpenNeuro query changes the data product even when participant IDs match.

description_fields requests fields useful for checking cohort eligibility. The description can contain additional source metadata. Missing age, sex or p-factor values require an explicit exclusion policy in a later supervised analysis; this discovery step deliberately does not silently drop records.

dataset = EEGChallengeDataset(
    release="R5",
    mini=True,
    cache_dir=Path(
        os.environ.get("EEGDASH_CACHE_DIR", "~/.eegdash_cache")
    ).expanduser(),
    description_fields=["subject", "task", "run", "age", "sex", "p_factor"],
)
╭────────────────────── EEG 2025 Competition Data Notice ──────────────────────╮
│ This object loads the HBN dataset that has been preprocessed for the EEG     │
│ Challenge:                                                                   │
│   * Downsampled from 500Hz to 100Hz                                          │
│   * Bandpass filtered (0.5-50 Hz)                                            │
│                                                                              │
│ For full preprocessing applied for competition details, see:                 │
│   https://github.com/eeg2025/downsample-datasets                             │
│                                                                              │
│ The HBN dataset have some preprocessing applied by the HBN team:             │
│   * Re-reference (Cz Channel)                                                │
│                                                                              │
│ IMPORTANT: The data accessed via `EEGChallengeDataset` is NOT identical to   │
│ what you get from EEGDashDataset directly.                                   │
│ If you are participating in the competition, always use                      │
│ `EEGChallengeDataset` to ensure consistency with the challenge data.         │
╰──────────────────────── Source: EEGChallengeDataset ─────────────────────────╯
[09/16/26 20:48:36] INFO     Auto-corrected misrouted             dataset.py:561
                             storage.base for dataset
                             EEG2025r5mini: None ->
                             s3://nemar/EEG2025r5mini

Count participants separately from recordings#

A row of description describes a recording, not an independent person. The eligibility list, unique matched subjects, and number of recording objects therefore answer different questions. Grouping by task exposes repeated runs: recordings can exceed participants without indicating duplicate data.

The subset assertion checks that catalogue results respect mini eligibility. It does not require all eligible subjects to have every task, or freeze a live catalogue count into a test. Inspect the printed table before choosing a task for the next tutorial.

metadata = dataset.description
assert set(metadata.subject).issubset(SUBJECT_MINI_RELEASE_MAP["R5"])
print("Eligible mini participants:", len(SUBJECT_MINI_RELEASE_MAP["R5"]))
print("Matched participants:", metadata.subject.nunique())
print("Matched recordings:", len(dataset.datasets))
print(
    metadata.groupby("task").agg(
        recordings=("subject", "size"), participants=("subject", "nunique")
    )
)
print(metadata.head().to_string(index=False))
Eligible mini participants: 20
Matched participants: 20
Matched recordings: 240
                         recordings  participants
task
DespicableMe                     20            20
DiaryOfAWimpyKid                 20            20
FunwithFractals                  20            20
RestingState                     20            20
ThePresent                       20            20
contrastChangeDetection          60            20
seqLearning6target                6             6
seqLearning8target               14            14
surroundSupp                     40            20
symbolSearch                     20            20
     subject                    task    age sex  p_factor release_number  ehq_total commercial_use full_pheno  attention  internalizing  externalizing restingstate despicableme funwithfractals thepresent diaryofawimpykid contrastchangedetection_1 contrastchangedetection_2 contrastchangedetection_3 surroundsupp_1 surroundsupp_2 seqlearning6target seqlearning8target symbolsearch run
NDARAH793FBF            symbolSearch 9.3427   M     0.317             R5      60.03            Yes         No      0.819          0.485         -0.224    available    available       available  available        available                 available                 available                 available      available      available        unavailable          available    available NaN
NDARAH793FBF contrastChangeDetection 9.3427   M     0.317             R5      60.03            Yes         No      0.819          0.485         -0.224    available    available       available  available        available                 available                 available                 available      available      available        unavailable          available    available   2
NDARAH793FBF contrastChangeDetection 9.3427   M     0.317             R5      60.03            Yes         No      0.819          0.485         -0.224    available    available       available  available        available                 available                 available                 available      available      available        unavailable          available    available   3
NDARAH793FBF            RestingState 9.3427   M     0.317             R5      60.03            Yes         No      0.819          0.485         -0.224    available    available       available  available        available                 available                 available                 available      available      available        unavailable          available    available NaN
NDARAH793FBF contrastChangeDetection 9.3427   M     0.317             R5      60.03            Yes         No      0.819          0.485         -0.224    available    available       available  available        available                 available                 available                 available      available      available        unavailable          available    available   1

Select participants explicitly before accessing .raw: the constructor above discovers metadata, whereas .raw triggers acquisition of signal payloads.

print("First recording provenance:", dataset.records[0]["bids_relpath"])
First recording provenance: sub-NDARAH793FBF/eeg/sub-NDARAH793FBF_task-symbolSearch_eeg.bdf

Use the result to define a bounded cohort#

The printed bids_relpath identifies a concrete source recording. Keep that path, release, subject and task with any later window metadata. A model’s sample count should come from its windows; a cohort’s participant count should come from unique subject identifiers.

Next, choose three listed subjects and a single task, add those filters to the constructor, and inspect their annotations through .raw. Estimate the resulting download before widening the query. For regression, check observed p-factor availability before feature extraction; for reaction time, retain observed stimulus and response events. This metadata table alone cannot establish either model performance or data quality.

Related data-loading example: Braindecode BIDS Dataset Example.