Skip to main content

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.

PyPI Version codecov Tests Code Style Type Check

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

  1. Have or install a recent version of poetry (version >= 1.1)
  2. Fork the repo
  3. Setup a virtual environment (however you prefer)
  4. Run poetry install
  5. Run pre-commit install
  6. Add your changes (adding/updating tests is always nice too)
  7. Commit your changes + push to your fork
  8. 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)

Source distribution for compile-dcm2bids-config 1.4.3
File Size Uploaded
compile-dcm2bids-config-1.4.3.tar.gz 7.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for compile-dcm2bids-config 1.4.3
File Interpreter ABI Platform
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

Release history Release notifications | RSS feed

This release

1.4.3 This release

2 release files

1.4.2

2 release files

1.4.0

2 release files

1.3.0

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.0

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page