Skip to content

Commit 9abbe2f

Browse files
committed
Added support for dwi
1 parent 9a23d46 commit 9abbe2f

File tree

1 file changed

+79
-0
lines changed

1 file changed

+79
-0
lines changed

samri/pipelines/reposit.py

+79
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
N_PROCS=max(N_PROCS-4, 2)
2727

28+
@argh.arg('-d','--diffusion-match', type=json.loads)
2829
@argh.arg('-f','--functional-match', type=json.loads)
2930
@argh.arg('-s','--structural-match', type=json.loads)
3031
@argh.arg('-m','--measurements', nargs='*', type=str)
@@ -113,6 +114,14 @@ def bru2bids(measurements_base,
113114
)
114115
functional_scan_types = list(f_data_selection['scan_type'].unique())
115116
data_selection = pd.concat([data_selection,f_data_selection])
117+
if diffusion_match:
118+
d_data_selection = get_data_selection(measurements_base,
119+
match=diffusion_match,
120+
exclude=exclude,
121+
measurements=measurements,
122+
)
123+
diffusion_scan_types = list(d_data_selection['scan_type'].unique())
124+
data_selection = pd.concat([data_selection,d_data_selection])
116125

117126
# we start to define nipype workflow elements (nodes, connections, meta)
118127
subjects_sessions = data_selection[["subject","session"]].drop_duplicates().values.tolist()
@@ -221,6 +230,76 @@ def bru2bids(measurements_base,
221230
except (FileNotFoundError, OSError):
222231
pass
223232

233+
if diffusion_scan_types:
234+
get_d_scan = pe.Node(name='get_d_scan', interface=util.Function(function=get_scan, input_names=inspect.getargspec(get_scan)[0], output_names=['scan_path','scan_type','task']))
235+
get_d_scan.inputs.ignore_exception = True
236+
get_d_scan.inputs.data_selection = data_selection
237+
get_d_scan.inputs.measurements_base = measurements_base
238+
get_d_scan.iterables = ("scan_type", diffusion_scan_types)
239+
240+
d_bru2nii = pe.Node(interface=bru2nii.Bru2(), name="d_bru2nii")
241+
d_bru2nii.inputs.force_conversion=True
242+
d_bru2nii.inputs.actual_size = not inflated_size
243+
244+
d_filename = pe.Node(name='d_filename', interface=util.Function(function=bids_naming,input_names=inspect.getargspec(bids_naming)[0], output_names=['filename']))
245+
d_filename.inputs.metadata = data_selection
246+
d_filename.inputs.extension=''
247+
248+
d_metadata_filename = pe.Node(name='d_metadata_filename', interface=util.Function(function=bids_naming,input_names=inspect.getargspec(bids_naming)[0], output_names=['filename']))
249+
d_metadata_filename.inputs.extension = ".json"
250+
d_metadata_filename.inputs.metadata = data_selection
251+
252+
d_metadata_file = pe.Node(name='d_metadata_file', interface=util.Function(function=write_bids_metadata_file,input_names=inspect.getargspec(write_bids_metadata_file)[0], output_names=['out_file']))
253+
d_metadata_file.inputs.extraction_dicts = BIDS_METADATA_EXTRACTION_DICTS
254+
255+
workflow_connections = [
256+
(infosource, datasink, [(('subject_session',ss_to_path), 'container')]),
257+
(infosource, get_d_scan, [('subject_session', 'selector')]),
258+
(infosource, d_filename, [('subject_session', 'subject_session')]),
259+
(infosource, d_metadata_filename, [('subject_session', 'subject_session')]),
260+
(get_d_scan, d_bru2nii, [('scan_path','input_dir')]),
261+
(get_d_scan, d_filename, [('scan_type', 'scan_type')]),
262+
(get_d_scan, d_metadata_filename, [('scan_type', 'scan_type')]),
263+
(get_d_scan, d_metadata_file, [('scan_path', 'scan_dir')]),
264+
(d_filename, d_bru2nii, [('filename','output_filename')]),
265+
(d_metadata_filename, d_metadata_file, [('filename', 'out_file')]),
266+
(d_bru2nii, datasink, [('nii_file', 'dwi')]),
267+
(d_metadata_file, datasink, [('out_file', 'dwi.@metadata')]),
268+
]
269+
crashdump_dir = path.join(out_base,'bids_crashdump')
270+
workflow_config = {'execution': {'crashdump_dir': crashdump_dir}}
271+
if debug:
272+
workflow_config['logging'] = {
273+
'workflow_level':'DEBUG',
274+
'utils_level':'DEBUG',
275+
'interface_level':'DEBUG',
276+
'filemanip_level':'DEBUG',
277+
'log_to_file':'true',
278+
}
279+
280+
workdir_name = 'bids_work'
281+
workflow = pe.Workflow(name=workdir_name)
282+
workflow.connect(workflow_connections)
283+
workflow.base_dir = path.join(out_base)
284+
workflow.config = workflow_config
285+
workflow.write_graph(dotfilename=path.join(workflow.base_dir,workdir_name,"graph_diffusion.dot"), graph2use="hierarchical", format="png")
286+
287+
#Execute the workflow
288+
if not keep_work or not keep_crashdump:
289+
try:
290+
workflow.run(plugin="MultiProc", plugin_args={'n_procs' : n_procs})
291+
except RuntimeError:
292+
pass
293+
else:
294+
workflow.run(plugin="MultiProc", plugin_args={'n_procs' : n_procs})
295+
if not keep_work:
296+
shutil.rmtree(path.join(workflow.base_dir,workdir_name))
297+
if not keep_crashdump:
298+
try:
299+
shutil.rmtree(crashdump_dir)
300+
except (FileNotFoundError, OSError):
301+
pass
302+
224303
if structural_scan_types:
225304
get_s_scan = pe.Node(name='get_s_scan', interface=util.Function(function=get_scan, input_names=inspect.getargspec(get_scan)[0], output_names=['scan_path','scan_type','task']))
226305
get_s_scan.inputs.ignore_exception = True

0 commit comments

Comments
 (0)