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
Metadata
Release files for compile-dcm2bids-config 1.4.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| compile-dcm2bids-config-1.4.3.tar.gz | 7.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| compile_dcm2bids_config-1.4.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 14.2 kB
Release files / compile-dcm2bids-config-1.4.3.tar.gz
| Download URL | compile-dcm2bids-config-1.4.3.tar.gz |
|---|---|
| Size | 7.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f439578e39275ae149014ac377747b791ba0085d352de6b62cbb1b0067c7e89c
|
|
BLAKE2b-256 checksum How to use checksums |
155d8186fe40d52b986d4f58c986f55992a7a6dc6a455d0e2dc10488641fb7c5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.1.6 CPython/3.10.0 Linux/5.8.0-1042-azure
|
Release files / compile_dcm2bids_config-1.4.3-py3-none-any.whl
| Download URL | compile_dcm2bids_config-1.4.3-py3-none-any.whl |
|---|---|
| Size | 6.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8076d787bb70c93501883f1b5c58d9b9ce125296dffd22d1e2bb4b2031681e80
|
|
BLAKE2b-256 checksum How to use checksums |
9dfd30f0310ff12c4d1883f5b0f16ca49b2b65ec22f3456b8851d13a8a1b059e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.1.6 CPython/3.10.0 Linux/5.8.0-1042-azure
|