[ENH] Add phenotype and rawbids directories to "study" datasets#2191
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #2191 +/- ##
=======================================
Coverage 83.07% 83.07%
=======================================
Files 22 22
Lines 1696 1696
=======================================
Hits 1409 1409
Misses 287 287 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
DatasetType
|
This makes a lot of sense to me, and would help everyone to more straightforwardly differentiate source-data and raw-bids much more easily. |
|
This solution feels much clearer, I think it's a good idea ! |
effigies
left a comment
There was a problem hiding this comment.
Two notes on the schema. I don't have a strong opinion about bids-raw/, except to note that this will be the first use of a hyphen that doesn't separate key-value entities. If you want to be consistent with older versions of the spec, you could call it rawdata/. Many people seemed to think that was supposed to be valid...
| phenotype: | ||
| name: phenotype | ||
| level: optional | ||
| opaque: false |
There was a problem hiding this comment.
This was removed after this discussion: #2185 (comment)
I didn't see a justification for re-adding it, so I want to make sure this isn't slipped in with little consideration.
There was a problem hiding this comment.
Yes, should have explained this addition based on offline conversations.
The reason for removing phenotype directory was that it would presumably appear in the raw dataset. But isn't that true for derivatives directory as well? It's a bit confusing having derivatives part of all three DatasetTypes but enforcing phenotype only be part of raw or derivative. In practice, phenotype data curation is likely to be more independent than that of derivatives, which is one of the reasons we prefer it to be at the top level.
There was a problem hiding this comment.
Sorry for the long silence.
The reason for removing
phenotypedirectory was that it would presumably appear in the raw dataset. But isn't that true forderivativesdirectory as well? It's a bit confusing havingderivativespart of all threeDatasetTypes but enforcingphenotypeonly be part ofraworderivative. In practice,phenotypedata curation is likely to be more independent than that ofderivatives, which is one of the reasons we prefer it to be at the top level.
So the logic in derivatives is that any raw dataset is a valid derivative dataset, so you cannot restrict, you can only expand. Furthermore, you can have derivatives of derivatives, so nesting is entirely reasonable. I suppose you could preprocess phenotypic data and include it in a derivative, so it might even make sense.
IMO, if phenotypic data is worth including in the study, it's worth including in the raw data, regardless of the independence of curation. I still don't see the use case for phenotype at the study level.
That said, I won't block this.
|
@effigies - Thanks for the feedback and patiently dealing with these multiple intertwined open issues and hurried PR from my side - a result of mixed-up online and offline conversations. Will respond individually to the inline comments. |
There was a problem hiding this comment.
A few thoughts:
-
I think we need to be more clear about what
bids-studyis. If I was a naive user, I would thinkbids-studyis a layout for organizing my study in "the bids way". Meaning that as soon as I move from unorganizedsourcedatato some sort of organized data, it should be BIDS compliant. Thus, I do not need a bids prefix forraworderivativessince my assumption is "everything BIDS". If we want to expand bids-study to allow it to be consumed by other schemas or standards (e.g., Nipoppy), I think we can find a different way than the folder-naming to make them compatible and validate. E.g., adding expanded validation rules in the sense of „if type bids-study is used, everything that BIDS has a spec on (raw, derivatives, phenotype etc.) needs to be in BIDS standard“ or „„if type bids-study is used, at least X% of data needs to be BIDS“ or add an output-validator file that lists which of the data was validated by BIDS. (idk if any of those suggestions make sense, it’s just wild ideas :-D) -
It is true that
phenotypeis supposed to be on the level of therawdata. However, the<measurement_tool_name>.tsv/.jsonare connected to the (recommended)sessions.tsv/.jsonfile which should be kept at the root level. Thus, it would be more convenient to not have too deep nesting ofphenotype. Also, as measurement data can also evolve from source to raw, the<measurement_tool_name>.tsv/.jsonmight contain information for both types. -
in offline conversation we also had the discussion about making
bids-studynot aDatasetTypebut aStudyType. Reasoning for that would be to have a clear specification forStudyType, maybe the validation would be wasier than changing the nesting logic of existing DatasetTypes and it is expandable to e.g. Meta or Mega Analysis etc. Wdyt?
|
re-posting my comment from bids-specification/bids-website#688 here again since it was misplaced in that PR:
|
|
There is a lot to discuss and unpack. And I do like the clarity of
My point, is that ATM Going back to items
|
|
For the sake of moving forward with this PR, let’s only review and approve/disapprove of the changes made by @nikhil153 and move this bigger discussion to a dedicated meeting (maybe at distribits?). Wdyt @yarikoptic and @effigies, could you do a final review on Nikhil's changes? Still, I'll post my answers here, to use this PR as the starting point for following discussions (and that I don't forget what I wanted to say...):
Your other questions:
This I addressed in my reply to 1.
This is a point where you and I (and probably BIDS and I) don’t use the same meaning for sourcedata.
For me it does not make a difference if this dataset was used as an input, it is NOT sourcedata if it is in the raw or derivatives form. Whereas you use sourcedata for anything that was an input for something, no matter of its form. So, for me, the answers would be:
We do have the |
|
2cents : the very flexible specification comes at the cost of loss of useful information in the standard, I would certainly make "raw"/"rawbids" the only (first?) place to search for a BIDS validated dataset, that would be useful for the tools and mental clarity : source data == not BIDS, raw/rawbids == BIDS |
|
I like the idea, obviously, but I wonder how this conflicts with the existing structure —i.e., how the validator behaves and whether 'we' want to differentiate cases. Concretely, vs
|
|
@yarikoptic @effigies how is it going with this PR? |
|
Regarding I also have a pair of questions:
The simple answers: 1) The contents are arbitrary (at least as far as this PR is concerned); 2) No (at least as far as this PR is concerned). You could go a bit further and say that I realize these aren't problems Nikhil is introducing, but up to now, there has been a validator behavior for |
|
@effigies, Re: questions, my view would be: I think allowing multiple raw datasets would create several complications that are better discussed at a later time - possibly under BIDS-MEGA BEP / BIDS2.0? |
|
@bids-maintenance please look at this PR and discussion and comment your thoughts! Thank you <3 |
There was a problem hiding this comment.
Late to the party, the change LGTM since:
Common Principles document defines source vs. raw vs. derivative data. Having raw directory (as raw, bidsraw, or rawdata) provides parity.
However, as a result the text under Study Dataset needs to be revised as well to match the suggested structure here.
| phenotype: | ||
| name: phenotype | ||
| level: optional | ||
| opaque: false |
There was a problem hiding this comment.
Sorry for the long silence.
The reason for removing
phenotypedirectory was that it would presumably appear in the raw dataset. But isn't that true forderivativesdirectory as well? It's a bit confusing havingderivativespart of all threeDatasetTypes but enforcingphenotypeonly be part ofraworderivative. In practice,phenotypedata curation is likely to be more independent than that ofderivatives, which is one of the reasons we prefer it to be at the top level.
So the logic in derivatives is that any raw dataset is a valid derivative dataset, so you cannot restrict, you can only expand. Furthermore, you can have derivatives of derivatives, so nesting is entirely reasonable. I suppose you could preprocess phenotypic data and include it in a derivative, so it might even make sense.
IMO, if phenotypic data is worth including in the study, it's worth including in the raw data, regardless of the independence of curation. I still don't see the use case for phenotype at the study level.
That said, I won't block this.
… description in the common principles
for more information, see https://pre-commit.ci
|
@effigies do you approve? @bids-maintenance could someone else take another look, since we need 2 approvals |
for more information, see https://pre-commit.ci
|
If the point of the Then, the parent dataset could be understood to have been constructed from any number of child datasets (raw or derivative) and further outputs from that parent dataset go in into I don't believe we ever define dataset in the spec, but maybe this is an opportunity to do so and have a flexible layout? |
|
Given that the latest response was to the In February, we had an offline conversation that led to changing the proposal to
Because "raw BIDS" is a phrase that appears in Common principles and BIDS Derivatives,
Finally, for the sake of consistency, Hopefully others will add to this if I have missed something. |
yarikoptic
left a comment
There was a problem hiding this comment.
LGTM.
Thanks all the sharing pain and joy!
|
@effigies - thanks for the apt summary! @effigies, @yarikoptic and other @bids-maintenance - greatly appreciate your efforts, patient explanations, and interesting conversations on the messy business of maintaining standards! @michellewang, @mathdugre, @julia-pfarr, @nburgos, @AliceJoubert, @Adam-Ismaili-92, @surchs, @jbpoline - thanks for your feedback in shaping and fine-tuning this PR. We look forward to the convergence of nipoppy and BIDS-Study that would grow the community adoption further! |
`BIDSContextDataset.opaqueDirectories` was computed only from `rules.directories.raw`, so opaque directories declared only at the study level (e.g. `rawbids/` in recent schemas — see bids-standard/bids-specification#2191) were not marked opaque. The walker would then descend into them and raise `NOT_INCLUDED` for their contents. Now compute the set from both `rules.directories.raw` and `rules.directories.study`, so any directory marked `opaque: true` in either section is honored regardless of the dataset's `DatasetType`. For a study dataset containing `rawbids/`, this is sufficient: the existing `findDirRuleMatches` path with `datasetType = "study"` already matches `rawbids` by name, avoiding `NOT_INCLUDED` on the pseudo-file itself. Co-Authored-By: Claude Code 2.1.116 / Claude Opus 4.7 (1M context) <noreply@anthropic.com>
`BIDSContextDataset.opaqueDirectories` was hardcoded to `rules.directories.raw`, regardless of the dataset's `DatasetType`. This had two consequences: - Derivative datasets did not recognize derivative-only opaque directories (e.g. `template`, `cohort`). - Study datasets did not recognize study-only opaque directories (e.g. `rawbids/` added in bids-standard/bids-specification#2191), so the walker descended into them and raised `NOT_INCLUDED` on their contents. Switch to `rules.directories[DatasetType]` so each dataset uses the rules for its own type. `DatasetType` is only populated after the constructor runs (the caller assigns it from the loaded `dataset_description.json` afterward), so move the computation into a helper that is invoked from both the constructor and the `dataset_description` setter, keeping the set in sync. Co-Authored-By: Claude Code 2.1.116 / Claude Opus 4.7 (1M context) <noreply@anthropic.com>
`BIDSContextDataset.opaqueDirectories` was hardcoded to `rules.directories.raw`, regardless of the dataset's `DatasetType`. This had two consequences: - Derivative datasets did not recognize derivative-only opaque directories (e.g. `template`, `cohort`). - Study datasets did not recognize study-only opaque directories (e.g. `rawbids/` added in bids-standard/bids-specification#2191), so the walker descended into them and raised `NOT_INCLUDED` on their contents. Switch to `rules.directories[DatasetType]` so each dataset uses the rules for its own type. `DatasetType` is only populated after the constructor runs (the caller assigns it from the loaded `dataset_description.json` afterward), so move the computation into a helper that is invoked from both the constructor and the `dataset_description` setter, keeping the set in sync. Co-Authored-By: Claude Code 2.1.116 / Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Recursive validation (`-r`) previously recognized only datasets under `derivatives/<name>/`. Nested BIDS datasets placed under `rawbids/` (new study-level container, bids-standard/bids-specification#2191) or `sourcedata/` (historically used for `sourcedata/raw/` or OpenNeuro-style `sourcedata/ds00003/`) were silently ignored, so internal bugs in those subdatasets never surfaced. Generalize the detection: - For each of `derivatives/`, `rawbids/`, `sourcedata/`, check both forms: - Immediate: the container itself contains `dataset_description.json` (single nested dataset, e.g. `rawbids/dataset_description.json`). - Subfolder: one or more immediate children contain `dataset_description.json` (e.g. `derivatives/fmriprep/`, `sourcedata/ds00003/`). - Rename the local collection to `bidsNestedDatasets` / `nestedDatasetsSummary`; keep the public `derivativesSummary` field for API stability but widen its documented semantics. - Update the text output label "Derivative:" -> "Nested dataset:". Co-Authored-By: Claude Code 2.1.116 / Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Recursive validation (`-r`) previously recognized only datasets under `derivatives/<name>/`. Nested BIDS datasets placed under `rawbids/` (new study-level container, bids-standard/bids-specification#2191) or `sourcedata/` (historically used for `sourcedata/raw/` or OpenNeuro-style `sourcedata/ds00003/`) were silently ignored, so internal bugs in those subdatasets never surfaced. Generalize the detection: - For each of `derivatives/`, `rawbids/`, `sourcedata/`, check both forms: - Immediate: the container itself contains `dataset_description.json` (single nested dataset, e.g. `rawbids/dataset_description.json`). - Subfolder: one or more immediate children contain `dataset_description.json` (e.g. `derivatives/fmriprep/`, `sourcedata/ds00003/`). - Rename the local collection to `bidsNestedDatasets` / `nestedDatasetsSummary`; keep the public `derivativesSummary` field for API stability but widen its documented semantics. - Update the text output label "Derivative:" -> "Nested dataset:". Co-Authored-By: Claude Code 2.1.116 / Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…2409) PR #2191 added rawbids/ to the study DatasetType but not to derivative, even though the same convention -- "rawbids/ holds the raw BIDS dataset" -- is equally applicable when a standalone derivative dataset includes its raw source. - Add rawbids as an optional opaque subdirectory of the derivative DatasetType in src/schema/rules/directories.yaml. - Update the derivative example in common-principles.md to use rawbids/ instead of sourcedata/raw/. - Clarify that rawbids/ is reserved for raw BIDS datasets in both study and derivative cases, and that derivatives of derivatives MUST place their source derivative under sourcedata/ (not rawbids/). Co-authored-by: Claude Code 2.1.116 / Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Recursive validation (`-r`) previously recognized only datasets under `derivatives/<name>/`. Nested BIDS datasets placed under `rawbids/` (new study-level container, bids-standard/bids-specification#2191) or `sourcedata/` (historically used for `sourcedata/raw/` or OpenNeuro-style `sourcedata/ds00003/`) were silently ignored, so internal bugs in those subdatasets never surfaced. Generalize the detection: - For each of `derivatives/`, `rawbids/`, `sourcedata/`, check both forms: - Immediate: the container itself contains `dataset_description.json` (single nested dataset, e.g. `rawbids/dataset_description.json`). - Subfolder: one or more immediate children contain `dataset_description.json` (e.g. `derivatives/fmriprep/`, `sourcedata/ds00003/`). - Rename the local collection to `bidsNestedDatasets` / `nestedDatasetsSummary`; keep the public `derivativesSummary` field for API stability but widen its documented semantics. - Update the text output label "Derivative:" -> "Nested dataset:". Co-Authored-By: Claude Code 2.1.116 / Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* fix(bst): Address deprecation warnings (bids-standard#2361) * chore: Set minimum dependencies, use dependency groups * chore: Add tox.ini to run test suite * chore(ci): Use tox to run bidsschematools CI * chore: Update pre-commit excludes * chore(tox): Enable -Werror to catch incoming warnings * fix: Address pyparsing deprecation warning * fix: Only opt in ot pandas 3.0 behaviors if pandas is not 3+ * chore(dependabot): Update uv.locks quarterly * chore(dependabot): Drop update frequencies to quarterly * chore(ci): Use FORCE_COLOR, limit token permissions * chore: Drop Python 3.9 support, test on 3.14 * chore: Add uv.lock for package, update base lock * chore: Bump schema package to 1.2.2 * chore: Bump schema package to 1.2.3-dev * fix(ci): Call pre-build script correctly * [DATALAD RUNCMD] bash -c 'uv lock && (cd tools/schemacode... === Do not change lines below === { "chain": [], "cmd": "bash -c 'uv lock && (cd tools/schemacode; uv lock)'", "exit": 0, "extra_inputs": [], "inputs": [], "outputs": [], "pwd": "." } ^^^ Do not change lines above ^^^ * fix: Bad merge * chore(deps): bump the build-dependencies group across 1 directory with 5 updates (bids-standard#2370) Bumps the build-dependencies group with 5 updates in the / directory: | Package | From | To | | --- | --- | --- | | [mkdocs-material](https://github.com/squidfunk/mkdocs-material) | `9.7.1` | `9.7.4` | | [pymdown-extensions](https://github.com/facelessuser/pymdown-extensions) | `10.20` | `10.21` | | [numpy](https://github.com/numpy/numpy) | `2.4.1` | `2.4.3` | | [myst-nb](https://github.com/executablebooks/myst-nb) | `1.3.0` | `1.4.0` | | [universal-pathlib](https://github.com/fsspec/universal_pathlib) | `0.3.8` | `0.3.10` | Updates `mkdocs-material` from 9.7.1 to 9.7.4 - [Release notes](https://github.com/squidfunk/mkdocs-material/releases) - [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG) - [Commits](squidfunk/mkdocs-material@9.7.1...9.7.4) Updates `pymdown-extensions` from 10.20 to 10.21 - [Release notes](https://github.com/facelessuser/pymdown-extensions/releases) - [Commits](facelessuser/pymdown-extensions@10.20...10.21) Updates `numpy` from 2.4.1 to 2.4.3 - [Release notes](https://github.com/numpy/numpy/releases) - [Changelog](https://github.com/numpy/numpy/blob/main/doc/RELEASE_WALKTHROUGH.rst) - [Commits](numpy/numpy@v2.4.1...v2.4.3) Updates `myst-nb` from 1.3.0 to 1.4.0 - [Release notes](https://github.com/executablebooks/myst-nb/releases) - [Changelog](https://github.com/executablebooks/MyST-NB/blob/main/CHANGELOG.md) - [Commits](executablebooks/MyST-NB@v1.3.0...v1.4.0) Updates `universal-pathlib` from 0.3.8 to 0.3.10 - [Release notes](https://github.com/fsspec/universal_pathlib/releases) - [Changelog](https://github.com/fsspec/universal_pathlib/blob/main/CHANGELOG.md) - [Commits](fsspec/universal_pathlib@v0.3.8...v0.3.10) --- updated-dependencies: - dependency-name: mkdocs-material dependency-version: 9.7.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: build-dependencies - dependency-name: pymdown-extensions dependency-version: '10.21' dependency-type: direct:production update-type: version-update:semver-minor dependency-group: build-dependencies - dependency-name: numpy dependency-version: 2.4.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: build-dependencies - dependency-name: myst-nb dependency-version: 1.4.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: build-dependencies - dependency-name: universal-pathlib dependency-version: 0.3.10 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: build-dependencies ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump tornado from 6.5.2 to 6.5.5 (bids-standard#2360) Bumps [tornado](https://github.com/tornadoweb/tornado) from 6.5.2 to 6.5.5. - [Changelog](https://github.com/tornadoweb/tornado/blob/master/docs/releases.rst) - [Commits](tornadoweb/tornado@v6.5.2...v6.5.5) --- updated-dependencies: - dependency-name: tornado dependency-version: 6.5.5 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump minimatch from 9.0.5 to 9.0.9 (bids-standard#2355) Bumps [minimatch](https://github.com/isaacs/minimatch) from 9.0.5 to 9.0.9. - [Changelog](https://github.com/isaacs/minimatch/blob/main/changelog.md) - [Commits](isaacs/minimatch@v9.0.5...v9.0.9) --- updated-dependencies: - dependency-name: minimatch dependency-version: 9.0.9 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump actions/upload-artifact (bids-standard#2369) Bumps the actions-infrastructure group with 1 update: [actions/upload-artifact](https://github.com/actions/upload-artifact). Updates `actions/upload-artifact` from 6 to 7 - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](actions/upload-artifact@v6...v7) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major dependency-group: actions-infrastructure ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump prettier in the node-utilities group (bids-standard#2352) Bumps the node-utilities group with 1 update: [prettier](https://github.com/prettier/prettier). Updates `prettier` from 3.8.0 to 3.8.1 - [Release notes](https://github.com/prettier/prettier/releases) - [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md) - [Commits](prettier/prettier@3.8.0...3.8.1) --- updated-dependencies: - dependency-name: prettier dependency-version: 3.8.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: node-utilities ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump picomatch from 2.3.1 to 2.3.2 Bumps [picomatch](https://github.com/micromatch/picomatch) from 2.3.1 to 2.3.2. - [Release notes](https://github.com/micromatch/picomatch/releases) - [Changelog](https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md) - [Commits](micromatch/picomatch@2.3.1...2.3.2) --- updated-dependencies: - dependency-name: picomatch dependency-version: 2.3.2 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> * chore(deps): bump requests from 2.32.5 to 2.33.0 in /tools/schemacode Bumps [requests](https://github.com/psf/requests) from 2.32.5 to 2.33.0. - [Release notes](https://github.com/psf/requests/releases) - [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md) - [Commits](psf/requests@v2.32.5...v2.33.0) --- updated-dependencies: - dependency-name: requests dependency-version: 2.33.0 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> * Fix BIDS Starter Kit link in src/index.md (bids-standard#2374) Updated link for the BIDS Starter Kit to the correct URL. * chore(deps): bump yaml from 2.8.1 to 2.8.3 Bumps [yaml](https://github.com/eemeli/yaml) from 2.8.1 to 2.8.3. - [Release notes](https://github.com/eemeli/yaml/releases) - [Commits](eemeli/yaml@v2.8.1...v2.8.3) --- updated-dependencies: - dependency-name: yaml dependency-version: 2.8.3 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> * chore(deps): bump brace-expansion from 2.0.2 to 2.0.3 Bumps [brace-expansion](https://github.com/juliangruber/brace-expansion) from 2.0.2 to 2.0.3. - [Release notes](https://github.com/juliangruber/brace-expansion/releases) - [Commits](juliangruber/brace-expansion@v2.0.2...v2.0.3) --- updated-dependencies: - dependency-name: brace-expansion dependency-version: 2.0.3 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> * chore(deps): bump pygments from 2.19.2 to 2.20.0 Bumps [pygments](https://github.com/pygments/pygments) from 2.19.2 to 2.20.0. - [Release notes](https://github.com/pygments/pygments/releases) - [Changelog](https://github.com/pygments/pygments/blob/master/CHANGES) - [Commits](pygments/pygments@2.19.2...2.20.0) --- updated-dependencies: - dependency-name: pygments dependency-version: 2.20.0 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> * chore(deps): bump pygments from 2.19.2 to 2.20.0 in /tools/schemacode Bumps [pygments](https://github.com/pygments/pygments) from 2.19.2 to 2.20.0. - [Release notes](https://github.com/pygments/pygments/releases) - [Changelog](https://github.com/pygments/pygments/blob/master/CHANGES) - [Commits](pygments/pygments@2.19.2...2.20.0) --- updated-dependencies: - dependency-name: pygments dependency-version: 2.20.0 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> * chore(deps): bump actions/download-artifact Bumps the actions-infrastructure group with 1 update: [actions/download-artifact](https://github.com/actions/download-artifact). Updates `actions/download-artifact` from 7 to 8 - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](actions/download-artifact@v7...v8) --- updated-dependencies: - dependency-name: actions/download-artifact dependency-version: '8' dependency-type: direct:production update-type: version-update:semver-major dependency-group: actions-infrastructure ... Signed-off-by: dependabot[bot] <support@github.com> * chore(deps): bump aiohttp from 3.13.3 to 3.13.4 --- updated-dependencies: - dependency-name: aiohttp dependency-version: 3.13.4 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> * chore(deps): bump lodash from 4.17.23 to 4.18.1 Bumps [lodash](https://github.com/lodash/lodash) from 4.17.23 to 4.18.1. - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](lodash/lodash@4.17.23...4.18.1) --- updated-dependencies: - dependency-name: lodash dependency-version: 4.18.1 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> * chore(tox): Fix environment to avoid pre-release tests (bids-standard#2391) * [pre-commit.ci] pre-commit autoupdate (bids-standard#2381) updates: - [github.com/python-jsonschema/check-jsonschema: 0.37.0 → 0.37.1](python-jsonschema/check-jsonschema@0.37.0...0.37.1) - [github.com/codespell-project/codespell: v2.4.1 → v2.4.2](codespell-project/codespell@v2.4.1...v2.4.2) - [github.com/pre-commit/mirrors-mypy: v1.19.1 → v1.20.0](pre-commit/mirrors-mypy@v1.19.1...v1.20.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * [ENH] Link to example datasets page on the website (bids-standard#2364) * [FIX] Accept MiscChannelCount in EEG/Motion sidecars; deprecate MISCChannelCount alias (bids-standard#2394) * schema: accept MiscChannelCount in EEG sidecar; deprecate MISCChannelCount alias The Recommended-fields rule for EEG sidecars uses MISCChannelCount, but the validator check rule (MiscChannelCountReq), the spec example in electroencephalography.md, the MEG and iEEG sidecar rules, and the legacy validator's JSON schema all use MiscChannelCount. Datasets in the wild already exist with both spellings. Make MiscChannelCount the canonical recommended key (matching the rest of the schema and the docs example) while keeping MISCChannelCount as a deprecated alias so existing datasets continue to validate. Closes bids-standard#2393. * schema: apply MISCChannelCount deprecation to motion sidecar and glossary Addresses review feedback on bids-standard#2394: - Apply the same MiscChannelCount (recommended) + MISCChannelCount (deprecated) pattern to the motion sidecar rule, matching the EEG sidecar change. - Simplify the EEG sidecar entry to the concise `deprecated` level (no per-rule addendum) now that the deprecation note lives with the field definition. - Document the deprecation in the MISCChannelCount description in objects/metadata.yaml, so the glossary entry surfaces the canonical replacement wherever the field is referenced. * Fix typos (bids-standard#2399) * [FIX] Update OSIPI Task force link for ASL lexicon (bids-standard#2396) * [ENH] Add phenotype and rawbids directories to "study" datasets (bids-standard#2191) * Suggested modifications to directory layout of the bids-study DatasetType * fixed minor typos * removed bids prefix from the DatasetType and subdirs. * changed rawdata to rawbids directory in the study dataset and updated description in the common principles * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fixed URL in the JSON example * Update src/common-principles.md * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Chris Markiewicz <effigies@gmail.com> Co-authored-by: Chris Markiewicz <markiewicz@stanford.edu> Co-authored-by: Julia-Katharina Pfarr <111446107+julia-pfarr@users.noreply.github.com> * [ENH] Allow rawbids/ in derivative datasets for the raw BIDS source (bids-standard#2409) PR bids-standard#2191 added rawbids/ to the study DatasetType but not to derivative, even though the same convention -- "rawbids/ holds the raw BIDS dataset" -- is equally applicable when a standalone derivative dataset includes its raw source. - Add rawbids as an optional opaque subdirectory of the derivative DatasetType in src/schema/rules/directories.yaml. - Update the derivative example in common-principles.md to use rawbids/ instead of sourcedata/raw/. - Clarify that rawbids/ is reserved for raw BIDS datasets in both study and derivative cases, and that derivatives of derivatives MUST place their source derivative under sourcedata/ (not rawbids/). Co-authored-by: Claude Code 2.1.116 / Claude Opus 4.7 (1M context) <noreply@anthropic.com> * [ENH] Recommend controlled vocabulary for age Units, clarify that it can be overloaded (bids-standard#2400) * Clarify that age Units could be overriden and refer to Units in common principles * Add ISO 8601-based duration units for age and validate in schema Document in common-principles.md that age Units MAY be overridden to one of: year, month, week, day, hour, minute, or second (based on ISO 8601 duration designators). Add AgeUnits schema check rule that validates participants.json age Units against the allowed set. Co-Authored-By: Claude Code 2.1.110 / Claude Opus 4.6 <noreply@anthropic.com> * Keep compatible (warning, not error) + simplify check Co-authored-by: Chris Markiewicz <effigies@gmail.com> * Remove duplicate specification of units in the Description Co-authored-by: Yaroslav Halchenko <debian@onerussian.com> * Make check operate on participants.tsv not .json Co-authored-by: Chris Markiewicz <effigies@gmail.com> --------- Co-authored-by: Claude Code 2.1.110 / Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: Chris Markiewicz <effigies@gmail.com> * [ENH] Allow for institutions to be listed as Authors (bids-standard#2397) * Allow for institutions to be listed as Authors It is not uncommon to have datasets which are a truly an institutional effort -- from data collection planing, acquisition, curation, harmonization etc, where it is a pipeline to deliver high quality datasets. For instance we have a number of such contributions from Allen Institute(s) in DANDI archive. In DANDI schema we allow for both Person and Organization entries, and e.g. in https://github.com/dandisets/000020 we have ```yaml contributor: - affiliation: - identifier: https://ror.org/00dcv1019 name: Allen Institute for Brain Science schemaKey: Affiliation email: nathang@alleninstitute.org identifier: 0000-0001-8429-4090 includeInCitation: false name: Gouwens, Nathan roleName: - dcite:ContactPerson schemaKey: Person - contactPoint: [] identifier: https://ror.org/00dcv1019 includeInCitation: true name: Allen Institute for Brain Science roleName: [] schemaKey: Organization url: https://alleninstitute.org ``` so there is an Organization, which is actually the one to cite, although we do not list any particular roleName, and then responsible ContactPerson (who is not even listed as an Author) who could be contacted ATM (but might be a different person later) about this dandiset. I have tried to make wording a bit more explicit than just listing Organizations as a possible entry here, rather to keep it for large efforts. * Shorten and generalize statement about Authors Co-authored-by: Chris Markiewicz <effigies@gmail.com> --------- Co-authored-by: Chris Markiewicz <effigies@gmail.com> Co-authored-by: Mark Mikkelsen <mark.mikkelsen@gmail.com> * [FIX] Bump pymdown-extensions to >=10.21.2 to restore code-block rendering (bids-standard#2438) * [FIX] Bump pymdown-extensions to >=10.21.2 to restore code-block rendering (bids-standard#2421) Pygments 2.20.0 made `html.escape()` on the formatter's `filename` option strict, raising `AttributeError` when the value is `None`. pymdownx.highlight 10.21 (and earlier) passed `filename=title` where `title` defaults to `None` for code blocks without a title, which triggered the crash. pymdownx.superfences catches that exception and silently falls back to inline-`<code>` rendering, so fenced code blocks inside list items (e.g. the "Plain" examples in common-principles.md) lost their `<pre>` formatting and showed the language tag as literal text. pymdown-extensions 10.21.2 fixes the upstream defect, so require it (or newer) in both the docs build and bidsschematools[render]. Closes: bids-standard#2421 Co-Authored-By: Claude Code 2.1.160 / Claude Opus 4.7 (1M context) <noreply@anthropic.com> * [FIX] Regenerate tools/schemacode/uv.lock for pymdown-extensions bump The previous commit updated tools/schemacode/pyproject.toml but forgot to refresh its sibling uv.lock. The `latest` tox envs use the `uv-venv-lock-runner` with `--locked`, so they failed `Setup test suite` with the pyproject/lockfile mismatch. Co-Authored-By: Claude Code 2.1.160 / Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Code 2.1.160 / Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Chris Markiewicz <markiewicz@stanford.edu> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Remi Gau <remi_gau@hotmail.com> Co-authored-by: Bru <b.aristimunha@gmail.com> Co-authored-by: Dimitri Papadopoulos Orfanos <3234522+DimitriPapadopoulos@users.noreply.github.com> Co-authored-by: Kabilar Gunalan <kabi@mit.edu> Co-authored-by: Nikhil Bhagwat <nikhil153@users.noreply.github.com> Co-authored-by: Chris Markiewicz <effigies@gmail.com> Co-authored-by: Julia-Katharina Pfarr <111446107+julia-pfarr@users.noreply.github.com> Co-authored-by: Yaroslav Halchenko <debian@onerussian.com> Co-authored-by: Claude Code 2.1.116 / Claude Opus 4.7 (1M context) <noreply@anthropic.com> Co-authored-by: Mark Mikkelsen <mark.mikkelsen@gmail.com>
This is a continuation of discussion on BIDS
DatasetTypestarted in #1972 and #2185. The proposedDatasetTypes include: bids-study,raw, andderivative.I think this is a fantastic idea with the capacity to curate modular and nested standardized datasets.
However, the directory layout for
bids-studyproposed in #2185 is suboptimal from the data visibility perspective. Currently, thebids-studydoes not have a root-level subdirectory forbids-rawdataset. Based on previous conversations it was suggested thatbids-rawdataset can be stowed insidesourcedatadir. This hidden location for a valid and probably the most commonDatasetTypeis probably not ideal and will confuse new users.So, I would like to make a case for treating
sourcedata,bids-raw, andbids-derivativewith equal importance by putting them on the same root-level inside thebids-studydirectory tree. In my experience this is more intuitive and helpful for data management of neuroimaging studies, where potentially different people will handle these threeDatasetTypes.The suggested
bids-prefix for these directories is mostly to avoid possible confusion betweensourcevsrawdata connotations from past discussions and to indicate each of them can be stand-alone BIDS datasets.Happy to hear your thoughts @michellewang, @jbpoline, @yarikoptic, @effigies, @mathdugre, @julia-pfarr, @nburgos, @AliceJoubert, @Adam-Ismaili-92, @surchs