@@ -87,7 +87,7 @@ def get_subjectinfo(subject_id, base_dir, task_id, model_id):
87
87
88
88
89
89
def analyze_openfmri_dataset (data_dir , subject = None , model_id = None ,
90
- task_id = None , output_dir = None ):
90
+ task_id = None , output_dir = None , subj_prefix = '*' ):
91
91
"""Analyzes an open fmri dataset
92
92
93
93
Parameters
@@ -122,21 +122,21 @@ def analyze_openfmri_dataset(data_dir, subject=None, model_id=None,
122
122
"""
123
123
124
124
subjects = sorted ([path .split (os .path .sep )[- 1 ] for path in
125
- glob (os .path .join (data_dir , 'sub*' ))])
125
+ glob (os .path .join (data_dir , subj_prefix ))])
126
126
127
127
infosource = pe .Node (niu .IdentityInterface (fields = ['subject_id' ,
128
128
'model_id' ,
129
129
'task_id' ]),
130
130
name = 'infosource' )
131
- if subject is None :
131
+ if len ( subject ) == 0 :
132
132
infosource .iterables = [('subject_id' , subjects ),
133
133
('model_id' , [model_id ]),
134
- ('task_id' , [ task_id ] )]
134
+ ('task_id' , task_id )]
135
135
else :
136
136
infosource .iterables = [('subject_id' ,
137
- [subjects [subjects .index (subject )] ]),
137
+ [subjects [subjects .index (subj )] for subj in subject ]),
138
138
('model_id' , [model_id ]),
139
- ('task_id' , [ task_id ] )]
139
+ ('task_id' , task_id )]
140
140
141
141
subjinfo = pe .Node (niu .Function (input_names = ['subject_id' , 'base_dir' ,
142
142
'task_id' , 'model_id' ],
@@ -156,7 +156,7 @@ def analyze_openfmri_dataset(data_dir, subject=None, model_id=None,
156
156
name = 'datasource' )
157
157
datasource .inputs .base_directory = data_dir
158
158
datasource .inputs .template = '*'
159
- datasource .inputs .field_template = {'anat' : '%s/anatomy/highres001 .nii.gz' ,
159
+ datasource .inputs .field_template = {'anat' : '%s/anatomy/T1_001 .nii.gz' ,
160
160
'bold' : '%s/BOLD/task%03d_r*/bold.nii.gz' ,
161
161
'behav' : ('%s/model/model%03d/onsets/task%03d_'
162
162
'run%03d/cond*.txt' ),
@@ -235,8 +235,19 @@ def get_contrasts(contrast_file, task_id, conds):
235
235
name = "modelspec" )
236
236
modelspec .inputs .input_units = 'secs'
237
237
238
+ def check_behav_list (behav ):
239
+ out_behav = []
240
+ if isinstance (behav , basestring ):
241
+ behav = [behav ]
242
+ for val in behav :
243
+ if not isinstance (val , list ):
244
+ out_behav .append ([val ])
245
+ else :
246
+ out_behav .append (val )
247
+ return out_behav
248
+
238
249
wf .connect (subjinfo , 'TR' , modelspec , 'time_repetition' )
239
- wf .connect (datasource , 'behav' , modelspec , 'event_files' )
250
+ wf .connect (datasource , ( 'behav' , check_behav_list ) , modelspec , 'event_files' )
240
251
wf .connect (subjinfo , 'TR' , modelfit , 'inputspec.interscan_interval' )
241
252
wf .connect (subjinfo , 'conds' , contrastgen , 'conds' )
242
253
wf .connect (datasource , 'contrasts' , contrastgen , 'contrast_file' )
@@ -338,6 +349,9 @@ def get_subs(subject_id, conds, model_id, task_id):
338
349
subs .append (('task_id_%d/' % task_id , '/task%03d_' % task_id ))
339
350
subs .append (('bold_dtype_mcf_mask_smooth_mask_gms_tempfilt_mean_warp_warp' ,
340
351
'mean' ))
352
+ subs .append (('bold_dtype_mcf_mask_smooth_mask_gms_tempfilt_mean_flirt' ,
353
+ 'affine' ))
354
+
341
355
for i in range (len (conds )):
342
356
subs .append (('_flameo%d/cope1.' % i , 'cope%02d.' % (i + 1 )))
343
357
subs .append (('_flameo%d/varcope1.' % i , 'varcope%02d.' % (i + 1 )))
@@ -376,7 +390,9 @@ def get_subs(subject_id, conds, model_id, task_id):
376
390
('varcopes' , 'varcopes.mni' ),
377
391
])])
378
392
wf .connect (registration , 'outputspec.transformed_mean' , datasink , 'mean.mni' )
379
-
393
+ wf .connect (registration , 'outputspec.func2anat_transform' , datasink , 'xfm.mean2anat' )
394
+ wf .connect (registration , 'outputspec.anat2target_transform' , datasink , 'xfm.anat2target' )
395
+
380
396
"""
381
397
Set processing parameters
382
398
"""
@@ -398,12 +414,15 @@ def get_subs(subject_id, conds, model_id, task_id):
398
414
parser = argparse .ArgumentParser (prog = 'fmri_openfmri.py' ,
399
415
description = __doc__ )
400
416
parser .add_argument ('-d' , '--datasetdir' , required = True )
401
- parser .add_argument ('-s' , '--subject' , default = None ,
417
+ parser .add_argument ('-s' , '--subject' , default = [],
418
+ nargs = '+' , type = str ,
402
419
help = "Subject name (e.g. 'sub001')" )
403
420
parser .add_argument ('-m' , '--model' , default = 1 ,
404
421
help = "Model index" + defstr )
405
- parser .add_argument ('-t' , '--task' , default = 1 ,
406
- help = "Task index" + defstr )
422
+ parser .add_argument ('-x' , '--subjectprefix' , default = 'sub*' ,
423
+ help = "Subject prefix" + defstr )
424
+ parser .add_argument ('-t' , '--task' , default = 1 , #nargs='+',
425
+ type = int , help = "Task index" + defstr )
407
426
parser .add_argument ("-o" , "--output_dir" , dest = "outdir" ,
408
427
help = "Output directory base" )
409
428
parser .add_argument ("-w" , "--work_dir" , dest = "work_dir" ,
@@ -427,7 +446,8 @@ def get_subs(subject_id, conds, model_id, task_id):
427
446
wf = analyze_openfmri_dataset (data_dir = os .path .abspath (args .datasetdir ),
428
447
subject = args .subject ,
429
448
model_id = int (args .model ),
430
- task_id = int (args .task ),
449
+ task_id = [int (args .task )],
450
+ subj_prefix = args .subjectprefix ,
431
451
output_dir = outdir )
432
452
wf .base_dir = work_dir
433
453
if args .plugin_args :
0 commit comments