Dear Bianca,
your option is fine - the main difference is about using absolute
instead of relative paths (and spm_select instead of dir, fullfile
instead of strcat). Make sure to chose for 'dtype' the data type
corresponding to your input images.
To create a script that will loop over subjects, you can either:
* specify your batch in the interface for one subject and 'Save Batch'
then edit the saved file to add a loop over subjects and a call to
spm_jobman('run') at the end. You will end up with a script similar to
the one I sent you.
* specify your batch in the interface leaving the 'Input images' and
'Output filename' empty and 'Save Batch and Script' then edit the
generated script with the prespecified loop: nrun will here be your
number of subjects and you fill in the blanks for inputs{1, crun} and
inputs{2, crun} such that it contains the input images and output
filename details for a single subject.
Best regards,
Guillaume.
On 05/10/16 21:50, De Blasi, Bianca wrote:
> Dear Guillaume,
>
>
> thank you very much for your email and suggestion. Just to clarify: is
> my option still correct but less efficient or is it wrong in some ways?
>
>
> Kind regards,
>
> Bianca
>
>
> ------------------------------------------------------------------------
> *From:* Flandin, Guillaume
> *Sent:* 05 October 2016 17:37:35
> *To:* De Blasi, Bianca
> *Cc:*
[log in to unmask]
> *Subject:* Re: [SPM] : dataset processing using SPM batch scripts
>
> 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
--
Guillaume Flandin, PhD
Wellcome Trust Centre for Neuroimaging
University College London
12 Queen Square
London WC1N 3BG