Compile Dcm2Bids configuration files into a single config file.
Project description
compile-dcm2bids-config
Combine dcm2bids
and d2b
config files into a single config file while preserving the integrity of each separate config file's various IntendedFor
fields.
Installation
For the basic functionality:
pip install compile-dcm2bids-config
If you have config files written in YAML you can install the yaml
extra, for example:
pip install 'compile-dcm2bids-config[yaml]'
Usage
$ compile-dcm2bids-config --help
usage: compile-dcm2bids-config [-h] [-o OUT_FILE] [-v] in_file [in_file ...]
Combine multiple dcm2bids config files into a single config file.
positional arguments:
in_file The JSON config files to combine
optional arguments:
-h, --help show this help message and exit
-o OUT_FILE, --out-file OUT_FILE
The file to write the combined config file to. If not specified
outputs are written to stdout.
-v, --version show program's version number and exit
Getting Started
Suppose you have two config files:
example/config1.json
:
{
"descriptions": [
{
"dataType": "anat",
"modalityLabel": "SWI",
"criteria": {
"SeriesDescription": "*SWI*"
}
},
{
"dataType": "fmap",
"modalityLabel": "fmap",
"criteria": {
"SidecarFilename": "*echo-4*"
},
"IntendedFor": 0
}
]
}
example/config2.json
:
{
"descriptions": [
{
"dataType": "dwi",
"modalityLabel": "dwi",
"criteria": {
"SeriesDescription": "*DWI*"
}
},
{
"dataType": "anat",
"modalityLabel": "SWI",
"criteria": {
"SeriesDescription": "*SWI*"
}
},
{
"id": "my-func",
"dataType": "func",
"modalityLabel": "bold",
"customLabels": "task-rest",
"criteria": {
"SeriesDescription": "rs_fMRI"
},
"sidecarChanges": {
"SeriesDescription": "rsfMRI"
}
},
{
"dataType": "fmap",
"modalityLabel": "fmap",
"criteria": {
"SidecarFilename": "*echo-3*"
},
"IntendedFor": [0, "my-func"]
}
]
}
Then we can combine the two using the following command (outputs are written to stdout by default):
$ compile-dcm2bids-config example/config1.json example/config2.json
{
"descriptions": [
{
"dataType": "anat",
"modalityLabel": "SWI",
"criteria": {
"SeriesDescription": "*SWI*"
}
},
{
"dataType": "fmap",
"modalityLabel": "fmap",
"criteria": {
"SidecarFilename": "*echo-4*"
},
"IntendedFor": 0
},
{
"dataType": "dwi",
"modalityLabel": "dwi",
"criteria": {
"SeriesDescription": "*DWI*"
}
},
{
"dataType": "anat",
"modalityLabel": "SWI",
"criteria": {
"SeriesDescription": "*SWI*"
}
},
{
"id": "my-func",
"dataType": "func",
"modalityLabel": "bold",
"customLabels": "task-rest",
"criteria": {
"SeriesDescription": "rs_fMRI"
},
"sidecarChanges": {
"SeriesDescription": "rsfMRI"
}
},
{
"dataType": "fmap",
"modalityLabel": "fmap",
"criteria": {
"SidecarFilename": "*echo-3*"
},
"IntendedFor": [
2,
"my-func"
]
}
]
}
Notice that the IntendedFor
fields have been updated appropriately.
Python API
You can also use this tool from within python:
import json
from pathlib import Path
from pprint import pp
from compile_dcm2bids_config import combine_config
config1 = json.loads(Path("example/config1.json").read_text())
config2 = json.loads(Path("example/config2.json").read_text())
all_together = combine_config([config1, config2])
pp(all_together)
The result being:
{'descriptions': [{'dataType': 'anat',
'modalityLabel': 'SWI',
'criteria': {'SeriesDescription': '*SWI*'}},
{'dataType': 'fmap',
'modalityLabel': 'fmap',
'criteria': {'SidecarFilename': '*echo-4*'},
'IntendedFor': 0},
{'dataType': 'dwi',
'modalityLabel': 'dwi',
'criteria': {'SeriesDescription': '*DWI*'}},
{'dataType': 'anat',
'modalityLabel': 'SWI',
'criteria': {'SeriesDescription': '*SWI*'}},
{'id': 'my-func',
'dataType': 'func',
'modalityLabel': 'bold',
'customLabels': 'task-rest',
'criteria': {'SeriesDescription': 'rs_fMRI'},
'sidecarChanges': {'SeriesDescription': 'rsfMRI'}},
{'dataType': 'fmap',
'modalityLabel': 'fmap',
'criteria': {'SidecarFilename': '*echo-3*'},
'IntendedFor': [2, 'my-func']}]}
YAML Configuration Files
This package can handle dcm2bids
(or d2b
) configuration files written in YAML, the user just has to install the PyYAML
package, either separately:
pip install pyyaml
or all at once via the installation "extra":
pip install 'compile-dcm2bids-config[yaml]'
If PyYAML is available, then configuration files ending with .yml
or .yaml
can be passed as input files:
compile-dcm2bids-config config1.json config2.yaml > combined.json
The combined configuration file can also be formatted as YAML by adding the --to-yaml
flag:
compile-dcm2bids-config --to-yaml config1.json config2.yaml > combined.yaml
Contributing
- Have or install a recent version of
poetry
(version >= 1.1) - Fork the repo
- Setup a virtual environment (however you prefer)
- Run
poetry install
- Run
pre-commit install
- Add your changes (adding/updating tests is always nice too)
- Commit your changes + push to your fork
- Open a PR
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file compile-dcm2bids-config-1.4.3.tar.gz
.
File metadata
- Download URL: compile-dcm2bids-config-1.4.3.tar.gz
- Upload date:
- Size: 7.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.6 CPython/3.10.0 Linux/5.8.0-1042-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f439578e39275ae149014ac377747b791ba0085d352de6b62cbb1b0067c7e89c |
|
MD5 | 18e30eaa57317530da6351b8b23fcc08 |
|
BLAKE2b-256 | 155d8186fe40d52b986d4f58c986f55992a7a6dc6a455d0e2dc10488641fb7c5 |
File details
Details for the file compile_dcm2bids_config-1.4.3-py3-none-any.whl
.
File metadata
- Download URL: compile_dcm2bids_config-1.4.3-py3-none-any.whl
- Upload date:
- Size: 6.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.6 CPython/3.10.0 Linux/5.8.0-1042-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8076d787bb70c93501883f1b5c58d9b9ce125296dffd22d1e2bb4b2031681e80 |
|
MD5 | 0ded077a0470f95c332a07fd8448b3a9 |
|
BLAKE2b-256 | 9dfd30f0310ff12c4d1883f5b0f16ca49b2b65ec22f3456b8851d13a8a1b059e |