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