Hi Xiang,
I've responded to a similar post giving suggestions on how to use the script file. Here's the link:
https://www.jiscmail.ac.uk/cgi-bin/webadmin?A2=ind1101&L=SPM&P=R80070&1=SPM&9=A&J=on&d=No+Match%3BMatch%3BMatches&z=4
Being able to use the script file requires some fundamental knowledge of Matlab programming that would be beyond the scope of the SPM manual. Please see my inline responses.
Hope that helps,
Vy T.U. Dinh
Research Assistant, Neurological Sciences
Rush University Medical Center
Phone: (312) 563-3853
Fax: (312) 563-4660
Email: [log in to unmask]
________________________________________
From: SPM (Statistical Parametric Mapping) [[log in to unmask]] on behalf of Xiang Wu [[log in to unmask]]
Sent: Friday, April 01, 2011 9:00 PM
To: [log in to unmask]
Subject: [SPM] ask about spm8 template script
Dear spmers:
I have data of hundreds of subjects, so I have to use pure scripts.
For my question, take an example for one single step of job, say, normalize. I first do it with spm8 batch editor, and save via "Save Batch and Script". It gives two files, one normalize_job.m file, which contains setups for normalization and is quite easy to understand. My confusion is for another file, normalize.m, as attached below. It is said to be be a template file, but without specific information about how to fill out it. I do check the manual, mailing list, but without a straightforward answer.
Here the aim is to do a normalization, which has been done by batch editor (run and get result), it's thus specific to this task of this subject. What I need are the specific scripts, just change like the name and directory, and apply to other steps and other subjects. (do single step, and repeat. Now I don't get single step, how to repeat?)
As below, it's the template. Should "nrun =X" be "nrun=1"?
--->nrun = X, X should be replaced with the number of sessions that you have. (for a task with 3 runs, type in nrun=3)
In "inputs = cell(0, nrun)", should change 0 to 1?
---->inputs = cell(x,nrun); x should be replaced with the number of the order of your input. (if the input is the 1st missing input, then x=1 and so on)
Should I delete the for loop if I don't need loop here?
-----> you only need the for loop (nrun) if you have more than 1 sessioin
In "spm_jobman('serial', jobs, '', inputs{:})", what's serial? Should I fill out "inputs{:}"?
----> I used a different command; not sure how this would work but you can read the spm_jobman file for command usage info
For this single normalize step of this subject, every thing is ready in normalize_job.m file. I can realize the usefulness of the template file, but I want a specific straightforward way to get the single step done. How should I fill out the below template? Or may be just one or two commands?
In addition, it's better for all the scripts in one file (otherwise there will be hundreds of scripts). Is there a way to put the normalize_job.m and normalize.m file in one file? And is it just to type the file name to run the scripts?
----> The two files are created separately to maximize versatility of the batch processing. This way, you can use the template file for one subject in a large script that performs other data processing or you can use the skeleton to process numerous subjects at once. Whenever you come across a function or command that your are unsure about, just type in >>edit <name of command> in your Matlab comand window. If Matlab does not open the .m file for that command, it means that the file is not present in Matlab's path. If you do not know what the command does, you should read the description for that command in the .m file. It's very much like navigating a hyperlink page (such as wikipedia) where each function performs a main task (gives you information about only that specific topic) without boggling you down in the details (without having to explain what each term means).
But to answer your question, you CAN put both codes into one file. You can define normalize.m as a function at the end of the normalize_job script and call normalize.m in your normalize_JOB code.
---------------------
% List of open inputs
nrun = X; % enter the number of runs here
jobfile = {'C:\data\normalize_04_job.m'};
jobs = repmat(jobfile, 1, nrun);
inputs = cell(0, nrun);
for crun = 1:nrun
end
spm('defaults', 'FMRI');
spm_jobman('serial', jobs, '', inputs{:});
----------------------
bests
Xiang
|