I'm not afraid this question might be too obscure, but here it goes!
I have limited experience with scripting, and I wrote this script to sum two neural maps (that contain "c1" or "c2" in their names) with SPM12:
dataPath=fileparts(pwd);
dataPath=fullfile(dataPath,'/MATLAB Drive/Target Files');
filterStrC1='^c1';
filterStrC2='^c2';
fileNameC1=spm_select('FPListRec',dataPath,filterStrC1);
fileNameC2=spm_select('FPListRec',dataPath,filterStrC2);
for iSubj=1:size(fileNameC1,1)
disp(iSubj);
[filePath, fileName]=fileparts(fileNameC1(iSubj,:));
fileName=fileName(3:end);
V0_fileName=[ filePath, filesep, 'sum_c12_' ,fileName, '.nii'];
tpm(iSubj)=spm_imcalc([fileNameC1(iSubjs,:) ;fileNameC2(iSubj,:)], V0_fileName,'i1+i2');
end
disp('sum done!')
However, for some reason, the for loop keeps getting skipped, and the fileName variables are empty every time I run the script.
Can you spot any obvious mistakes with my script?
I think you're right and that
spm_select
returns an empty array.So
spm_select
is used to select a 'c1' and 'c2' image of one subject? If you know that there's always a 'c2' for every 'c1' then it would be easier just to usels
:As you can see, you need to manipulate the output of the 'ls' command a bit (as well as the command itself, depending on how many directories down you are): it is just a matrix of characters, that
textscan
can turn into a cell array of file names. (it's actually a nested array, that's why the other line is needed).But then you have a list of 'c1' files from which you can build the 'c2' files. You may want to print its size just in case it's 0. Hopefully the modified call to
spm_imcalc
still works - the syntax should be ok, not sure what the shape oftpm
is.