Compile Dcm2Bids configuration files into a single config file.
Project description
compile-dcm2bids-config
Combine dcm2bids
config files into a single config file while preserving the integrity of each separate config file's various IntendedFor
fields.
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*"
}
},
{
"dataType": "func",
"modalityLabel": "bold",
"customLabels": "task-rest",
"criteria": {
"SeriesDescription": "rs_fMRI"
},
"sidecarChanges": {
"SeriesDescription": "rsfMRI"
}
},
{
"dataType": "fmap",
"modalityLabel": "fmap",
"criteria": {
"SidecarFilename": "*echo-3*"
},
"IntendedFor": [0, 2]
}
]
}
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*"
}
},
{
"dataType": "func",
"modalityLabel": "bold",
"customLabels": "task-rest",
"criteria": {
"SeriesDescription": "rs_fMRI"
},
"sidecarChanges": {
"SeriesDescription": "rsfMRI"
}
},
{
"dataType": "fmap",
"modalityLabel": "fmap",
"criteria": {
"SidecarFilename": "*echo-3*"
},
"IntendedFor": [
2,
4
]
}
]
}
Notice that the IntendedFor
fields have been updated appropriately.
NOTE: Other fields at the top level of the config file (i.e. at the same level as
descriptions
), for example:searchMethod
ordefaceTpl
, are omitted in the merged config file output bycompile-dcm2bids-config
. Since different config file may have different top-level paramters it is upto the user to determine which parameters should be retained and/or whether or not it makes sense to even combine the provided configuration files.
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*'}},
{'dataType': 'func',
'modalityLabel': 'bold',
'customLabels': 'task-rest',
'criteria': {'SeriesDescription': 'rs_fMRI'},
'sidecarChanges': {'SeriesDescription': 'rsfMRI'}},
{'dataType': 'fmap',
'modalityLabel': 'fmap',
'criteria': {'SidecarFilename': '*echo-3*'},
'IntendedFor': [2, 4]}]}
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
Hashes for compile-dcm2bids-config-1.0.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | ee96400886e28cad9da6c33e66eb6d80be5917bf4c0d59b7a8ba83656586e759 |
|
MD5 | fcccf023c96d740551a1d41b992e5eaf |
|
BLAKE2b-256 | 8ab3b5f7af1a0d359bc646d1f6bd8906fc74a17d4185db76c1daf720723d3b53 |
Hashes for compile_dcm2bids_config-1.0.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | da10aa32cf5c62164ad6de103c7e5dc823088b59f0344dfcc46658c9f0b0d348 |
|
MD5 | e33c3e11ee5861ebcc933da3e62c8af3 |
|
BLAKE2b-256 | a981d271391425164d255c92aea4e4cd5d0d9afb40b95a4e8250d25957e3624a |