[Neuroimaging] wrap Matlab script using MatlabCommand in Nipype

Hao wen hao.freesurfer at hotmail.com
Wed Jun 29 13:37:57 EDT 2016


Hi everyone, I wrap a matlab script, in the matlab function, I didnt define the output, but I will save some output images to a specific folder, and I use the MatlabCommand in Nipype, so here is my NIpype code:

from nipype.interfaces.utility import Function
import nipype.pipeline.engine as pe

def runmatlab(ContrastLinearModel, Format, CSVFilenames, PATH_TO_RECON_ALL_OUTPUTS, a_required_path):
    from nipype.interfaces.matlab import MatlabCommand
    matlab = MatlabCommand()
    matlab.inputs.paths = [a_required_path]# this is the path to add into matlab, addpath
    matlab.inputs.script = """
    NipypeSurfStat('%s', '%s', '%s', '%s')"""%(ContrastLinearModel, Format,
                                 CSVFilenames, PATH_TO_RECON_ALL_OUTPUTS )
    matlab.inputs.mfile = True # this will create a file: pyscript.m , the pyscript.m is the default name
    out = matlab.run()
    return out

a_required_path = '/aramis/dataARAMIS/users/junhao.wen/Data_AD_CN/Group_analysis/SurfStat/Junhao_script/Code/NipypeSurfStat'
#output_dir = '/aramis/dataARAMIS/users/junhao.wen/Data_AD_CN/Group_analysis/SurfStat/Junhao_script/Figures'
PATH_TO_RECON_ALL_OUTPUTS = '/aramis/dataARAMIS/users/junhao.wen/Data_AD_CN/ADNI_60_AD_CN_object_recon_all_output';
CSVFilenames     = '/aramis/dataARAMIS/users/junhao.wen/Data_AD_CN/Group_analysis/SurfStat/Junhao_script/Database/GroupAnalysisDataAramis/60_AD_CN_GROUPT_ANALYSIS.csv';
Format = '%s %s %s %f';
ContrastLinearModel = '1 + Label';

SurfStat = pe.Node(name='SurfStat',
               interface=Function(input_names=['ContrastLinearModel', 'Format', 'CSVFilenames',
                                     'PATH_TO_RECON_ALL_OUTPUTS', 'a_required_path'],
                                  output_names=['out_file'],
                                  function=runmatlab))
SurfStat.inputs.ContrastLinearModel = ContrastLinearModel
SurfStat.inputs.Format = Format
SurfStat.inputs.CSVFilenames = CSVFilenames
SurfStat.inputs.PATH_TO_RECON_ALL_OUTPUTS = PATH_TO_RECON_ALL_OUTPUTS
SurfStat.inputs.a_required_path = a_required_path

SurfStat.run()



But I got some error, and I checked my matlab script, it is caused by this line,

save2jpeg(strcat('Figures/', fileName, '/ContrastPositive-TValue.jpg'));

The error from my nipype is :

Standard error:
Segmentation fault (core dumped)

Return code: 139
Interface MatlabCommand failed to run.
Interface Function failed to run.

I googled, they give me this explaination:

1. Very basically, it means your program is trying to access a memory area it is not suposed to.

2. To the current directoy.

3. You need to make sure your program doesn't do 1..



I have been stucked by this for a long time, any advice will be appreciated:)

Good day! Bonne journée!

Hao

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/neuroimaging/attachments/20160629/375d58ca/attachment.html>


More information about the Neuroimaging mailing list