Subjects order seems not correct

nipype

#1

Hi Nipype guys,

I tried to iterate subjects in an order specified by a subject list file. At each iteration, each subject was processed to return a scalar value, which was outputted to a new text file. The new text file was intended to store all subjects’ values in an order consistent with that of the subject list file.

However, after closely inspecting the new text file produced, I found that the order of values was inconsistent with that of the subject list file.

I can not figure out the reason, especially considering that I was using the “Linear” engine, which I expect would process subjects’ data in a one-by-one manner. However, from the executing process printed on the screen, it did seem to have processed data in a random order. I don’t know if there are some tricks behind to control the order of processing for each subject.

For your convenience, I also pasted the main script here. Thank you a lot for you reply…

 38 dir = '/nfs/h1/workingshop/js/obj/'
 39 f = open(os.path.join(dir,'sessidffaRGall'))
 40 subj = [line.strip() for line in f]
 41 
 42 pluginName = 'Linear'
 43 
 44 #infosource - utility node to iterate over the list of subject names
 45 infosource = Node(IdentityInterface(fields=['subject_id']),
 46                   name='infosource')
 47 infosource.iterables = ('subject_id',subj)
 48 
 49 #datasource - utility node to grab data
 50 datasource = Node(DataGrabber(infields=['subject_id'],
 51                               outfields=['run1', 'run4', 'mask']),
 52                    name='datasource')
 53 datasource.inputs.base_directory = dir
 54 datasource.inputs.template = '%s/sess/rsProj/%s/%s.nii.gz'
 55 datasource.inputs.template_args['run1'] = [['subject_id','psc','r1cp4psc_sm0']]
 56 datasource.inputs.template_args['run4'] = [['subject_id','psc','r4cp4psc_sm0']]
 57 datasource.inputs.template_args['mask'] = [['subject_id','roi','ffaRG']]
 58 datasource.inputs.sort_filelist = False
 59 
 60 #function nodes
 61 PS = Node(Function(input_names=['run1','run4','mask'],
 62                    output_names=['corr'],
 63                    function=patternsimilarity),
 64            name='PS')
 65 
 66 savefile = Node(Function(input_names=['corr'],
 67                          output_names=[],
 68                          function=save2txt),
 69                 name='savefile')
 70 
 71 #entire workflow
 72 wf = Workflow(base_dir='/nfs/h1/workingshop/js/scripts', name='representation_stability')
 73 
 74 wf.connect(infosource,'subject_id',datasource,'subject_id')
 75 wf.connect(datasource,'run1',PS,'run1')
 76 wf.connect(datasource,'run4',PS,'run4')
 77 wf.connect(datasource,'mask',PS,'mask')
 78 wf.connect(PS,'corr',savefile,'corr')
 79 
 80 wf.run(plugin=pluginName)

#2

Hi @Jackson, sorry for late answer.

You didn’t include all code, so not sure how save2txt looks like, but you might find JoinNode useful. Have you tried to use it? Here you have a simple example of usage.