-
Notifications
You must be signed in to change notification settings - Fork 203
[ENH] BEP044 - Stim-BIDS #2022
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
[ENH] BEP044 - Stim-BIDS #2022
Changes from all commits
95ebf75
91df78b
0167a41
3c2357b
b7b19df
aa570ac
162cd1c
1ef76bc
e84cac4
1dd9083
50ad1dd
77f33b0
4978552
80d3077
a335ebf
f370c95
330b69f
ad24800
a5acd54
238e645
074f5fb
f197bba
02c6f31
3ae9fe1
e849646
2793d75
2e7ab2a
284dc7f
f48e63f
4f1a0b3
db7994b
64ce56b
e7c0739
c8ffa63
8178a3f
eafdac9
4538a45
28d41ba
6f0d5d5
9d4225b
74d1596
8616e04
d6832b2
50437b4
a4b20ad
567148e
f409097
a064d83
ba5b89f
cd53cd9
451464f
178ea4e
4e1fa62
696ca1d
e708940
c701dd2
0d45332
088240f
9225f0b
39f987e
237c466
2ca32b2
5130af9
32c1ad4
83f620d
a5a13e6
a1698d1
95c76f3
b067f3a
c442a51
164b908
fc6cff9
ad1ebf3
a048b44
f56816c
016ddb9
0ee8522
1b5e43b
239b67f
48f763a
4a440e6
7155ee4
5725810
c77b7cb
15a1cf0
bede400
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -163,3 +163,8 @@ dmypy.json | |
| cython_debug/ | ||
|
|
||
| .*.swp | ||
|
|
||
| # Claude specific files | ||
| CLAUDE.md | ||
| .rules/ | ||
| .context/ | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,160 @@ | ||
| # Stimuli | ||
|
|
||
| ## Stimulus Files Organization | ||
|
|
||
| Stimulus files MUST be stored in the `/stimuli` directory under the root directory of the dataset. | ||
| The `/stimuli` directory can contain subdirectories to organize the stimulus files. | ||
| Stimulus files MUST follow the BIDS naming conventions and are referenced in the `events.tsv` | ||
| file using the `stim_id` column. | ||
|
|
||
| The standardization of stimulus files and their annotations within BIDS offers several key benefits: | ||
|
|
||
| 1. **Consistency**: Ensures uniform storage and referencing across datasets | ||
| 1. **Reusability**: Enables stimulus reuse across studies through standardized structure | ||
| 1. **Efficiency**: Minimizes redundancy by centralizing annotations | ||
| 1. **Flexibility**: Facilitates dataset reuse with alternative annotations | ||
|
|
||
| To preserve backward compatibility with existing datasets (see the Legacy section below), the use of these specifications for the `/stimuli` directory and the `stim_id` column in the `events.tsv` files is RECOMMENDED but not required. Researchers are encouraged to follow these guidelines to enhance the interoperability and reproducibility of their studies. | ||
|
|
||
| Following these guidelines will help ensure that stimulus files and their annotations are stored and referenced consistently across different datasets, facilitating data sharing, reuse, and reproducibility. | ||
|
|
||
| ## File Organization | ||
|
|
||
| <!-- | ||
| This block generates a filename templates for root-level directories. | ||
| The inputs for this macro can be found in the directory | ||
| src/schema/rules/files/raw | ||
| and a guide for using macros can be found at | ||
| https://github.com/bids-standard/bids-specification/blob/master/macros_doc.md | ||
| --> | ||
| {{ MACROS___make_root_filename_template( | ||
| "raw", | ||
| path="stimuli") | ||
| }} | ||
|
|
||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. also note that there is no |
||
| Note: The presence of the `stimuli.tsv` file indicates that the content of the `/stimuli` directory follows this BIDS specification for stimulus organization. | ||
|
|
||
| ### Stimulus File Formats | ||
|
|
||
| The following table lists the supported stimulus file formats and their corresponding suffixes. The suffixes are used to identify the type of stimulus file and are appended to the `stim-<label>` prefix in the file name. | ||
|
|
||
| | suffix | extensions | description | | ||
| | ----------- | ------------------------------- | ---------------------------- | | ||
| | audio | `.wav`, `.mp3`, `.aac`, `.ogg` | Audio-only stimulus files | | ||
| | image | `.jpg`, `.png`, `.svg`, `.webp` | Static visual stimulus files | | ||
| | video | `.mp4`, `.avi`, `.mkv`, `.webm` | Video-only stimulus files | | ||
| | audiovideo | `.mp4`, `.avi`, `.mkv`, `.webm` | Combined audio-visual files | | ||
|
|
||
| ## Stimulus description (`stim-<label>_<suffix>.json`) | ||
|
|
||
| The `stim-<label>_<suffix>.json` file provides metadata about the _singular_ stimulus file. | ||
| The following fields are defined to describe the stimulus file: | ||
|
|
||
| <!-- This block generates a metadata table. | ||
| These tables are defined in | ||
| src/schema/rules/sidecars | ||
| The definitions of the fields specified in these tables may be found in | ||
| src/schema/objects/metadata.yaml | ||
| A guide for using macros can be found at | ||
| https://github.com/bids-standard/bids-specification/blob/master/macros_doc.md | ||
| --> | ||
| {{ MACROS___make_sidecar_table("stimuli.Stimuli") }} | ||
|
|
||
| In some cases, such as observing the copyright of a stimulus file, the actual stimulus file may not be shared. In such cases, the `stim-<label>_<suffix>.json` file SHOULD be used to provide metadata about the stimulus file, including the license, copyright, URL, and description. | ||
|
|
||
| ### Example `stim-<label>_<suffix>.json` | ||
|
|
||
| ```JSON | ||
| { | ||
| "License": "CC-BY-4.0", | ||
| "Copyright": "2023 Lab Name lab@university.edu", | ||
| "URL": "https://example.com/stimuli/", | ||
| "Description": "Collection of face images, tones, and movie clips used in the experiment" | ||
| } | ||
| ``` | ||
|
|
||
| The `License` field SHOULD provide the known identifiers, such as `PDL`, `CC0`, `CC-BY` from the [BIDS Licensees Appendix](https://bids-specification.readthedocs.io/en/stable/appendices/licenses.html), or common license lists such as [SPDX](https://spdx.org/licenses/) or [Creative Commons](https://creativecommons.org/licenses/). | ||
| The `Copyright` filed SHOULD provide the year, copyright holder's name, and if available, the email address of the copyright holder. | ||
| If the stimulus file is not shared, the `URL` field SHOULD provide a link to the stimulus file. | ||
|
|
||
| ## Stimuli Description (`stimuli.tsv`) | ||
|
|
||
| The `stimuli.tsv` files are used to provide information about the stimuli based on their `stim_id`. This file is similar in usage as `participants.tsv`, `scans.tsv` and `sessions.tsv`, which list descriptions about subjects, scans and sessions, respectively. The `stimuli.tsv` files MUST be placed in the `/stimuli` directory. | ||
|
|
||
| The `stimuli.tsv` file contains information about each stimulus, including stimulus ID, type, URL, and other relevant details. The following table describes the REQUIRED, RECOMMENDED, and OPTIONAL columns for the `stimuli.tsv` file: | ||
|
|
||
| <!-- This block generates a columns table. | ||
| The definitions of these fields can be found in | ||
| src/schema/rules/tabular_data/*.yaml | ||
| and a guide for using macros can be found at | ||
| https://github.com/bids-standard/bids-specification/blob/master/macros_doc.md | ||
| --> | ||
| {{ MACROS___make_columns_table("stimuli.Stimuli") }} | ||
|
|
||
| ### Example `stimuli.tsv` | ||
|
|
||
| ```Text | ||
| stimulus_id type URL license copyright description present | ||
| stim-face01 image https://example.com/faces/face01.jpg CC-BY-4.0 Lab 2023 A female face with neutral expression true | ||
| stim-tone01 audio https://example.com/tones/tone01.wav CC-BY-4.0 Lab 2023 A 440Hz pure tone true | ||
| stim-movie01 video https://example.com/movies/movie01.mp4 n/a Studio XYZ A clip from copyrighted movie false | ||
| ``` | ||
|
|
||
| The `stimuli.json` file provides detailed descriptions of the columns in the `stimuli.tsv` file. There MAY be extra entries in the `stimuli.json` in addition to the columns in the `stimuli.tsv` to provide more details about the stimulus. | ||
|
|
||
| In cases where the stimulus is not shared, the `stimuli.tsv` file can be used to provide metadata about the stimuli, including the license, copyright, URL, and description. This is similar to the use of `stim-<label>_<suffix>.json` files for individual stimuli files. In the case of conflict between the metadata in the `stimuli.tsv` and `stim-<label>_<suffix>.json` files, the metadata in the `stim-<label>_<suffix>.json` file takes precedence. | ||
|
|
||
| ## Stimulus Annotations | ||
|
|
||
| Annotations of the still images or general description of the stimuli (such as frequency and duration of a beep sound) can be stored in the `stimuli.tsv` as an additional column or `stim-<label>_<suffix>.json` as described above. Here is an example of how annotations can be stored in the `stimuli.tsv` file for an image from the Natural Scene Dataset (NSD): | ||
|
|
||
| | stimulus_id | type | description | HED | NSD_id | COCO_id | | ||
| | ------------- | ----- | ----------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | ------- | | ||
| | stim-nsd02951 | image | an open market full of people and piles of vegetables | ((Item-count, High), Ingestible-object), (Background-view, ((Human, Body, Agent-trait/Adult), Outdoors, Furnishing, Natural-feature/Sky, Urban, Man-made-object)) | 2951 | 262145 | | ||
|
|
||
| However, for time-varying stimuli, such as audio or video, it is RECOMMENDED to use specific annotations files in the form of `stim-<label>_annot-<label>_events.tsv` to store the annotations. These files have the same structure as the `events.tsv` files and are used to store annotations for the stimuli. There can be multiple annotation files for a single stimulus file, each with a unique annotation label. The annotation files MUST be stored in the `/stimuli` directory. | ||
|
|
||
| ## Annotation Description (`annotations.tsv`) | ||
|
|
||
| The `annotations.tsv` file contains additional metadata about stimulus annotations. There MAY be a single `annotations.tsv` file for all the stimuli or separate `stim-<label>_annotations.tsv` files for each stimulus. | ||
| The following columns are defined for the `annotations.tsv` file: | ||
|
|
||
| <!-- This block generates a columns table. | ||
| The definitions of these fields can be found in | ||
| src/schema/rules/tabular_data/*.yaml | ||
| and a guide for using macros can be found at | ||
| https://github.com/bids-standard/bids-specification/blob/master/macros_doc.md | ||
| --> | ||
| {{ MACROS___make_columns_table("stimuli.Annotations") }} | ||
|
|
||
| ### Example `*_annotations.tsv` | ||
|
|
||
| ```Text | ||
| annot_id description | ||
| face01_emo Emotion annotation for face01 stimulus | ||
| face01_gen Gender annotation for face01 stimulus | ||
| face01_age Age group annotation for face01 stimulus | ||
| ``` | ||
|
|
||
| ## Referencing Stimulus Identifiers in `events.tsv` | ||
|
|
||
| To reference stimulus identifiers in the `events.tsv` file, use the `stim_id` column. The values in the `stim_id` column should represent unique identifiers for the stimuli. Stimulus ID (`stim_id`) should correspond to the unique identifier of the stimulus file in the /stimuli directory and expand to all files (both stimulus and annotation files) that share the same stimulus ID. | ||
|
|
||
| Example `events.tsv` file: | ||
|
|
||
| | onset | duration | trial_type | response_time | stim_id | | ||
| | ----- | -------- | ---------- | ------------- | -------------- | | ||
| | 1.23 | 0.65 | start | 1.435 | `stim-<label>` | | ||
| | 5.65 | 0.65 | stop | 1.739 | `stim-<label>` | | ||
| | 12.1 | 2.35 | n/a | n/a | `stim-<label>` | | ||
|
|
||
| In the accompanying JSON sidecar, the `stim_id` column might be described as follows: | ||
|
|
||
| ```JSON | ||
| { | ||
| "stim_id": { | ||
| "LongName": "Stimulus identifier", | ||
| "Description": "Represents a unique identifier for the stimulus presented at the given onset time." | ||
| } | ||
| } | ||
| ``` | ||

There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@neuromechanist I do not want to derail this BEP, but it might as well be included here (or later).
I would like your feedback on our
use case, where we will have a distinct video record for every MRI data file in the dataset (thus per subject/[session/]). I envisioned placing them nearby the data files:
and that is reflective somehow of @bendichter 's
where it is a audiovideo record of behavior, instead of audiovideo record of stimuli.
One logical way could be to allow for
stimuli/sub-<label>/[ses-<label>/]...hierarchy but that feels suboptimal since if unique per sub/ses -- better just go nearby the data.I would say, we (with @vmdocua) would just add
stim-entity to the file, associated with the data file, so e.g. for every_events.tsvlevel file it would produce the one with extra_stim-reprostim_audiovideo.{mkv,json}.So in the long run, I would need to advocate allowing for such files in the hierarchy, and that will use
stimentity then, withstimuli.tsvon top level providing description for what thatreprostimmeans.