Dear Bianca,
What about something like this?
data_path = 'C:\exp';
mask = fullfile(data_path,'Maskl.nii');
files = cellstr(spm_select('FPList',...
fullfile(data_path,'Data'),'.*\.nii$'));
clear matlabbatch
for i=1:numel(files)
matlabbatch{i}.spm.util.imcalc.input = {files{i};mask};
matlabbatch{i}.spm.util.imcalc.outdir = ...
{fullfile(data_path,'Masked')};
matlabbatch{i}.spm.util.imcalc.output = ...
spm_file(spm_file(files{i},'filename'),'prefix','Masked_');
matlabbatch{i}.spm.util.imcalc.expression = 'i1.*i2';
matlabbatch{i}.spm.util.imcalc.options.interp = 0;
matlabbatch{i}.spm.util.imcalc.options.dtype = 16; % to adjust
end
spm_jobman('run',matlabbatch);
It is very slow for what it's doing - a direct call to spm_mask should
also get you there.
Best regards,
Guillaume.
On 05/10/16 15:42, De Blasi, Bianca wrote:
> Dear all,
>
>
> I am trying to run some preprocessing steps for a set of PET images
> (from different subjects) by developing a batch script from the SPM gui.
> I would like to confirm with you that what I am doing is correct.
>
>
> Say I want to mask out every image by the same brain mask. I have done
> the following:
>
> 1) Load SPM and the ImCalc gui. Fill all the fields with the appropriate
> options
>
> 2) Click File -> Save batch and scripts (which generates a .m file and a
> _job.m file)
>
> 3) *In the .m file I have set the number of runs to 1 and I have left
> all the rest the same. In the _job.m file I have added a for loop which
> selects one subject at a time (ie. the image to be masked changes at
> each iteration and is selected from a folder). For each subject the
> ImCalc processing is run (at least this is what I would like to obtain).*
>
> *
> *
>
> *here is how the _job.m file appears (note this is from SPM8):*
>
> "
>
> files2Mask = dir('Data\*.nii');
>
> for i = 1:length(files2Mask)
> matlabbatch{i}.spm.util.imcalc.input = {
> strcat('Data\',files2Mask(i).name,',1')
> 'Maskl.nii,1'
> };
> matlabbatch{i}.spm.util.imcalc.output =
> strcat('Masked_',files2Mask(i).name);
> matlabbatch{i}.spm.util.imcalc.outdir = {'Masked'};
> matlabbatch{i}.spm.util.imcalc.expression = 'i1.*i2';
> matlabbatch{i}.spm.util.imcalc.options.dmtx = 0;
> matlabbatch{i}.spm.util.imcalc.options.mask = 0;
> matlabbatch{i}.spm.util.imcalc.options.interp = 1;
> matlabbatch{i}.spm.util.imcalc.options.dtype = 4;
>
> end
> "
>
> _
> _
>
> Is this correct? My concern is that there is a for loop in the .m file
> but I am not quite sure on how to use it and by reading the manual, it
> seems that it is for a multisession analysis of the same subject, while
> in my case I want to repeate the same processing (ie. masking or
> normalisation..) for a set of subject stored in a folder.
>
>
> Hope all this makes some sense,
>
> Could you please give some advice on whether this is correct?
>
>
> Thank you very much in advanced,
>
> Bianca
>
--
Guillaume Flandin, PhD
Wellcome Trust Centre for Neuroimaging
University College London
12 Queen Square
London WC1N 3BG
|