Dear Bianca,
yes, what you did was a mix of the two options - when you use 'Save
Batch and Script', the _job.m file is the same than the file that would
be saved had you used 'Save Batch'.
As I find batch vs script vs job confusing, I tend to use 'Save Batch'
only and write the loop myself. It's a matter of taste though.
Best regards,
Guillaume.
On 06/10/16 17:41, De Blasi, Bianca wrote:
> 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
--
Guillaume Flandin, PhD
Wellcome Trust Centre for Neuroimaging
University College London
12 Queen Square
London WC1N 3BG
|