Skip to content

Bep044 examples - #566

Open
VisLab wants to merge 9 commits into
bids-standard:masterfrom
VisLab:bep044-examples
Open

VisLab wants to merge 9 commits into
bids-standard:masterfrom
VisLab:bep044-examples

Conversation

@VisLab

@VisLab VisLab commented Oct 6, 2026

Copy link
Copy Markdown
Member

BIDS Specification PR: bids-standard/bids-specification#2022
BIDS Validator PR: bids-standard/bids-validator#445

Supersedes #433. The three datasets there were replaced by three small ones
(56 files, largest file 2.4 KB) that together exercise each feature of the
BEP044 text as of spec PR 2022 and validate with zero errors under the
validator from PR 445.

Datasets

  • stimuli_basic: the smallest catalog-organized /stimuli directory. Flat
    layout, stimuli.tsv with stimulus_id, type, filename, description,
    one image and one audio stimulus with media sidecars, and a beh events
    file that carries both stim_id and the legacy stim_file column.
  • stimuli_hierarchical: subdirectories with scoped catalogs that amend the
    root catalog (faces/, sounds/, nsd/), the recommended license,
    copyright, description and optional URL columns, present: false for
    the three NSD images that are not redistributed, HED annotations of image
    content in a scoped catalog, a time-varying annotation for the tone, and the
    dataset-wide annotations.tsv.
  • stimuli_timevarying: film stimuli referenced from an EEG recording. The
    Present (not redistributed, present: false) with three
    stim-<label>_annot-<label>_events.tsv annotation tables (action, auditory,
    LogLumRatio) carrying HED in their sidecars, and Big Buck Bunny (CC-BY-3.0)
    split into two files with the part-<label> entity and partDescription.

Datasets were created in collaboration with Claude Fable 5.1.

VisLab and others added 4 commits October 6, 2026 10:29
Flat /stimuli directory with a stimulus catalog (stimulus_id, type,
filename, description), one image and one audio stimulus with media
metadata sidecars, and a beh events file that carries both stim_id and
the legacy stim_file column.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Root catalog with URL, license, copyright, description and present
columns; scoped catalogs in faces/, sounds/ and nsd/ that amend it;
dataset-wide annotations.tsv; three NSD images described without
redistributing the files. HED appears as a catalog column, as a
sidecar dictionary in a scoped catalog, as a placeholder in a
time-varying annotation, and on the trial_type column of the events.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The Present (not redistributed, present: false) with three
stim-<label>_annot-<label>_events.tsv annotation tables and HED in
their sidecars, Big Buck Bunny split into two files with the
part-<label> entity and partDescription, and an EEG recording whose
events reference the film through stim_id.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Three rows in dataset_listing.tsv, a Stimuli table in
tools/print_dataset_listing.py keyed on the stimuli_ prefix, and the
regenerated README tables.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🔵 Needs a closer look

The examples depend on two still-draft external specification and validator changes and contain extensive domain-specific HED metadata.

Review effort: Balanced
Findings: None

What changed in this PR

Adds three datasets demonstrating draft BEP044 stimulus catalogs, hierarchy, annotations, media metadata, and event references.

Changes:

  • Adds basic, hierarchical, and time-varying stimulus examples.
  • Adds catalog, annotation, HED, media, behavioral, and EEG metadata.
  • Extends generated dataset listings with a Stimuli section.
File Description
tools/​print_dataset_listing.py Generates the Stimuli listing.
stimuli_timevarying/​task-ThePresent_events.json Describes recording events.
stimuli_timevarying/​task-ThePresent_eeg.json Defines EEG metadata.
stimuli_timevarying/​sub-01/​eeg/​sub-01_task-ThePresent_events.tsv References the film stimulus.
stimuli_timevarying/​sub-01/​eeg/​sub-01_task-ThePresent_eeg.set Provides the EEG placeholder.
stimuli_timevarying/​sub-01/​eeg/​sub-01_task-ThePresent_channels.tsv Lists EEG channels.
stimuli_timevarying/​stimuli/​stimuli.tsv Catalogs film stimuli.
stimuli_timevarying/​stimuli/​stimuli.json Describes catalog columns.
stimuli_timevarying/​stimuli/​stim-thepresent_annot-LogLumRatio_events.tsv Adds luminance annotations.
stimuli_timevarying/​stimuli/​stim-thepresent_annot-LogLumRatio_events.json Defines luminance annotation metadata.
stimuli_timevarying/​stimuli/​stim-thepresent_annot-auditory_events.tsv Adds auditory annotations.
stimuli_timevarying/​stimuli/​stim-thepresent_annot-auditory_events.json Defines auditory HED metadata.
stimuli_timevarying/​stimuli/​stim-thepresent_annot-action_events.tsv Adds action annotations.
stimuli_timevarying/​stimuli/​stim-thepresent_annot-action_events.json Defines action HED metadata.
stimuli_timevarying/​stimuli/​stim-bbb_part-2_audiovideo.mp4 Provides the second media placeholder.
stimuli_timevarying/​stimuli/​stim-bbb_part-2_audiovideo.json Describes the second media part.
stimuli_timevarying/​stimuli/​stim-bbb_part-1_audiovideo.mp4 Provides the first media placeholder.
stimuli_timevarying/​stimuli/​stim-bbb_part-1_audiovideo.json Describes the first media part.
stimuli_timevarying/​stimuli/​annotations.tsv Catalogs annotation sets.
stimuli_timevarying/​stimuli/​annotations.json Describes annotation columns.
stimuli_timevarying/​README.md Documents the example.
stimuli_timevarying/​participants.tsv Lists the participant.
stimuli_timevarying/​dataset_description.json Defines dataset metadata.
stimuli_hierarchical/​task-view_events.json Describes face and tone events.
stimuli_hierarchical/​task-images_events.json Describes image events.
stimuli_hierarchical/​sub-01/​beh/​sub-01_task-view_events.tsv References face and tone stimuli.
stimuli_hierarchical/​sub-01/​beh/​sub-01_task-images_events.tsv References NSD stimuli.
stimuli_hierarchical/​stimuli/​stimuli.tsv Defines the root catalog.
stimuli_hierarchical/​stimuli/​stimuli.json Describes root catalog columns.
stimuli_hierarchical/​stimuli/​sounds/​stim-tone01_audio.json Describes the tone stimulus.
stimuli_hierarchical/​stimuli/​sounds/​stim-tone01_annot-pitch_events.tsv Adds pitch annotations.
stimuli_hierarchical/​stimuli/​sounds/​stim-tone01_annot-pitch_events.json Defines pitch HED metadata.
stimuli_hierarchical/​stimuli/​nsd/​stimuli.tsv Adds the scoped NSD catalog.
stimuli_hierarchical/​stimuli/​nsd/​stimuli.json Describes the NSD identifier.
stimuli_hierarchical/​stimuli/​faces/​stimuli.tsv Adds the scoped face catalog.
stimuli_hierarchical/​stimuli/​faces/​stimuli.json Defines emotion metadata and HED.
stimuli_hierarchical/​stimuli/​faces/​stim-face02_image.json Describes the second face image.
stimuli_hierarchical/​stimuli/​faces/​stim-face01_image.json Describes the first face image.
stimuli_hierarchical/​stimuli/​annotations.tsv Catalogs the pitch annotation.
stimuli_hierarchical/​stimuli/​annotations.json Describes annotation columns.
stimuli_hierarchical/​README.md Documents hierarchy and inheritance.
stimuli_hierarchical/​participants.tsv Lists the participant.
stimuli_hierarchical/​dataset_description.json Defines dataset metadata.
stimuli_basic/​task-view_events.json Describes stimulus references.
stimuli_basic/​sub-01/​beh/​sub-01_task-view_events.tsv Demonstrates both reference columns.
stimuli_basic/​stimuli/​stimuli.tsv Defines the minimal catalog.
stimuli_basic/​stimuli/​stimuli.json Describes catalog columns.
stimuli_basic/​stimuli/​stim-tone01_audio.json Describes the audio placeholder.
stimuli_basic/​stimuli/​stim-face01_image.json Describes the image placeholder.
stimuli_basic/​README.md Documents the minimal example.
stimuli_basic/​participants.tsv Lists the participant.
stimuli_basic/​dataset_description.json Defines dataset metadata.
README.md Lists the new examples.
dataset_listing.tsv Registers the three datasets.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@VisLab

VisLab commented Oct 6, 2026

Copy link
Copy Markdown
Member Author

This is failing because the dataset ieeg_filtered_speech has stuff under stimuli, but it doesn't have a stimuli/stimuli.tsv. It should not be validated by BEP044.

@yarikoptic

Copy link
Copy Markdown
Contributor

This is failing because the dataset ieeg_filtered_speech has stuff under stimuli, but it doesn't have a stimuli/stimuli.tsv. It should not be validated by BEP044.

so, is that a bug in bids-validator patch then or where? since failing only for dev-prs runs I think the underlying issue is then clearly in our "ballpark" and should be fixed either in examples, or validator, or schema PRs.

@VisLab

VisLab commented Oct 6, 2026

Copy link
Copy Markdown
Member Author

Yes, it is a simple fix in our bids-validator PR. I am waiting for @neuromechanist to add me to his fork and I'll push it.

The BEP044 draft now requires type, license, and present in stimuli.tsv.
Order the catalog columns by requirement level, describe license in
stimuli.json, and point the README at the current companion examples.

Tested: validates with zero errors using bids-validator PR 445 and the
spec PR 2022 schema.
The BEP044 draft dropped /stimuli subdirectories and scoped catalogs,
which this dataset existed to demonstrate.

Tested: README tables regenerated with tools/print_dataset_listing.py.
Two participants in a dyadic task, each with the partner's speech as a
sub-<label>_task-dyad_stim-partner_audio.wav stimulus that has no
counterpart in /stimuli, and a screen capture of a shared clip
(sub-01_task-watch_stim-clip01_video.mp4) whose sidecar points at the
presented file with Sources. Events reference both through stim_id.

Tested: validates with zero errors using bids-validator PR 445 and the
spec PR 2022 schema; README tables regenerated.
Mirror the spec example: required columns first (stimulus_id, type,
license, present), then copyright and description, then the optional
URL and partDescription.

Tested: validates with zero errors using bids-validator PR 445 and the
spec PR 2022 schema.
@neuromechanist

Copy link
Copy Markdown
Member

Updated to the current BEP044 draft in spec PR 2022, which dropped /stimuli subdirectories, made type, license, and present REQUIRED in stimuli.tsv, and added subject-specific stimulus files:

  • stimuli_basic: license and present columns added; catalog columns ordered by requirement level.
  • stimuli_hierarchical: removed. It demonstrated subdirectories and scoped catalogs, which the draft no longer has.
  • stimuli_subject (new): subject-specific stimuli. Two participants in a dyadic task each have the partner's speech as sub-<label>_task-dyad_stim-partner_audio.wav, with no /stimuli counterpart. sub-01 also has a screen capture of a shared clip, sub-01_task-watch_stim-clip01_video.mp4, whose sidecar points at the presented file with Sources.
  • stimuli_timevarying: catalog columns reordered to match the spec example.
  • dataset_listing.tsv and the README tables regenerated with tools/print_dataset_listing.py.

So the stimuli_hierarchical entry in the description above no longer applies.

Tested locally with bids-validator PR 445 (updated today) and the spec fork/master schema: all three BEP044 datasets give 0 errors. The ten existing datasets with a /stimuli directory also pass, including ieeg_filtered_speech with its legacy cm4_audio.wav; one unrelated MISSING_DATATYPE comes from the new upstream datatype-directory check on eeg_ds003645s_hed_demo.


Agentic AI tools were used. Workflows follow the Research Skills (doi:10.5281/zenodo.20696515). The author assumes full responsibility for this content and associated changes.

stimuli_subject uses subject-level stim-<label> files that only the
unmerged spec PR 2022 schema and validator PR 445 know, so released
validators report them as NOT_INCLUDED. Skip it in the stable, main, and
dev jobs and keep validating it in dev-prs, following the existing skip
steps used for earlier BEP examples.

Tested: the dataset validates with zero errors using bids-validator
PR 445 and the spec PR 2022 schema; CI's dev-prs jobs passed on the
previous push.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants