Skip to content

Commit 3700462

Browse files
authored
Merge pull request #208 from mgxd/enh/dcm2niix-opts
enh: allow additional dcm2niix configuration
2 parents 083f460 + c78d25b commit 3700462

File tree

2 files changed

+36
-14
lines changed

2 files changed

+36
-14
lines changed

heudiconv/cli/run.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,8 @@ def get_parser():
212212
'jsons')
213213
parser.add_argument('--random-seed', type=int, default=None,
214214
help='Random seed to initialize RNG')
215+
parser.add_argument('--dcmconfig', default=None,
216+
help='JSON file for additional dcm2niix configuration')
215217
submission = parser.add_argument_group('Conversion submission options')
216218
submission.add_argument('-q', '--queue', default=None,
217219
help='select batch system to submit jobs to instead'
@@ -231,14 +233,12 @@ def process_args(args):
231233

232234
outdir = op.abspath(args.outdir)
233235

234-
if args.command:
235-
process_extra_commands(outdir, args)
236-
return
237-
238236
lgr.info(INIT_MSG(packname=__packagename__,
239237
version=__version__))
240238

241-
239+
if args.command:
240+
process_extra_commands(outdir, args)
241+
return
242242
#
243243
# Load heuristic -- better do it asap to make sure it loads correctly
244244
#
@@ -335,7 +335,8 @@ def process_args(args):
335335
bids=args.bids,
336336
seqinfo=seqinfo,
337337
min_meta=args.minmeta,
338-
overwrite=args.overwrite,)
338+
overwrite=args.overwrite,
339+
dcmconfig=args.dcmconfig,)
339340

340341
lgr.info("PROCESSING DONE: {0}".format(
341342
str(dict(subject=sid, outdir=study_outdir, session=session))))

heudiconv/convert.py

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ def conversion_info(subject, outdir, info, filegroup, ses):
7979

8080
def prep_conversion(sid, dicoms, outdir, heuristic, converter, anon_sid,
8181
anon_outdir, with_prov, ses, bids, seqinfo, min_meta,
82-
overwrite):
82+
overwrite, dcmconfig):
8383
if dicoms:
8484
lgr.info("Processing %d dicoms", len(dicoms))
8585
elif seqinfo:
@@ -194,7 +194,8 @@ def prep_conversion(sid, dicoms, outdir, heuristic, converter, anon_sid,
194194
bids=bids,
195195
outdir=tdir,
196196
min_meta=min_meta,
197-
overwrite=overwrite,)
197+
overwrite=overwrite,
198+
dcmconfig=dcmconfig,)
198199

199200
for item_dicoms in filegroup.values():
200201
clear_temp_dicoms(item_dicoms)
@@ -211,7 +212,8 @@ def prep_conversion(sid, dicoms, outdir, heuristic, converter, anon_sid,
211212

212213

213214
def convert(items, converter, scaninfo_suffix, custom_callable, with_prov,
214-
bids, outdir, min_meta, overwrite, symlink=True, prov_file=None):
215+
bids, outdir, min_meta, overwrite, symlink=True, prov_file=None,
216+
dcmconfig=None):
215217
"""Perform actual conversion (calls to converter etc) given info from
216218
heuristic's `infotodict`
217219
@@ -278,7 +280,7 @@ def convert(items, converter, scaninfo_suffix, custom_callable, with_prov,
278280

279281
# run conversion through nipype
280282
res, prov_file = nipype_convert(item_dicoms, prefix, with_prov,
281-
bids, tmpdir)
283+
bids, tmpdir, dcmconfig)
282284

283285
bids_outfiles = save_converted_files(res, item_dicoms, bids,
284286
outtype, prefix,
@@ -382,8 +384,25 @@ def convert_dicom(item_dicoms, bids, prefix,
382384
shutil.copyfile(filename, outfile)
383385

384386

385-
def nipype_convert(item_dicoms, prefix, with_prov, bids, tmpdir):
386-
""" """
387+
def nipype_convert(item_dicoms, prefix, with_prov, bids, tmpdir, dcmconfig=None):
388+
"""
389+
Converts DICOMs grouped from heuristic using Nipype's Dcm2niix interface.
390+
391+
Parameters
392+
----------
393+
item_dicoms : List
394+
DICOM files to convert
395+
prefix : String
396+
Heuristic output path
397+
with_prov : Bool
398+
Store provenance information
399+
bids : Bool
400+
Output BIDS sidecar JSONs
401+
tmpdir : Directory
402+
Conversion working directory
403+
dcmconfig : File (optional)
404+
JSON file used for additional Dcm2niix configuration
405+
"""
387406
import nipype
388407
if with_prov:
389408
from nipype import config
@@ -393,9 +412,11 @@ def nipype_convert(item_dicoms, prefix, with_prov, bids, tmpdir):
393412

394413
item_dicoms = list(map(op.abspath, item_dicoms)) # absolute paths
395414

396-
dicom_dir = op.dirname(item_dicoms[0]) if item_dicoms else None
415+
fromfile = dcmconfig if dcmconfig else None
416+
if fromfile:
417+
lgr.info("Using custom config file %s", fromfile)
397418

398-
convertnode = Node(Dcm2niix(), name='convert')
419+
convertnode = Node(Dcm2niix(from_file=fromfile), name='convert')
399420
convertnode.base_dir = tmpdir
400421
convertnode.inputs.source_names = item_dicoms
401422
convertnode.inputs.out_filename = op.basename(op.dirname(prefix))

0 commit comments

Comments
 (0)