Dear Guillaume,


Thanks for this. What I did is a bit midway between the two options you suggested as I had 'save batch and script' and added a for loop for subjects in the job.m file. I was not sure how to fill the preexisting for loop to access the different subject images and most of all to use those images one by one in the job.m file (where the images are processed). Does this makes sense at all?


Thank you,

Kind regards,

Bianca 


From: Flandin, Guillaume
Sent: 06 October 2016 16:46:24
To: De Blasi, Bianca
Cc: [log in to unmask]
Subject: Re: [SPM] : dataset processing using SPM batch scripts
 
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