Note
Go to the end to download the full example code or to run this example in your browser via Binder.
Which recordings belong to an EEG2025 mini release?#
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 overrides
the shared EEGDash cache resolver. 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.
from eegdash.paths import get_default_cache_dir
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=get_default_cache_dir(),
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 ─────────────────────────╯
[10/16/26 15:55:35] INFO Auto-corrected misrouted dataset.py:562
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.
Not every eligible participant has every task. Inspect the table before choosing a bounded cohort for the next tutorial.
metadata = dataset.description
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")
)
)
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
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.