https://github.com/andrewrosss/compile-dcm2bids-config
Combine dcm2bids config files into a single config file.
https://github.com/andrewrosss/compile-dcm2bids-config
bids config configuration dcm2bids dicom python
Last synced: about 1 month ago
JSON representation
Combine dcm2bids config files into a single config file.
- Host: GitHub
- URL: https://github.com/andrewrosss/compile-dcm2bids-config
- Owner: andrewrosss
- License: mit
- Created: 2021-08-23T19:56:09.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2021-10-29T19:49:43.000Z (over 3 years ago)
- Last Synced: 2025-02-03T02:30:57.843Z (3 months ago)
- Topics: bids, config, configuration, dcm2bids, dicom, python
- Language: Python
- Homepage:
- Size: 111 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# compile-dcm2bids-config
Combine [`dcm2bids`](https://github.com/unfmontreal/Dcm2Bids) and [`d2b`](https://github.com/d2b-dev/d2b) config files into a single config file while preserving the integrity of each separate config file's various `IntendedFor` fields.
[](https://pypi.org/project/compile-dcm2bids-config/) [](https://codecov.io/gh/andrewrosss/compile-dcm2bids-config)
[](https://github.com/andrewrosss/compile-dcm2bids-config/actions/workflows/test.yaml)
[](https://github.com/andrewrosss/compile-dcm2bids-config/actions/workflows/lint.yaml)
[](https://github.com/andrewrosss/compile-dcm2bids-config/actions/workflows/type-check.yaml)## Installation
For the basic functionality:
```bash
pip install compile-dcm2bids-config
```If you have config files written in YAML you can install the `yaml` extra, for example:
```bash
pip install 'compile-dcm2bids-config[yaml]'
```## Usage
```bash
$ 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 combineoptional 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`:**
```json
{
"descriptions": [
{
"dataType": "anat",
"modalityLabel": "SWI",
"criteria": {
"SeriesDescription": "*SWI*"
}
},
{
"dataType": "fmap",
"modalityLabel": "fmap",
"criteria": {
"SidecarFilename": "*echo-4*"
},
"IntendedFor": 0
}
]
}
```**`example/config2.json`:**
```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):
```bash
$ 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:
```python
import json
from pathlib import Path
from pprint import ppfrom 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:
```python
{'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`](https://github.com/unfmontreal/Dcm2Bids) (or [`d2b`](https://github.com/d2b-dev/d2b)) configuration files written in YAML, the user just has to install the `PyYAML` package, either separately:
```bash
pip install pyyaml
```or all at once via the installation "extra":
```bash
pip install 'compile-dcm2bids-config[yaml]'
```If PyYAML is available, then configuration files ending with `.yml` or `.yaml` can be passed as input files:
```bash
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:
```bash
compile-dcm2bids-config --to-yaml config1.json config2.yaml > combined.yaml
```## Contributing
1. Have or install a recent version of `poetry` (version >= 1.1)
1. Fork the repo
1. Setup a virtual environment (however you prefer)
1. Run `poetry install`
1. Run `pre-commit install`
1. Add your changes (adding/updating tests is always nice too)
1. Commit your changes + push to your fork
1. Open a PR