diff --git a/ip112badmetapathe1/README.txt b/ip112badmetapathe1/README.txt new file mode 100644 index 000000000..4d0f92167 --- /dev/null +++ b/ip112badmetapathe1/README.txt @@ -0,0 +1,36 @@ +The following exerpt is duplicated from version 1.1.2 +of the Brain Imaging Data Structure (BIDS) specification: + + Files for a particular participant can exist only at participant level directory, + i.e /dataset/sub-*[/ses-*]/sub-*_T1w.json. + Similarly, any file that is not specific to a participant is to be declared + only at top level of dataset + for eg: task-sist_bold.json must be placed under /dataset/task-sist_bold.json. + +Notes: + +- There are two potential issues with the issue as described: + + - The T1-weighted image is not placed inside the "anat/" modality directory + as would be conventionally expected / is most common, + and the file name fails to account for the potential presence of the "ses" entity. + The example path would more suitably have been: + /dataset/sub-*[/ses-*]/anat/sub-*[_ses-*]_T1w.json. + + - The description fails to clarify that such files can be placed + only within *one of* potentially *multiple* "participant-level directories". + As exemplified by other Inheritance Principle examples, + it is permissible for metadata files to exist at a filesystem location + other than the lowest level modality directory. + The description fails to convey the fact that the example filesystem path presented + is only one of multiple possible parent directories for such a file; + for instance, location /dataset/sub-*[/ses-*]/sub-*[_ses-*]_T1w.json + is technically permissible also. + +- This particular dataset exemplifies violation of the first criterion. + Violation of the second criterion is exemplified + in sister datasets "ip112badmetapathe2v1" and "ip112badmetapathe2v2". + +- There are intentionally two T1w runs for sub-01 + so that the dataset does not trigger a warning + regarding an exclusively-matched non-sidecar data-metadata file pair. diff --git a/ip112badmetapathe1/dataset_description.json b/ip112badmetapathe1/dataset_description.json new file mode 100644 index 000000000..d374104b1 --- /dev/null +++ b/ip112badmetapathe1/dataset_description.json @@ -0,0 +1,9 @@ +{ + "Authors": [ + "Robert E. Smith " + ], + "BIDSVersion": "1.1.2", + "DatasetType": "raw", + "Name": "Inheritance Principle validation; specification version 1.1.2; bad metadata path; example 1" +} + diff --git a/ip112badmetapathe1/sourcedata/ip_graph.json b/ip112badmetapathe1/sourcedata/ip_graph.json new file mode 100644 index 000000000..75e867769 --- /dev/null +++ b/ip112badmetapathe1/sourcedata/ip_graph.json @@ -0,0 +1,18 @@ +{ + "sub-01_T1w.json": [ + "sub-01/anat/sub-01_run-1_T1w.nii.gz", + "sub-01/anat/sub-01_run-2_T1w.nii.gz" + ], + "sub-01/anat/sub-01_run-1_T1w.nii.gz": { + ".json": [ + "sub-01_T1w.json" + ] + }, + "sub-01/anat/sub-01_run-2_T1w.nii.gz": { + ".json": [ + "sub-01_T1w.json" + ] + }, + "sub-02/anat/sub-02_T1w.nii.gz": { + } +} diff --git a/ip112badmetapathe1/sourcedata/ip_metadata.json b/ip112badmetapathe1/sourcedata/ip_metadata.json new file mode 100644 index 000000000..8a9fa17f4 --- /dev/null +++ b/ip112badmetapathe1/sourcedata/ip_metadata.json @@ -0,0 +1,14 @@ +{ + "sub-01/anat/sub-01_run-1_T1w.nii.gz": { + ".json": { + "Sub01T1w": true + } + }, + "sub-01/anat/sub-01_run-2_T1w.nii.gz": { + ".json": { + "Sub01T1w": true + } + }, + "sub-02/anat/sub-02_T1w.nii.gz": { + } +} diff --git a/ip112badmetapathe1/sub-01/anat/sub-01_run-1_T1w.nii.gz b/ip112badmetapathe1/sub-01/anat/sub-01_run-1_T1w.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip112badmetapathe1/sub-01/anat/sub-01_run-2_T1w.nii.gz b/ip112badmetapathe1/sub-01/anat/sub-01_run-2_T1w.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip112badmetapathe1/sub-01_T1w.json b/ip112badmetapathe1/sub-01_T1w.json new file mode 100644 index 000000000..75133cdc0 --- /dev/null +++ b/ip112badmetapathe1/sub-01_T1w.json @@ -0,0 +1,3 @@ +{ + "Sub01T1w": true +} diff --git a/ip112badmetapathe1/sub-02/anat/sub-02_T1w.nii.gz b/ip112badmetapathe1/sub-02/anat/sub-02_T1w.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip112badmetapathe2v1/README.txt b/ip112badmetapathe2v1/README.txt new file mode 100644 index 000000000..0f848f612 --- /dev/null +++ b/ip112badmetapathe2v1/README.txt @@ -0,0 +1,23 @@ +The following exerpt is duplicated from version 1.1.2 +of the Brain Imaging Data Structure (BIDS) specification: + + Files for a particular participant can exist only at participant level directory, + i.e /dataset/sub-*[/ses-*]/sub-*_T1w.json. + Similarly, any file that is not specific to a participant is to be declared + only at top level of dataset + for eg: task-sist_bold.json must be placed under /dataset/task-sist_bold.json. + +Notes: + +- This particular dataset exemplifies violation of the second criterion. + Violation of the first criterion is exemplified in sister dataset "ip112badmetapathe1". + +- In this first version of the example, + the derivative Inheritance Principle criterion + defined in version 1.7.0 of the specification + *is* also violated, + as the erroneous placement of the participant-agnosticcally-named metadata file + is violated by the presence of another participant to which the metadata file name matches. + A modified version of this example, + where that corresponding 1.7.0 version criterion is *not* violated, + is presented in sister dataset "ip112badmetapathe1v2". diff --git a/ip112badmetapathe2v1/dataset_description.json b/ip112badmetapathe2v1/dataset_description.json new file mode 100644 index 000000000..d9be0e2e7 --- /dev/null +++ b/ip112badmetapathe2v1/dataset_description.json @@ -0,0 +1,9 @@ +{ + "Authors": [ + "Robert E. Smith " + ], + "BIDSVersion": "1.1.2", + "DatasetType": "raw", + "Name": "Inheritance Principle validation; specification version 1.1.2; bad metadata path; example 1; version 1" +} + diff --git a/ip112badmetapathe2v1/sourcedata/ip_graph.json b/ip112badmetapathe2v1/sourcedata/ip_graph.json new file mode 100644 index 000000000..a595ee0db --- /dev/null +++ b/ip112badmetapathe2v1/sourcedata/ip_graph.json @@ -0,0 +1,18 @@ +{ + "sub-01/task-sist_bold.json": [ + "sub-01/func/sub-01_task-sist_run-1_bold.nii.gz", + "sub-01/func/sub-01_task-sist_run-2_bold.nii.gz" + ], + "sub-01/func/sub-01_task-sist_run-1_bold.nii.gz": { + ".json": [ + "sub-01/task-sist_bold.json" + ] + }, + "sub-01/func/sub-01_task-sist_run-2_bold.nii.gz": { + ".json": [ + "sub-01/task-sist_bold.json" + ] + }, + "sub-02/func/sub-02_task-sist_bold.nii.gz": { + } +} diff --git a/ip112badmetapathe2v1/sourcedata/ip_metadata.json b/ip112badmetapathe2v1/sourcedata/ip_metadata.json new file mode 100644 index 000000000..8a1bad673 --- /dev/null +++ b/ip112badmetapathe2v1/sourcedata/ip_metadata.json @@ -0,0 +1,16 @@ +{ + "sub-01/func/sub-01_task-sist_run-1_bold.nii.gz": { + ".json": { + "RepetitionTime": 1.0, + "TaskName": "SIST" + } + }, + "sub-01/func/sub-01_task-sist_run-2_bold.nii.gz": { + ".json": { + "RepetitionTime": 1.0, + "TaskName": "SIST" + } + }, + "sub-02/func/sub-02_task-sist_bold.nii.gz": { + } +} diff --git a/ip112badmetapathe2v1/sub-01/func/sub-01_task-sist_run-1_bold.nii.gz b/ip112badmetapathe2v1/sub-01/func/sub-01_task-sist_run-1_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip112badmetapathe2v1/sub-01/func/sub-01_task-sist_run-2_bold.nii.gz b/ip112badmetapathe2v1/sub-01/func/sub-01_task-sist_run-2_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip112badmetapathe2v1/sub-01/task-sist_bold.json b/ip112badmetapathe2v1/sub-01/task-sist_bold.json new file mode 100644 index 000000000..8754948f7 --- /dev/null +++ b/ip112badmetapathe2v1/sub-01/task-sist_bold.json @@ -0,0 +1,4 @@ +{ + "RepetitionTime": 1.0, + "TaskName": "SIST" +} diff --git a/ip112badmetapathe2v1/sub-02/func/sub-02_task-sist_bold.nii.gz b/ip112badmetapathe2v1/sub-02/func/sub-02_task-sist_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip112badmetapathe2v2/README.txt b/ip112badmetapathe2v2/README.txt new file mode 100644 index 000000000..5f32fea58 --- /dev/null +++ b/ip112badmetapathe2v2/README.txt @@ -0,0 +1,24 @@ +The following exerpt is duplicated from version 1.1.2 +of the Brain Imaging Data Structure (BIDS) specification: + + Files for a particular participant can exist only at participant level directory, + i.e /dataset/sub-*[/ses-*]/sub-*_T1w.json. + Similarly, any file that is not specific to a participant is to be declared + only at top level of dataset + for eg: task-sist_bold.json must be placed under /dataset/task-sist_bold.json. + +Notes: + +- This particular dataset exemplifies violation of the second criterion. + Violation of the first criterion is exemplified in sister dataset "ip112badmetapathe1". + +- In this second version of the example, + the derivative Inheritance Principle criterion + defined in version 1.7.0 of the specification + *is not* violated: + the erroneous placement of the participant-agnosticcally-named metadata file + nevertheless does not actually cause any data - metadata associations + that violate the corresponding criterion as written. + Another version of this example, + where that corresponding 1.7.0 version criterion *is* violated, + is presented in sister dataset "ip112badmetapathe1v1". diff --git a/ip112badmetapathe2v2/dataset_description.json b/ip112badmetapathe2v2/dataset_description.json new file mode 100644 index 000000000..c8e5e1ece --- /dev/null +++ b/ip112badmetapathe2v2/dataset_description.json @@ -0,0 +1,9 @@ +{ + "Authors": [ + "Robert E. Smith " + ], + "BIDSVersion": "1.1.2", + "DatasetType": "raw", + "Name": "Inheritance Principle validation; specification version 1.1.2; bad metadata path; example 1; version 2" +} + diff --git a/ip112badmetapathe2v2/sourcedata/ip_graph.json b/ip112badmetapathe2v2/sourcedata/ip_graph.json new file mode 100644 index 000000000..1bdd49b08 --- /dev/null +++ b/ip112badmetapathe2v2/sourcedata/ip_graph.json @@ -0,0 +1,16 @@ +{ + "sub-01/task-sist_bold.json": [ + "sub-01/func/sub-01_task-sist_run-1_bold.nii.gz", + "sub-01/func/sub-01_task-sist_run-2_bold.nii.gz" + ], + "sub-01/func/sub-01_task-sist_run-1_bold.nii.gz": { + ".json": [ + "sub-01/task-sist_bold.json" + ] + }, + "sub-01/func/sub-01_task-sist_run-2_bold.nii.gz": { + ".json": [ + "sub-01/task-sist_bold.json" + ] + } +} diff --git a/ip112badmetapathe2v2/sourcedata/ip_metadata.json b/ip112badmetapathe2v2/sourcedata/ip_metadata.json new file mode 100644 index 000000000..eb40a94f3 --- /dev/null +++ b/ip112badmetapathe2v2/sourcedata/ip_metadata.json @@ -0,0 +1,14 @@ +{ + "sub-01/func/sub-01_task-sist_run-1_bold.nii.gz": { + ".json": { + "RepetitionTime": 1.0, + "TaskName": "SIST" + } + }, + "sub-01/func/sub-01_task-sist_run-2_bold.nii.gz": { + ".json": { + "RepetitionTime": 1.0, + "TaskName": "SIST" + } + } +} diff --git a/ip112badmetapathe2v2/sub-01/func/sub-01_task-sist_run-1_bold.nii.gz b/ip112badmetapathe2v2/sub-01/func/sub-01_task-sist_run-1_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip112badmetapathe2v2/sub-01/func/sub-01_task-sist_run-2_bold.nii.gz b/ip112badmetapathe2v2/sub-01/func/sub-01_task-sist_run-2_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip112badmetapathe2v2/sub-01/task-sist_bold.json b/ip112badmetapathe2v2/sub-01/task-sist_bold.json new file mode 100644 index 000000000..8754948f7 --- /dev/null +++ b/ip112badmetapathe2v2/sub-01/task-sist_bold.json @@ -0,0 +1,4 @@ +{ + "RepetitionTime": 1.0, + "TaskName": "SIST" +} diff --git a/ip112e1bad/README.txt b/ip112e1bad/README.txt new file mode 100644 index 000000000..099183f37 --- /dev/null +++ b/ip112e1bad/README.txt @@ -0,0 +1,34 @@ +The following exerpt is duplicated from version 1.1.2 +of the Brain Imaging Data Structure (BIDS) specification: + + Example 1: Two JSON files at same level that are applicable for NIfTI file. + + sub-01/ + ses-test/ + sub-test_task-overtverbgeneration_bold.json + sub-test_task-overtverbgeneration_run-2_bold.json + anat/ + sub-01_ses-test_T1w.nii.gz + func/ + sub-01_ses-test_task-overtverbgeneration_run-1_bold.nii.gz + sub-01_ses-test_task-overtverbgeneration_run-2_bold.nii.gz + + In the above example, two JSON files are listed under sub-01/ses-test/, which are each applicable to sub-01_ses-test_task-overtverbgeneration_run-2_bold.nii.gz, violating the constraint that no more than one file may be defined at a given level of the directory structure. Instead task-overtverbgeneration_run-2_bold.json should have been under sub-01/ses-test/func/. + +Notes: + +- There is an error in the filesystem structure shown. + Files "sub-test_task-overtverbgeneration_*bold.json" erroneously combine + entities "sub-01" and "ses-test" implied by the directory structure + into entity "ses-test" in these file names. + This error is rectified in the realised dataset, + as it is not the aspect of specification non-conformity that is of interest. + +- This dataset is *intended to be non-conformant*. + Its evaluation under the ruleset of the Inheritance Principle + corresponding to this version of the specification + should therefore fail. + +- The "Instead ... " proposal as to how this exemplar dataset + should be modified in order to become conformant + is realised in sister dataset "ip112e1good". diff --git a/ip112e1bad/dataset_description.json b/ip112e1bad/dataset_description.json new file mode 100644 index 000000000..107480ca4 --- /dev/null +++ b/ip112e1bad/dataset_description.json @@ -0,0 +1,9 @@ +{ + "Authors": [ + "Robert E. Smith " + ], + "BIDSVersion": "1.1.2", + "DatasetType": "raw", + "Name": "Inheritance Principle validation; BIDS version 1.1.2; example 1; non-compliant version" +} + diff --git a/ip112e1bad/sourcedata/ip_graph.json b/ip112e1bad/sourcedata/ip_graph.json new file mode 100644 index 000000000..252ec4980 --- /dev/null +++ b/ip112e1bad/sourcedata/ip_graph.json @@ -0,0 +1,22 @@ +{ + "sub-01/ses-test/sub-01_ses-test_task-overtverbgeneration_bold.json": [ + "sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-1_bold.nii.gz", + "sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-2_bold.nii.gz" + ], + "sub-01/ses-test/sub-01_ses-test_task-overtverbgeneration_run-2_bold.json": [ + "sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-2_bold.nii.gz" + ], + "sub-01/ses-test/anat/sub-01_ses-test_T1w.nii.gz": { + }, + "sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-1_bold.nii.gz": { + ".json": [ + "sub-01/ses-test/sub-01_ses-test_task-overtverbgeneration_bold.json" + ] + }, + "sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-2_bold.nii.gz": { + ".json": [ + "sub-01/ses-test/sub-01_ses-test_task-overtverbgeneration_bold.json", + "sub-01/ses-test/sub-01_ses-test_task-overtverbgeneration_run-2_bold.json" + ] + } +} diff --git a/ip112e1bad/sourcedata/ip_metadata.json b/ip112e1bad/sourcedata/ip_metadata.json new file mode 100644 index 000000000..a2ae63d5c --- /dev/null +++ b/ip112e1bad/sourcedata/ip_metadata.json @@ -0,0 +1,16 @@ +{ + "sub-01/ses-test/anat/sub-01_ses-test_T1w.nii.gz": { + }, + "sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-1_bold.nii.gz": { + ".json": { + "RepetitionTime": 1.0, + "TaskName": "OvertVerbGeneration" + } + }, + "sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-2_bold.nii.gz": { + ".json": { + "RepetitionTime": 1.0, + "TaskName": "OvertVerbGeneration" + } + } +} diff --git a/ip112e1bad/sub-01/ses-test/anat/sub-01_ses-test_T1w.nii.gz b/ip112e1bad/sub-01/ses-test/anat/sub-01_ses-test_T1w.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip112e1bad/sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-1_bold.nii.gz b/ip112e1bad/sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-1_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip112e1bad/sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-2_bold.nii.gz b/ip112e1bad/sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-2_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip112e1bad/sub-01/ses-test/sub-01_ses-test_task-overtverbgeneration_bold.json b/ip112e1bad/sub-01/ses-test/sub-01_ses-test_task-overtverbgeneration_bold.json new file mode 100644 index 000000000..14016c2aa --- /dev/null +++ b/ip112e1bad/sub-01/ses-test/sub-01_ses-test_task-overtverbgeneration_bold.json @@ -0,0 +1,5 @@ +{ + "RepetitionTime": 1.0, + "TaskName": "OvertVerbGeneration" +} + diff --git a/ip112e1bad/sub-01/ses-test/sub-01_ses-test_task-overtverbgeneration_run-2_bold.json b/ip112e1bad/sub-01/ses-test/sub-01_ses-test_task-overtverbgeneration_run-2_bold.json new file mode 100644 index 000000000..bfd870e45 --- /dev/null +++ b/ip112e1bad/sub-01/ses-test/sub-01_ses-test_task-overtverbgeneration_run-2_bold.json @@ -0,0 +1,3 @@ +{ +} + diff --git a/ip112e1good/README.txt b/ip112e1good/README.txt new file mode 100644 index 000000000..b06a012e6 --- /dev/null +++ b/ip112e1good/README.txt @@ -0,0 +1,44 @@ +From the relevant section of version 1.1.2 +of the Brain Imaging Data Structure (BIDS) specification: + + Example 1: Two JSON files at same level that are applicable for NIfTI file. + + sub-01/ + ses-test/ + sub-test_task-overtverbgeneration_bold.json + sub-test_task-overtverbgeneration_run-2_bold.json + anat/ + sub-01_ses-test_T1w.nii.gz + func/ + sub-01_ses-test_task-overtverbgeneration_run-1_bold.nii.gz + sub-01_ses-test_task-overtverbgeneration_run-2_bold.nii.gz + In the above example, two JSON files are listed under sub-01/ses-test/, which are each applicable to sub-01_ses-test_task-overtverbgeneration_run-2_bold.nii.gz, violating the constraint that no more than one file may be defined at a given level of the directory structure. Instead task-overtverbgeneration_run-2_bold.json should have been under sub-01/ses-test/func/. + +Notes: + +- The filesystem layout described in the specification is erroneous. + Files "sub-test_task-overtverbgeneration*_bold.json" erroneously combine entities + "sub-01" and "ses-test" implied by the directory structure + into entity "sub-test" in the file names. + This error is corrected in this realised dataset. + +- This dataset *incorporates* the suggestion made at the end of this section + of how to modify the filesystem layout in order to make the dataset conformant. + + The actual layout of this dataset is therefore: + + sub-01/ + ses-test/ + sub-01_ses-test_task-overtverbgeneration_bold.json + anat/ + sub-01_ses-test_T1w.nii.gz + func/ + sub-01_ses-test_task-overtverbgeneration_run-1_bold.nii.gz + sub-01_ses-test_task-overtverbgeneration_run-2_bold.json + sub-01_ses-test_task-overtverbgeneration_run-2_bold.nii.gz + + As such, this dataset is expected to be determined conformant. + +- The (fixed) dataset as originally described in the specification, + absent the rectification described above to conform specifically to the Inheritance Principle, + is realised in sister dataset "ip112e1bad". diff --git a/ip112e1good/dataset_description.json b/ip112e1good/dataset_description.json new file mode 100644 index 000000000..56f041772 --- /dev/null +++ b/ip112e1good/dataset_description.json @@ -0,0 +1,9 @@ +{ + "Authors": [ + "Robert E. Smith " + ], + "BIDSVersion": "1.1.2", + "DatasetType": "raw", + "Name": "Inheritance Principle validation; BIDS version 1.1.2; example 1; compliant version" +} + diff --git a/ip112e1good/sourcedata/ip_graph.json b/ip112e1good/sourcedata/ip_graph.json new file mode 100644 index 000000000..58e4254c7 --- /dev/null +++ b/ip112e1good/sourcedata/ip_graph.json @@ -0,0 +1,22 @@ +{ + "sub-01/ses-test/sub-01_ses-test_task-overtverbgeneration_bold.json": [ + "sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-1_bold.nii.gz", + "sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-2_bold.nii.gz" + ], + "sub-01/ses-test/anat/sub-01_ses-test_T1w.nii.gz": { + }, + "sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-2_bold.json": [ + "sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-2_bold.nii.gz" + ], + "sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-1_bold.nii.gz": { + ".json": [ + "sub-01/ses-test/sub-01_ses-test_task-overtverbgeneration_bold.json" + ] + }, + "sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-2_bold.nii.gz": { + ".json": [ + "sub-01/ses-test/sub-01_ses-test_task-overtverbgeneration_bold.json", + "sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-2_bold.json" + ] + } +} diff --git a/ip112e1good/sourcedata/ip_metadata.json b/ip112e1good/sourcedata/ip_metadata.json new file mode 100644 index 000000000..a2ae63d5c --- /dev/null +++ b/ip112e1good/sourcedata/ip_metadata.json @@ -0,0 +1,16 @@ +{ + "sub-01/ses-test/anat/sub-01_ses-test_T1w.nii.gz": { + }, + "sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-1_bold.nii.gz": { + ".json": { + "RepetitionTime": 1.0, + "TaskName": "OvertVerbGeneration" + } + }, + "sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-2_bold.nii.gz": { + ".json": { + "RepetitionTime": 1.0, + "TaskName": "OvertVerbGeneration" + } + } +} diff --git a/ip112e1good/sub-01/ses-test/anat/sub-01_ses-test_T1w.nii.gz b/ip112e1good/sub-01/ses-test/anat/sub-01_ses-test_T1w.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip112e1good/sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-1_bold.nii.gz b/ip112e1good/sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-1_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip112e1good/sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-2_bold.json b/ip112e1good/sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-2_bold.json new file mode 100644 index 000000000..bfd870e45 --- /dev/null +++ b/ip112e1good/sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-2_bold.json @@ -0,0 +1,3 @@ +{ +} + diff --git a/ip112e1good/sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-2_bold.nii.gz b/ip112e1good/sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-2_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip112e1good/sub-01/ses-test/sub-01_ses-test_task-overtverbgeneration_bold.json b/ip112e1good/sub-01/ses-test/sub-01_ses-test_task-overtverbgeneration_bold.json new file mode 100644 index 000000000..14016c2aa --- /dev/null +++ b/ip112e1good/sub-01/ses-test/sub-01_ses-test_task-overtverbgeneration_bold.json @@ -0,0 +1,5 @@ +{ + "RepetitionTime": 1.0, + "TaskName": "OvertVerbGeneration" +} + diff --git a/ip112e2v1/README.txt b/ip112e2v1/README.txt new file mode 100644 index 000000000..7f3e24491 --- /dev/null +++ b/ip112e2v1/README.txt @@ -0,0 +1,21 @@ +The following text is copied verbatim from version 1.1.2 +of the Brain Imaging Data Structure (BIDS) specification: + + Example 2: Multiple run and rec with same acquisition (acq) parameters acq-test1 + + sub-01/ + anat/ + func/ + sub-01_task-xyz_acq-test1_run-1_bold.nii.gz + sub-01_task-xyz_acq-test1_run-2_bold.nii.gz + sub-01_task-xyz_acq-test1_rec-recon1_bold.nii.gz + sub-01_task-xyz_acq-test1_rec-recon2_bold.nii.gz + sub-01_task-xyz_acq-test1_bold.json + + For the above example, all NIfTI files are acquired with same scanning parameters (acq-test1). Hence a JSON file describing the acq parameters will apply to different runs and rec files. Also if the JSON file (task-xyz_acq-test1_bold.json) is defined at dataset top level directory, it will be applicable to all task runs with test1 acquisition parameter. + +Notes: + +- This particular dataset recapitulates the filesystem structure shown in the specification verbatim. + Sister dataset "ip112e2v2" realises the suggested modification + at the end of the text description. diff --git a/ip112e2v1/dataset_description.json b/ip112e2v1/dataset_description.json new file mode 100644 index 000000000..ca9d93bde --- /dev/null +++ b/ip112e2v1/dataset_description.json @@ -0,0 +1,9 @@ +{ + "Authors": [ + "Robert E. Smith " + ], + "BIDSVersion": "1.1.2", + "DatasetType": "raw", + "Name": "Inheritance Principle validation; BIDS version 1.1.2; example 2; version 1" +} + diff --git a/ip112e2v1/sourcedata/ip_graph.json b/ip112e2v1/sourcedata/ip_graph.json new file mode 100644 index 000000000..d3ee829a5 --- /dev/null +++ b/ip112e2v1/sourcedata/ip_graph.json @@ -0,0 +1,28 @@ +{ + "sub-01/func/sub-01_task-xyz_acq-test1_bold.json": [ + "sub-01/func/sub-01_task-xyz_acq-test1_run-1_bold.nii.gz", + "sub-01/func/sub-01_task-xyz_acq-test1_run-2_bold.nii.gz", + "sub-01/func/sub-01_task-xyz_acq-test1_rec-recon1_bold.nii.gz", + "sub-01/func/sub-01_task-xyz_acq-test1_rec-recon2_bold.nii.gz" + ], + "sub-01/func/sub-01_task-xyz_acq-test1_run-1_bold.nii.gz": { + ".json": [ + "sub-01/func/sub-01_task-xyz_acq-test1_bold.json" + ] + }, + "sub-01/func/sub-01_task-xyz_acq-test1_run-2_bold.nii.gz": { + ".json": [ + "sub-01/func/sub-01_task-xyz_acq-test1_bold.json" + ] + }, + "sub-01/func/sub-01_task-xyz_acq-test1_rec-recon1_bold.nii.gz": { + ".json": [ + "sub-01/func/sub-01_task-xyz_acq-test1_bold.json" + ] + }, + "sub-01/func/sub-01_task-xyz_acq-test1_rec-recon2_bold.nii.gz": { + ".json": [ + "sub-01/func/sub-01_task-xyz_acq-test1_bold.json" + ] + } +} diff --git a/ip112e2v1/sourcedata/ip_metadata.json b/ip112e2v1/sourcedata/ip_metadata.json new file mode 100644 index 000000000..ed4f52bfb --- /dev/null +++ b/ip112e2v1/sourcedata/ip_metadata.json @@ -0,0 +1,26 @@ +{ + "sub-01/func/sub-01_task-xyz_acq-test1_rec-recon1_bold.nii.gz": { + ".json": { + "RepetitionTime": 1.0, + "TaskName": "XYZ" + } + }, + "sub-01/func/sub-01_task-xyz_acq-test1_rec-recon2_bold.nii.gz": { + ".json": { + "RepetitionTime": 1.0, + "TaskName": "XYZ" + } + }, + "sub-01/func/sub-01_task-xyz_acq-test1_run-1_bold.nii.gz": { + ".json": { + "RepetitionTime": 1.0, + "TaskName": "XYZ" + } + }, + "sub-01/func/sub-01_task-xyz_acq-test1_run-2_bold.nii.gz": { + ".json": { + "RepetitionTime": 1.0, + "TaskName": "XYZ" + } + } +} diff --git a/ip112e2v1/sub-01/func/sub-01_task-xyz_acq-test1_bold.json b/ip112e2v1/sub-01/func/sub-01_task-xyz_acq-test1_bold.json new file mode 100644 index 000000000..fbb45a200 --- /dev/null +++ b/ip112e2v1/sub-01/func/sub-01_task-xyz_acq-test1_bold.json @@ -0,0 +1,5 @@ +{ + "RepetitionTime": 1.0, + "TaskName": "XYZ" +} + diff --git a/ip112e2v1/sub-01/func/sub-01_task-xyz_acq-test1_rec-recon1_bold.nii.gz b/ip112e2v1/sub-01/func/sub-01_task-xyz_acq-test1_rec-recon1_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip112e2v1/sub-01/func/sub-01_task-xyz_acq-test1_rec-recon2_bold.nii.gz b/ip112e2v1/sub-01/func/sub-01_task-xyz_acq-test1_rec-recon2_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip112e2v1/sub-01/func/sub-01_task-xyz_acq-test1_run-1_bold.nii.gz b/ip112e2v1/sub-01/func/sub-01_task-xyz_acq-test1_run-1_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip112e2v1/sub-01/func/sub-01_task-xyz_acq-test1_run-2_bold.nii.gz b/ip112e2v1/sub-01/func/sub-01_task-xyz_acq-test1_run-2_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip112e2v2/README.txt b/ip112e2v2/README.txt new file mode 100644 index 000000000..a07fa10e6 --- /dev/null +++ b/ip112e2v2/README.txt @@ -0,0 +1,41 @@ +The following text is duplicated verbatim from version 1.1.2 +of the Brain Imaging Data Structure (BIDS) specification: + + Example 2: Multiple run and rec with same acquisition (acq) parameters acq-test1 + + sub-01/ + anat/ + func/ + sub-01_task-xyz_acq-test1_run-1_bold.nii.gz + sub-01_task-xyz_acq-test1_run-2_bold.nii.gz + sub-01_task-xyz_acq-test1_rec-recon1_bold.nii.gz + sub-01_task-xyz_acq-test1_rec-recon2_bold.nii.gz + sub-01_task-xyz_acq-test1_bold.json + + For the above example, all NIfTI files are acquired with same scanning parameters (acq-test1). Hence a JSON file describing the acq parameters will apply to different runs and rec files. Also if the JSON file (task-xyz_acq-test1_bold.json) is defined at dataset top level directory, it will be applicable to all task runs with test1 acquisition parameter. + +Notes: + +- The filesystem structure described in the specification above + is replicated verbatim in sister dataset "ip112e2v1". + +- This dataset is the realisation of the proposed alternative configuration + described at the end of the quoted text. + As such, the actual filesystem structure is: + + task-xyz_acq-test1_bold.json + sub-01/ + anat/ + func/ + sub-01_task-xyz_acq-test1_run-1_bold.nii.gz + sub-01_task-xyz_acq-test1_run-2_bold.nii.gz + sub-01_task-xyz_acq-test1_rec-recon1_bold.nii.gz + sub-01_task-xyz_acq-test1_rec-recon2_bold.nii.gz + +- The quoted description regarding the proposed alternative filesystem layout is incomplete. + The text refers to "... the JSON file (task-xyz_acq-test1_bold.json)"; + however this file does not exist in the filesystem structure shown. + What was presumably intended by the author + was that file "sub-01/func/sub-01_task-xyz_acq-test1_bold.json" + could be *moved* to "task-xyz_acq-test1_bold.json" at the root of the dataset. + This is what is realised in this dataset. diff --git a/ip112e2v2/dataset_description.json b/ip112e2v2/dataset_description.json new file mode 100644 index 000000000..1f42abc76 --- /dev/null +++ b/ip112e2v2/dataset_description.json @@ -0,0 +1,9 @@ +{ + "Authors": [ + "Robert E. Smith " + ], + "BIDSVersion": "1.1.2", + "DatasetType": "raw", + "Name": "Inheritance Principle validation; BIDS version 1.1.2; example 2; version 2" +} + diff --git a/ip112e2v2/sourcedata/ip_graph.json b/ip112e2v2/sourcedata/ip_graph.json new file mode 100644 index 000000000..493ebfc16 --- /dev/null +++ b/ip112e2v2/sourcedata/ip_graph.json @@ -0,0 +1,28 @@ +{ + "task-xyz_acq-test1_bold.json": [ + "sub-01/func/sub-01_task-xyz_acq-test1_run-1_bold.nii.gz", + "sub-01/func/sub-01_task-xyz_acq-test1_run-2_bold.nii.gz", + "sub-01/func/sub-01_task-xyz_acq-test1_rec-recon1_bold.nii.gz", + "sub-01/func/sub-01_task-xyz_acq-test1_rec-recon2_bold.nii.gz" + ], + "sub-01/func/sub-01_task-xyz_acq-test1_run-1_bold.nii.gz": { + ".json": [ + "task-xyz_acq-test1_bold.json" + ] + }, + "sub-01/func/sub-01_task-xyz_acq-test1_run-2_bold.nii.gz": { + ".json": [ + "task-xyz_acq-test1_bold.json" + ] + }, + "sub-01/func/sub-01_task-xyz_acq-test1_rec-recon1_bold.nii.gz": { + ".json": [ + "task-xyz_acq-test1_bold.json" + ] + }, + "sub-01/func/sub-01_task-xyz_acq-test1_rec-recon2_bold.nii.gz": { + ".json": [ + "task-xyz_acq-test1_bold.json" + ] + } +} diff --git a/ip112e2v2/sourcedata/ip_metadata.json b/ip112e2v2/sourcedata/ip_metadata.json new file mode 100644 index 000000000..ed4f52bfb --- /dev/null +++ b/ip112e2v2/sourcedata/ip_metadata.json @@ -0,0 +1,26 @@ +{ + "sub-01/func/sub-01_task-xyz_acq-test1_rec-recon1_bold.nii.gz": { + ".json": { + "RepetitionTime": 1.0, + "TaskName": "XYZ" + } + }, + "sub-01/func/sub-01_task-xyz_acq-test1_rec-recon2_bold.nii.gz": { + ".json": { + "RepetitionTime": 1.0, + "TaskName": "XYZ" + } + }, + "sub-01/func/sub-01_task-xyz_acq-test1_run-1_bold.nii.gz": { + ".json": { + "RepetitionTime": 1.0, + "TaskName": "XYZ" + } + }, + "sub-01/func/sub-01_task-xyz_acq-test1_run-2_bold.nii.gz": { + ".json": { + "RepetitionTime": 1.0, + "TaskName": "XYZ" + } + } +} diff --git a/ip112e2v2/sub-01/func/sub-01_task-xyz_acq-test1_rec-recon1_bold.nii.gz b/ip112e2v2/sub-01/func/sub-01_task-xyz_acq-test1_rec-recon1_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip112e2v2/sub-01/func/sub-01_task-xyz_acq-test1_rec-recon2_bold.nii.gz b/ip112e2v2/sub-01/func/sub-01_task-xyz_acq-test1_rec-recon2_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip112e2v2/sub-01/func/sub-01_task-xyz_acq-test1_run-1_bold.nii.gz b/ip112e2v2/sub-01/func/sub-01_task-xyz_acq-test1_run-1_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip112e2v2/sub-01/func/sub-01_task-xyz_acq-test1_run-2_bold.nii.gz b/ip112e2v2/sub-01/func/sub-01_task-xyz_acq-test1_run-2_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip112e2v2/task-xyz_acq-test1_bold.json b/ip112e2v2/task-xyz_acq-test1_bold.json new file mode 100644 index 000000000..fbb45a200 --- /dev/null +++ b/ip112e2v2/task-xyz_acq-test1_bold.json @@ -0,0 +1,5 @@ +{ + "RepetitionTime": 1.0, + "TaskName": "XYZ" +} + diff --git a/ip112e3v1/README.txt b/ip112e3v1/README.txt new file mode 100644 index 000000000..1db106e76 --- /dev/null +++ b/ip112e3v1/README.txt @@ -0,0 +1,41 @@ +The following text is reproduced versbation from version 1.1.2 +of the Brain Imaging Data Structure (BIDS) specification: + + Case 2: Multiple json files at different levels for same task and acquisition parameters + + sub-01/ + sub-01_task-xyz_acq-test1_bold.json + anat/ + func/ + sub-01_task-xyz_acq-test1_run-1_bold.nii.gz + sub-01_task-xyz_acq-test1_rec-recon1_bold.nii.gz + sub-01_task-xyz_acq-test1_rec-recon2_bold.nii.gz + + In the above example, the fields from task-xyz_acq-test1_bold.json file will apply to all bold runs. However, if there is a key with different value in sub-01/func/sub-01_task-xyz_acq-test1_run-1_bold.json, the new value will be applicable for that particular run/task NIfTI file/s. + +Notes: + +- This version of the specification erroneously refers to this example as "Case 2", + incongruent with prior items "Example 1" and "Example 2". + This dataset has instead been named "ip112e3" and described as "the third example" + provided in this version of the specification. + +- The filesystem structure in this example was erroneously formatted. + everything below file "sub-01_task-xyz_acq-test1_bold.json" is erroneously indented + as though that item is a directory rather than a file. + Empty directory "sub-01/anat/" also should not have been shown. + +- Use of the "run" and "rec" entities was erroneous in this example. + The "run" entity should only be used in the presence of repeated acquisitions + from the same sequence where no acquisition parameters differ. + The "rec" entity should distinguish between different image reconstructions + from the same acquisition; + however here, because files "sub-01_task-xyz_acq-test1_rec-recon*_bold.nii.gz" + do *not* match file "sub-01_task-xyz_acq-test1_run-1_bold.nii.gz" due to absence of the "run" entity, + the relationships between these data files is ambiguous. + These have nevertheless been overlooked in the production of this exemplar dataset, + where the purpose is only defining the behaviour of the Inheritance Principle. + +- The proposal modification at the end of the description text + is *not* realised in this example dataset; + that is instead realised in sister dataset "ip112e3v2". diff --git a/ip112e3v1/dataset_description.json b/ip112e3v1/dataset_description.json new file mode 100644 index 000000000..51b60f476 --- /dev/null +++ b/ip112e3v1/dataset_description.json @@ -0,0 +1,9 @@ +{ + "Authors": [ + "Robert E. Smith " + ], + "BIDSVersion": "1.1.2", + "DatasetType": "raw", + "Name": "Inheritance Principle validation; BIDS version 1.1.2; example 3; version 1" +} + diff --git a/ip112e3v1/sourcedata/ip_graph.json b/ip112e3v1/sourcedata/ip_graph.json new file mode 100644 index 000000000..3c2c74817 --- /dev/null +++ b/ip112e3v1/sourcedata/ip_graph.json @@ -0,0 +1,22 @@ +{ + "sub-01/sub-01_task-xyz_acq-test1_bold.json": [ + "sub-01/func/sub-01_task-xyz_acq-test1_run-1_bold.nii.gz", + "sub-01/func/sub-01_task-xyz_acq-test1_rec-recon1_bold.nii.gz", + "sub-01/func/sub-01_task-xyz_acq-test1_rec-recon2_bold.nii.gz" + ], + "sub-01/func/sub-01_task-xyz_acq-test1_run-1_bold.nii.gz": { + ".json": [ + "sub-01/sub-01_task-xyz_acq-test1_bold.json" + ] + }, + "sub-01/func/sub-01_task-xyz_acq-test1_rec-recon1_bold.nii.gz": { + ".json": [ + "sub-01/sub-01_task-xyz_acq-test1_bold.json" + ] + }, + "sub-01/func/sub-01_task-xyz_acq-test1_rec-recon2_bold.nii.gz": { + ".json": [ + "sub-01/sub-01_task-xyz_acq-test1_bold.json" + ] + } +} diff --git a/ip112e3v1/sourcedata/ip_metadata.json b/ip112e3v1/sourcedata/ip_metadata.json new file mode 100644 index 000000000..1bd583367 --- /dev/null +++ b/ip112e3v1/sourcedata/ip_metadata.json @@ -0,0 +1,23 @@ +{ + "sub-01/func/sub-01_task-xyz_acq-test1_rec-recon1_bold.nii.gz": { + ".json": { + "RepetitionTime": 1.0, + "Source": "sub", + "TaskName": "XYZ" + } + }, + "sub-01/func/sub-01_task-xyz_acq-test1_rec-recon2_bold.nii.gz": { + ".json": { + "RepetitionTime": 1.0, + "Source": "sub", + "TaskName": "XYZ" + } + }, + "sub-01/func/sub-01_task-xyz_acq-test1_run-1_bold.nii.gz": { + ".json": { + "RepetitionTime": 1.0, + "Source": "sub", + "TaskName": "XYZ" + } + } +} diff --git a/ip112e3v1/sub-01/func/sub-01_task-xyz_acq-test1_rec-recon1_bold.nii.gz b/ip112e3v1/sub-01/func/sub-01_task-xyz_acq-test1_rec-recon1_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip112e3v1/sub-01/func/sub-01_task-xyz_acq-test1_rec-recon2_bold.nii.gz b/ip112e3v1/sub-01/func/sub-01_task-xyz_acq-test1_rec-recon2_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip112e3v1/sub-01/func/sub-01_task-xyz_acq-test1_run-1_bold.nii.gz b/ip112e3v1/sub-01/func/sub-01_task-xyz_acq-test1_run-1_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip112e3v1/sub-01/sub-01_task-xyz_acq-test1_bold.json b/ip112e3v1/sub-01/sub-01_task-xyz_acq-test1_bold.json new file mode 100644 index 000000000..11be4cc2c --- /dev/null +++ b/ip112e3v1/sub-01/sub-01_task-xyz_acq-test1_bold.json @@ -0,0 +1,5 @@ +{ + "RepetitionTime": 1.0, + "Source": "sub", + "TaskName": "XYZ" +} diff --git a/ip112e3v2/README.txt b/ip112e3v2/README.txt new file mode 100644 index 000000000..53b043982 --- /dev/null +++ b/ip112e3v2/README.txt @@ -0,0 +1,56 @@ +The following text is reproduced versbation from version 1.1.2 +of the Brain Imaging Data Structure (BIDS) specification: + + Case 2: Multiple json files at different levels for same task and acquisition parameters + + sub-01/ + sub-01_task-xyz_acq-test1_bold.json + anat/ + func/ + sub-01_task-xyz_acq-test1_run-1_bold.nii.gz + sub-01_task-xyz_acq-test1_rec-recon1_bold.nii.gz + sub-01_task-xyz_acq-test1_rec-recon2_bold.nii.gz + + In the above example, the fields from task-xyz_acq-test1_bold.json file will apply to all bold runs. However, if there is a key with different value in sub-01/func/sub-01_task-xyz_acq-test1_run-1_bold.json, the new value will be applicable for that particular run/task NIfTI file/s. + +Notes: + +- This version of the specification erroneously refers to this example as "Case 2", + incongruent with prior items "Example 1" and "Example 2". + This dataset has instead been named "ip112e3v2" and described as "the third example" + provided in this version of the specification. + +- The filesystem structure in this example was erroneously formatted. + everything below file "sub-01_task-xyz_acq-test1_bold.json" is erroneously indented + as though that item is a directory rather than a file. + Empty directory "sub-01/anat/" also should not have been shown. + +- Use of the "run" and "rec" entities was erroneous in this example. + The "run" entity should only be used in the presence of repeated acquisitions + from the same sequence where no acquisition parameters differ. + The "rec" entity should distinguish between different image reconstructions + from the same acquisition; + however here, because files "sub-01_task-xyz_acq-test1_rec-recon*_bold.nii.gz" + do *not* match file "sub-01_task-xyz_acq-test1_run-1_bold.nii.gz" due to absence of the "run" entity, + the relationships between these data files is ambiguous. + These have nevertheless been overlooked in the production of this exemplar dataset, + where the purpose is only defining the behaviour of the Inheritance Principle. + +- This exemplar dataset realises the proposed modification at the end of the description text. + The actual filesystem structure is therefore: + + sub-01/ + sub-01_task-xyz_acq-test1_bold.json + anat/ + func/ + sub-01_task-xyz_acq-test1_run-1_bold.json + sub-01_task-xyz_acq-test1_run-1_bold.nii.gz + sub-01_task-xyz_acq-test1_rec-recon1_bold.nii.gz + sub-01_task-xyz_acq-test1_rec-recon2_bold.nii.gz + + Further, files "sub-01/sub-01_task-xyz_acq-test1_bold.json" + and "sub-01/func/sub-01_task-xyz_acq-test1_run-1_bold.json" + are not empty, but contain metadata fields + intended to demonstrate the overloading of metadata fields. + Sister dataset "ip112e3v1" shows this same exemplar + without the integration of this proposed modification. diff --git a/ip112e3v2/dataset_description.json b/ip112e3v2/dataset_description.json new file mode 100644 index 000000000..5877bd1c5 --- /dev/null +++ b/ip112e3v2/dataset_description.json @@ -0,0 +1,9 @@ +{ + "Authors": [ + "Robert E. Smith " + ], + "BIDSVersion": "1.1.2", + "DatasetType": "raw", + "Name": "Inheritance Principle validation; BIDS version 1.1.2; example 3; version 2" +} + diff --git a/ip112e3v2/sourcedata/ip_graph.json b/ip112e3v2/sourcedata/ip_graph.json new file mode 100644 index 000000000..d9ed0535b --- /dev/null +++ b/ip112e3v2/sourcedata/ip_graph.json @@ -0,0 +1,26 @@ +{ + "sub-01/sub-01_task-xyz_acq-test1_bold.json": [ + "sub-01/func/sub-01_task-xyz_acq-test1_run-1_bold.nii.gz", + "sub-01/func/sub-01_task-xyz_acq-test1_rec-recon1_bold.nii.gz", + "sub-01/func/sub-01_task-xyz_acq-test1_rec-recon2_bold.nii.gz" + ], + "sub-01/func/sub-01_task-xyz_acq-test1_run-1_bold.json": [ + "sub-01/func/sub-01_task-xyz_acq-test1_run-1_bold.nii.gz" + ], + "sub-01/func/sub-01_task-xyz_acq-test1_run-1_bold.nii.gz": { + ".json": [ + "sub-01/sub-01_task-xyz_acq-test1_bold.json", + "sub-01/func/sub-01_task-xyz_acq-test1_run-1_bold.json" + ] + }, + "sub-01/func/sub-01_task-xyz_acq-test1_rec-recon1_bold.nii.gz": { + ".json": [ + "sub-01/sub-01_task-xyz_acq-test1_bold.json" + ] + }, + "sub-01/func/sub-01_task-xyz_acq-test1_rec-recon2_bold.nii.gz": { + ".json": [ + "sub-01/sub-01_task-xyz_acq-test1_bold.json" + ] + } +} diff --git a/ip112e3v2/sourcedata/ip_metadata.json b/ip112e3v2/sourcedata/ip_metadata.json new file mode 100644 index 000000000..cccdfabae --- /dev/null +++ b/ip112e3v2/sourcedata/ip_metadata.json @@ -0,0 +1,27 @@ +{ + "sub-01/func/sub-01_task-xyz_acq-test1_rec-recon1_bold.nii.gz": { + ".json": { + "RepetitionTime": 1.0, + "SubjectOnly": true, + "OverloadSource": "sub", + "TaskName": "XYZ" + } + }, + "sub-01/func/sub-01_task-xyz_acq-test1_rec-recon2_bold.nii.gz": { + ".json": { + "RepetitionTime": 1.0, + "SubjectOnly": true, + "OverloadSource": "sub", + "TaskName": "XYZ" + } + }, + "sub-01/func/sub-01_task-xyz_acq-test1_run-1_bold.nii.gz": { + ".json": { + "FuncOnly": true, + "RepetitionTime": 1.0, + "SubjectOnly": true, + "OverloadSource": "func", + "TaskName": "XYZ" + } + } +} diff --git a/ip112e3v2/sub-01/func/sub-01_task-xyz_acq-test1_rec-recon1_bold.nii.gz b/ip112e3v2/sub-01/func/sub-01_task-xyz_acq-test1_rec-recon1_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip112e3v2/sub-01/func/sub-01_task-xyz_acq-test1_rec-recon2_bold.nii.gz b/ip112e3v2/sub-01/func/sub-01_task-xyz_acq-test1_rec-recon2_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip112e3v2/sub-01/func/sub-01_task-xyz_acq-test1_run-1_bold.json b/ip112e3v2/sub-01/func/sub-01_task-xyz_acq-test1_run-1_bold.json new file mode 100644 index 000000000..d18a360c7 --- /dev/null +++ b/ip112e3v2/sub-01/func/sub-01_task-xyz_acq-test1_run-1_bold.json @@ -0,0 +1,4 @@ +{ + "FuncOnly": true, + "OverloadSource": "func" +} diff --git a/ip112e3v2/sub-01/func/sub-01_task-xyz_acq-test1_run-1_bold.nii.gz b/ip112e3v2/sub-01/func/sub-01_task-xyz_acq-test1_run-1_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip112e3v2/sub-01/sub-01_task-xyz_acq-test1_bold.json b/ip112e3v2/sub-01/sub-01_task-xyz_acq-test1_bold.json new file mode 100644 index 000000000..25813ffff --- /dev/null +++ b/ip112e3v2/sub-01/sub-01_task-xyz_acq-test1_bold.json @@ -0,0 +1,6 @@ +{ + "RepetitionTime": 1.0, + "SubjectOnly": true, + "OverloadSource": "sub", + "TaskName": "XYZ" +} diff --git a/ip170badrelpath/README.txt b/ip170badrelpath/README.txt new file mode 100644 index 000000000..10aa7632d --- /dev/null +++ b/ip170badrelpath/README.txt @@ -0,0 +1,33 @@ +The following exerpt is duplicated from version 1.1.2 +of the Brain Imaging Data Structure (BIDS) specification: + + Files for a particular participant can exist only at participant level directory, + i.e /dataset/sub-*[/ses-*]/sub-*_T1w.json. + Similarly, any file that is not specific to a participant is to be declared + only at top level of dataset + for eg: task-sist_bold.json must be placed under /dataset/task-sist_bold.json. + +The following exerpt is duplicated from version 1.7.0 +of the Brain Imaging Data Structure (BIDS) specification: + + 2. For a given data file, any metadata file is applicable to that data file if: + + a. It is stored at the same directory level or higher; + b. The metadata and the data filenames possess the same suffix; + c. The metadata filename does not include any entity absent from the data filename. + + 3. A metadata file MUST NOT have a filename that would be otherwise applicable to some data file based on rules 2.b and 2.c but is made inapplicable based on its location in the directory structure as per rule 2.a. + +Notes: + +- This particular example dataset has been engineered in such a way + that it would satisfy the criteria described in BIDS 1.1.2 + but fail the rule introduced in BIDS 1.7.0. + File "sub-01/ses-01/anat/sub-01_T1w.json" is "in a participant level directory", + and its entities match file "sub-01/ses-02/anat/sub-01_ses-02_T1w.nii.gz", + yet it can't be associated with that data file due to not being within one of its parent directories. + +- Similarly to dataset "ip112badmetapathe*", + there are intentionally two T1w runs included in this dataset + in order to prevent unwanted warnings relating to an + exclusively-matched non-sidecar data-metadata file pair. diff --git a/ip170badrelpath/dataset_description.json b/ip170badrelpath/dataset_description.json new file mode 100644 index 000000000..776580d33 --- /dev/null +++ b/ip170badrelpath/dataset_description.json @@ -0,0 +1,9 @@ +{ + "Authors": [ + "Robert E. Smith " + ], + "BIDSVersion": "1.7.0", + "DatasetType": "raw", + "Name": "Inheritance Principle validation; specification version 1.7.0; bad filesystem relative path between data and metadata files" +} + diff --git a/ip170badrelpath/sourcedata/ip_graph.json b/ip170badrelpath/sourcedata/ip_graph.json new file mode 100644 index 000000000..c09242470 --- /dev/null +++ b/ip170badrelpath/sourcedata/ip_graph.json @@ -0,0 +1,18 @@ +{ + "sub-01/ses-01/anat/sub-01_T1w.json": [ + "sub-01/ses-01/anat/sub-01_ses-01_run-1_T1w.nii.gz", + "sub-01/ses-01/anat/sub-01_ses-01_run-2_T1w.nii.gz" + ], + "sub-01/ses-01/anat/sub-01_ses-01_run-1_T1w.nii.gz": { + ".json": [ + "sub-01/ses-01/anat/sub-01_T1w.json" + ] + }, + "sub-01/ses-01/anat/sub-01_ses-01_run-2_T1w.nii.gz": { + ".json": [ + "sub-01/ses-01/anat/sub-01_T1w.json" + ] + }, + "sub-01/ses-02/anat/sub-01_ses-02_T1w.nii.gz": { + } +} diff --git a/ip170badrelpath/sourcedata/ip_metadata.json b/ip170badrelpath/sourcedata/ip_metadata.json new file mode 100644 index 000000000..0fefce4a2 --- /dev/null +++ b/ip170badrelpath/sourcedata/ip_metadata.json @@ -0,0 +1,14 @@ +{ + "sub-01/ses-01/anat/sub-01_ses-01_run-1_T1w.nii.gz": { + ".json": { + "Sub01Ses01AnatT1w": true + } + }, + "sub-01/ses-01/anat/sub-01_ses-01_run-2_T1w.nii.gz": { + ".json": { + "Sub01Ses01AnatT1w": true + } + }, + "sub-01/ses-02/anat/sub-01_ses-02_T1w.nii.gz": { + } +} diff --git a/ip170badrelpath/sub-01/ses-01/anat/sub-01_T1w.json b/ip170badrelpath/sub-01/ses-01/anat/sub-01_T1w.json new file mode 100644 index 000000000..4f699fd32 --- /dev/null +++ b/ip170badrelpath/sub-01/ses-01/anat/sub-01_T1w.json @@ -0,0 +1,3 @@ +{ + "Sub01Ses01AnatT1w": true +} diff --git a/ip170badrelpath/sub-01/ses-01/anat/sub-01_ses-01_run-1_T1w.nii.gz b/ip170badrelpath/sub-01/ses-01/anat/sub-01_ses-01_run-1_T1w.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip170badrelpath/sub-01/ses-01/anat/sub-01_ses-01_run-2_T1w.nii.gz b/ip170badrelpath/sub-01/ses-01/anat/sub-01_ses-01_run-2_T1w.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip170badrelpath/sub-01/ses-02/anat/sub-01_ses-02_T1w.nii.gz b/ip170badrelpath/sub-01/ses-02/anat/sub-01_ses-02_T1w.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip170e1/README.txt b/ip170e1/README.txt new file mode 100644 index 000000000..16564d80a --- /dev/null +++ b/ip170e1/README.txt @@ -0,0 +1,23 @@ +The following text is reproduced verbatim from version 1.7.0 +of the Brain Imaging Data Structure (BIDS) specification: + + Example 1: Demonstration of inheritance principle + + ├─ sub-01/ + │ └─ func/ + │ ├─ sub-01_task-rest_acq-default_bold.nii.gz + │ ├─ sub-01_task-rest_acq-longtr_bold.nii.gz + │ └─ sub-01_task-rest_acq-longtr_bold.json + └─ task-rest_bold.json + + Contents of file task-rest_bold.json: + { + "EchoTime": 0.040, + "RepetitionTime": 1.0 + } + Contents of file sub-01/func/sub-01_task-rest_acq-longtr_bold.json: + { + "RepetitionTime": 3.0 + } + When reading image sub-01/func/sub-01_task-rest_acq-default_bold.nii.gz, only metadata file task-rest_bold.json is read; file sub-01/func/sub-01_task-rest_acq-longtr_bold.json is inapplicable as it contains entity "acq-longtr" that is absent from the image path (rule 2.c). + When reading image sub-01/func/sub-01_task-rest_acq-longtr_bold.nii.gz, metadata file task-rest_bold.json at the top level is read first, followed by file sub-01/func/sub-01_task-rest_acq-longtr_bold.json at the bottom level (rule 5.b); the value for field "RepetitionTime" is therefore overridden to the value 3.0. The value for field "EchoTime" remains applicable to that image, and is not unset by its absence in the metadata file at the lower level (rule 5.b; corollary 3). diff --git a/ip170e1/dataset_description.json b/ip170e1/dataset_description.json new file mode 100644 index 000000000..d2776f65d --- /dev/null +++ b/ip170e1/dataset_description.json @@ -0,0 +1,9 @@ +{ + "Authors": [ + "Robert E. Smith " + ], + "BIDSVersion": "1.7.0", + "DatasetType": "raw", + "Name": "Inheritance Principle validation; BIDS version 1.7.0; example 1" +} + diff --git a/ip170e1/sourcedata/ip_graph.json b/ip170e1/sourcedata/ip_graph.json new file mode 100644 index 000000000..da312c4b6 --- /dev/null +++ b/ip170e1/sourcedata/ip_graph.json @@ -0,0 +1,20 @@ +{ + "task-rest_bold.json": [ + "sub-01/func/sub-01_task-rest_acq-default_bold.nii.gz", + "sub-01/func/sub-01_task-rest_acq-longtr_bold.nii.gz" + ], + "sub-01/func/sub-01_task-rest_acq-longtr_bold.json": [ + "sub-01/func/sub-01_task-rest_acq-longtr_bold.nii.gz" + ], + "sub-01/func/sub-01_task-rest_acq-default_bold.nii.gz": { + ".json": [ + "task-rest_bold.json" + ] + }, + "sub-01/func/sub-01_task-rest_acq-longtr_bold.nii.gz": { + ".json": [ + "task-rest_bold.json", + "sub-01/func/sub-01_task-rest_acq-longtr_bold.json" + ] + } +} diff --git a/ip170e1/sourcedata/ip_metadata.json b/ip170e1/sourcedata/ip_metadata.json new file mode 100644 index 000000000..916ed4a4b --- /dev/null +++ b/ip170e1/sourcedata/ip_metadata.json @@ -0,0 +1,16 @@ +{ + "sub-01/func/sub-01_task-rest_acq-default_bold.nii.gz": { + ".json": { + "EchoTime": 0.040, + "RepetitionTime": 1.0, + "TaskName": "Resting-state" + } + }, + "sub-01/func/sub-01_task-rest_acq-longtr_bold.nii.gz": { + ".json": { + "EchoTime": 0.040, + "RepetitionTime": 3.0, + "TaskName": "Resting-state" + } + } +} diff --git a/ip170e1/sourcedata/ip_overrides.json b/ip170e1/sourcedata/ip_overrides.json new file mode 100644 index 000000000..a0a6609de --- /dev/null +++ b/ip170e1/sourcedata/ip_overrides.json @@ -0,0 +1,5 @@ +{ + "sub-01/func/sub-01_task-rest_acq-longtr_bold.nii.gz": [ + "RepetitionTime" + ] +} diff --git a/ip170e1/sub-01/func/sub-01_task-rest_acq-default_bold.nii.gz b/ip170e1/sub-01/func/sub-01_task-rest_acq-default_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip170e1/sub-01/func/sub-01_task-rest_acq-longtr_bold.json b/ip170e1/sub-01/func/sub-01_task-rest_acq-longtr_bold.json new file mode 100644 index 000000000..c7f5c27b5 --- /dev/null +++ b/ip170e1/sub-01/func/sub-01_task-rest_acq-longtr_bold.json @@ -0,0 +1,3 @@ +{ + "RepetitionTime": 3.0 +} diff --git a/ip170e1/sub-01/func/sub-01_task-rest_acq-longtr_bold.nii.gz b/ip170e1/sub-01/func/sub-01_task-rest_acq-longtr_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip170e1/task-rest_bold.json b/ip170e1/task-rest_bold.json new file mode 100644 index 000000000..7d546dd71 --- /dev/null +++ b/ip170e1/task-rest_bold.json @@ -0,0 +1,5 @@ +{ + "EchoTime": 0.040, + "RepetitionTime": 1.0, + "TaskName": "Resting-state" +} diff --git a/ip170e2/README.txt b/ip170e2/README.txt new file mode 100644 index 000000000..073373881 --- /dev/null +++ b/ip170e2/README.txt @@ -0,0 +1,26 @@ +The following text is reproduced verbatim from version 1.7.0 +of the Brain Imaging Data Structure (BIDS) specification: + + Example 2: Impermissible use of multiple metadata files at one directory level (rule 4) + + └─ sub-01/ + └─ ses-test/ + ├─ anat/ + │ └─ sub-01_ses-test_T1w.nii.gz + └─ func/ + ├─ sub-01_ses-test_task-overtverbgeneration_run-1_bold.nii.gz + ├─ sub-01_ses-test_task-overtverbgeneration_run-2_bold.nii.gz + ├─ sub-01_ses-test_task-overtverbgeneration_bold.json + └─ sub-01_ses-test_task-overtverbgeneration_run-2_bold.json + +Notes: + +- This example is intentionally in violation of the Inheritance Principle + for the version against which it was devised. + For data file "sub-01_ses-test_task-overtverbgeneration_run-2_bold.nii.gz", + both metadata JSON files in the dataset are considered applicable + based on the entities / suffix / location in the filesystem hierarchy. + This is however impermissible specifically because they are at the *same* + location in the filesystem hierarchy. + It is therefore expected that this dataset should fail tests performed + based on the ruleset of the Inheritance Principle for this specification version. diff --git a/ip170e2/dataset_description.json b/ip170e2/dataset_description.json new file mode 100644 index 000000000..6198b68da --- /dev/null +++ b/ip170e2/dataset_description.json @@ -0,0 +1,9 @@ +{ + "Authors": [ + "Robert E. Smith " + ], + "BIDSVersion": "1.7.0", + "DatasetType": "raw", + "Name": "Inheritance Principle validation; BIDS version 1.7.0; non-compliant example 2" +} + diff --git a/ip170e2/sourcedata/ip_graph.json b/ip170e2/sourcedata/ip_graph.json new file mode 100644 index 000000000..6681af0aa --- /dev/null +++ b/ip170e2/sourcedata/ip_graph.json @@ -0,0 +1,22 @@ +{ + "sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_bold.json": [ + "sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-1_bold.nii.gz", + "sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-2_bold.nii.gz" + ], + "sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-2_bold.json": [ + "sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-2_bold.nii.gz" + ], + "sub-01/ses-test/anat/sub-01_ses-test_T1w.nii.gz": { + }, + "sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-1_bold.nii.gz": { + ".json": [ + "sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_bold.json" + ] + }, + "sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-2_bold.nii.gz": { + ".json": [ + "sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_bold.json", + "sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-2_bold.json" + ] + } +} diff --git a/ip170e2/sourcedata/ip_metadata.json b/ip170e2/sourcedata/ip_metadata.json new file mode 100644 index 000000000..843e24db2 --- /dev/null +++ b/ip170e2/sourcedata/ip_metadata.json @@ -0,0 +1,19 @@ +{ + "sub-01/ses-test/anat/sub-01_ses-test_T1w.nii.gz": { + }, + "sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-1_bold.nii.gz": { + ".json": { + "RepetitionTime": 1.0, + "Sub01SesTestTaskOVGBOLD": true, + "TaskName": "OvertVerbGeneration" + } + }, + "sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-2_bold.nii.gz": { + ".json": { + "RepetitionTime": 1.0, + "Sub01SesTestTaskOVGBOLD": true, + "Sub01SesTestTaskOVGRun2BOLD": true, + "TaskName": "OvertVerbGeneration" + } + } +} diff --git a/ip170e2/sub-01/ses-test/anat/sub-01_ses-test_T1w.nii.gz b/ip170e2/sub-01/ses-test/anat/sub-01_ses-test_T1w.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip170e2/sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_bold.json b/ip170e2/sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_bold.json new file mode 100644 index 000000000..f1f34643a --- /dev/null +++ b/ip170e2/sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_bold.json @@ -0,0 +1,6 @@ +{ + "RepetitionTime": 1.0, + "Sub01SesTestTaskOVGBOLD": true, + "TaskName": "OvertVerbGeneration" +} + diff --git a/ip170e2/sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-1_bold.nii.gz b/ip170e2/sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-1_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip170e2/sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-2_bold.json b/ip170e2/sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-2_bold.json new file mode 100644 index 000000000..8d96106e9 --- /dev/null +++ b/ip170e2/sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-2_bold.json @@ -0,0 +1,4 @@ +{ + "Sub01SesTestTaskOVGRun2BOLD": true +} + diff --git a/ip170e2/sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-2_bold.nii.gz b/ip170e2/sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-2_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip170e3/README.txt b/ip170e3/README.txt new file mode 100644 index 000000000..c0c07c3a9 --- /dev/null +++ b/ip170e3/README.txt @@ -0,0 +1,14 @@ +The following text is repeated verbatim from version 1.7.0 +of the Brain Imaging Data Structure (BIDS) specification: + + Example 3: Modification of filesystem structure from Example 2 to satisfy inheritance principle requirements + + └─ sub-01/ + └─ ses-test/ + ├─ sub-01_ses-test_task-overtverbgeneration_bold.json + ├─ anat/ + │ └─ sub-01_ses-test_T1w.nii.gz + └─ func/ + ├─ sub-01_ses-test_task-overtverbgeneration_run-1_bold.nii.gz + ├─ sub-01_ses-test_task-overtverbgeneration_run-2_bold.nii.gz + └─ sub-01_ses-test_task-overtverbgeneration_run-2_bold.json diff --git a/ip170e3/dataset_description.json b/ip170e3/dataset_description.json new file mode 100644 index 000000000..36a027f3c --- /dev/null +++ b/ip170e3/dataset_description.json @@ -0,0 +1,9 @@ +{ + "Authors": [ + "Robert E. Smith " + ], + "BIDSVersion": "1.7.0", + "DatasetType": "raw", + "Name": "Inheritance Principle validation; BIDS version 1.7.0; example 3" +} + diff --git a/ip170e3/sourcedata/ip_graph.json b/ip170e3/sourcedata/ip_graph.json new file mode 100644 index 000000000..375997cb7 --- /dev/null +++ b/ip170e3/sourcedata/ip_graph.json @@ -0,0 +1,22 @@ +{ + "sub-01/ses-test/sub-01_ses-test_task-overtverbgeneration_bold.json": [ + "sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-1_bold.nii.gz", + "sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-2_bold.nii.gz" + ], + "sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-2_bold.json": [ + "sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-2_bold.nii.gz" + ], + "sub-01/ses-test/anat/sub-01_ses-test_T1w.nii.gz": { + }, + "sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-1_bold.nii.gz": { + ".json": [ + "sub-01/ses-test/sub-01_ses-test_task-overtverbgeneration_bold.json" + ] + }, + "sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-2_bold.nii.gz": { + ".json": [ + "sub-01/ses-test/sub-01_ses-test_task-overtverbgeneration_bold.json", + "sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-2_bold.json" + ] + } +} diff --git a/ip170e3/sourcedata/ip_metadata.json b/ip170e3/sourcedata/ip_metadata.json new file mode 100644 index 000000000..9e40cb34c --- /dev/null +++ b/ip170e3/sourcedata/ip_metadata.json @@ -0,0 +1,22 @@ +{ + "sub-01/ses-test/anat/sub-01_ses-test_T1w.nii.gz": { + }, + "sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-1_bold.nii.gz": { + ".json": { + "Lowest": "Sub01SesTestTaskOVGBOLD", + "RepetitionTime": 1.0, + "Sub01SesTestTaskOVGBOLD": true, + "TaskName": "OvertVerbGeneration" + } + }, + "sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-2_bold.nii.gz": { + ".json": { + "Lowest": "Sub01SesTestTaskOVGRun2BOLD", + "RepetitionTime": 1.0, + "Sub01SesTestTaskOVGBOLD": true, + "Sub01SesTestTaskOVGRun2BOLD": true, + "TaskName": "OvertVerbGeneration" + } + } +} + diff --git a/ip170e3/sub-01/ses-test/anat/sub-01_ses-test_T1w.nii.gz b/ip170e3/sub-01/ses-test/anat/sub-01_ses-test_T1w.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip170e3/sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-1_bold.nii.gz b/ip170e3/sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-1_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip170e3/sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-2_bold.json b/ip170e3/sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-2_bold.json new file mode 100644 index 000000000..0ff2acd87 --- /dev/null +++ b/ip170e3/sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-2_bold.json @@ -0,0 +1,5 @@ +{ + "Lowest": "Sub01SesTestTaskOVGRun2BOLD", + "Sub01SesTestTaskOVGRun2BOLD": true +} + diff --git a/ip170e3/sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-2_bold.nii.gz b/ip170e3/sub-01/ses-test/func/sub-01_ses-test_task-overtverbgeneration_run-2_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip170e3/sub-01/ses-test/sub-01_ses-test_task-overtverbgeneration_bold.json b/ip170e3/sub-01/ses-test/sub-01_ses-test_task-overtverbgeneration_bold.json new file mode 100644 index 000000000..84b7175bc --- /dev/null +++ b/ip170e3/sub-01/ses-test/sub-01_ses-test_task-overtverbgeneration_bold.json @@ -0,0 +1,6 @@ +{ + "Lowest": "Sub01SesTestTaskOVGBOLD", + "RepetitionTime": 1.0, + "Sub01SesTestTaskOVGBOLD": true, + "TaskName": "OvertVerbGeneration" +} diff --git a/ip170e4/README.txt b/ip170e4/README.txt new file mode 100644 index 000000000..c788ca222 --- /dev/null +++ b/ip170e4/README.txt @@ -0,0 +1,11 @@ +The following text is reproduced verbatim from version 1.7.0 +of the Brain Imaging Data Structure (BIDS) specification: + + Example 4: Single metadata file applying to multiple data files (corollary 2) + + └─ sub-01/ + ├─ anat/ + └─ func/ + ├─ sub-01_task-xyz_acq-test1_run-1_bold.nii.gz + ├─ sub-01_task-xyz_acq-test1_run-2_bold.nii.gz + └─ sub-01_task-xyz_acq-test1_bold.json diff --git a/ip170e4/dataset_description.json b/ip170e4/dataset_description.json new file mode 100644 index 000000000..22a3320e4 --- /dev/null +++ b/ip170e4/dataset_description.json @@ -0,0 +1,9 @@ +{ + "Authors": [ + "Robert E. Smith " + ], + "BIDSVersion": "1.7.0", + "DatasetType": "raw", + "Name": "Inheritance Principle validation; BIDS version 1.7.0; example 4" +} + diff --git a/ip170e4/sourcedata/ip_graph.json b/ip170e4/sourcedata/ip_graph.json new file mode 100644 index 000000000..efa713976 --- /dev/null +++ b/ip170e4/sourcedata/ip_graph.json @@ -0,0 +1,17 @@ +{ + "sub-01/func/sub-01_task-xyz_acq-test1_bold.json": [ + "sub-01/func/sub-01_task-xyz_acq-test1_run-1_bold.nii.gz", + "sub-01/func/sub-01_task-xyz_acq-test1_run-2_bold.nii.gz" + ], + "sub-01/func/sub-01_task-xyz_acq-test1_run-1_bold.nii.gz": { + ".json": [ + "sub-01/func/sub-01_task-xyz_acq-test1_bold.json" + ] + }, + "sub-01/func/sub-01_task-xyz_acq-test1_run-2_bold.nii.gz": { + ".json": [ + "sub-01/func/sub-01_task-xyz_acq-test1_bold.json" + ] + } +} + diff --git a/ip170e4/sourcedata/ip_metadata.json b/ip170e4/sourcedata/ip_metadata.json new file mode 100644 index 000000000..7a5bbfe71 --- /dev/null +++ b/ip170e4/sourcedata/ip_metadata.json @@ -0,0 +1,14 @@ +{ + "sub-01/func/sub-01_task-xyz_acq-test1_run-1_bold.nii.gz": { + ".json": { + "RepetitionTime": 1.0, + "TaskName": "XYZ" + } + }, + "sub-01/func/sub-01_task-xyz_acq-test1_run-2_bold.nii.gz": { + ".json": { + "RepetitionTime": 1.0, + "TaskName": "XYZ" + } + } +} diff --git a/ip170e4/sub-01/func/sub-01_task-xyz_acq-test1_bold.json b/ip170e4/sub-01/func/sub-01_task-xyz_acq-test1_bold.json new file mode 100644 index 000000000..fbb45a200 --- /dev/null +++ b/ip170e4/sub-01/func/sub-01_task-xyz_acq-test1_bold.json @@ -0,0 +1,5 @@ +{ + "RepetitionTime": 1.0, + "TaskName": "XYZ" +} + diff --git a/ip170e4/sub-01/func/sub-01_task-xyz_acq-test1_run-1_bold.nii.gz b/ip170e4/sub-01/func/sub-01_task-xyz_acq-test1_run-1_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ip170e4/sub-01/func/sub-01_task-xyz_acq-test1_run-2_bold.nii.gz b/ip170e4/sub-01/func/sub-01_task-xyz_acq-test1_run-2_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipabsent/README.txt b/ipabsent/README.txt new file mode 100644 index 000000000..c7316829a --- /dev/null +++ b/ipabsent/README.txt @@ -0,0 +1,6 @@ +This dataset serves as an exemplar where there is some degree of complexity +to the filesystem structure, +but there is no use of the Inheritance Principle. +It is included as a test dataset +so that the "ruleset" wherein use of the Inheritance Principle is expressly forbidden +can be verified operational. diff --git a/ipabsent/dataset_description.json b/ipabsent/dataset_description.json new file mode 100644 index 000000000..a0d7efe37 --- /dev/null +++ b/ipabsent/dataset_description.json @@ -0,0 +1,9 @@ +{ + "Authors": [ + "Robert E. Smith " + ], + "BIDSVersion": "1.1.2", + "DatasetType": "raw", + "Name": "Inheritance Principle validation; BIDS version 1.1.2; no use of inheritance principle (ie. absent)" +} + diff --git a/ipabsent/sourcedata/ip_graph.json b/ipabsent/sourcedata/ip_graph.json new file mode 100644 index 000000000..34d6566af --- /dev/null +++ b/ipabsent/sourcedata/ip_graph.json @@ -0,0 +1,131 @@ +{ + "sub-01/ses-01/anat/sub-01_ses-01_T1w.json": [ + "sub-01/ses-01/anat/sub-01_ses-01_T1w.nii.gz" + ], + "sub-01/ses-01/anat/sub-01_ses-01_T1w.nii.gz": { + ".json": [ + "sub-01/ses-01/anat/sub-01_ses-01_T1w.json" + ] + }, + "sub-01/ses-01/anat/sub-01_ses-01_T2w.json": [ + "sub-01/ses-01/anat/sub-01_ses-01_T2w.nii.gz" + ], + "sub-01/ses-01/anat/sub-01_ses-01_T2w.nii.gz": { + ".json": [ + "sub-01/ses-01/anat/sub-01_ses-01_T2w.json" + ] + }, + "sub-01/ses-02/anat/sub-01_ses-02_T1w.json": [ + "sub-01/ses-02/anat/sub-01_ses-02_T1w.nii.gz" + ], + "sub-01/ses-02/anat/sub-01_ses-02_T1w.nii.gz": { + ".json": [ + "sub-01/ses-02/anat/sub-01_ses-02_T1w.json" + ] + }, + "sub-01/ses-02/anat/sub-01_ses-02_T2w.json": [ + "sub-01/ses-02/anat/sub-01_ses-02_T2w.nii.gz" + ], + "sub-01/ses-02/anat/sub-01_ses-02_T2w.nii.gz": { + ".json": [ + "sub-01/ses-02/anat/sub-01_ses-02_T2w.json" + ] + }, + "sub-01/ses-01/func/sub-01_ses-01_task-name_bold.json": [ + "sub-01/ses-01/func/sub-01_ses-01_task-name_bold.nii.gz" + ], + "sub-01/ses-01/func/sub-01_ses-01_task-name_bold.nii.gz": { + ".json": [ + "sub-01/ses-01/func/sub-01_ses-01_task-name_bold.json" + ] + }, + "sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.json": [ + "sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz" + ], + "sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz": { + ".json": [ + "sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.json" + ] + }, + "sub-01/ses-02/func/sub-01_ses-02_task-name_bold.json": [ + "sub-01/ses-02/func/sub-01_ses-02_task-name_bold.nii.gz" + ], + "sub-01/ses-02/func/sub-01_ses-02_task-name_bold.nii.gz": { + ".json": [ + "sub-01/ses-02/func/sub-01_ses-02_task-name_bold.json" + ] + }, + "sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.json": [ + "sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.nii.gz" + ], + "sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.nii.gz": { + ".json": [ + "sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.json" + ] + }, + "sub-02/ses-01/anat/sub-02_ses-01_T1w.json": [ + "sub-02/ses-01/anat/sub-02_ses-01_T1w.nii.gz" + ], + "sub-02/ses-01/anat/sub-02_ses-01_T1w.nii.gz": { + ".json": [ + "sub-02/ses-01/anat/sub-02_ses-01_T1w.json" + ] + }, + "sub-02/ses-01/anat/sub-02_ses-01_T2w.json": [ + "sub-02/ses-01/anat/sub-02_ses-01_T2w.nii.gz" + ], + "sub-02/ses-01/anat/sub-02_ses-01_T2w.nii.gz": { + ".json": [ + "sub-02/ses-01/anat/sub-02_ses-01_T2w.json" + ] + }, + "sub-02/ses-02/anat/sub-02_ses-02_T1w.json": [ + "sub-02/ses-02/anat/sub-02_ses-02_T1w.nii.gz" + ], + "sub-02/ses-02/anat/sub-02_ses-02_T1w.nii.gz": { + ".json": [ + "sub-02/ses-02/anat/sub-02_ses-02_T1w.json" + ] + }, + "sub-02/ses-02/anat/sub-02_ses-02_T2w.json": [ + "sub-02/ses-02/anat/sub-02_ses-02_T2w.nii.gz" + ], + "sub-02/ses-02/anat/sub-02_ses-02_T2w.nii.gz": { + ".json": [ + "sub-02/ses-02/anat/sub-02_ses-02_T2w.json" + ] + }, + "sub-02/ses-01/func/sub-02_ses-01_task-name_bold.json": [ + "sub-02/ses-01/func/sub-02_ses-01_task-name_bold.nii.gz" + ], + "sub-02/ses-01/func/sub-02_ses-01_task-name_bold.nii.gz": { + ".json": [ + "sub-02/ses-01/func/sub-02_ses-01_task-name_bold.json" + ] + }, + "sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.json": [ + "sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.nii.gz" + ], + "sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.nii.gz": { + ".json": [ + "sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.json" + ] + }, + "sub-02/ses-02/func/sub-02_ses-02_task-name_bold.json": [ + "sub-02/ses-02/func/sub-02_ses-02_task-name_bold.nii.gz" + ], + "sub-02/ses-02/func/sub-02_ses-02_task-name_bold.nii.gz": { + ".json": [ + "sub-02/ses-02/func/sub-02_ses-02_task-name_bold.json" + ] + }, + "sub-02/ses-02/func/sub-02_ses-02_task-rest_bold.json": [ + "sub-02/ses-02/func/sub-02_ses-02_task-rest_bold.nii.gz" + ], + "sub-02/ses-02/func/sub-02_ses-02_task-rest_bold.nii.gz": { + ".json": [ + "sub-02/ses-02/func/sub-02_ses-02_task-rest_bold.json" + ] + } +} + diff --git a/ipabsent/sourcedata/ip_metadata.json b/ipabsent/sourcedata/ip_metadata.json new file mode 100644 index 000000000..b89f24312 --- /dev/null +++ b/ipabsent/sourcedata/ip_metadata.json @@ -0,0 +1,98 @@ +{ + "sub-01/ses-01/anat/sub-01_ses-01_T1w.nii.gz": { + ".json": { + "Sub01Ses01T1w": true + } + }, + "sub-01/ses-01/anat/sub-01_ses-01_T2w.nii.gz": { + ".json": { + "Sub01Ses01T2w": true + } + }, + "sub-01/ses-01/func/sub-01_ses-01_task-name_bold.nii.gz": { + ".json": { + "RepetitionTime": 1.0, + "Sub01Ses01TaskNameBOLD": true, + "TaskName": "TaskName" + } + }, + "sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz": { + ".json": { + "RepetitionTime": 1.0, + "Sub01Ses01TaskRestBOLD": true, + "TaskName": "Resting-state" + } + }, + "sub-01/ses-02/anat/sub-01_ses-02_T1w.nii.gz": { + ".json": { + "Sub01Ses02T1w": true + } + }, + "sub-01/ses-02/anat/sub-01_ses-02_T2w.nii.gz": { + ".json": { + "Sub01Ses02T2w": true + } + }, + "sub-01/ses-02/func/sub-01_ses-02_task-name_bold.nii.gz": { + ".json": { + "RepetitionTime": 1.0, + "Sub01Ses02TaskNameBOLD": true, + "TaskName": "TaskName" + } + }, + "sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.nii.gz": { + ".json": { + "RepetitionTime": 1.0, + "Sub01Ses02TaskRestBOLD": true, + "TaskName": "Resting-state" + } + }, + "sub-02/ses-01/anat/sub-02_ses-01_T1w.nii.gz": { + ".json": { + "Sub02Ses01T1w": true + } + }, + "sub-02/ses-01/anat/sub-02_ses-01_T2w.nii.gz": { + ".json": { + "Sub02Ses01T2w": true + } + }, + "sub-02/ses-01/func/sub-02_ses-01_task-name_bold.nii.gz": { + ".json": { + "RepetitionTime": 1.0, + "Sub02Ses01TaskNameBOLD": true, + "TaskName": "TaskName" + } + }, + "sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.nii.gz": { + ".json": { + "RepetitionTime": 1.0, + "Sub02Ses01TaskRestBOLD": true, + "TaskName": "Resting-state" + } + }, + "sub-02/ses-02/anat/sub-02_ses-02_T1w.nii.gz": { + ".json": { + "Sub02Ses02T1w": true + } + }, + "sub-02/ses-02/anat/sub-02_ses-02_T2w.nii.gz": { + ".json": { + "Sub02Ses02T2w": true + } + }, + "sub-02/ses-02/func/sub-02_ses-02_task-name_bold.nii.gz": { + ".json": { + "RepetitionTime": 1.0, + "Sub02Ses02TaskNameBOLD": true, + "TaskName": "TaskName" + } + }, + "sub-02/ses-02/func/sub-02_ses-02_task-rest_bold.nii.gz": { + ".json": { + "RepetitionTime": 1.0, + "Sub02Ses02TaskRestBOLD": true, + "TaskName": "Resting-state" + } + } +} diff --git a/ipabsent/sourcedata/ip_overrides.json b/ipabsent/sourcedata/ip_overrides.json new file mode 100644 index 000000000..2c63c0851 --- /dev/null +++ b/ipabsent/sourcedata/ip_overrides.json @@ -0,0 +1,2 @@ +{ +} diff --git a/ipabsent/sub-01/ses-01/anat/sub-01_ses-01_T1w.json b/ipabsent/sub-01/ses-01/anat/sub-01_ses-01_T1w.json new file mode 100644 index 000000000..fb415e1d6 --- /dev/null +++ b/ipabsent/sub-01/ses-01/anat/sub-01_ses-01_T1w.json @@ -0,0 +1,4 @@ +{ + "Sub01Ses01T1w": true +} + diff --git a/ipabsent/sub-01/ses-01/anat/sub-01_ses-01_T1w.nii.gz b/ipabsent/sub-01/ses-01/anat/sub-01_ses-01_T1w.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipabsent/sub-01/ses-01/anat/sub-01_ses-01_T2w.json b/ipabsent/sub-01/ses-01/anat/sub-01_ses-01_T2w.json new file mode 100644 index 000000000..6250b50b4 --- /dev/null +++ b/ipabsent/sub-01/ses-01/anat/sub-01_ses-01_T2w.json @@ -0,0 +1,4 @@ +{ + "Sub01Ses01T2w": true +} + diff --git a/ipabsent/sub-01/ses-01/anat/sub-01_ses-01_T2w.nii.gz b/ipabsent/sub-01/ses-01/anat/sub-01_ses-01_T2w.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipabsent/sub-01/ses-01/func/sub-01_ses-01_task-name_bold.json b/ipabsent/sub-01/ses-01/func/sub-01_ses-01_task-name_bold.json new file mode 100644 index 000000000..c69ac8fbe --- /dev/null +++ b/ipabsent/sub-01/ses-01/func/sub-01_ses-01_task-name_bold.json @@ -0,0 +1,6 @@ +{ + "RepetitionTime": 1.0, + "Sub01Ses01TaskNameBOLD": true, + "TaskName": "TaskName" +} + diff --git a/ipabsent/sub-01/ses-01/func/sub-01_ses-01_task-name_bold.nii.gz b/ipabsent/sub-01/ses-01/func/sub-01_ses-01_task-name_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipabsent/sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.json b/ipabsent/sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.json new file mode 100644 index 000000000..0c433cd92 --- /dev/null +++ b/ipabsent/sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.json @@ -0,0 +1,6 @@ +{ + "RepetitionTime": 1.0, + "Sub01Ses01TaskRestBOLD": true, + "TaskName": "Resting-state" +} + diff --git a/ipabsent/sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz b/ipabsent/sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipabsent/sub-01/ses-02/anat/sub-01_ses-02_T1w.json b/ipabsent/sub-01/ses-02/anat/sub-01_ses-02_T1w.json new file mode 100644 index 000000000..82127585a --- /dev/null +++ b/ipabsent/sub-01/ses-02/anat/sub-01_ses-02_T1w.json @@ -0,0 +1,4 @@ +{ + "Sub01Ses02T1w": true +} + diff --git a/ipabsent/sub-01/ses-02/anat/sub-01_ses-02_T1w.nii.gz b/ipabsent/sub-01/ses-02/anat/sub-01_ses-02_T1w.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipabsent/sub-01/ses-02/anat/sub-01_ses-02_T2w.json b/ipabsent/sub-01/ses-02/anat/sub-01_ses-02_T2w.json new file mode 100644 index 000000000..e77982cc7 --- /dev/null +++ b/ipabsent/sub-01/ses-02/anat/sub-01_ses-02_T2w.json @@ -0,0 +1,4 @@ +{ + "Sub01Ses02T2w": true +} + diff --git a/ipabsent/sub-01/ses-02/anat/sub-01_ses-02_T2w.nii.gz b/ipabsent/sub-01/ses-02/anat/sub-01_ses-02_T2w.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipabsent/sub-01/ses-02/func/sub-01_ses-02_task-name_bold.json b/ipabsent/sub-01/ses-02/func/sub-01_ses-02_task-name_bold.json new file mode 100644 index 000000000..85fbe682b --- /dev/null +++ b/ipabsent/sub-01/ses-02/func/sub-01_ses-02_task-name_bold.json @@ -0,0 +1,6 @@ +{ + "RepetitionTime": 1.0, + "Sub01Ses02TaskNameBOLD": true, + "TaskName": "TaskName" +} + diff --git a/ipabsent/sub-01/ses-02/func/sub-01_ses-02_task-name_bold.nii.gz b/ipabsent/sub-01/ses-02/func/sub-01_ses-02_task-name_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipabsent/sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.json b/ipabsent/sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.json new file mode 100644 index 000000000..38e8c7ea2 --- /dev/null +++ b/ipabsent/sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.json @@ -0,0 +1,6 @@ +{ + "RepetitionTime": 1.0, + "Sub01Ses02TaskRestBOLD": true, + "TaskName": "Resting-state" +} + diff --git a/ipabsent/sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.nii.gz b/ipabsent/sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipabsent/sub-02/ses-01/anat/sub-02_ses-01_T1w.json b/ipabsent/sub-02/ses-01/anat/sub-02_ses-01_T1w.json new file mode 100644 index 000000000..8e3bba04a --- /dev/null +++ b/ipabsent/sub-02/ses-01/anat/sub-02_ses-01_T1w.json @@ -0,0 +1,4 @@ +{ + "Sub02Ses01T1w": true +} + diff --git a/ipabsent/sub-02/ses-01/anat/sub-02_ses-01_T1w.nii.gz b/ipabsent/sub-02/ses-01/anat/sub-02_ses-01_T1w.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipabsent/sub-02/ses-01/anat/sub-02_ses-01_T2w.json b/ipabsent/sub-02/ses-01/anat/sub-02_ses-01_T2w.json new file mode 100644 index 000000000..3e1a99d28 --- /dev/null +++ b/ipabsent/sub-02/ses-01/anat/sub-02_ses-01_T2w.json @@ -0,0 +1,4 @@ +{ + "Sub02Ses01T2w": true +} + diff --git a/ipabsent/sub-02/ses-01/anat/sub-02_ses-01_T2w.nii.gz b/ipabsent/sub-02/ses-01/anat/sub-02_ses-01_T2w.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipabsent/sub-02/ses-01/func/sub-02_ses-01_task-name_bold.json b/ipabsent/sub-02/ses-01/func/sub-02_ses-01_task-name_bold.json new file mode 100644 index 000000000..d12de4220 --- /dev/null +++ b/ipabsent/sub-02/ses-01/func/sub-02_ses-01_task-name_bold.json @@ -0,0 +1,6 @@ +{ + "RepetitionTime": 1.0, + "Sub02Ses01TaskNameBOLD": true, + "TaskName": "TaskName" +} + diff --git a/ipabsent/sub-02/ses-01/func/sub-02_ses-01_task-name_bold.nii.gz b/ipabsent/sub-02/ses-01/func/sub-02_ses-01_task-name_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipabsent/sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.json b/ipabsent/sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.json new file mode 100644 index 000000000..b09e98d34 --- /dev/null +++ b/ipabsent/sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.json @@ -0,0 +1,6 @@ +{ + "RepetitionTime": 1.0, + "Sub02Ses01TaskRestBOLD": true, + "TaskName": "Resting-state" +} + diff --git a/ipabsent/sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.nii.gz b/ipabsent/sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipabsent/sub-02/ses-02/anat/sub-02_ses-02_T1w.json b/ipabsent/sub-02/ses-02/anat/sub-02_ses-02_T1w.json new file mode 100644 index 000000000..70325f861 --- /dev/null +++ b/ipabsent/sub-02/ses-02/anat/sub-02_ses-02_T1w.json @@ -0,0 +1,4 @@ +{ + "Sub02Ses02T1w": true +} + diff --git a/ipabsent/sub-02/ses-02/anat/sub-02_ses-02_T1w.nii.gz b/ipabsent/sub-02/ses-02/anat/sub-02_ses-02_T1w.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipabsent/sub-02/ses-02/anat/sub-02_ses-02_T2w.json b/ipabsent/sub-02/ses-02/anat/sub-02_ses-02_T2w.json new file mode 100644 index 000000000..e0bdf8358 --- /dev/null +++ b/ipabsent/sub-02/ses-02/anat/sub-02_ses-02_T2w.json @@ -0,0 +1,4 @@ +{ + "Sub02Ses02T2w": true +} + diff --git a/ipabsent/sub-02/ses-02/anat/sub-02_ses-02_T2w.nii.gz b/ipabsent/sub-02/ses-02/anat/sub-02_ses-02_T2w.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipabsent/sub-02/ses-02/func/sub-02_ses-02_task-name_bold.json b/ipabsent/sub-02/ses-02/func/sub-02_ses-02_task-name_bold.json new file mode 100644 index 000000000..0d7ead6f1 --- /dev/null +++ b/ipabsent/sub-02/ses-02/func/sub-02_ses-02_task-name_bold.json @@ -0,0 +1,6 @@ +{ + "RepetitionTime": 1.0, + "Sub02Ses02TaskNameBOLD": true, + "TaskName": "TaskName" +} + diff --git a/ipabsent/sub-02/ses-02/func/sub-02_ses-02_task-name_bold.nii.gz b/ipabsent/sub-02/ses-02/func/sub-02_ses-02_task-name_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipabsent/sub-02/ses-02/func/sub-02_ses-02_task-rest_bold.json b/ipabsent/sub-02/ses-02/func/sub-02_ses-02_task-rest_bold.json new file mode 100644 index 000000000..512b166f0 --- /dev/null +++ b/ipabsent/sub-02/ses-02/func/sub-02_ses-02_task-rest_bold.json @@ -0,0 +1,6 @@ +{ + "RepetitionTime": 1.0, + "Sub02Ses02TaskRestBOLD": true, + "TaskName": "Resting-state" +} + diff --git a/ipabsent/sub-02/ses-02/func/sub-02_ses-02_task-rest_bold.nii.gz b/ipabsent/sub-02/ses-02/func/sub-02_ses-02_task-rest_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipdwi001/README.txt b/ipdwi001/README.txt new file mode 100644 index 000000000..3d8cfecd7 --- /dev/null +++ b/ipdwi001/README.txt @@ -0,0 +1,3 @@ +This dataset exemplifies how a DWI gradient table, +encoded as an FSL .bvec / .bval file pair, +can be associated with multiple DWI data files. diff --git a/ipdwi001/dataset_description.json b/ipdwi001/dataset_description.json new file mode 100644 index 000000000..707527d89 --- /dev/null +++ b/ipdwi001/dataset_description.json @@ -0,0 +1,9 @@ +{ + "Authors": [ + "Robert E. Smith " + ], + "BIDSVersion": "1.1.2", + "DatasetType": "raw", + "Name": "Inheritance Principle validation; BIDS version 1.1.2; DWI metadata; example 1" +} + diff --git a/ipdwi001/sourcedata/ip_graph.json b/ipdwi001/sourcedata/ip_graph.json new file mode 100644 index 000000000..bcf3d238c --- /dev/null +++ b/ipdwi001/sourcedata/ip_graph.json @@ -0,0 +1,18 @@ +{ + "sub-01/dwi/sub-01_dwi.bval": [ + "sub-01/dwi/sub-01_run-1_dwi.nii.gz", + "sub-01/dwi/sub-01_run-2_dwi.nii.gz" + ], + "sub-01/dwi/sub-01_dwi.bvec": [ + "sub-01/dwi/sub-01_run-1_dwi.nii.gz", + "sub-01/dwi/sub-01_run-2_dwi.nii.gz" + ], + "sub-01/dwi/sub-01_run-1_dwi.nii.gz": { + ".bval": "sub-01/dwi/sub-01_dwi.bval", + ".bvec": "sub-01/dwi/sub-01_dwi.bvec" + }, + "sub-01/dwi/sub-01_run-2_dwi.nii.gz": { + ".bval": "sub-01/dwi/sub-01_dwi.bval", + ".bvec": "sub-01/dwi/sub-01_dwi.bvec" + } +} diff --git a/ipdwi001/sourcedata/ip_metadata.json b/ipdwi001/sourcedata/ip_metadata.json new file mode 100644 index 000000000..27f1bdc65 --- /dev/null +++ b/ipdwi001/sourcedata/ip_metadata.json @@ -0,0 +1,34 @@ +{ + "sub-01/dwi/sub-01_run-1_dwi.nii.gz": { + ".bval": [ + 0, 1, 2, 3, 4, 5, 6 + ], + ".bvec": [ + [ + 0.10, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16 + ], + [ + 0.20, 0.21, 0.22, 0.23, 0.24, 0.25, 0.26 + ], + [ + 0.30, 0.31, 0.32, 0.33, 0.34, 0.35, 0.36 + ] + ] + }, + "sub-01/dwi/sub-01_run-2_dwi.nii.gz": { + ".bval": [ + 0, 1, 2, 3, 4, 5, 6 + ], + ".bvec": [ + [ + 0.10, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16 + ], + [ + 0.20, 0.21, 0.22, 0.23, 0.24, 0.25, 0.26 + ], + [ + 0.30, 0.31, 0.32, 0.33, 0.34, 0.35, 0.36 + ] + ] + } +} diff --git a/ipdwi001/sub-01/dwi/sub-01_dwi.bval b/ipdwi001/sub-01/dwi/sub-01_dwi.bval new file mode 100644 index 000000000..a2e6d7823 --- /dev/null +++ b/ipdwi001/sub-01/dwi/sub-01_dwi.bval @@ -0,0 +1 @@ +0 1 2 3 4 5 6 diff --git a/ipdwi001/sub-01/dwi/sub-01_dwi.bvec b/ipdwi001/sub-01/dwi/sub-01_dwi.bvec new file mode 100644 index 000000000..da9766e8f --- /dev/null +++ b/ipdwi001/sub-01/dwi/sub-01_dwi.bvec @@ -0,0 +1,4 @@ +0.10 0.11 0.12 0.13 0.14 0.15 0.16 +0.20 0.21 0.22 0.23 0.24 0.25 0.26 +0.30 0.31 0.32 0.33 0.34 0.35 0.36 + diff --git a/ipdwi001/sub-01/dwi/sub-01_run-1_dwi.nii.gz b/ipdwi001/sub-01/dwi/sub-01_run-1_dwi.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipdwi001/sub-01/dwi/sub-01_run-2_dwi.nii.gz b/ipdwi001/sub-01/dwi/sub-01_run-2_dwi.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipdwi002/README.txt b/ipdwi002/README.txt new file mode 100644 index 000000000..d6920bc84 --- /dev/null +++ b/ipdwi002/README.txt @@ -0,0 +1,22 @@ +This example demonstrates the overloading of non-JSON metadata. +For images "sub-01/dwi/sub-01_acq-default_run-*_dwi.nii.gz", +the "default" DWI gradient table stored in "dwi.bvec" & "dwi.bval" is used. +For image "sub-01/dwi/sub-01_acq-nonstandard_dwi.nii.gz", +there are sidecar gradient table files; +the latter should be what is associated *exclusively* with that image. + +This example is crafted in such a way +that the dataset conforms to the Inheritance Principle as written in BIDS 1.x. +It does involve the overriding of metadata, +only in the form of DWI gradient table data rather than key-value metadata. +But because the diffusion gradient table files are at different levels +within the filesystem hierarchy, +the suitable files to use can be determined based on that specification. +Sister dataset "ipdwi003" shows a very similar scenario +that vioates the 1.x specification +but can be deemed acceptable by proposed augmentations to the Principle. + +There are two runs of the "acq-default" image included intentionally: +if only one such run were specified, +then the dataset would raise a warning unrelated to the purpose of the dataset, +due to an exclusive non-sidecar data-metadata pairing. diff --git a/ipdwi002/dataset_description.json b/ipdwi002/dataset_description.json new file mode 100644 index 000000000..15763c0c3 --- /dev/null +++ b/ipdwi002/dataset_description.json @@ -0,0 +1,9 @@ +{ + "Authors": [ + "Robert E. Smith " + ], + "BIDSVersion": "1.1.2", + "DatasetType": "raw", + "Name": "Inheritance Principle validation; BIDS version 1.1.2; DWI metadata; example 2" +} + diff --git a/ipdwi002/dwi.bval b/ipdwi002/dwi.bval new file mode 100644 index 000000000..a2e6d7823 --- /dev/null +++ b/ipdwi002/dwi.bval @@ -0,0 +1 @@ +0 1 2 3 4 5 6 diff --git a/ipdwi002/dwi.bvec b/ipdwi002/dwi.bvec new file mode 100644 index 000000000..10d0603e2 --- /dev/null +++ b/ipdwi002/dwi.bvec @@ -0,0 +1,3 @@ +0.10 0.11 0.12 0.13 0.14 0.15 0.16 +0.20 0.21 0.22 0.23 0.24 0.25 0.26 +0.30 0.31 0.32 0.33 0.34 0.35 0.36 diff --git a/ipdwi002/sourcedata/ip_graph.json b/ipdwi002/sourcedata/ip_graph.json new file mode 100644 index 000000000..d3a466f61 --- /dev/null +++ b/ipdwi002/sourcedata/ip_graph.json @@ -0,0 +1,28 @@ +{ + "dwi.bval": [ + "sub-01/dwi/sub-01_acq-default_run-1_dwi.nii.gz", + "sub-01/dwi/sub-01_acq-default_run-2_dwi.nii.gz" + ], + "dwi.bvec": [ + "sub-01/dwi/sub-01_acq-default_run-1_dwi.nii.gz", + "sub-01/dwi/sub-01_acq-default_run-2_dwi.nii.gz" + ], + "sub-01/dwi/sub-01_acq-nonstandard_dwi.bval": [ + "sub-01/dwi/sub-01_acq-nonstandard_dwi.nii.gz" + ], + "sub-01/dwi/sub-01_acq-nonstandard_dwi.bvec": [ + "sub-01/dwi/sub-01_acq-nonstandard_dwi.nii.gz" + ], + "sub-01/dwi/sub-01_acq-default_run-1_dwi.nii.gz": { + ".bval": "dwi.bval", + ".bvec": "dwi.bvec" + }, + "sub-01/dwi/sub-01_acq-default_run-2_dwi.nii.gz": { + ".bval": "dwi.bval", + ".bvec": "dwi.bvec" + }, + "sub-01/dwi/sub-01_acq-nonstandard_dwi.nii.gz": { + ".bval": "sub-01/dwi/sub-01_acq-nonstandard_dwi.bval", + ".bvec": "sub-01/dwi/sub-01_acq-nonstandard_dwi.bvec" + } +} diff --git a/ipdwi002/sourcedata/ip_metadata.json b/ipdwi002/sourcedata/ip_metadata.json new file mode 100644 index 000000000..d124de6c7 --- /dev/null +++ b/ipdwi002/sourcedata/ip_metadata.json @@ -0,0 +1,50 @@ +{ + "sub-01/dwi/sub-01_acq-default_run-1_dwi.nii.gz": { + ".bval": [ + 0, 1, 2, 3, 4, 5, 6 + ], + ".bvec": [ + [ + 0.10, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16 + ], + [ + 0.20, 0.21, 0.22, 0.23, 0.24, 0.25, 0.26 + ], + [ + 0.30, 0.31, 0.32, 0.33, 0.34, 0.35, 0.36 + ] + ] + }, + "sub-01/dwi/sub-01_acq-default_run-2_dwi.nii.gz": { + ".bval": [ + 0, 1, 2, 3, 4, 5, 6 + ], + ".bvec": [ + [ + 0.10, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16 + ], + [ + 0.20, 0.21, 0.22, 0.23, 0.24, 0.25, 0.26 + ], + [ + 0.30, 0.31, 0.32, 0.33, 0.34, 0.35, 0.36 + ] + ] + }, + "sub-01/dwi/sub-01_acq-nonstandard_dwi.nii.gz": { + ".bval": [ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 + ], + ".bvec": [ + [ + 0.10, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19 + ], + [ + 0.20, 0.21, 0.22, 0.23, 0.24, 0.25, 0.26, 0.27, 0.28, 0.29 + ], + [ + 0.30, 0.31, 0.32, 0.33, 0.34, 0.35, 0.36, 0.37, 0.38, 0.39 + ] + ] + } +} diff --git a/ipdwi002/sub-01/dwi/sub-01_acq-default_run-1_dwi.nii.gz b/ipdwi002/sub-01/dwi/sub-01_acq-default_run-1_dwi.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipdwi002/sub-01/dwi/sub-01_acq-default_run-2_dwi.nii.gz b/ipdwi002/sub-01/dwi/sub-01_acq-default_run-2_dwi.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipdwi002/sub-01/dwi/sub-01_acq-nonstandard_dwi.bval b/ipdwi002/sub-01/dwi/sub-01_acq-nonstandard_dwi.bval new file mode 100644 index 000000000..42640be81 --- /dev/null +++ b/ipdwi002/sub-01/dwi/sub-01_acq-nonstandard_dwi.bval @@ -0,0 +1 @@ +0 1 2 3 4 5 6 7 8 9 diff --git a/ipdwi002/sub-01/dwi/sub-01_acq-nonstandard_dwi.bvec b/ipdwi002/sub-01/dwi/sub-01_acq-nonstandard_dwi.bvec new file mode 100644 index 000000000..b0fda1354 --- /dev/null +++ b/ipdwi002/sub-01/dwi/sub-01_acq-nonstandard_dwi.bvec @@ -0,0 +1,3 @@ +0.10 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 +0.20 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 +0.30 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 diff --git a/ipdwi002/sub-01/dwi/sub-01_acq-nonstandard_dwi.nii.gz b/ipdwi002/sub-01/dwi/sub-01_acq-nonstandard_dwi.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipdwi003/README.txt b/ipdwi003/README.txt new file mode 100644 index 000000000..68969c2c1 --- /dev/null +++ b/ipdwi003/README.txt @@ -0,0 +1,25 @@ +This example demonstrates tehe overloading of non-JSON metadata +where there are multiple applicable metadata files for a data file +within a single level of the filesystem hierarchy. +Because of this, +the dataset is not valid under any tagged version of the BIDS specification +at time of writing; +it may however be considered permissible +under proposed future augmentations of the Inheritance Principle +(see for example Pull Request #1003 and Issue #1195: +https://github.com/bids-standard/bids-specification/pull/1003 +https://github.com/bids-standard/bids-specification/issues/1195 + +This dataset is very similar to sister dataset "ipdwi002". +The difference is that in "ipdwi002", +the multiple applicable diffusion gradient table files +are placed at different levels of the filesystem hierarchy, +whereas here in "ipdwi003" they are at the same level. +The precedence of these files must therefore be made +by a speculative Inheritance Principle ruleset +based not exclusively by directory, but also by file name. + +There are two runs of the "acq-default" image included intentionally: +if only one such run were specified, +then the dataset would raise a warning unrelated to the purpose of the dataset, +due to an exclusive non-sidecar data-metadata pairing. diff --git a/ipdwi003/dataset_description.json b/ipdwi003/dataset_description.json new file mode 100644 index 000000000..4ba285862 --- /dev/null +++ b/ipdwi003/dataset_description.json @@ -0,0 +1,9 @@ +{ + "Authors": [ + "Robert E. Smith " + ], + "BIDSVersion": "dev", + "DatasetType": "raw", + "Name": "Inheritance Principle validation; BIDS proposal Pull Request #1003; DWI metadata; example 3" +} + diff --git a/ipdwi003/sourcedata/ip_graph.json b/ipdwi003/sourcedata/ip_graph.json new file mode 100644 index 000000000..b863afa4b --- /dev/null +++ b/ipdwi003/sourcedata/ip_graph.json @@ -0,0 +1,28 @@ +{ + "sub-01/dwi/sub-01_dwi.bval": [ + "sub-01/dwi/sub-01_acq-default_run-1_dwi.nii.gz", + "sub-01/dwi/sub-01_acq-default_run-2_dwi.nii.gz" + ], + "sub-01/dwi/sub-01_dwi.bvec": [ + "sub-01/dwi/sub-01_acq-default_run-1_dwi.nii.gz", + "sub-01/dwi/sub-01_acq-default_run-2_dwi.nii.gz" + ], + "sub-01/dwi/sub-01_acq-nonstandard_dwi.bval": [ + "sub-01/dwi/sub-01_acq-nonstandard_dwi.nii.gz" + ], + "sub-01/dwi/sub-01_acq-nonstandard_dwi.bvec": [ + "sub-01/dwi/sub-01_acq-nonstandard_dwi.nii.gz" + ], + "sub-01/dwi/sub-01_acq-default_run-1_dwi.nii.gz": { + ".bval": "sub-01/dwi/sub-01_dwi.bval", + ".bvec": "sub-01/dwi/sub-01_dwi.bvec" + }, + "sub-01/dwi/sub-01_acq-default_run-2_dwi.nii.gz": { + ".bval": "sub-01/dwi/sub-01_dwi.bval", + ".bvec": "sub-01/dwi/sub-01_dwi.bvec" + }, + "sub-01/dwi/sub-01_acq-nonstandard_dwi.nii.gz": { + ".bval": "sub-01/dwi/sub-01_acq-nonstandard_dwi.bval", + ".bvec": "sub-01/dwi/sub-01_acq-nonstandard_dwi.bvec" + } +} diff --git a/ipdwi003/sourcedata/ip_metadata.json b/ipdwi003/sourcedata/ip_metadata.json new file mode 100644 index 000000000..d124de6c7 --- /dev/null +++ b/ipdwi003/sourcedata/ip_metadata.json @@ -0,0 +1,50 @@ +{ + "sub-01/dwi/sub-01_acq-default_run-1_dwi.nii.gz": { + ".bval": [ + 0, 1, 2, 3, 4, 5, 6 + ], + ".bvec": [ + [ + 0.10, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16 + ], + [ + 0.20, 0.21, 0.22, 0.23, 0.24, 0.25, 0.26 + ], + [ + 0.30, 0.31, 0.32, 0.33, 0.34, 0.35, 0.36 + ] + ] + }, + "sub-01/dwi/sub-01_acq-default_run-2_dwi.nii.gz": { + ".bval": [ + 0, 1, 2, 3, 4, 5, 6 + ], + ".bvec": [ + [ + 0.10, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16 + ], + [ + 0.20, 0.21, 0.22, 0.23, 0.24, 0.25, 0.26 + ], + [ + 0.30, 0.31, 0.32, 0.33, 0.34, 0.35, 0.36 + ] + ] + }, + "sub-01/dwi/sub-01_acq-nonstandard_dwi.nii.gz": { + ".bval": [ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 + ], + ".bvec": [ + [ + 0.10, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19 + ], + [ + 0.20, 0.21, 0.22, 0.23, 0.24, 0.25, 0.26, 0.27, 0.28, 0.29 + ], + [ + 0.30, 0.31, 0.32, 0.33, 0.34, 0.35, 0.36, 0.37, 0.38, 0.39 + ] + ] + } +} diff --git a/ipdwi003/sub-01/dwi/sub-01_acq-default_run-1_dwi.nii.gz b/ipdwi003/sub-01/dwi/sub-01_acq-default_run-1_dwi.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipdwi003/sub-01/dwi/sub-01_acq-default_run-2_dwi.nii.gz b/ipdwi003/sub-01/dwi/sub-01_acq-default_run-2_dwi.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipdwi003/sub-01/dwi/sub-01_acq-nonstandard_dwi.bval b/ipdwi003/sub-01/dwi/sub-01_acq-nonstandard_dwi.bval new file mode 100644 index 000000000..42640be81 --- /dev/null +++ b/ipdwi003/sub-01/dwi/sub-01_acq-nonstandard_dwi.bval @@ -0,0 +1 @@ +0 1 2 3 4 5 6 7 8 9 diff --git a/ipdwi003/sub-01/dwi/sub-01_acq-nonstandard_dwi.bvec b/ipdwi003/sub-01/dwi/sub-01_acq-nonstandard_dwi.bvec new file mode 100644 index 000000000..b0fda1354 --- /dev/null +++ b/ipdwi003/sub-01/dwi/sub-01_acq-nonstandard_dwi.bvec @@ -0,0 +1,3 @@ +0.10 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 +0.20 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 +0.30 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 diff --git a/ipdwi003/sub-01/dwi/sub-01_acq-nonstandard_dwi.nii.gz b/ipdwi003/sub-01/dwi/sub-01_acq-nonstandard_dwi.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipdwi003/sub-01/dwi/sub-01_dwi.bval b/ipdwi003/sub-01/dwi/sub-01_dwi.bval new file mode 100644 index 000000000..a2e6d7823 --- /dev/null +++ b/ipdwi003/sub-01/dwi/sub-01_dwi.bval @@ -0,0 +1 @@ +0 1 2 3 4 5 6 diff --git a/ipdwi003/sub-01/dwi/sub-01_dwi.bvec b/ipdwi003/sub-01/dwi/sub-01_dwi.bvec new file mode 100644 index 000000000..10d0603e2 --- /dev/null +++ b/ipdwi003/sub-01/dwi/sub-01_dwi.bvec @@ -0,0 +1,3 @@ +0.10 0.11 0.12 0.13 0.14 0.15 0.16 +0.20 0.21 0.22 0.23 0.24 0.25 0.26 +0.30 0.31 0.32 0.33 0.34 0.35 0.36 diff --git a/ipexclnonsc/README.txt b/ipexclnonsc/README.txt new file mode 100644 index 000000000..f592ae141 --- /dev/null +++ b/ipexclnonsc/README.txt @@ -0,0 +1,13 @@ +This exemplar dataset has not at time of writing been contributed +or proposed to any version of the Brain Imaging Data Structure (BIDS) specification. +It was created to demonstrate a hypothetical dataset structure +that would be deemed valid given all current Inheritance Principle criteria, +but should perhaps be forbidden in future iterations. + +It shows the scenario where there is a data file +for which there is only one applicable JSON metadata file, +and that JSON metadata file is only applicable to that one data file. +One would intuitively expect that such data would be specified as a sidecar pair, +with their filesystem paths differing only by file extension. +However it is technically possible for this situation to arise +despite those two files not being a sidecar pair. diff --git a/ipexclnonsc/dataset_description.json b/ipexclnonsc/dataset_description.json new file mode 100644 index 000000000..b3ee26f50 --- /dev/null +++ b/ipexclnonsc/dataset_description.json @@ -0,0 +1,9 @@ +{ + "Authors": [ + "Robert E. Smith " + ], + "BIDSVersion": "1.1.2", + "DatasetType": "raw", + "Name": "Inheritance Principle validation; BIDS version 1.1.2; exclusive non-sidecar match" +} + diff --git a/ipexclnonsc/sourcedata/ip_graph.json b/ipexclnonsc/sourcedata/ip_graph.json new file mode 100644 index 000000000..cf85c6fb5 --- /dev/null +++ b/ipexclnonsc/sourcedata/ip_graph.json @@ -0,0 +1,11 @@ +{ + "sub-01/func/sub-01_task-rest_bold.json": [ + "sub-01/func/sub-01_task-rest_run-1_bold.nii.gz" + ], + "sub-01/func/sub-01_task-rest_run-1_bold.nii.gz": { + ".json": [ + "sub-01/func/sub-01_task-rest_bold.json" + ] + } +} + diff --git a/ipexclnonsc/sourcedata/ip_metadata.json b/ipexclnonsc/sourcedata/ip_metadata.json new file mode 100644 index 000000000..c166460ff --- /dev/null +++ b/ipexclnonsc/sourcedata/ip_metadata.json @@ -0,0 +1,8 @@ +{ + "sub-01/func/sub-01_task-rest_run-1_bold.nii.gz": { + ".json": { + "RepetitionTime": 1.0, + "TaskName": "Resting-state" + } + } +} diff --git a/ipexclnonsc/sub-01/func/sub-01_task-rest_bold.json b/ipexclnonsc/sub-01/func/sub-01_task-rest_bold.json new file mode 100644 index 000000000..1aedfae8a --- /dev/null +++ b/ipexclnonsc/sub-01/func/sub-01_task-rest_bold.json @@ -0,0 +1,5 @@ +{ + "RepetitionTime": 1.0, + "TaskName": "Resting-state" +} + diff --git a/ipexclnonsc/sub-01/func/sub-01_task-rest_run-1_bold.nii.gz b/ipexclnonsc/sub-01/func/sub-01_task-rest_run-1_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipi1195v1/README.txt b/ipi1195v1/README.txt new file mode 100644 index 000000000..c27bd1694 --- /dev/null +++ b/ipi1195v1/README.txt @@ -0,0 +1,205 @@ +The following content is duplicated from a fork +of the Brain Imaging Data Structure (BIDS) specification. +It is referenced in GitHub Issue #1195 +(https://github.com/bids-standard/bids-specification/issues/1195), +and the code is located at: +https://github.com/Lestropie/bids-specification/pull/5. + + { + "bold.json", + "sub-01": { + "ses-01": { + "func": { + "sub-01_ses-01_bold.json", + "sub-01_ses-01_task-ovg_bold.json", + "sub-01_ses-01_task-ovg_run-1_bold.nii.gz", + "sub-01_ses-01_task-ovg_run-2_bold.nii.gz", + "sub-01_ses-01_task-ovg_run-2_bold.json", + "sub-01_ses-01_task-rest_bold.nii.gz", + "sub-01_ses-01_task-rest_bold.json" + } + }, + "ses-02": { + "func": { + "sub-01_ses-02_task-ovg_bold.nii.gz", + "sub-01_ses-02_task-rest_bold.nii.gz", + } + }, + "sub-01_bold.json" + }, + "sub-02": { + "ses-01": { + "func": { + "sub-02_ses-01_res-high_task-olr_bold.nii.gz", + "sub-02_ses-01_res-high_task-rest_bold.nii.gz", + "sub-02_ses-01_res-high_bold.json", + "sub-02_ses-01_res-low_task-olr_bold.nii.gz", + "sub-02_ses-01_res-low_task-rest_bold.nii.gz", + "sub-02_ses-01_res-low_bold.json", + "sub-02_ses-01_task-olr_bold.json", + "sub-02_ses-01_task-rest_bold.json" + } + } + }, + "task-olr_bold.json", + "task-ovg_bold.json", + "task-rest_bold.json" + } + + Applicable data files per metadata file + For each metadata file, the set of data files to which its contents are applicable is as follows: + + - bold.json: + + - sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-1_bold.nii.gz + - sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz + - sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz + - sub-01/ses-02/func/sub-01_ses-02_task-ovg_bold.nii.gz + - sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.nii.gz + - sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.nii.gz + + - task-olr_bold.json: + + - sub-02/ses-01/func/sub-02_ses-01_res-high_task-olr_bold.nii.gz + - sub-02/ses-01/func/sub-02_ses-01_res-low_task-olr_bold.nii.gz + + - task-ovg_bold.json: + + - sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-1_bold.nii.gz + - sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz + - sub-01/ses-02/func/sub-01_ses-02_task-ovg_bold.nii.gz + + - task-rest_bold.json: + + - sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz + - sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.nii.gz + - sub-02/ses-01/func/sub-02_ses-01_res-high_task-rest_bold.nii.gz + - sub-02/ses-01/func/sub-02_ses-01_res-low_task-rest_bold.nii.gz + + - sub-01/sub-01_bold.json: + + - sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-1_bold.nii.gz + - sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz + - sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz + - sub-01/ses-02/func/sub-01_ses-02_task-ovg_bold.nii.gz + - sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.nii.gz + + - sub-01/ses-01/sub-01_ses-01_bold.json: + + - sub-01/ses-01/sub-01_ses-01_task-ovg_run-1_bold.nii.gz + - sub-01/ses-01/sub-01_ses-01_task-ovg_run-2_bold.nii.gz + - sub-01/ses-01/sub-01_ses-01_task-rest_bold.nii.gz + + - sub-01/ses-01/sub-01_ses-01_task-ovg_bold.json: + + - sub-01/ses-01/sub-01_ses-01_task-ovg_run-1_bold.nii.gz + - sub-01/ses-01/sub-01_ses-01_task-ovg_run-2_bold.nii.gz + + - sub-01/ses-01/sub-01_ses-01_task-ovg_run-2_bold.json: + + - sub-01/ses-01/sub-01_ses-01_task-ovg_run-2_bold.nii.gz + + - sub-01/ses-01/sub-01_ses-01_task-rest_bold.json: + + - sub-01/ses-01/sub-01_ses-01_task-rest_bold.nii.gz + + - sub-02/ses-01/sub-02_ses-01_res-high_bold.json: + + - sub-02/ses-01/sub-02_ses-01_res-high_task-olr_bold.nii.gz + - sub-02/ses-01/sub-02_ses-01_res-high_task-rest_bold.nii.gz + + - sub-02/ses-01/sub-02_ses-01_res-low_bold.json: + + - sub-02/ses-01/sub-02_ses-01_res-low_task-olr_bold.nii.gz + - sub-02/ses-01/sub-02_ses-01_res-low_task-rest_bold.nii.gz + + - sub-02/ses-01/sub-02_ses-01_task-olr_bold.json: + + - sub-02/ses-01/sub-02_ses-01_res-high_task-olr_bold.nii.gz + - sub-02/ses-01/sub-02_ses-01_res-low_task-olr_bold.nii.gz + + - sub-02/ses-01/sub-02_ses-01_task-rest_bold.json: + + - sub-02/ses-01/sub-02_ses-01_res-high_task-rest_bold.nii.gz + - sub-02/ses-01/sub-02_ses-01_res-low_task-rest_bold.nii.gz + + Applicable metadata files per data file + For each data file, the order in which the set of applicable metadata files would be loaded is as follows: + + - sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-1_bold.nii.gz: + + - bold.json + - task-ovg_bold.json + - sub-01/sub-01_bold.json + - sub-01/ses-01/func/sub-01_ses-01_bold.json + - sub-01/ses-01/func/sub-01_ses-01_task-ovg_bold.json + + - sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz: + + - bold.json + - task-ovg_bold.json + - sub-01/sub-01_bold.json + - sub-01/ses-01/func/sub-01_ses-01_bold.json + - sub-01/ses-01/func/sub-01_ses-01_task-ovg_bold.json + - sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.json + + - sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz: + + - bold.json + - task-rest_bold.json + - sub-01/sub-01_bold.json + - sub-01/ses-01/func/sub-01_ses-01_bold.json + - sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.json + + - sub-01/ses-02/func/sub-01_ses-02_task-ovg_bold.nii.gz: + + - bold.json + - task-ovg_bold.json + - sub-01/sub-01_bold.json + + - sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.nii.gz: + + - bold.json + - task-rest_bold.json + - sub-01/sub-01_bold.json + + - sub-02_ses-01_res-high_task-olr_bold.nii.gz: + + - bold.json + - task-olr_bold.json + - sub-02/ses-01/func/sub-02_ses-01_res-high_bold.json + and sub-02/ses-01/func/sub-02_ses-01_task-olr_bold.json + (ambiguous order) + + - sub-02_ses-01_res-high_task-rest_bold.nii.gz: + + - bold.json + - task-rest_bold.json + - sub-02/ses-01/func/sub-02_ses-01_res-high_bold.json + and sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.json + (ambiguous order) + + - sub-02_ses-01_res-low_task-olr_bold.nii.gz: + + - bold.json + - task-olr_bold.json + - sub-02/ses-01/func/sub-02_ses-01_res-low_bold.json + and sub-02/ses-01/func/sub-02_ses-01_task-olr_bold.json + (ambiguous order) + + - sub-02_ses-01_res-low_task-rest_bold.nii.gz: + + - bold.json + - task-rest_bold.json + - sub-02/ses-01/func/sub-02_ses-01_res-low_bold.json + and sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.json + (ambiguous order) + +Notes: + +- In this version of the dataset, + key-value metadata has been added to show which files are inherited from. + There are no metadata key-value overrides; + as such the dataset should pass validation under this Inheritance Principle ruleset. + Sister dataset "ipi1195v2" shows the same filesystem structure, + but involves inherently ambiguous metadata key-value overrides. diff --git a/ipi1195v1/bold.json b/ipi1195v1/bold.json new file mode 100644 index 000000000..086928f90 --- /dev/null +++ b/ipi1195v1/bold.json @@ -0,0 +1,4 @@ +{ + "BOLD": true +} + diff --git a/ipi1195v1/dataset_description.json b/ipi1195v1/dataset_description.json new file mode 100644 index 000000000..fa173080a --- /dev/null +++ b/ipi1195v1/dataset_description.json @@ -0,0 +1,8 @@ +{ + "Authors": [ + "Robert E. Smith " + ], + "BIDSVersion": "Issue 1195", + "DatasetType": "raw", + "Name": "Inheritance Principle validation; Issue #1195; version 1" +} diff --git a/ipi1195v1/sourcedata/ip_graph.json b/ipi1195v1/sourcedata/ip_graph.json new file mode 100644 index 000000000..fe76e3260 --- /dev/null +++ b/ipi1195v1/sourcedata/ip_graph.json @@ -0,0 +1,140 @@ +{ + "bold.json": [ + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-1_bold.nii.gz", + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz", + "sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz", + "sub-01/ses-02/func/sub-01_ses-02_task-ovg_bold.nii.gz", + "sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.nii.gz", + "sub-02/ses-01/func/sub-02_ses-01_res-high_task-olr_bold.nii.gz", + "sub-02/ses-01/func/sub-02_ses-01_res-high_task-rest_bold.nii.gz", + "sub-02/ses-01/func/sub-02_ses-01_res-low_task-olr_bold.nii.gz", + "sub-02/ses-01/func/sub-02_ses-01_res-low_task-rest_bold.nii.gz" + ], + "task-olr_bold.json": [ + "sub-02/ses-01/func/sub-02_ses-01_res-high_task-olr_bold.nii.gz", + "sub-02/ses-01/func/sub-02_ses-01_res-low_task-olr_bold.nii.gz" + ], + "task-ovg_bold.json": [ + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-1_bold.nii.gz", + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz", + "sub-01/ses-02/func/sub-01_ses-02_task-ovg_bold.nii.gz" + ], + "task-rest_bold.json": [ + "sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz", + "sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.nii.gz", + "sub-02/ses-01/func/sub-02_ses-01_res-high_task-rest_bold.nii.gz", + "sub-02/ses-01/func/sub-02_ses-01_res-low_task-rest_bold.nii.gz" + ], + "sub-01/sub-01_bold.json": [ + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-1_bold.nii.gz", + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz", + "sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz", + "sub-01/ses-02/func/sub-01_ses-02_task-ovg_bold.nii.gz", + "sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.nii.gz" + ], + "sub-01/ses-01/func/sub-01_ses-01_bold.json": [ + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-1_bold.nii.gz", + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz", + "sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz" + ], + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_bold.json": [ + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-1_bold.nii.gz", + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz" + ], + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.json": [ + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz" + ], + "sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.json": [ + "sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz" + ], + "sub-02/ses-01/func/sub-02_ses-01_res-high_bold.json": [ + "sub-02/ses-01/func/sub-02_ses-01_res-high_task-olr_bold.nii.gz", + "sub-02/ses-01/func/sub-02_ses-01_res-high_task-rest_bold.nii.gz" + ], + "sub-02/ses-01/func/sub-02_ses-01_res-low_bold.json": [ + "sub-02/ses-01/func/sub-02_ses-01_res-low_task-olr_bold.nii.gz", + "sub-02/ses-01/func/sub-02_ses-01_res-low_task-rest_bold.nii.gz" + ], + "sub-02/ses-01/func/sub-02_ses-01_task-olr_bold.json": [ + "sub-02/ses-01/func/sub-02_ses-01_res-high_task-olr_bold.nii.gz", + "sub-02/ses-01/func/sub-02_ses-01_res-low_task-olr_bold.nii.gz" + ], + "sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.json": [ + "sub-02/ses-01/func/sub-02_ses-01_res-high_task-rest_bold.nii.gz", + "sub-02/ses-01/func/sub-02_ses-01_res-low_task-rest_bold.nii.gz" + ], + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-1_bold.nii.gz": { + ".json": [ + "bold.json", + "task-ovg_bold.json", + "sub-01/sub-01_bold.json", + "sub-01/ses-01/func/sub-01_ses-01_bold.json", + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_bold.json" + ] + }, + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz": { + ".json": [ + "bold.json", + "task-ovg_bold.json", + "sub-01/sub-01_bold.json", + "sub-01/ses-01/func/sub-01_ses-01_bold.json", + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_bold.json", + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.json" + ] + }, + "sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz": { + ".json": [ + "bold.json", + "task-rest_bold.json", + "sub-01/sub-01_bold.json", + "sub-01/ses-01/func/sub-01_ses-01_bold.json", + "sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.json" + ] + }, + "sub-01/ses-02/func/sub-01_ses-02_task-ovg_bold.nii.gz": { + ".json": [ + "bold.json", + "task-ovg_bold.json", + "sub-01/sub-01_bold.json" + ] + }, + "sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.nii.gz": { + ".json": [ + "bold.json", + "task-rest_bold.json", + "sub-01/sub-01_bold.json" + ] + }, + "sub-02/ses-01/func/sub-02_ses-01_res-high_task-olr_bold.nii.gz": { + ".json": [ + "bold.json", + "task-olr_bold.json", + "sub-02/ses-01/func/sub-02_ses-01_res-high_bold.json", + "sub-02/ses-01/func/sub-02_ses-01_task-olr_bold.json" + ] + }, + "sub-02/ses-01/func/sub-02_ses-01_res-high_task-rest_bold.nii.gz": { + ".json": [ + "bold.json", + "task-rest_bold.json", + "sub-02/ses-01/func/sub-02_ses-01_res-high_bold.json", + "sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.json" + ] + }, + "sub-02/ses-01/func/sub-02_ses-01_res-low_task-olr_bold.nii.gz": { + ".json": [ + "bold.json", + "task-olr_bold.json", + "sub-02/ses-01/func/sub-02_ses-01_res-low_bold.json", + "sub-02/ses-01/func/sub-02_ses-01_task-olr_bold.json" + ] + }, + "sub-02/ses-01/func/sub-02_ses-01_res-low_task-rest_bold.nii.gz": { + ".json": [ + "bold.json", + "task-rest_bold.json", + "sub-02/ses-01/func/sub-02_ses-01_res-low_bold.json", + "sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.json" + ] + } +} diff --git a/ipi1195v1/sourcedata/ip_metadata.json b/ipi1195v1/sourcedata/ip_metadata.json new file mode 100644 index 000000000..4fa670900 --- /dev/null +++ b/ipi1195v1/sourcedata/ip_metadata.json @@ -0,0 +1,94 @@ +{ + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-1_bold.nii.gz": { + ".json": { + "BOLD": true, + "TaskOVGBOLD": true, + "Sub01BOLD": true, + "Sub01Ses01BOLD": true, + "Sub01Ses01TaskOVGBOLD": true, + "RepetitionTime": 1.0, + "TaskName": "OvertVerbGeneration" + } + }, + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz": { + ".json": { + "BOLD": true, + "TaskOVGBOLD": true, + "Sub01BOLD": true, + "Sub01Ses01BOLD": true, + "Sub01Ses01TaskOVGBOLD": true, + "Sub01Ses01TaskOVGRun2BOLD": true, + "RepetitionTime": 1.0, + "TaskName": "OvertVerbGeneration" + } + }, + "sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz": { + ".json": { + "BOLD": true, + "TaskRestBOLD": true, + "Sub01BOLD": true, + "Sub01Ses01BOLD": true, + "Sub01Ses01TaskRestBOLD": true, + "RepetitionTime": 1.0, + "TaskName": "Resting-state" + } + }, + "sub-01/ses-02/func/sub-01_ses-02_task-ovg_bold.nii.gz": { + ".json": { + "BOLD": true, + "TaskOVGBOLD": true, + "Sub01BOLD": true, + "RepetitionTime": 1.0, + "TaskName": "OvertVerbGeneration" + } + }, + "sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.nii.gz": { + ".json": { + "BOLD": true, + "TaskRestBOLD": true, + "Sub01BOLD": true, + "RepetitionTime": 1.0, + "TaskName": "Resting-state" + } + }, + "sub-02/ses-01/func/sub-02_ses-01_res-high_task-olr_bold.nii.gz": { + ".json": { + "BOLD": true, + "TaskOLRBOLD": true, + "Sub02Ses01ResHighBOLD": true, + "Sub02Ses01TaskOLRBOLD": true, + "RepetitionTime": 1.0, + "TaskName": "OrthographicLexicalRetrieval" + } + }, + "sub-02/ses-01/func/sub-02_ses-01_res-high_task-rest_bold.nii.gz": { + ".json": { + "BOLD": true, + "TaskRestBOLD": true, + "Sub02Ses01ResHighBOLD": true, + "Sub02Ses01TaskRestBOLD": true, + "RepetitionTime": 1.0, + "TaskName": "Resting-state" + } + }, + "sub-02/ses-01/func/sub-02_ses-01_res-low_task-olr_bold.nii.gz": { + ".json": { + "BOLD": true, + "TaskOLRBOLD": true, + "Sub02Ses01ResLowBOLD": true, + "Sub02Ses01TaskOLRBOLD": true, + "RepetitionTime": 1.0, + "TaskName": "OrthographicLexicalRetrieval" + } + }, + "sub-02/ses-01/func/sub-02_ses-01_res-low_task-rest_bold.nii.gz": { + ".json": { + "BOLD": true, + "TaskRestBOLD": true, + "Sub02Ses01ResLowBOLD": true, + "Sub02Ses01TaskRestBOLD": true, + "RepetitionTime": 1.0, + "TaskName": "Resting-state" + } + } +} diff --git a/ipi1195v1/sub-01/ses-01/func/sub-01_ses-01_bold.json b/ipi1195v1/sub-01/ses-01/func/sub-01_ses-01_bold.json new file mode 100644 index 000000000..a0665f6f6 --- /dev/null +++ b/ipi1195v1/sub-01/ses-01/func/sub-01_ses-01_bold.json @@ -0,0 +1,4 @@ +{ + "Sub01Ses01BOLD": true +} + diff --git a/ipi1195v1/sub-01/ses-01/func/sub-01_ses-01_task-ovg_bold.json b/ipi1195v1/sub-01/ses-01/func/sub-01_ses-01_task-ovg_bold.json new file mode 100644 index 000000000..f6daaac0e --- /dev/null +++ b/ipi1195v1/sub-01/ses-01/func/sub-01_ses-01_task-ovg_bold.json @@ -0,0 +1,4 @@ +{ + "Sub01Ses01TaskOVGBOLD": true +} + diff --git a/ipi1195v1/sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-1_bold.nii.gz b/ipi1195v1/sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-1_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipi1195v1/sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.json b/ipi1195v1/sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.json new file mode 100644 index 000000000..1a8d7a6ca --- /dev/null +++ b/ipi1195v1/sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.json @@ -0,0 +1,4 @@ +{ + "Sub01Ses01TaskOVGRun2BOLD": true +} + diff --git a/ipi1195v1/sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz b/ipi1195v1/sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipi1195v1/sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.json b/ipi1195v1/sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.json new file mode 100644 index 000000000..2d86ef0fe --- /dev/null +++ b/ipi1195v1/sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.json @@ -0,0 +1,4 @@ +{ + "Sub01Ses01TaskRestBOLD": true +} + diff --git a/ipi1195v1/sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz b/ipi1195v1/sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipi1195v1/sub-01/ses-02/func/sub-01_ses-02_task-ovg_bold.nii.gz b/ipi1195v1/sub-01/ses-02/func/sub-01_ses-02_task-ovg_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipi1195v1/sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.nii.gz b/ipi1195v1/sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipi1195v1/sub-01/sub-01_bold.json b/ipi1195v1/sub-01/sub-01_bold.json new file mode 100644 index 000000000..8a006e83f --- /dev/null +++ b/ipi1195v1/sub-01/sub-01_bold.json @@ -0,0 +1,4 @@ +{ + "Sub01BOLD": true +} + diff --git a/ipi1195v1/sub-02/ses-01/func/sub-02_ses-01_res-high_bold.json b/ipi1195v1/sub-02/ses-01/func/sub-02_ses-01_res-high_bold.json new file mode 100644 index 000000000..51c139d0b --- /dev/null +++ b/ipi1195v1/sub-02/ses-01/func/sub-02_ses-01_res-high_bold.json @@ -0,0 +1,4 @@ +{ + "Sub02Ses01ResHighBOLD": true +} + diff --git a/ipi1195v1/sub-02/ses-01/func/sub-02_ses-01_res-high_task-olr_bold.nii.gz b/ipi1195v1/sub-02/ses-01/func/sub-02_ses-01_res-high_task-olr_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipi1195v1/sub-02/ses-01/func/sub-02_ses-01_res-high_task-rest_bold.nii.gz b/ipi1195v1/sub-02/ses-01/func/sub-02_ses-01_res-high_task-rest_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipi1195v1/sub-02/ses-01/func/sub-02_ses-01_res-low_bold.json b/ipi1195v1/sub-02/ses-01/func/sub-02_ses-01_res-low_bold.json new file mode 100644 index 000000000..16a40e257 --- /dev/null +++ b/ipi1195v1/sub-02/ses-01/func/sub-02_ses-01_res-low_bold.json @@ -0,0 +1,4 @@ +{ + "Sub02Ses01ResLowBOLD": true +} + diff --git a/ipi1195v1/sub-02/ses-01/func/sub-02_ses-01_res-low_task-olr_bold.nii.gz b/ipi1195v1/sub-02/ses-01/func/sub-02_ses-01_res-low_task-olr_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipi1195v1/sub-02/ses-01/func/sub-02_ses-01_res-low_task-rest_bold.nii.gz b/ipi1195v1/sub-02/ses-01/func/sub-02_ses-01_res-low_task-rest_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipi1195v1/sub-02/ses-01/func/sub-02_ses-01_task-olr_bold.json b/ipi1195v1/sub-02/ses-01/func/sub-02_ses-01_task-olr_bold.json new file mode 100644 index 000000000..8b5fb1c7d --- /dev/null +++ b/ipi1195v1/sub-02/ses-01/func/sub-02_ses-01_task-olr_bold.json @@ -0,0 +1,4 @@ +{ + "Sub02Ses01TaskOLRBOLD": true +} + diff --git a/ipi1195v1/sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.json b/ipi1195v1/sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.json new file mode 100644 index 000000000..a3f5da401 --- /dev/null +++ b/ipi1195v1/sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.json @@ -0,0 +1,4 @@ +{ + "Sub02Ses01TaskRestBOLD": true +} + diff --git a/ipi1195v1/task-olr_bold.json b/ipi1195v1/task-olr_bold.json new file mode 100644 index 000000000..7cd1d0f50 --- /dev/null +++ b/ipi1195v1/task-olr_bold.json @@ -0,0 +1,6 @@ +{ + "RepetitionTime": 1.0, + "TaskName": "OrthographicLexicalRetrieval", + "TaskOLRBOLD": true +} + diff --git a/ipi1195v1/task-ovg_bold.json b/ipi1195v1/task-ovg_bold.json new file mode 100644 index 000000000..a0d91328e --- /dev/null +++ b/ipi1195v1/task-ovg_bold.json @@ -0,0 +1,6 @@ +{ + "RepetitionTime": 1.0, + "TaskName": "OvertVerbGeneration", + "TaskOVGBOLD": true +} + diff --git a/ipi1195v1/task-rest_bold.json b/ipi1195v1/task-rest_bold.json new file mode 100644 index 000000000..b07d66c96 --- /dev/null +++ b/ipi1195v1/task-rest_bold.json @@ -0,0 +1,6 @@ +{ + "RepetitionTime": 1.0, + "TaskName": "Resting-state", + "TaskRestBOLD": true +} + diff --git a/ipi1195v2/README.txt b/ipi1195v2/README.txt new file mode 100644 index 000000000..07ae04a9f --- /dev/null +++ b/ipi1195v2/README.txt @@ -0,0 +1,213 @@ +The following content is duplicated from a fork +of the Brain Imaging Data Structure (BIDS) specification. +It is referenced in GitHub Issue #1195 +(https://github.com/bids-standard/bids-specification/issues/1195), +and the code is located at: +https://github.com/Lestropie/bids-specification/pull/5. + + { + "bold.json", + "sub-01": { + "ses-01": { + "func": { + "sub-01_ses-01_bold.json", + "sub-01_ses-01_task-ovg_bold.json", + "sub-01_ses-01_task-ovg_run-1_bold.nii.gz", + "sub-01_ses-01_task-ovg_run-2_bold.nii.gz", + "sub-01_ses-01_task-ovg_run-2_bold.json", + "sub-01_ses-01_task-rest_bold.nii.gz", + "sub-01_ses-01_task-rest_bold.json" + } + }, + "ses-02": { + "func": { + "sub-01_ses-02_task-ovg_bold.nii.gz", + "sub-01_ses-02_task-rest_bold.nii.gz", + } + }, + "sub-01_bold.json" + }, + "sub-02": { + "ses-01": { + "func": { + "sub-02_ses-01_res-high_task-olr_bold.nii.gz", + "sub-02_ses-01_res-high_task-rest_bold.nii.gz", + "sub-02_ses-01_res-high_bold.json", + "sub-02_ses-01_res-low_task-olr_bold.nii.gz", + "sub-02_ses-01_res-low_task-rest_bold.nii.gz", + "sub-02_ses-01_res-low_bold.json", + "sub-02_ses-01_task-olr_bold.json", + "sub-02_ses-01_task-rest_bold.json" + } + } + }, + "task-olr_bold.json", + "task-ovg_bold.json", + "task-rest_bold.json" + } + + Applicable data files per metadata file + For each metadata file, the set of data files to which its contents are applicable is as follows: + + - bold.json: + + - sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-1_bold.nii.gz + - sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz + - sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz + - sub-01/ses-02/func/sub-01_ses-02_task-ovg_bold.nii.gz + - sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.nii.gz + - sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.nii.gz + + - task-olr_bold.json: + + - sub-02/ses-01/func/sub-02_ses-01_res-high_task-olr_bold.nii.gz + - sub-02/ses-01/func/sub-02_ses-01_res-low_task-olr_bold.nii.gz + + - task-ovg_bold.json: + + - sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-1_bold.nii.gz + - sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz + - sub-01/ses-02/func/sub-01_ses-02_task-ovg_bold.nii.gz + + - task-rest_bold.json: + + - sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz + - sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.nii.gz + - sub-02/ses-01/func/sub-02_ses-01_res-high_task-rest_bold.nii.gz + - sub-02/ses-01/func/sub-02_ses-01_res-low_task-rest_bold.nii.gz + + - sub-01/sub-01_bold.json: + + - sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-1_bold.nii.gz + - sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz + - sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz + - sub-01/ses-02/func/sub-01_ses-02_task-ovg_bold.nii.gz + - sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.nii.gz + + - sub-01/ses-01/sub-01_ses-01_bold.json: + + - sub-01/ses-01/sub-01_ses-01_task-ovg_run-1_bold.nii.gz + - sub-01/ses-01/sub-01_ses-01_task-ovg_run-2_bold.nii.gz + - sub-01/ses-01/sub-01_ses-01_task-rest_bold.nii.gz + + - sub-01/ses-01/sub-01_ses-01_task-ovg_bold.json: + + - sub-01/ses-01/sub-01_ses-01_task-ovg_run-1_bold.nii.gz + - sub-01/ses-01/sub-01_ses-01_task-ovg_run-2_bold.nii.gz + + - sub-01/ses-01/sub-01_ses-01_task-ovg_run-2_bold.json: + + - sub-01/ses-01/sub-01_ses-01_task-ovg_run-2_bold.nii.gz + + - sub-01/ses-01/sub-01_ses-01_task-rest_bold.json: + + - sub-01/ses-01/sub-01_ses-01_task-rest_bold.nii.gz + + - sub-02/ses-01/sub-02_ses-01_res-high_bold.json: + + - sub-02/ses-01/sub-02_ses-01_res-high_task-olr_bold.nii.gz + - sub-02/ses-01/sub-02_ses-01_res-high_task-rest_bold.nii.gz + + - sub-02/ses-01/sub-02_ses-01_res-low_bold.json: + + - sub-02/ses-01/sub-02_ses-01_res-low_task-olr_bold.nii.gz + - sub-02/ses-01/sub-02_ses-01_res-low_task-rest_bold.nii.gz + + - sub-02/ses-01/sub-02_ses-01_task-olr_bold.json: + + - sub-02/ses-01/sub-02_ses-01_res-high_task-olr_bold.nii.gz + - sub-02/ses-01/sub-02_ses-01_res-low_task-olr_bold.nii.gz + + - sub-02/ses-01/sub-02_ses-01_task-rest_bold.json: + + - sub-02/ses-01/sub-02_ses-01_res-high_task-rest_bold.nii.gz + - sub-02/ses-01/sub-02_ses-01_res-low_task-rest_bold.nii.gz + + Applicable metadata files per data file + For each data file, the order in which the set of applicable metadata files would be loaded is as follows: + + - sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-1_bold.nii.gz: + + - bold.json + - task-ovg_bold.json + - sub-01/sub-01_bold.json + - sub-01/ses-01/func/sub-01_ses-01_bold.json + - sub-01/ses-01/func/sub-01_ses-01_task-ovg_bold.json + + - sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz: + + - bold.json + - task-ovg_bold.json + - sub-01/sub-01_bold.json + - sub-01/ses-01/func/sub-01_ses-01_bold.json + - sub-01/ses-01/func/sub-01_ses-01_task-ovg_bold.json + - sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.json + + - sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz: + + - bold.json + - task-rest_bold.json + - sub-01/sub-01_bold.json + - sub-01/ses-01/func/sub-01_ses-01_bold.json + - sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.json + + - sub-01/ses-02/func/sub-01_ses-02_task-ovg_bold.nii.gz: + + - bold.json + - task-ovg_bold.json + - sub-01/sub-01_bold.json + + - sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.nii.gz: + + - bold.json + - task-rest_bold.json + - sub-01/sub-01_bold.json + + - sub-02_ses-01_res-high_task-olr_bold.nii.gz: + + - bold.json + - task-olr_bold.json + - sub-02/ses-01/func/sub-02_ses-01_res-high_bold.json + and sub-02/ses-01/func/sub-02_ses-01_task-olr_bold.json + (ambiguous order) + + - sub-02_ses-01_res-high_task-rest_bold.nii.gz: + + - bold.json + - task-rest_bold.json + - sub-02/ses-01/func/sub-02_ses-01_res-high_bold.json + and sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.json + (ambiguous order) + + - sub-02_ses-01_res-low_task-olr_bold.nii.gz: + + - bold.json + - task-olr_bold.json + - sub-02/ses-01/func/sub-02_ses-01_res-low_bold.json + and sub-02/ses-01/func/sub-02_ses-01_task-olr_bold.json + (ambiguous order) + + - sub-02_ses-01_res-low_task-rest_bold.nii.gz: + + - bold.json + - task-rest_bold.json + - sub-02/ses-01/func/sub-02_ses-01_res-low_bold.json + and sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.json + (ambiguous order) + +Notes: + +- This is an alternative to the dataset shown above, + designed to highlight how preserving the ability + to overwrite metadata key-values at lower levels of the hierarchy + results in ambiguities, + and therefore such overloading would need to be precluded in the specification. + There are multiple key-value metadata fields used to demonstrate this, + all beginning with the string "Lowest*". + In some circumstances there is fundamental ambiguity in the order + in which key-value metadata files should be read; + see eg. ""LowestBOLD": null" in file sourcedata/ip_metadata.json. + This example dataset should therefore fail validation + due to the presence of overloads. + Sister dataset "ipi1195v1" shows the original dataset without any overloading, + which should pass validation under that ruleset without issue. diff --git a/ipi1195v2/bold.json b/ipi1195v2/bold.json new file mode 100644 index 000000000..c3344cd6e --- /dev/null +++ b/ipi1195v2/bold.json @@ -0,0 +1,5 @@ +{ + "LowestBOLD": "BOLD", + "BOLD": true +} + diff --git a/ipi1195v2/dataset_description.json b/ipi1195v2/dataset_description.json new file mode 100644 index 000000000..f1d54bdfc --- /dev/null +++ b/ipi1195v2/dataset_description.json @@ -0,0 +1,8 @@ +{ + "Authors": [ + "Robert E. Smith " + ], + "BIDSVersion": "Issue 1195", + "DatasetType": "raw", + "Name": "Inheritance Principle validation; Issue #1195; version 2" +} diff --git a/ipi1195v2/sourcedata/ip_graph.json b/ipi1195v2/sourcedata/ip_graph.json new file mode 100644 index 000000000..34668e2d3 --- /dev/null +++ b/ipi1195v2/sourcedata/ip_graph.json @@ -0,0 +1,141 @@ +{ + "bold.json": [ + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-1_bold.nii.gz", + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz", + "sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz", + "sub-01/ses-02/func/sub-01_ses-02_task-ovg_bold.nii.gz", + "sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.nii.gz", + "sub-02/ses-01/func/sub-02_ses-01_res-high_task-olr_bold.nii.gz", + "sub-02/ses-01/func/sub-02_ses-01_res-high_task-rest_bold.nii.gz", + "sub-02/ses-01/func/sub-02_ses-01_res-low_task-olr_bold.nii.gz", + "sub-02/ses-01/func/sub-02_ses-01_res-low_task-rest_bold.nii.gz" + + ], + "task-olr_bold.json": [ + "sub-02/ses-01/func/sub-02_ses-01_res-high_task-olr_bold.nii.gz", + "sub-02/ses-01/func/sub-02_ses-01_res-low_task-olr_bold.nii.gz" + ], + "task-ovg_bold.json": [ + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-1_bold.nii.gz", + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz", + "sub-01/ses-02/func/sub-01_ses-02_task-ovg_bold.nii.gz" + ], + "task-rest_bold.json": [ + "sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz", + "sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.nii.gz", + "sub-02/ses-01/func/sub-02_ses-01_res-high_task-rest_bold.nii.gz", + "sub-02/ses-01/func/sub-02_ses-01_res-low_task-rest_bold.nii.gz" + ], + "sub-01/sub-01_bold.json": [ + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-1_bold.nii.gz", + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz", + "sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz", + "sub-01/ses-02/func/sub-01_ses-02_task-ovg_bold.nii.gz", + "sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.nii.gz" + ], + "sub-01/ses-01/func/sub-01_ses-01_bold.json": [ + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-1_bold.nii.gz", + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz", + "sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz" + ], + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_bold.json": [ + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-1_bold.nii.gz", + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz" + ], + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.json": [ + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz" + ], + "sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.json": [ + "sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz" + ], + "sub-02/ses-01/func/sub-02_ses-01_res-high_bold.json": [ + "sub-02/ses-01/func/sub-02_ses-01_res-high_task-olr_bold.nii.gz", + "sub-02/ses-01/func/sub-02_ses-01_res-high_task-rest_bold.nii.gz" + ], + "sub-02/ses-01/func/sub-02_ses-01_res-low_bold.json": [ + "sub-02/ses-01/func/sub-02_ses-01_res-low_task-olr_bold.nii.gz", + "sub-02/ses-01/func/sub-02_ses-01_res-low_task-rest_bold.nii.gz" + ], + "sub-02/ses-01/func/sub-02_ses-01_task-olr_bold.json": [ + "sub-02/ses-01/func/sub-02_ses-01_res-high_task-olr_bold.nii.gz", + "sub-02/ses-01/func/sub-02_ses-01_res-low_task-olr_bold.nii.gz" + ], + "sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.json": [ + "sub-02/ses-01/func/sub-02_ses-01_res-high_task-rest_bold.nii.gz", + "sub-02/ses-01/func/sub-02_ses-01_res-low_task-rest_bold.nii.gz" + ], + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-1_bold.nii.gz": { + ".json": [ + "bold.json", + "task-ovg_bold.json", + "sub-01/sub-01_bold.json", + "sub-01/ses-01/func/sub-01_ses-01_bold.json", + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_bold.json" + ] + }, + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz": { + ".json": [ + "bold.json", + "task-ovg_bold.json", + "sub-01/sub-01_bold.json", + "sub-01/ses-01/func/sub-01_ses-01_bold.json", + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_bold.json", + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.json" + ] + }, + "sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz": { + ".json": [ + "bold.json", + "task-rest_bold.json", + "sub-01/sub-01_bold.json", + "sub-01/ses-01/func/sub-01_ses-01_bold.json", + "sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.json" + ] + }, + "sub-01/ses-02/func/sub-01_ses-02_task-ovg_bold.nii.gz": { + ".json": [ + "bold.json", + "task-ovg_bold.json", + "sub-01/sub-01_bold.json" + ] + }, + "sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.nii.gz": { + ".json": [ + "bold.json", + "task-rest_bold.json", + "sub-01/sub-01_bold.json" + ] + }, + "sub-02/ses-01/func/sub-02_ses-01_res-high_task-olr_bold.nii.gz": { + ".json": [ + "bold.json", + "task-olr_bold.json", + "sub-02/ses-01/func/sub-02_ses-01_res-high_bold.json", + "sub-02/ses-01/func/sub-02_ses-01_task-olr_bold.json" + ] + }, + "sub-02/ses-01/func/sub-02_ses-01_res-high_task-rest_bold.nii.gz": { + ".json": [ + "bold.json", + "task-rest_bold.json", + "sub-02/ses-01/func/sub-02_ses-01_res-high_bold.json", + "sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.json" + ] + }, + "sub-02/ses-01/func/sub-02_ses-01_res-low_task-olr_bold.nii.gz": { + ".json": [ + "bold.json", + "task-olr_bold.json", + "sub-02/ses-01/func/sub-02_ses-01_res-low_bold.json", + "sub-02/ses-01/func/sub-02_ses-01_task-olr_bold.json" + ] + }, + "sub-02/ses-01/func/sub-02_ses-01_res-low_task-rest_bold.nii.gz": { + ".json": [ + "bold.json", + "task-rest_bold.json", + "sub-02/ses-01/func/sub-02_ses-01_res-low_bold.json", + "sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.json" + ] + } +} diff --git a/ipi1195v2/sourcedata/ip_metadata.json b/ipi1195v2/sourcedata/ip_metadata.json new file mode 100644 index 000000000..afefc2b1e --- /dev/null +++ b/ipi1195v2/sourcedata/ip_metadata.json @@ -0,0 +1,111 @@ +{ + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-1_bold.nii.gz": { + ".json": { + "LowestBOLD": "Sub01Ses01TaskOVGBOLD", + "LowestSub01": "Sub01Ses01TaskOVGBOLD", + "LowestTaskOVG": "Sub01Ses01TaskOVGBOLD", + "BOLD": true, + "TaskOVGBOLD": true, + "Sub01BOLD": true, + "Sub01Ses01BOLD": true, + "Sub01Ses01TaskOVGBOLD": true + } + }, + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz": { + ".json": { + "LowestBOLD": "Sub01Ses01TaskOVGRun2BOLD", + "LowestSub01": "Sub01Ses01TaskOVGRun2BOLD", + "LowestTaskOVG": "Sub01Ses01TeaskOVGRun2BOLD", + "BOLD": true, + "TaskOVGBOLD": true, + "Sub01BOLD": true, + "Sub01Ses01BOLD": true, + "Sub01Ses01TaskOVGBOLD": true, + "Sub01Ses01TaskOVGRun2BOLD": true + } + }, + "sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz": { + ".json": { + "LowestBOLD": "Sub01Ses01BOLD", + "LowestSub01": "Sub01Ses01BOLD", + "LowestTaskRest": "TaskRestBOLD", + "BOLD": true, + "TaskRestBOLD": true, + "Sub01BOLD": true, + "Sub01Ses01BOLD": true, + "Sub01Ses01TaskRestBOLD": true + } + }, + "sub-01/ses-02/func/sub-01_ses-02_task-ovg_bold.nii.gz": { + ".json": { + "LowestBOLD": "Sub01BOLD", + "LowestSub01": "Sub01BOLD", + "LowestTaskOVG": "TaskOVGBOLD", + "BOLD": true, + "TaskOVGBOLD": true, + "Sub01BOLD": true + } + }, + "sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.nii.gz": { + ".json": { + "LowestBOLD": "Sub01BOLD", + "LowestSub01": "Sub01BOLD", + "LowestTaskRest": "TaskRestBOLD", + "BOLD": true, + "TaskRestBOLD": true, + "Sub01BOLD": true + } + }, + "sub-02/ses-01/func/sub-02_ses-01_res-high_task-olr_bold.nii.gz": { + ".json": { + "LowestBOLD": null, + "LowestResHigh": "Sub02Ses01ResHighBOLD", + "LowestTaskOLR": "Sub02Ses01TaskOLRBOLD", + "BOLD": true, + "TaskOLRBOLD": true, + "Sub02Ses01ResHighBOLD": true, + "Sub02Ses01TaskOLRBOLD": true, + "RepetitionTime": 1.0, + "TaskName": "OrthographicLexicalRetrieval" + } + }, + "sub-02/ses-01/func/sub-02_ses-01_res-high_task-rest_bold.nii.gz": { + ".json": { + "LowestBOLD": null, + "LowestResHigh": "Sub02Ses01ResHighBOLD", + "LowestTaskRest": "Sub02Ses01TaskRestBOLD", + "BOLD": true, + "TaskRestBOLD": true, + "Sub02Ses01ResHighBOLD": true, + "Sub02Ses01TaskRestBOLD": true, + "RepetitionTime": 1.0, + "TaskName": "Resting-state" + } + }, + "sub-02/ses-01/func/sub-02_ses-01_res-low_task-olr_bold.nii.gz": { + ".json": { + "LowestBOLD": null, + "LowestResLow": "Sub02Ses01ResLowBOLD", + "LowestTaskOLR": "Sub02Ses01TasklOLRBOLD", + "BOLD": true, + "TaskOLRBOLD": true, + "Sub02Ses01ResLowBOLD": true, + "Sub02Ses01TaskOLRBOLD": true, + "RepetitionTime": 1.0, + "TaskName": "OrthographicLexicalRetrieval" + } + }, + "sub-02/ses-01/func/sub-02_ses-01_res-low_task-rest_bold.nii.gz": { + ".json": { + "LowestBOLD": null, + "LowestResLow": "Sub02Ses01ResLowBOLD", + "LowestTaskRest": "Sub02Ses01TaskRestBOLD", + "BOLD": true, + "TaskRestBOLD": true, + "Sub02Ses01ResLowBOLD": true, + "Sub02Ses01TaskRestBOLD": true, + "RepetitionTime": 1.0, + "TaskName": "Resting-state" + } + } +} diff --git a/ipi1195v2/sub-01/ses-01/func/sub-01_ses-01_bold.json b/ipi1195v2/sub-01/ses-01/func/sub-01_ses-01_bold.json new file mode 100644 index 000000000..01a40661f --- /dev/null +++ b/ipi1195v2/sub-01/ses-01/func/sub-01_ses-01_bold.json @@ -0,0 +1,6 @@ +{ + "LowestBOLD": "Sub01Ses01BOLD", + "LowestSub01": "Sub01Ses01BOLD", + "Sub01Ses01BOLD": true +} + diff --git a/ipi1195v2/sub-01/ses-01/func/sub-01_ses-01_task-ovg_bold.json b/ipi1195v2/sub-01/ses-01/func/sub-01_ses-01_task-ovg_bold.json new file mode 100644 index 000000000..a6808a84d --- /dev/null +++ b/ipi1195v2/sub-01/ses-01/func/sub-01_ses-01_task-ovg_bold.json @@ -0,0 +1,7 @@ +{ + "LowestBOLD": "Sub01Ses01TaskOVGBOLD", + "LowestSub01": "Sub01Ses01TaskOVGBOLD", + "LowestTaskOVG": "Sub01Ses01TaskOVGBOLD", + "Sub01Ses01TaskOVGBOLD": true +} + diff --git a/ipi1195v2/sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-1_bold.nii.gz b/ipi1195v2/sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-1_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipi1195v2/sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.json b/ipi1195v2/sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.json new file mode 100644 index 000000000..2fcc97fe7 --- /dev/null +++ b/ipi1195v2/sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.json @@ -0,0 +1,7 @@ +{ + "LowestBOLD": "Sub01Ses01TaskOVGRun2BOLD", + "LowestSub01": "Sub01Ses01TaskOVGRun2BOLD", + "LowestTaskOVG": "Sub01Ses01TaskOVGRun2BOLD", + "Sub01Ses01TaskOVGRun2BOLD": true +} + diff --git a/ipi1195v2/sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz b/ipi1195v2/sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipi1195v2/sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.json b/ipi1195v2/sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.json new file mode 100644 index 000000000..a447ee249 --- /dev/null +++ b/ipi1195v2/sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.json @@ -0,0 +1,7 @@ +{ + "LowestBOLD": "Sub01Ses01TaskRestBOLD", + "LowestSub01": "Sub01Ses01TaskRestBOLD", + "LowestTaskRest": "Sub01Ses01TaskRestBOLD", + "Sub01Ses01TaskRestBOLD": true +} + diff --git a/ipi1195v2/sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz b/ipi1195v2/sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipi1195v2/sub-01/ses-02/func/sub-01_ses-02_task-ovg_bold.nii.gz b/ipi1195v2/sub-01/ses-02/func/sub-01_ses-02_task-ovg_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipi1195v2/sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.nii.gz b/ipi1195v2/sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipi1195v2/sub-01/sub-01_bold.json b/ipi1195v2/sub-01/sub-01_bold.json new file mode 100644 index 000000000..1f4bd86a8 --- /dev/null +++ b/ipi1195v2/sub-01/sub-01_bold.json @@ -0,0 +1,6 @@ +{ + "LowestBOLD": "Sub01BOLD", + "LowestSub01": "Sub01BOLD", + "Sub01BOLD": true +} + diff --git a/ipi1195v2/sub-02/ses-01/func/sub-02_ses-01_res-high_bold.json b/ipi1195v2/sub-02/ses-01/func/sub-02_ses-01_res-high_bold.json new file mode 100644 index 000000000..ddc3ac707 --- /dev/null +++ b/ipi1195v2/sub-02/ses-01/func/sub-02_ses-01_res-high_bold.json @@ -0,0 +1,7 @@ +{ + "LowestBOLD": "Sub02Ses01ResHighBOLD", + "LowestSub02": "Sub02Ses01ResHighBOLD", + "LowestResHigh": "Sub02Ses01ResHighBOLD", + "Sub02Ses01ResHighBOLD": true +} + diff --git a/ipi1195v2/sub-02/ses-01/func/sub-02_ses-01_res-high_task-olr_bold.nii.gz b/ipi1195v2/sub-02/ses-01/func/sub-02_ses-01_res-high_task-olr_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipi1195v2/sub-02/ses-01/func/sub-02_ses-01_res-high_task-rest_bold.nii.gz b/ipi1195v2/sub-02/ses-01/func/sub-02_ses-01_res-high_task-rest_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipi1195v2/sub-02/ses-01/func/sub-02_ses-01_res-low_bold.json b/ipi1195v2/sub-02/ses-01/func/sub-02_ses-01_res-low_bold.json new file mode 100644 index 000000000..a17c552a1 --- /dev/null +++ b/ipi1195v2/sub-02/ses-01/func/sub-02_ses-01_res-low_bold.json @@ -0,0 +1,7 @@ +{ + "LowestBOLD": "Sub02Ses01ResLowBOLD", + "LowestSub02": "Sub02Ses01ResLowBOLD", + "LowestResLow": "Sub02Ses01ResLowBOLD", + "Sub02Ses01ResLowBOLD": true +} + diff --git a/ipi1195v2/sub-02/ses-01/func/sub-02_ses-01_res-low_task-olr_bold.nii.gz b/ipi1195v2/sub-02/ses-01/func/sub-02_ses-01_res-low_task-olr_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipi1195v2/sub-02/ses-01/func/sub-02_ses-01_res-low_task-rest_bold.nii.gz b/ipi1195v2/sub-02/ses-01/func/sub-02_ses-01_res-low_task-rest_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipi1195v2/sub-02/ses-01/func/sub-02_ses-01_task-olr_bold.json b/ipi1195v2/sub-02/ses-01/func/sub-02_ses-01_task-olr_bold.json new file mode 100644 index 000000000..c197beedf --- /dev/null +++ b/ipi1195v2/sub-02/ses-01/func/sub-02_ses-01_task-olr_bold.json @@ -0,0 +1,7 @@ +{ + "LowestBOLD": "Sub02Ses01TaskOLRBOLD", + "LowestSub02": "Sub02Ses01TaskOLRBOLD", + "LowestTaskOLR": "Sub02Ses01TaskOLRBOLD", + "Sub02Ses01TaskOLRBOLD": true +} + diff --git a/ipi1195v2/sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.json b/ipi1195v2/sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.json new file mode 100644 index 000000000..c8299499a --- /dev/null +++ b/ipi1195v2/sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.json @@ -0,0 +1,7 @@ +{ + "LowestBOLD": "Sub02Ses01TaskRestBOLD", + "LowestSub02": "Sub02Ses01TaskRestBOLD", + "LowestTaskRest": "Sub02Ses01TaskRestBOLD", + "Sub02Ses01TaskRestBOLD": true +} + diff --git a/ipi1195v2/task-olr_bold.json b/ipi1195v2/task-olr_bold.json new file mode 100644 index 000000000..0bd09100f --- /dev/null +++ b/ipi1195v2/task-olr_bold.json @@ -0,0 +1,8 @@ +{ + "LowestBOLD": "TaskOLRBOLD", + "LowestTaskOLR": "TaskOLRBOLD", + "RepetitionTime": 1.0, + "TaskName": "OrthographicLexicalRetrieval", + "TaskOLRBOLD": true +} + diff --git a/ipi1195v2/task-ovg_bold.json b/ipi1195v2/task-ovg_bold.json new file mode 100644 index 000000000..945bfda42 --- /dev/null +++ b/ipi1195v2/task-ovg_bold.json @@ -0,0 +1,8 @@ +{ + "LowestBOLD": "TaskOVGBOLD", + "LowestTaskOVG": "TaskOVGBOLD", + "RepetitionTime": 1.0, + "TaskName": "OvertVerbGeneration", + "TaskOVGBOLD": true +} + diff --git a/ipi1195v2/task-rest_bold.json b/ipi1195v2/task-rest_bold.json new file mode 100644 index 000000000..ede5c717e --- /dev/null +++ b/ipi1195v2/task-rest_bold.json @@ -0,0 +1,8 @@ +{ + "LowestBOLD": "TaskRestBOLD", + "LowestTaskRest": "TaskRestBOLD", + "RepetitionTime": 1.0, + "TaskName": "Resting-state", + "TaskRestBOLD": true +} + diff --git a/iploosemeta/README.txt b/iploosemeta/README.txt new file mode 100644 index 000000000..08997aa25 --- /dev/null +++ b/iploosemeta/README.txt @@ -0,0 +1,8 @@ +This exemplar dataset has not at time of writing been contributed +or proposed to any version of the Brain Imaging Data Structure (BIDS) specification. +It was created to demonstrate that it is possible for a metadata file to be present +yet not applicable to any data file; +it is unclear at time of writing whether this violates BIDS more generally, +however the Inheritance Principle as currently written does not forbid it. +This exemplar dataset should however produce a warning regarding such: +file "sub-01/anat/sub-01_T2w.json" is not applicable to any data file. diff --git a/iploosemeta/dataset_description.json b/iploosemeta/dataset_description.json new file mode 100644 index 000000000..ba94657d3 --- /dev/null +++ b/iploosemeta/dataset_description.json @@ -0,0 +1,9 @@ +{ + "Authors": [ + "Robert E. Smith " + ], + "BIDSVersion": "1.1.2", + "DatasetType": "raw", + "Name": "Inheritance Principle validation; BIDS version 1.1.2; loose metadata file ie. no associated data file" +} + diff --git a/iploosemeta/sourcedata/ip_graph.json b/iploosemeta/sourcedata/ip_graph.json new file mode 100644 index 000000000..7eb1a7160 --- /dev/null +++ b/iploosemeta/sourcedata/ip_graph.json @@ -0,0 +1,12 @@ +{ + "sub-01/anat/sub-01_T1w.json": [ + "sub-01/anat/sub-01_T1w.nii.gz" + ], + "sub-01/anat/sub-01_T1w.nii.gz": { + ".json": [ + "sub-01/anat/sub-01_T1w.json" + ] + }, + "sub-01/anat/sub-01_T2w.json": [ + ] +} diff --git a/iploosemeta/sourcedata/ip_metadata.json b/iploosemeta/sourcedata/ip_metadata.json new file mode 100644 index 000000000..c32f82bf1 --- /dev/null +++ b/iploosemeta/sourcedata/ip_metadata.json @@ -0,0 +1,7 @@ +{ + "sub-01/anat/sub-01_T1w.nii.gz": { + ".json": { + "Sub01T1w": true + } + } +} diff --git a/iploosemeta/sub-01/anat/sub-01_T1w.json b/iploosemeta/sub-01/anat/sub-01_T1w.json new file mode 100644 index 000000000..625e7aca5 --- /dev/null +++ b/iploosemeta/sub-01/anat/sub-01_T1w.json @@ -0,0 +1,4 @@ +{ + "Sub01T1w": true +} + diff --git a/iploosemeta/sub-01/anat/sub-01_T1w.nii.gz b/iploosemeta/sub-01/anat/sub-01_T1w.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/iploosemeta/sub-01/anat/sub-01_T2w.json b/iploosemeta/sub-01/anat/sub-01_T2w.json new file mode 100644 index 000000000..6603bfafb --- /dev/null +++ b/iploosemeta/sub-01/anat/sub-01_T2w.json @@ -0,0 +1,4 @@ +{ + "Sub02T2w": true +} + diff --git a/ipmultielfce1v1/README.md b/ipmultielfce1v1/README.md new file mode 100644 index 000000000..09c4d76cd --- /dev/null +++ b/ipmultielfce1v1/README.md @@ -0,0 +1,7 @@ +This dataset exemplifies an issue whereby the 1.x version of the specification +has difficulty in capturing data wherein there are multiple intersecting +Entity-Lined File Collections. + +In this version 1 of the dataset, every data file has associated with it a sidecar JSON. +In sister dataset "ipmultielfce1v2", an alternative encoding of this example is shown, +which is predicated on a more flexible ruleset for the Inheritance Principle. diff --git a/ipmultielfce1v1/dataset_description.json b/ipmultielfce1v1/dataset_description.json new file mode 100644 index 000000000..b8f55c12b --- /dev/null +++ b/ipmultielfce1v1/dataset_description.json @@ -0,0 +1,9 @@ +{ + "Authors": [ + "Robert E. Smith " + ], + "BIDSVersion": "1.1.2", + "DatasetType": "raw", + "Name": "Inheritance Principle validation; BIDS version 1.1.2; multiple Entity-Linked File Collections; example 1; version 1" +} + diff --git a/ipmultielfce1v1/sourcedata/ip_graph.json b/ipmultielfce1v1/sourcedata/ip_graph.json new file mode 100644 index 000000000..1c57854c4 --- /dev/null +++ b/ipmultielfce1v1/sourcedata/ip_graph.json @@ -0,0 +1,50 @@ +{ + "sub-01/func/sub-01_task-movie_echo-1_part-mag_bold.json": [ + "sub-01/func/sub-01_task-movie_echo-1_part-mag_bold.nii.gz" + ], + "sub-01/func/sub-01_task-movie_echo-1_part-phase_bold.json": [ + "sub-01/func/sub-01_task-movie_echo-1_part-phase_bold.nii.gz" + ], + "sub-01/func/sub-01_task-movie_echo-2_part-mag_bold.json": [ + "sub-01/func/sub-01_task-movie_echo-2_part-mag_bold.nii.gz" + ], + "sub-01/func/sub-01_task-movie_echo-2_part-phase_bold.json": [ + "sub-01/func/sub-01_task-movie_echo-2_part-phase_bold.nii.gz" + ], + "sub-01/func/sub-01_task-movie_echo-3_part-mag_bold.json": [ + "sub-01/func/sub-01_task-movie_echo-3_part-mag_bold.nii.gz" + ], + "sub-01/func/sub-01_task-movie_echo-3_part-phase_bold.json": [ + "sub-01/func/sub-01_task-movie_echo-3_part-phase_bold.nii.gz" + ], + "sub-01/func/sub-01_task-movie_echo-1_part-mag_bold.nii.gz": { + ".json": [ + "sub-01/func/sub-01_task-movie_echo-1_part-mag_bold.json" + ] + }, + "sub-01/func/sub-01_task-movie_echo-1_part-phase_bold.nii.gz": { + ".json": [ + "sub-01/func/sub-01_task-movie_echo-1_part-phase_bold.json" + ] + }, + "sub-01/func/sub-01_task-movie_echo-2_part-mag_bold.nii.gz": { + ".json": [ + "sub-01/func/sub-01_task-movie_echo-2_part-mag_bold.json" + ] + }, + "sub-01/func/sub-01_task-movie_echo-2_part-phase_bold.nii.gz": { + ".json": [ + "sub-01/func/sub-01_task-movie_echo-2_part-phase_bold.json" + ] + }, + "sub-01/func/sub-01_task-movie_echo-3_part-mag_bold.nii.gz": { + ".json": [ + "sub-01/func/sub-01_task-movie_echo-3_part-mag_bold.json" + ] + }, + "sub-01/func/sub-01_task-movie_echo-3_part-phase_bold.nii.gz": { + ".json": [ + "sub-01/func/sub-01_task-movie_echo-3_part-phase_bold.json" + ] + } +} diff --git a/ipmultielfce1v1/sourcedata/ip_metadata.json b/ipmultielfce1v1/sourcedata/ip_metadata.json new file mode 100644 index 000000000..fe3fc9567 --- /dev/null +++ b/ipmultielfce1v1/sourcedata/ip_metadata.json @@ -0,0 +1,137 @@ +{ + "sub-01/func/sub-01_task-movie_echo-1_part-mag_bold.nii.gz": { + ".json": { + "Modality": "MR", + "ScanningSequence": "EP", + "ImageType": [ + "ORIGINAL", + "PRIMARY", + "M", + "MB", + "TE1", + "ND", + "NORM", + "MOSAIC" + ], + "SeriesNumber": 53, + "ImageComments": "Unaliased MB4/PE4/LB SENSE1+", + "EchoNumber": 1, + "EchoTime": 0.015, + "RepetitionTime": 1.0, + "TaskName": "Movie-watching" + } + }, + "sub-01/func/sub-01_task-movie_echo-1_part-phase_bold.nii.gz": { + ".json": { + "Modality": "MR", + "ScanningSequence": "EP", + "ImageType": [ + "ORIGINAL", + "PRIMARY", + "P", + "MB", + "TE1", + "ND", + "MOSAIC", + "PHASE" + ], + "SeriesNumber": 54, + "ImageComments": "Unaliased MB4/PE4/LB SENSE1+", + "EchoNumber": 1, + "EchoTime": 0.015, + "Units": "arbitrary", + "RepetitionTime": 1.0, + "TaskName": "Movie-watching" + } + }, + "sub-01/func/sub-01_task-movie_echo-2_part-mag_bold.nii.gz": { + ".json": { + "Modality": "MR", + "ScanningSequence": "EP", + "ImageType": [ + "ORIGINAL", + "PRIMARY", + "M", + "MB", + "TE2", + "ND", + "NORM", + "MOSAIC" + ], + "SeriesNumber": 53, + "ImageComments": "Unaliased MB4/PE4/LB SENSE1+", + "EchoNumber": 2, + "EchoTime": 0.035, + "RepetitionTime": 1.0, + "TaskName": "Movie-watching" + } + }, + "sub-01/func/sub-01_task-movie_echo-2_part-phase_bold.nii.gz": { + ".json": { + "Modality": "MR", + "ScanningSequence": "EP", + "ImageType": [ + "ORIGINAL", + "PRIMARY", + "P", + "MB", + "TE2", + "ND", + "MOSAIC", + "PHASE" + ], + "SeriesNumber": 54, + "ImageComments": "Unaliased MB4/PE4/LB SENSE1+", + "EchoNumber": 2, + "EchoTime": 0.035, + "Units": "arbitrary", + "RepetitionTime": 1.0, + "TaskName": "Movie-watching" + } + }, + "sub-01/func/sub-01_task-movie_echo-3_part-mag_bold.nii.gz": { + ".json": { + "Modality": "MR", + "ScanningSequence": "EP", + "ImageType": [ + "ORIGINAL", + "PRIMARY", + "M", + "MB", + "TE3", + "ND", + "NORM", + "MOSAIC" + ], + "SeriesNumber": 53, + "ImageComments": "Unaliased MB4/PE4/LB SENSE1+", + "EchoNumber": 3, + "EchoTime": 0.055, + "RepetitionTime": 1.0, + "TaskName": "Movie-watching" + } + }, + "sub-01/func/sub-01_task-movie_echo-3_part-phase_bold.nii.gz": { + ".json": { + "Modality": "MR", + "ScanningSequence": "EP", + "ImageType": [ + "ORIGINAL", + "PRIMARY", + "P", + "MB", + "TE3", + "ND", + "MOSAIC", + "PHASE" + ], + "SeriesNumber": 54, + "ImageComments": "Unaliased MB4/PE4/LB SENSE1+", + "EchoNumber": 3, + "EchoTime": 0.055, + "Units": "arbitrary", + "RepetitionTime": 1.0, + "TaskName": "Movie-watching" + } + } +} diff --git a/ipmultielfce1v1/sub-01/func/sub-01_task-movie_echo-1_part-mag_bold.json b/ipmultielfce1v1/sub-01/func/sub-01_task-movie_echo-1_part-mag_bold.json new file mode 100644 index 000000000..3df7ef3a6 --- /dev/null +++ b/ipmultielfce1v1/sub-01/func/sub-01_task-movie_echo-1_part-mag_bold.json @@ -0,0 +1,20 @@ +{ + "Modality": "MR", + "ScanningSequence": "EP", + "ImageType": [ + "ORIGINAL", + "PRIMARY", + "M", + "MB", + "TE1", + "ND", + "NORM", + "MOSAIC" + ], + "SeriesNumber": 53, + "ImageComments": "Unaliased MB4/PE4/LB SENSE1+", + "EchoNumber": 1, + "EchoTime": 0.015, + "RepetitionTime": 1.0, + "TaskName": "Movie-watching" +} diff --git a/ipmultielfce1v1/sub-01/func/sub-01_task-movie_echo-1_part-mag_bold.nii.gz b/ipmultielfce1v1/sub-01/func/sub-01_task-movie_echo-1_part-mag_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipmultielfce1v1/sub-01/func/sub-01_task-movie_echo-1_part-phase_bold.json b/ipmultielfce1v1/sub-01/func/sub-01_task-movie_echo-1_part-phase_bold.json new file mode 100644 index 000000000..e2c71d912 --- /dev/null +++ b/ipmultielfce1v1/sub-01/func/sub-01_task-movie_echo-1_part-phase_bold.json @@ -0,0 +1,21 @@ +{ + "Modality": "MR", + "ScanningSequence": "EP", + "ImageType": [ + "ORIGINAL", + "PRIMARY", + "P", + "MB", + "TE1", + "ND", + "MOSAIC", + "PHASE" + ], + "SeriesNumber": 54, + "ImageComments": "Unaliased MB4/PE4/LB SENSE1+", + "EchoNumber": 1, + "EchoTime": 0.015, + "Units": "arbitrary", + "RepetitionTime": 1.0, + "TaskName": "Movie-watching" +} diff --git a/ipmultielfce1v1/sub-01/func/sub-01_task-movie_echo-1_part-phase_bold.nii.gz b/ipmultielfce1v1/sub-01/func/sub-01_task-movie_echo-1_part-phase_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipmultielfce1v1/sub-01/func/sub-01_task-movie_echo-2_part-mag_bold.json b/ipmultielfce1v1/sub-01/func/sub-01_task-movie_echo-2_part-mag_bold.json new file mode 100644 index 000000000..d56dc3ef4 --- /dev/null +++ b/ipmultielfce1v1/sub-01/func/sub-01_task-movie_echo-2_part-mag_bold.json @@ -0,0 +1,20 @@ +{ + "Modality": "MR", + "ScanningSequence": "EP", + "ImageType": [ + "ORIGINAL", + "PRIMARY", + "M", + "MB", + "TE2", + "ND", + "NORM", + "MOSAIC" + ], + "SeriesNumber": 53, + "ImageComments": "Unaliased MB4/PE4/LB SENSE1+", + "EchoNumber": 2, + "EchoTime": 0.035, + "RepetitionTime": 1.0, + "TaskName": "Movie-watching" +} diff --git a/ipmultielfce1v1/sub-01/func/sub-01_task-movie_echo-2_part-mag_bold.nii.gz b/ipmultielfce1v1/sub-01/func/sub-01_task-movie_echo-2_part-mag_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipmultielfce1v1/sub-01/func/sub-01_task-movie_echo-2_part-phase_bold.json b/ipmultielfce1v1/sub-01/func/sub-01_task-movie_echo-2_part-phase_bold.json new file mode 100644 index 000000000..87bf9be34 --- /dev/null +++ b/ipmultielfce1v1/sub-01/func/sub-01_task-movie_echo-2_part-phase_bold.json @@ -0,0 +1,21 @@ +{ + "Modality": "MR", + "ScanningSequence": "EP", + "ImageType": [ + "ORIGINAL", + "PRIMARY", + "P", + "MB", + "TE2", + "ND", + "MOSAIC", + "PHASE" + ], + "SeriesNumber": 54, + "ImageComments": "Unaliased MB4/PE4/LB SENSE1+", + "EchoNumber": 2, + "EchoTime": 0.035, + "Units": "arbitrary", + "RepetitionTime": 1.0, + "TaskName": "Movie-watching" +} diff --git a/ipmultielfce1v1/sub-01/func/sub-01_task-movie_echo-2_part-phase_bold.nii.gz b/ipmultielfce1v1/sub-01/func/sub-01_task-movie_echo-2_part-phase_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipmultielfce1v1/sub-01/func/sub-01_task-movie_echo-3_part-mag_bold.json b/ipmultielfce1v1/sub-01/func/sub-01_task-movie_echo-3_part-mag_bold.json new file mode 100644 index 000000000..cc1ac45b0 --- /dev/null +++ b/ipmultielfce1v1/sub-01/func/sub-01_task-movie_echo-3_part-mag_bold.json @@ -0,0 +1,20 @@ +{ + "Modality": "MR", + "ScanningSequence": "EP", + "ImageType": [ + "ORIGINAL", + "PRIMARY", + "M", + "MB", + "TE3", + "ND", + "NORM", + "MOSAIC" + ], + "SeriesNumber": 53, + "ImageComments": "Unaliased MB4/PE4/LB SENSE1+", + "EchoNumber": 3, + "EchoTime": 0.055, + "RepetitionTime": 1.0, + "TaskName": "Movie-watching" +} diff --git a/ipmultielfce1v1/sub-01/func/sub-01_task-movie_echo-3_part-mag_bold.nii.gz b/ipmultielfce1v1/sub-01/func/sub-01_task-movie_echo-3_part-mag_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipmultielfce1v1/sub-01/func/sub-01_task-movie_echo-3_part-phase_bold.json b/ipmultielfce1v1/sub-01/func/sub-01_task-movie_echo-3_part-phase_bold.json new file mode 100644 index 000000000..433e63c89 --- /dev/null +++ b/ipmultielfce1v1/sub-01/func/sub-01_task-movie_echo-3_part-phase_bold.json @@ -0,0 +1,21 @@ +{ + "Modality": "MR", + "ScanningSequence": "EP", + "ImageType": [ + "ORIGINAL", + "PRIMARY", + "P", + "MB", + "TE3", + "ND", + "MOSAIC", + "PHASE" + ], + "SeriesNumber": 54, + "ImageComments": "Unaliased MB4/PE4/LB SENSE1+", + "EchoNumber": 3, + "EchoTime": 0.055, + "Units": "arbitrary", + "RepetitionTime": 1.0, + "TaskName": "Movie-watching" +} diff --git a/ipmultielfce1v1/sub-01/func/sub-01_task-movie_echo-3_part-phase_bold.nii.gz b/ipmultielfce1v1/sub-01/func/sub-01_task-movie_echo-3_part-phase_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipmultielfce1v2/README.md b/ipmultielfce1v2/README.md new file mode 100644 index 000000000..c340de065 --- /dev/null +++ b/ipmultielfce1v2/README.md @@ -0,0 +1,20 @@ +This dataset exemplifies an issue whereby the 1.x version of the specification +has difficulty in capturing data wherein there are multiple intersecting +Entity-Linked File Collections. + +An Entity-Linked File Collection is a set of files containing at least two data files, +wherein the entities within their file names differ only by the value for one specific entity. +Examples include complex data that are split into eg. "_part-mag" and "_part-phase", +and multi-echo data that are split into "_echo-#". +This formalism however fails to consider the fact that there may be sets of files +that intersect along multiple such entities. +THis dataset shows the example of a multi-echo fMRI acquisition where complex data are saved. +While there is no issue in deriving file names for these images, +under version 1.x of the BIDS specification it becomes impossible to appropriately exploit this structure +to store redundant metadata in higher-level JSON files to be applicable via the Inheritance Principle, +as a data file cannot inherit from multiple such files at a single level in the filesystem hierarchy. + +This dataset show how such data could plausibly be stored in a future BIDS specification. +It should be deemed invalid if evaluated under the 1.x version of the Inheritance Principle. +Sister dataset "ipmultielfce1v1" shows these same data without any exploitation of the Inheritance Principle, +which should be deemed valid under BIDS 1.x. diff --git a/ipmultielfce1v2/dataset_description.json b/ipmultielfce1v2/dataset_description.json new file mode 100644 index 000000000..b8f55c12b --- /dev/null +++ b/ipmultielfce1v2/dataset_description.json @@ -0,0 +1,9 @@ +{ + "Authors": [ + "Robert E. Smith " + ], + "BIDSVersion": "1.1.2", + "DatasetType": "raw", + "Name": "Inheritance Principle validation; BIDS version 1.1.2; multiple Entity-Linked File Collections; example 1; version 1" +} + diff --git a/ipmultielfce1v2/sourcedata/ip_graph.json b/ipmultielfce1v2/sourcedata/ip_graph.json new file mode 100644 index 000000000..06ee7f009 --- /dev/null +++ b/ipmultielfce1v2/sourcedata/ip_graph.json @@ -0,0 +1,98 @@ +{ + "sub-01/func/sub-01_task-movie_bold.json": [ + "sub-01/func/sub-01_task-movie_echo-1_part-mag_bold.nii.gz", + "sub-01/func/sub-01_task-movie_echo-1_part-phase_bold.nii.gz", + "sub-01/func/sub-01_task-movie_echo-2_part-mag_bold.nii.gz", + "sub-01/func/sub-01_task-movie_echo-2_part-phase_bold.nii.gz", + "sub-01/func/sub-01_task-movie_echo-3_part-mag_bold.nii.gz", + "sub-01/func/sub-01_task-movie_echo-3_part-phase_bold.nii.gz" + ], + "sub-01/func/sub-01_task-movie_echo-1_bold.json": [ + "sub-01/func/sub-01_task-movie_echo-1_part-mag_bold.nii.gz", + "sub-01/func/sub-01_task-movie_echo-1_part-phase_bold.nii.gz" + ], + "sub-01/func/sub-01_task-movie_echo-2_bold.json": [ + "sub-01/func/sub-01_task-movie_echo-2_part-mag_bold.nii.gz", + "sub-01/func/sub-01_task-movie_echo-2_part-phase_bold.nii.gz" + ], + "sub-01/func/sub-01_task-movie_echo-3_bold.json": [ + "sub-01/func/sub-01_task-movie_echo-3_part-mag_bold.nii.gz", + "sub-01/func/sub-01_task-movie_echo-3_part-phase_bold.nii.gz" + ], + "sub-01/func/sub-01_task-movie_part-mag_bold.json": [ + "sub-01/func/sub-01_task-movie_echo-1_part-mag_bold.nii.gz", + "sub-01/func/sub-01_task-movie_echo-2_part-mag_bold.nii.gz", + "sub-01/func/sub-01_task-movie_echo-3_part-mag_bold.nii.gz" + ], + "sub-01/func/sub-01_task-movie_part-phase_bold.json": [ + "sub-01/func/sub-01_task-movie_echo-1_part-phase_bold.nii.gz", + "sub-01/func/sub-01_task-movie_echo-2_part-phase_bold.nii.gz", + "sub-01/func/sub-01_task-movie_echo-3_part-phase_bold.nii.gz" + ], + "sub-01/func/sub-01_task-movie_echo-1_part-mag_bold.json": [ + "sub-01/func/sub-01_task-movie_echo-1_part-mag_bold.nii.gz" + ], + "sub-01/func/sub-01_task-movie_echo-1_part-phase_bold.json": [ + "sub-01/func/sub-01_task-movie_echo-1_part-phase_bold.nii.gz" + ], + "sub-01/func/sub-01_task-movie_echo-2_part-mag_bold.json": [ + "sub-01/func/sub-01_task-movie_echo-2_part-mag_bold.nii.gz" + ], + "sub-01/func/sub-01_task-movie_echo-2_part-phase_bold.json": [ + "sub-01/func/sub-01_task-movie_echo-2_part-phase_bold.nii.gz" + ], + "sub-01/func/sub-01_task-movie_echo-3_part-mag_bold.json": [ + "sub-01/func/sub-01_task-movie_echo-3_part-mag_bold.nii.gz" + ], + "sub-01/func/sub-01_task-movie_echo-3_part-phase_bold.json": [ + "sub-01/func/sub-01_task-movie_echo-3_part-phase_bold.nii.gz" + ], + "sub-01/func/sub-01_task-movie_echo-1_part-mag_bold.nii.gz": { + ".json": [ + "sub-01/func/sub-01_task-movie_bold.json", + "sub-01/func/sub-01_task-movie_echo-1_bold.json", + "sub-01/func/sub-01_task-movie_part-mag_bold.json", + "sub-01/func/sub-01_task-movie_echo-1_part-mag_bold.json" + ] + }, + "sub-01/func/sub-01_task-movie_echo-1_part-phase_bold.nii.gz": { + ".json": [ + "sub-01/func/sub-01_task-movie_bold.json", + "sub-01/func/sub-01_task-movie_echo-1_bold.json", + "sub-01/func/sub-01_task-movie_part-phase_bold.json", + "sub-01/func/sub-01_task-movie_echo-1_part-phase_bold.json" + ] + }, + "sub-01/func/sub-01_task-movie_echo-2_part-mag_bold.nii.gz": { + ".json": [ + "sub-01/func/sub-01_task-movie_bold.json", + "sub-01/func/sub-01_task-movie_echo-2_bold.json", + "sub-01/func/sub-01_task-movie_part-mag_bold.json", + "sub-01/func/sub-01_task-movie_echo-2_part-mag_bold.json" + ] + }, + "sub-01/func/sub-01_task-movie_echo-2_part-phase_bold.nii.gz": { + ".json": [ + "sub-01/func/sub-01_task-movie_bold.json", + "sub-01/func/sub-01_task-movie_echo-2_bold.json", + "sub-01/func/sub-01_task-movie_part-phase_bold.json", + "sub-01/func/sub-01_task-movie_echo-2_part-phase_bold.json" + ] + }, + "sub-01/func/sub-01_task-movie_echo-3_part-mag_bold.nii.gz": { + ".json": [ + "sub-01/func/sub-01_task-movie_bold.json", + "sub-01/func/sub-01_task-movie_echo-3_bold.json", + "sub-01/func/sub-01_task-movie_part-mag_bold.json", + "sub-01/func/sub-01_task-movie_echo-3_part-mag_bold.json" + ] + }, + "sub-01/func/sub-01_task-movie_echo-3_part-phase_bold.nii.gz": { + ".json": [ + "sub-01/func/sub-01_task-movie_bold.json", + "sub-01/func/sub-01_task-movie_echo-3_bold.json", + "sub-01/func/sub-01_task-movie_part-phase_bold.json", + "sub-01/func/sub-01_task-movie_echo-3_part-phase_bold.json" + ] + } +} diff --git a/ipmultielfce1v2/sub-01/func/sub-01_task-movie_bold.json b/ipmultielfce1v2/sub-01/func/sub-01_task-movie_bold.json new file mode 100644 index 000000000..83cdf5b22 --- /dev/null +++ b/ipmultielfce1v2/sub-01/func/sub-01_task-movie_bold.json @@ -0,0 +1,7 @@ +{ + "Modality": "MR", + "ScanningSequence": "EP", + "ImageComments": "Unaliased MB4/PE4/LB SENSE1+", + "RepetitionTime": 1.0, + "TaskName": "Movie-watching" +} diff --git a/ipmultielfce1v2/sub-01/func/sub-01_task-movie_echo-1_bold.json b/ipmultielfce1v2/sub-01/func/sub-01_task-movie_echo-1_bold.json new file mode 100644 index 000000000..b793db7aa --- /dev/null +++ b/ipmultielfce1v2/sub-01/func/sub-01_task-movie_echo-1_bold.json @@ -0,0 +1,4 @@ +{ + "EchoNumber": 1, + "EchoTime": 0.015 +} diff --git a/ipmultielfce1v2/sub-01/func/sub-01_task-movie_echo-1_part-mag_bold.json b/ipmultielfce1v2/sub-01/func/sub-01_task-movie_echo-1_part-mag_bold.json new file mode 100644 index 000000000..7a6f37297 --- /dev/null +++ b/ipmultielfce1v2/sub-01/func/sub-01_task-movie_echo-1_part-mag_bold.json @@ -0,0 +1,12 @@ +{ + "ImageType": [ + "ORIGINAL", + "PRIMARY", + "M", + "MB", + "TE1", + "ND", + "NORM", + "MOSAIC" + ] +} diff --git a/ipmultielfce1v2/sub-01/func/sub-01_task-movie_echo-1_part-mag_bold.nii.gz b/ipmultielfce1v2/sub-01/func/sub-01_task-movie_echo-1_part-mag_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipmultielfce1v2/sub-01/func/sub-01_task-movie_echo-1_part-phase_bold.json b/ipmultielfce1v2/sub-01/func/sub-01_task-movie_echo-1_part-phase_bold.json new file mode 100644 index 000000000..c3a5606c0 --- /dev/null +++ b/ipmultielfce1v2/sub-01/func/sub-01_task-movie_echo-1_part-phase_bold.json @@ -0,0 +1,12 @@ +{ + "ImageType": [ + "ORIGINAL", + "PRIMARY", + "P", + "MB", + "TE1", + "ND", + "MOSAIC", + "PHASE" + ] +} diff --git a/ipmultielfce1v2/sub-01/func/sub-01_task-movie_echo-1_part-phase_bold.nii.gz b/ipmultielfce1v2/sub-01/func/sub-01_task-movie_echo-1_part-phase_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipmultielfce1v2/sub-01/func/sub-01_task-movie_echo-2_bold.json b/ipmultielfce1v2/sub-01/func/sub-01_task-movie_echo-2_bold.json new file mode 100644 index 000000000..8262ba12d --- /dev/null +++ b/ipmultielfce1v2/sub-01/func/sub-01_task-movie_echo-2_bold.json @@ -0,0 +1,4 @@ +{ + "EchoNumber": 2, + "EchoTime": 0.035 +} diff --git a/ipmultielfce1v2/sub-01/func/sub-01_task-movie_echo-2_part-mag_bold.json b/ipmultielfce1v2/sub-01/func/sub-01_task-movie_echo-2_part-mag_bold.json new file mode 100644 index 000000000..7ba6935d7 --- /dev/null +++ b/ipmultielfce1v2/sub-01/func/sub-01_task-movie_echo-2_part-mag_bold.json @@ -0,0 +1,12 @@ +{ + "ImageType": [ + "ORIGINAL", + "PRIMARY", + "M", + "MB", + "TE2", + "ND", + "NORM", + "MOSAIC" + ] +} diff --git a/ipmultielfce1v2/sub-01/func/sub-01_task-movie_echo-2_part-mag_bold.nii.gz b/ipmultielfce1v2/sub-01/func/sub-01_task-movie_echo-2_part-mag_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipmultielfce1v2/sub-01/func/sub-01_task-movie_echo-2_part-phase_bold.json b/ipmultielfce1v2/sub-01/func/sub-01_task-movie_echo-2_part-phase_bold.json new file mode 100644 index 000000000..2d2482900 --- /dev/null +++ b/ipmultielfce1v2/sub-01/func/sub-01_task-movie_echo-2_part-phase_bold.json @@ -0,0 +1,12 @@ +{ + "ImageType": [ + "ORIGINAL", + "PRIMARY", + "P", + "MB", + "TE2", + "ND", + "MOSAIC", + "PHASE" + ] +} diff --git a/ipmultielfce1v2/sub-01/func/sub-01_task-movie_echo-2_part-phase_bold.nii.gz b/ipmultielfce1v2/sub-01/func/sub-01_task-movie_echo-2_part-phase_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipmultielfce1v2/sub-01/func/sub-01_task-movie_echo-3_bold.json b/ipmultielfce1v2/sub-01/func/sub-01_task-movie_echo-3_bold.json new file mode 100644 index 000000000..031ef265e --- /dev/null +++ b/ipmultielfce1v2/sub-01/func/sub-01_task-movie_echo-3_bold.json @@ -0,0 +1,4 @@ +{ + "EchoNumber": 3, + "EchoTime": 0.045 +} diff --git a/ipmultielfce1v2/sub-01/func/sub-01_task-movie_echo-3_part-mag_bold.json b/ipmultielfce1v2/sub-01/func/sub-01_task-movie_echo-3_part-mag_bold.json new file mode 100644 index 000000000..79b0aa8c5 --- /dev/null +++ b/ipmultielfce1v2/sub-01/func/sub-01_task-movie_echo-3_part-mag_bold.json @@ -0,0 +1,12 @@ +{ + "ImageType": [ + "ORIGINAL", + "PRIMARY", + "M", + "MB", + "TE3", + "ND", + "NORM", + "MOSAIC" + ] +} diff --git a/ipmultielfce1v2/sub-01/func/sub-01_task-movie_echo-3_part-mag_bold.nii.gz b/ipmultielfce1v2/sub-01/func/sub-01_task-movie_echo-3_part-mag_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipmultielfce1v2/sub-01/func/sub-01_task-movie_echo-3_part-phase_bold.json b/ipmultielfce1v2/sub-01/func/sub-01_task-movie_echo-3_part-phase_bold.json new file mode 100644 index 000000000..5a7a94ff6 --- /dev/null +++ b/ipmultielfce1v2/sub-01/func/sub-01_task-movie_echo-3_part-phase_bold.json @@ -0,0 +1,12 @@ +{ + "ImageType": [ + "ORIGINAL", + "PRIMARY", + "P", + "MB", + "TE3", + "ND", + "MOSAIC", + "PHASE" + ] +} diff --git a/ipmultielfce1v2/sub-01/func/sub-01_task-movie_echo-3_part-phase_bold.nii.gz b/ipmultielfce1v2/sub-01/func/sub-01_task-movie_echo-3_part-phase_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ipmultielfce1v2/sub-01/func/sub-01_task-movie_part-mag_bold.json b/ipmultielfce1v2/sub-01/func/sub-01_task-movie_part-mag_bold.json new file mode 100644 index 000000000..79c3552ce --- /dev/null +++ b/ipmultielfce1v2/sub-01/func/sub-01_task-movie_part-mag_bold.json @@ -0,0 +1,3 @@ +{ + "SeriesNumber": 53 +} diff --git a/ipmultielfce1v2/sub-01/func/sub-01_task-movie_part-phase_bold.json b/ipmultielfce1v2/sub-01/func/sub-01_task-movie_part-phase_bold.json new file mode 100644 index 000000000..45db8a842 --- /dev/null +++ b/ipmultielfce1v2/sub-01/func/sub-01_task-movie_part-phase_bold.json @@ -0,0 +1,4 @@ +{ + "SeriesNumber": 54, + "Units": "arbitrary" +} diff --git a/ippr1003ae1/README.txt b/ippr1003ae1/README.txt new file mode 100644 index 000000000..ccb0c6e48 --- /dev/null +++ b/ippr1003ae1/README.txt @@ -0,0 +1,138 @@ +The following text is reproduced from GitHub repository "bids-specification" +within organisation "bids-standard", +specifically Pull Request #1003, +which was rejected for merge +(more details at https://github.com/bids-standard/bids-specification/pull/1003/files): + + ### Example 1: Complex inheritance scenario + + { + "bold.json": "", + "sub-01": { + "ses-01": { + "func": { + "sub-01_ses-01_bold.json": "", + "sub-01_ses-01_task-ovg_bold.json": "", + "sub-01_ses-01_task-ovg_run-1_bold.nii.gz": "", + "sub-01_ses-01_task-ovg_run-2_bold.nii.gz": "", + "sub-01_ses-01_task-ovg_run-2_bold.json": "", + "sub-01_ses-01_task-rest_bold.nii.gz": "", + "sub-01_ses-01_task-rest_bold.json": "", + } + }, + "ses-02": { + "func": { + "sub-01_ses-02_task-ovg_bold.nii.gz": "", + "sub-01_ses-02_task-rest_bold.nii.gz": "", + } + }, + "sub-01_bold.json": "", + }, + "sub-02": { + "ses-01": { + "func": { + "sub-02_ses-01_task-rest_bold.nii.gz": "", + "sub-02_ses-01_task-rest_bold.json": "", + } + } + }, + "task-ovg_bold.json": "", + "task-rest_bold.json": "", + } + + ### Applicable data files per metadata file + + For each metadata file, the set of data files to which its contents are + applicable is as follows: + + - `bold.json`: + - `sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-1_bold.nii.gz` + - `sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz` + - `sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz` + - `sub-01/ses-02/func/sub-01_ses-02_task-ovg_bold.nii.gz` + - `sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.nii.gz` + - `sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.nii.gz` + + - `task-ovg_bold.json`: + - `sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-1_bold.nii.gz` + - `sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz` + - `sub-01/ses-02/func/sub-01_ses-02_task-ovg_bold.nii.gz` + + - `task-rest_bold.json`: + - `sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz` + - `sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.nii.gz` + - `sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.nii.gz` + + - `sub-01/sub-01_bold.json`: + - `sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-1_bold.nii.gz` + - `sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz` + - `sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz` + - `sub-01/ses-02/func/sub-01_ses-02_task-ovg_bold.nii.gz` + - `sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.nii.gz` + + - `sub-01/ses-01/sub-01_ses-01_bold.json`: + - `sub-01/ses-01/sub-01_ses-01_task-ovg_run-1_bold.nii.gz` + - `sub-01/ses-01/sub-01_ses-01_task-ovg_run-2_bold.nii.gz` + - `sub-01/ses-01/sub-01_ses-01_task-rest_bold.nii.gz` + + - `sub-01/ses-01/sub-01_ses-01_task-ovg_bold.json`: + - `sub-01/ses-01/sub-01_ses-01_task-ovg_run-1_bold.nii.gz` + - `sub-01/ses-01/sub-01_ses-01_task-ovg_run-2_bold.nii.gz` + + - `sub-01/ses-01/sub-01_ses-01_task-ovg_run-2_bold.json`: + - `sub-01/ses-01/sub-01_ses-01_task-ovg_run-2_bold.nii.gz` + + - `sub-01/ses-01/sub-01_ses-01_task-rest_bold.json`: + - `sub-01/ses-01/sub-01_ses-01_task-rest_bold.nii.gz` + + - `sub-02/ses-01/sub-02_ses-01_task-rest_bold.json`: + - `sub-02/ses-01/sub-02_ses-01_task-rest_bold.nii.gz` + + ### Applicable metadata files per data file + + For each data file, the order in which the set of applicable metadata + files would be loaded is as follows: + + - `sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-1_bold.nii.gz`: + - `bold.json` + - `task-ovg_bold.json` + - `sub-01/sub-01_bold.json` + - `sub-01/ses-01/func/sub-01_ses-01_bold.json` + - `sub-01/ses-01/func/sub-01_ses-01_task-ovg_bold.json` + + - `sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz`: + - `bold.json` + - `task-ovg_bold.json` + - `sub-01/sub-01_bold.json` + - `sub-01/ses-01/func/sub-01_ses-01_bold.json` + - `sub-01/ses-01/func/sub-01_ses-01_task-ovg_bold.json` + - `sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.json` + + - `sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz`: + - `bold.json` + - `task-rest_bold.json` + - `sub-01/sub-01_bold.json` + - `sub-01/ses-01/func/sub-01_ses-01_bold.json` + - `sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.json` + + - `sub-01/ses-02/func/sub-01_ses-02_task-ovg_bold.nii.gz`: + - `bold.json` + - `task-ovg_bold.json` + - `sub-01/sub-01_bold.json` + + - `sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.nii.gz`: + - `bold.json` + - `task-rest_bold.json` + - `sub-01/sub-01_bold.json` + + - `sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.nii.gz`: + - `bold.json` + - `task-rest_bold.json` + - `sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.json` + +Notes: + +- There are errors in the metadata association information + in the quoted text; + mostly arising from omission of the "func/" parent. + These are rectified in file "sourcedata/ip_graph.json". diff --git a/ippr1003ae1/bold.json b/ippr1003ae1/bold.json new file mode 100644 index 000000000..c3344cd6e --- /dev/null +++ b/ippr1003ae1/bold.json @@ -0,0 +1,5 @@ +{ + "LowestBOLD": "BOLD", + "BOLD": true +} + diff --git a/ippr1003ae1/dataset_description.json b/ippr1003ae1/dataset_description.json new file mode 100644 index 000000000..8f44e83a0 --- /dev/null +++ b/ippr1003ae1/dataset_description.json @@ -0,0 +1,8 @@ +{ + "Authors": [ + "Robert E. Smith " + ], + "BIDSVersion": "Pull Request 1003", + "DatasetType": "raw", + "Name": "Inheritance Principle validation; Pull Request #1003; advanced example 1" +} diff --git a/ippr1003ae1/sourcedata/ip_graph.json b/ippr1003ae1/sourcedata/ip_graph.json new file mode 100644 index 000000000..43f6e560c --- /dev/null +++ b/ippr1003ae1/sourcedata/ip_graph.json @@ -0,0 +1,94 @@ +{ + "bold.json": [ + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-1_bold.nii.gz", + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz", + "sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz", + "sub-01/ses-02/func/sub-01_ses-02_task-ovg_bold.nii.gz", + "sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.nii.gz", + "sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.nii.gz" + ], + "task-ovg_bold.json": [ + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-1_bold.nii.gz", + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz", + "sub-01/ses-02/func/sub-01_ses-02_task-ovg_bold.nii.gz" + ], + "task-rest_bold.json": [ + "sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz", + "sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.nii.gz", + "sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.nii.gz" + ], + "sub-01/sub-01_bold.json": [ + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-1_bold.nii.gz", + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz", + "sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz", + "sub-01/ses-02/func/sub-01_ses-02_task-ovg_bold.nii.gz", + "sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.nii.gz" + ], + "sub-01/ses-01/func/sub-01_ses-01_bold.json": [ + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-1_bold.nii.gz", + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz", + "sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz" + ], + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_bold.json": [ + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-1_bold.nii.gz", + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz" + ], + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.json": [ + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz" + ], + "sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.json": [ + "sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz" + ], + "sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.json": [ + "sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.nii.gz" + ], + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-1_bold.nii.gz": { + ".json": [ + "bold.json", + "task-ovg_bold.json", + "sub-01/sub-01_bold.json", + "sub-01/ses-01/func/sub-01_ses-01_bold.json", + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_bold.json" + ] + }, + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz": { + ".json": [ + "bold.json", + "task-ovg_bold.json", + "sub-01/sub-01_bold.json", + "sub-01/ses-01/func/sub-01_ses-01_bold.json", + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_bold.json", + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.json" + ] + }, + "sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz": { + ".json": [ + "bold.json", + "task-rest_bold.json", + "sub-01/sub-01_bold.json", + "sub-01/ses-01/func/sub-01_ses-01_bold.json", + "sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.json" + ] + }, + "sub-01/ses-02/func/sub-01_ses-02_task-ovg_bold.nii.gz": { + ".json": [ + "bold.json", + "task-ovg_bold.json", + "sub-01/sub-01_bold.json" + ] + }, + "sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.nii.gz": { + ".json": [ + "bold.json", + "task-rest_bold.json", + "sub-01/sub-01_bold.json" + ] + }, + "sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.nii.gz": { + ".json": [ + "bold.json", + "task-rest_bold.json", + "sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.json" + ] + } +} diff --git a/ippr1003ae1/sourcedata/ip_metadata.json b/ippr1003ae1/sourcedata/ip_metadata.json new file mode 100644 index 000000000..d2d60a4d8 --- /dev/null +++ b/ippr1003ae1/sourcedata/ip_metadata.json @@ -0,0 +1,83 @@ +{ + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-1_bold.nii.gz": { + ".json": { + "LowestBOLD": "Sub01Ses01TaskOVGBOLD", + "LowestSub01": "Sub01Ses01TaskOVGBOLD", + "LowestSes01": "Sub01Ses01TaskOVGBOLD", + "LowestTaskOVG": "Sub01Ses01TaskOVGBOLD", + "BOLD": true, + "TaskOVGBOLD": true, + "Sub01BOLD": true, + "Sub01Ses01BOLD": true, + "Sub01Ses01TaskOVGBOLD": true, + "RepetitionTime": 1.0, + "TaskName": "OvertVerbGeneration" + } + }, + "sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz": { + ".json": { + "LowestBOLD": "Sub01Ses01TaskOVGRun2BOLD", + "LowestSub01": "Sub01Ses01TaskOVGRun2BOLD", + "LowestSes01": "Sub01Ses01TaskOVGRun2BOLD", + "LowestTaskOVG": "Sub01Ses01TaskOVGRun2BOLD", + "BOLD": true, + "TaskOVGBOLD": true, + "Sub01BOLD": true, + "Sub01Ses01BOLD": true, + "Sub01Ses01TaskOVGBOLD": true, + "Sub01Ses01TaskOVGRun2BOLD": true, + "RepetitionTime": 1.0, + "TaskName": "OvertVerbGeneration" + } + }, + "sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz": { + ".json": { + "LowestBOLD": "Sub01Ses01TaskRestBOLD", + "LowestSub01": "Sub01Ses01TaskRestBOLD", + "LowestSes01": "Sub01Ses01TaskRestBOLD", + "LowestTaskRest": "Sub01Ses01TaskRestBOLD", + "BOLD": true, + "TaskRestBOLD": true, + "Sub01BOLD": true, + "Sub01Ses01BOLD": true, + "Sub01Ses01TaskRestBOLD": true, + "RepetitionTime": 1.0, + "TaskName": "Resting-state" + } + }, + "sub-01/ses-02/func/sub-01_ses-02_task-ovg_bold.nii.gz": { + ".json": { + "LowestBOLD": "Sub01BOLD", + "LowestSub01": "Sub01BOLD", + "LowestTaskOVG": "TaskOVGBOLD", + "BOLD": true, + "TaskOVGBOLD": true, + "Sub01BOLD": true, + "RepetitionTime": 1.0, + "TaskName": "OvertVerbGeneration" + } + }, + "sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.nii.gz": { + ".json": { + "LowestBOLD": "Sub01BOLD", + "LowestSub01": "Sub01BOLD", + "LowestTaskRest": "TaskRestBOLD", + "BOLD": true, + "TaskRestBOLD": true, + "Sub01BOLD": true, + "RepetitionTime": 1.0, + "TaskName": "Resting-state" + } + }, + "sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.nii.gz": { + ".json": { + "LowestBOLD": "Sub02Ses01TaskRestBOLD", + "LowestTaskRest": "Sub02Ses01TaskRestBOLD", + "BOLD": true, + "TaskRestBOLD": true, + "Sub02Ses01TaskRestBOLD": true, + "RepetitionTime": 1.0, + "TaskName": "Resting-state" + } + } +} diff --git a/ippr1003ae1/sub-01/ses-01/func/sub-01_ses-01_bold.json b/ippr1003ae1/sub-01/ses-01/func/sub-01_ses-01_bold.json new file mode 100644 index 000000000..6931100e9 --- /dev/null +++ b/ippr1003ae1/sub-01/ses-01/func/sub-01_ses-01_bold.json @@ -0,0 +1,7 @@ +{ + "LowestBOLD": "Sub01Ses01BOLD", + "LowestSub01": "Sub01Ses01BOLD", + "LowestSes01": "Sub01Ses01BOLD", + "Sub01Ses01BOLD": true +} + diff --git a/ippr1003ae1/sub-01/ses-01/func/sub-01_ses-01_task-ovg_bold.json b/ippr1003ae1/sub-01/ses-01/func/sub-01_ses-01_task-ovg_bold.json new file mode 100644 index 000000000..0b6e71579 --- /dev/null +++ b/ippr1003ae1/sub-01/ses-01/func/sub-01_ses-01_task-ovg_bold.json @@ -0,0 +1,8 @@ +{ + "LowestBOLD": "Sub01Ses01TaskOVGBOLD", + "LowestSub01": "Sub01Ses01TaskOVGBOLD", + "LowestSes01": "Sub01Ses01TaskOVGBOLD", + "LowestTaskOVG": "Sub01Ses01TaskOVGBOLD", + "Sub01Ses01TaskOVGBOLD": true +} + diff --git a/ippr1003ae1/sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-1_bold.nii.gz b/ippr1003ae1/sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-1_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ippr1003ae1/sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.json b/ippr1003ae1/sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.json new file mode 100644 index 000000000..7715bdc99 --- /dev/null +++ b/ippr1003ae1/sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.json @@ -0,0 +1,8 @@ +{ + "LowestBOLD": "Sub01Ses01TaskOVGRun2BOLD", + "LowestSub01": "Sub01Ses01TaskOVGRun2BOLD", + "LowestSes01": "Sub01Ses01TaskOVGRun2BOLD", + "LowestTaskOVG": "Sub01Ses01TaskOVGRun2BOLD", + "Sub01Ses01TaskOVGRun2BOLD": true +} + diff --git a/ippr1003ae1/sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz b/ippr1003ae1/sub-01/ses-01/func/sub-01_ses-01_task-ovg_run-2_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ippr1003ae1/sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.json b/ippr1003ae1/sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.json new file mode 100644 index 000000000..20eebf4aa --- /dev/null +++ b/ippr1003ae1/sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.json @@ -0,0 +1,8 @@ +{ + "LowestBOLD": "Sub01Ses01TaskRestBOLD", + "LowestSub01": "Sub01Ses01TaskRestBOLD", + "LowestSes01": "Sub01Ses01TaskRestBOLD", + "LowestTaskRest": "Sub01Ses01TaskRestBOLD", + "Sub01Ses01TaskRestBOLD": true +} + diff --git a/ippr1003ae1/sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz b/ippr1003ae1/sub-01/ses-01/func/sub-01_ses-01_task-rest_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ippr1003ae1/sub-01/ses-02/func/sub-01_ses-02_task-ovg_bold.nii.gz b/ippr1003ae1/sub-01/ses-02/func/sub-01_ses-02_task-ovg_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ippr1003ae1/sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.nii.gz b/ippr1003ae1/sub-01/ses-02/func/sub-01_ses-02_task-rest_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ippr1003ae1/sub-01/sub-01_bold.json b/ippr1003ae1/sub-01/sub-01_bold.json new file mode 100644 index 000000000..1f4bd86a8 --- /dev/null +++ b/ippr1003ae1/sub-01/sub-01_bold.json @@ -0,0 +1,6 @@ +{ + "LowestBOLD": "Sub01BOLD", + "LowestSub01": "Sub01BOLD", + "Sub01BOLD": true +} + diff --git a/ippr1003ae1/sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.json b/ippr1003ae1/sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.json new file mode 100644 index 000000000..6970b60cb --- /dev/null +++ b/ippr1003ae1/sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.json @@ -0,0 +1,6 @@ +{ + "LowestBOLD": "Sub02Ses01TaskRestBOLD", + "LowestTaskRest": "Sub02Ses01TaskRestBOLD", + "Sub02Ses01TaskRestBOLD": true +} + diff --git a/ippr1003ae1/sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.nii.gz b/ippr1003ae1/sub-02/ses-01/func/sub-02_ses-01_task-rest_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ippr1003ae1/task-ovg_bold.json b/ippr1003ae1/task-ovg_bold.json new file mode 100644 index 000000000..945bfda42 --- /dev/null +++ b/ippr1003ae1/task-ovg_bold.json @@ -0,0 +1,8 @@ +{ + "LowestBOLD": "TaskOVGBOLD", + "LowestTaskOVG": "TaskOVGBOLD", + "RepetitionTime": 1.0, + "TaskName": "OvertVerbGeneration", + "TaskOVGBOLD": true +} + diff --git a/ippr1003ae1/task-rest_bold.json b/ippr1003ae1/task-rest_bold.json new file mode 100644 index 000000000..ede5c717e --- /dev/null +++ b/ippr1003ae1/task-rest_bold.json @@ -0,0 +1,8 @@ +{ + "LowestBOLD": "TaskRestBOLD", + "LowestTaskRest": "TaskRestBOLD", + "RepetitionTime": 1.0, + "TaskName": "Resting-state", + "TaskRestBOLD": true +} + diff --git a/ippr1003ae2/README.txt b/ippr1003ae2/README.txt new file mode 100644 index 000000000..f985f473e --- /dev/null +++ b/ippr1003ae2/README.txt @@ -0,0 +1,42 @@ +The following text is reproduced from GitHub repository "bids-specification" +within organisation "bids-standard", +specifically Pull Request #1003, +which was rejected for merge +(more details at https://github.com/bids-standard/bids-specification/pull/1003/files): + + ### Example 2: Violation due to order ambiguity + + { + "sub-01": { + "func": { + "sub-01_acq-highres_bold.json": "", + "sub-01_acq-lowres_bold.json": "", + "sub-01_bold.json": "", + "sub-01_task-ovg_bold.json": "", + "sub-01_task-ovg_acq-highres_bold.nii.gz": "", + "sub-01_task-ovg_acq-lowres_bold.nii.gz": "", + "sub-01_task-rest_bold.json": "", + "sub-01_task-rest_acq-highres_bold.nii.gz": "", + "sub-01_task-rest_acq-lowres_bold.nii.gz": "", + } + } + } + + Data file `sub-01_ses-01_task-ovg_acq-highres_bold.nii.gz` has three metadata + files deemed applicable according to rule 2, all residing within the same directory: ( + `sub-01_bold.json`, + `sub-01_task-ovg_bold.json`, + `sub-01_acq-highres_bold.json`). + It is however impossible to determine a unique ordering of these files that + satisfies rule 4.a. The metadata contents to be associated with this data file + would be ambiguous if files `sub-01_task-ovg_bold.json` and `sub-01_acq-highres_bold.json` + were to contain differing values for the same key, as the ambiguous order in which + they were loaded would determine those contents. + +Notes: + +- This example dataset was synthesized specifically to demonstrate + violation of the Inheritance Principle + *even after* integration of the proposed ruleset changes in Pull Request #1003. + It should therefore fail when validated against that ruleset. + This does not however mean that it should fail against *all* rulesets. diff --git a/ippr1003ae2/dataset_description.json b/ippr1003ae2/dataset_description.json new file mode 100644 index 000000000..9b6869808 --- /dev/null +++ b/ippr1003ae2/dataset_description.json @@ -0,0 +1,8 @@ +{ + "Authors": [ + "Robert E. Smith " + ], + "BIDSVersion": "Pull Request 1003", + "DatasetType": "raw", + "Name": "Inheritance Principle validation; Pull Request #1003; non-compliant advanced example 2" +} diff --git a/ippr1003ae2/sourcedata/ip_graph.json b/ippr1003ae2/sourcedata/ip_graph.json new file mode 100644 index 000000000..767d3e73a --- /dev/null +++ b/ippr1003ae2/sourcedata/ip_graph.json @@ -0,0 +1,52 @@ +{ + "sub-01/func/sub-01_bold.json": [ + "sub-01/func/sub-01_task-ovg_acq-highres_bold.nii.gz", + "sub-01/func/sub-01_task-ovg_acq-lowres_bold.nii.gz", + "sub-01/func/sub-01_task-rest_acq-highres_bold.nii.gz", + "sub-01/func/sub-01_task-rest_acq-lowres_bold.nii.gz" + ], + "sub-01/func/sub-01_acq-highres_bold.json": [ + "sub-01/func/sub-01_task-ovg_acq-highres_bold.nii.gz", + "sub-01/func/sub-01_task-rest_acq-highres_bold.nii.gz" + ], + "sub-01/func/sub-01_acq-lowres_bold.json": [ + "sub-01/func/sub-01_task-ovg_acq-lowres_bold.nii.gz", + "sub-01/func/sub-01_task-rest_acq-lowres_bold.nii.gz" + ], + "sub-01/func/sub-01_task-ovg_bold.json": [ + "sub-01/func/sub-01_task-ovg_acq-highres_bold.nii.gz", + "sub-01/func/sub-01_task-ovg_acq-lowres_bold.nii.gz" + ], + "sub-01/func/sub-01_task-rest_bold.json": [ + "sub-01/func/sub-01_task-rest_acq-highres_bold.nii.gz", + "sub-01/func/sub-01_task-rest_acq-lowres_bold.nii.gz" + ], + "sub-01/func/sub-01_task-ovg_acq-highres_bold.nii.gz": { + ".json": [ + "sub-01/func/sub-01_bold.json", + "sub-01/func/sub-01_acq-highres_bold.json", + "sub-01/func/sub-01_task-ovg_bold.json" + ] + }, + "sub-01/func/sub-01_task-ovg_acq-lowres_bold.nii.gz": { + ".json": [ + "sub-01/func/sub-01_bold.json", + "sub-01/func/sub-01_acq-lowres_bold.json", + "sub-01/func/sub-01_task-ovg_bold.json" + ] + }, + "sub-01/func/sub-01_task-rest_acq-highres_bold.nii.gz": { + ".json": [ + "sub-01/func/sub-01_bold.json", + "sub-01/func/sub-01_acq-highres_bold.json", + "sub-01/func/sub-01_task-rest_bold.json" + ] + }, + "sub-01/func/sub-01_task-rest_acq-lowres_bold.nii.gz": { + ".json": [ + "sub-01/func/sub-01_bold.json", + "sub-01/func/sub-01_acq-lowres_bold.json", + "sub-01/func/sub-01_task-rest_bold.json" + ] + } +} diff --git a/ippr1003ae2/sourcedata/ip_metadata.json b/ippr1003ae2/sourcedata/ip_metadata.json new file mode 100644 index 000000000..e80df459e --- /dev/null +++ b/ippr1003ae2/sourcedata/ip_metadata.json @@ -0,0 +1,38 @@ +{ + "sub-01/func/sub-01_task-ovg_acq-highres_bold.nii.gz": { + ".json": { + "RepetitionTime": 1.0, + "TaskName": "OvertVerbGeneration", + "Sub01BOLD": true, + "Sub01TaskOVGBOLD": true, + "Sub01AcqHighresBOLD": true + } + }, + "sub-01/func/sub-01_task-ovg_acq-lowres_bold.nii.gz": { + ".json": { + "RepetitionTime": 1.0, + "TaskName": "OvertVerbGeneration", + "Sub01BOLD": true, + "Sub01TaskOVGBOLD": true, + "Sub01AcqLowresBOLD": true + } + }, + "sub-01/func/sub-01_task-rest_acq-highres_bold.nii.gz": { + ".json": { + "RepetitionTime": 1.0, + "TaskName": "Resting-state", + "Sub01BOLD": true, + "Sub01TaskRestBOLD": true, + "Sub01AcqHighresBOLD": true + } + }, + "sub-01/func/sub-01_task-rest_acq-lowres_bold.nii.gz": { + ".json": { + "RepetitionTime": 1.0, + "TaskName": "Resting-state", + "Sub01BOLD": true, + "Sub01TaskRestBOLD": true, + "Sub01AcqLowresBOLD": true + } + } +} diff --git a/ippr1003ae2/sub-01/func/sub-01_acq-highres_bold.json b/ippr1003ae2/sub-01/func/sub-01_acq-highres_bold.json new file mode 100644 index 000000000..8effd2f2c --- /dev/null +++ b/ippr1003ae2/sub-01/func/sub-01_acq-highres_bold.json @@ -0,0 +1,4 @@ +{ + "Sub01AcqHighresBOLD": true +} + diff --git a/ippr1003ae2/sub-01/func/sub-01_acq-lowres_bold.json b/ippr1003ae2/sub-01/func/sub-01_acq-lowres_bold.json new file mode 100644 index 000000000..a5525ad9f --- /dev/null +++ b/ippr1003ae2/sub-01/func/sub-01_acq-lowres_bold.json @@ -0,0 +1,4 @@ +{ + "Sub01AcqLowresBOLD": true +} + diff --git a/ippr1003ae2/sub-01/func/sub-01_bold.json b/ippr1003ae2/sub-01/func/sub-01_bold.json new file mode 100644 index 000000000..f6b583e54 --- /dev/null +++ b/ippr1003ae2/sub-01/func/sub-01_bold.json @@ -0,0 +1,5 @@ +{ + "RepetitionTime": 1.0, + "Sub01BOLD": true +} + diff --git a/ippr1003ae2/sub-01/func/sub-01_task-ovg_acq-highres_bold.nii.gz b/ippr1003ae2/sub-01/func/sub-01_task-ovg_acq-highres_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ippr1003ae2/sub-01/func/sub-01_task-ovg_acq-lowres_bold.nii.gz b/ippr1003ae2/sub-01/func/sub-01_task-ovg_acq-lowres_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ippr1003ae2/sub-01/func/sub-01_task-ovg_bold.json b/ippr1003ae2/sub-01/func/sub-01_task-ovg_bold.json new file mode 100644 index 000000000..f199f3353 --- /dev/null +++ b/ippr1003ae2/sub-01/func/sub-01_task-ovg_bold.json @@ -0,0 +1,5 @@ +{ + "Sub01TaskOVGBOLD": true, + "TaskName": "OvertVerbGeneration" +} + diff --git a/ippr1003ae2/sub-01/func/sub-01_task-rest_acq-highres_bold.nii.gz b/ippr1003ae2/sub-01/func/sub-01_task-rest_acq-highres_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ippr1003ae2/sub-01/func/sub-01_task-rest_acq-lowres_bold.nii.gz b/ippr1003ae2/sub-01/func/sub-01_task-rest_acq-lowres_bold.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ippr1003ae2/sub-01/func/sub-01_task-rest_bold.json b/ippr1003ae2/sub-01/func/sub-01_task-rest_bold.json new file mode 100644 index 000000000..89950b094 --- /dev/null +++ b/ippr1003ae2/sub-01/func/sub-01_task-rest_bold.json @@ -0,0 +1,5 @@ +{ + "Sub01TaskRestBOLD": true, + "TaskName": "Resting-state" +} + diff --git a/ippr1003e1v1/README.txt b/ippr1003e1v1/README.txt new file mode 100644 index 000000000..887611581 --- /dev/null +++ b/ippr1003e1v1/README.txt @@ -0,0 +1,32 @@ +The following text is reproduced from GitHub repository "bids-specification" +within organisation "bids-standard", +specifically Pull Request #1003, +which was rejected for merge +(more details at https://github.com/bids-standard/bids-specification/pull/1003/files): + + Example 1: Single metadata file applicable to multiple data files + + { + "sub-01": { + "anat": { + "sub-01_part-real_T2starw.nii.gz", + "sub-01_part-imag_T2starw.nii.gz", + "sub-01_T2starw.json", + } + } + } + + For file `sub-01_T2starw.json`, there does not exist an immediately corresponding data file + with the same basename but different file extension; for instance `sub-01_T2starw.nii.gz`. + It is however applicable to both data files `sub-01_part-real_T2starw.nii.gz` and + `sub-01_part-imag_T2starw.nii.gz`, since it possesses the same suffix "`T2starw`" + and its entities are a subset of those present in the data filename in both cases. + This storage structure is appropriate for such data given that the real and imaginary + components of complex image data would be yielded by a single execution of an MRI sequence, + with a fixed common set of acquisition parameters. + +Notes: + +- This exemplar dataset reproduces the description verbatim. + A sister dataset "ippr1003e1v2" shows a related scenario omitted from this Pull Request, + where the complex data are stored as a magnitude-phase pair rather than a real-imaginary pair. diff --git a/ippr1003e1v1/dataset_description.json b/ippr1003e1v1/dataset_description.json new file mode 100644 index 000000000..bc08b052e --- /dev/null +++ b/ippr1003e1v1/dataset_description.json @@ -0,0 +1,8 @@ +{ + "Authors": [ + "Robert E. Smith " + ], + "BIDSVersion": "Pull Request 1003", + "DatasetType": "raw", + "Name": "Inheritance Principle validation; Pull Request #1003; example 1; version 1" +} diff --git a/ippr1003e1v1/sourcedata/ip_graph.json b/ippr1003e1v1/sourcedata/ip_graph.json new file mode 100644 index 000000000..1a29667bb --- /dev/null +++ b/ippr1003e1v1/sourcedata/ip_graph.json @@ -0,0 +1,16 @@ +{ + "sub-01/anat/sub-01_T2starw.json": [ + "sub-01/anat/sub-01_part-real_T2starw.nii.gz", + "sub-01/anat/sub-01_part-imag_T2starw.nii.gz" + ], + "sub-01/anat/sub-01_part-real_T2starw.nii.gz": { + ".json": [ + "sub-01/anat/sub-01_T2starw.json" + ] + }, + "sub-01/anat/sub-01_part-imag_T2starw.nii.gz": { + ".json": [ + "sub-01/anat/sub-01_T2starw.json" + ] + } +} diff --git a/ippr1003e1v1/sourcedata/ip_metadata.json b/ippr1003e1v1/sourcedata/ip_metadata.json new file mode 100644 index 000000000..01359d947 --- /dev/null +++ b/ippr1003e1v1/sourcedata/ip_metadata.json @@ -0,0 +1,12 @@ +{ + "sub-01/anat/sub-01_part-imag_T2starw.nii.gz": { + ".json": { + "Sub01T2starw": true + } + }, + "sub-01/anat/sub-01_part-real_T2starw.nii.gz": { + ".json": { + "Sub01T2starw": true + } + } +} diff --git a/ippr1003e1v1/sourcedata/ip_overrides.json b/ippr1003e1v1/sourcedata/ip_overrides.json new file mode 100644 index 000000000..2c63c0851 --- /dev/null +++ b/ippr1003e1v1/sourcedata/ip_overrides.json @@ -0,0 +1,2 @@ +{ +} diff --git a/ippr1003e1v1/sub-01/anat/sub-01_T2starw.json b/ippr1003e1v1/sub-01/anat/sub-01_T2starw.json new file mode 100644 index 000000000..c63aa3d88 --- /dev/null +++ b/ippr1003e1v1/sub-01/anat/sub-01_T2starw.json @@ -0,0 +1,4 @@ +{ + "Sub01T2starw": true +} + diff --git a/ippr1003e1v1/sub-01/anat/sub-01_part-imag_T2starw.nii.gz b/ippr1003e1v1/sub-01/anat/sub-01_part-imag_T2starw.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ippr1003e1v1/sub-01/anat/sub-01_part-real_T2starw.nii.gz b/ippr1003e1v1/sub-01/anat/sub-01_part-real_T2starw.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ippr1003e1v2/README.txt b/ippr1003e1v2/README.txt new file mode 100644 index 000000000..5f3ee965b --- /dev/null +++ b/ippr1003e1v2/README.txt @@ -0,0 +1,59 @@ +The following text is reproduced from GitHub repository "bids-specification" +within organisation "bids-standard", +specifically Pull Request #1003, +which was rejected for merge +(more details at https://github.com/bids-standard/bids-specification/pull/1003/files): + + Example 1: Single metadata file applicable to multiple data files + + { + "sub-01": { + "anat": { + "sub-01_part-real_T2starw.nii.gz", + "sub-01_part-imag_T2starw.nii.gz", + "sub-01_T2starw.json", + } + } + } + + For file `sub-01_T2starw.json`, there does not exist an immediately corresponding data file + with the same basename but different file extension; for instance `sub-01_T2starw.nii.gz`. + It is however applicable to both data files `sub-01_part-real_T2starw.nii.gz` and + `sub-01_part-imag_T2starw.nii.gz`, since it possesses the same suffix "`T2starw`" + and its entities are a subset of those present in the data filename in both cases. + This storage structure is appropriate for such data given that the real and imaginary + components of complex image data would be yielded by a single execution of an MRI sequence, + with a fixed common set of acquisition parameters. + +Notes: + +- This exemplar dataset presents an alternative scenario to the text description, + where the complex data are encoded as a magnitude-phase image pair + instead of the shown real-imaginary pair. + + The actual filesystem structure of this dataset is instead: + +{ + "sub-01": { + "anat": { + "sub-01_part-mag_T2starw.nii.gz", + "sub-01_part-phase_T2starw.json", + "sub-01_part-phase_T2starw.nii.gz", + "sub-01_T2starw.json", + } + } + } + +- This distinction has consequences with respect to the Inheritance Principle. + Under the initial definition of the Inheritance Principle, + this filesystem structure would be invalid: + data file "sub-01_part-phase_T2starw.nii.gz" + has two potentially applicable JSON metadata files, + but these two files reside at the same level in the filesystem hierarchy, + which is in violation of Rule 4. + Pull Request #1003 included modifications to the Inheritance Principle itself + that would make this structure permissible; + whether or not this dataset passes validation + will therefore depend on which ruleset is specified during the validation. + +- Sister dataset "ippr1003e1v1" shows the quoted example reproduced verbatim. diff --git a/ippr1003e1v2/dataset_description.json b/ippr1003e1v2/dataset_description.json new file mode 100644 index 000000000..69865e653 --- /dev/null +++ b/ippr1003e1v2/dataset_description.json @@ -0,0 +1,8 @@ +{ + "Authors": [ + "Robert E. Smith " + ], + "BIDSVersion": "Pull Request 1003", + "DatasetType": "raw", + "Name": "Inheritance Principle validation; Pull Request #1003; example 1; version 2" +} diff --git a/ippr1003e1v2/sourcedata/ip_graph.json b/ippr1003e1v2/sourcedata/ip_graph.json new file mode 100644 index 000000000..c5056f9fa --- /dev/null +++ b/ippr1003e1v2/sourcedata/ip_graph.json @@ -0,0 +1,20 @@ +{ + "sub-01/anat/sub-01_T2starw.json": [ + "sub-01/anat/sub-01_part-mag_T2starw.nii.gz", + "sub-01/anat/sub-01_part-phase_T2starw.nii.gz" + ], + "sub-01/anat/sub-01_part-phase_T2starw.json": [ + "sub-01/anat/sub-01_part-phase_T2starw.nii.gz" + ], + "sub-01/anat/sub-01_part-mag_T2starw.nii.gz": { + ".json": [ + "sub-01/anat/sub-01_T2starw.json" + ] + }, + "sub-01/anat/sub-01_part-phase_T2starw.nii.gz": { + ".json": [ + "sub-01/anat/sub-01_T2starw.json", + "sub-01/anat/sub-01_part-phase_T2starw.json" + ] + } +} diff --git a/ippr1003e1v2/sourcedata/ip_metadata.json b/ippr1003e1v2/sourcedata/ip_metadata.json new file mode 100644 index 000000000..725939ff4 --- /dev/null +++ b/ippr1003e1v2/sourcedata/ip_metadata.json @@ -0,0 +1,14 @@ +{ + "sub-01/anat/sub-01_part-mag_T2starw.nii.gz": { + ".json": { + "Sub01T2starw": true + } + }, + "sub-01/anat/sub-01_part-phase_T2starw.nii.gz": { + ".json": { + "Sub01T2starw": true, + "Sub01PartPhaseT2starw": true, + "Units": "Radians" + } + } +} diff --git a/ippr1003e1v2/sourcedata/ip_overrides.json b/ippr1003e1v2/sourcedata/ip_overrides.json new file mode 100644 index 000000000..2c63c0851 --- /dev/null +++ b/ippr1003e1v2/sourcedata/ip_overrides.json @@ -0,0 +1,2 @@ +{ +} diff --git a/ippr1003e1v2/sub-01/anat/sub-01_T2starw.json b/ippr1003e1v2/sub-01/anat/sub-01_T2starw.json new file mode 100644 index 000000000..c63aa3d88 --- /dev/null +++ b/ippr1003e1v2/sub-01/anat/sub-01_T2starw.json @@ -0,0 +1,4 @@ +{ + "Sub01T2starw": true +} + diff --git a/ippr1003e1v2/sub-01/anat/sub-01_part-mag_T2starw.nii.gz b/ippr1003e1v2/sub-01/anat/sub-01_part-mag_T2starw.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/ippr1003e1v2/sub-01/anat/sub-01_part-phase_T2starw.json b/ippr1003e1v2/sub-01/anat/sub-01_part-phase_T2starw.json new file mode 100644 index 000000000..692f50f93 --- /dev/null +++ b/ippr1003e1v2/sub-01/anat/sub-01_part-phase_T2starw.json @@ -0,0 +1,4 @@ +{ + "Sub01PartPhaseT2starw": true, + "Units": "Radians" +} diff --git a/ippr1003e1v2/sub-01/anat/sub-01_part-phase_T2starw.nii.gz b/ippr1003e1v2/sub-01/anat/sub-01_part-phase_T2starw.nii.gz new file mode 100644 index 000000000..e69de29bb