Dear SPMers,
first of all sorry for posting such a huge file.
I tried to write a batchfile which is capable of adjusting to the number of
trials (=n subjects) entered interactively (via spm_get) in order to
automate a group analysis (model) consisting of n subjects having 2 sessions
each. The details are - I think - not necessary to know, the mfile
'h_grp_bch.m' called by itself doesn't give any errors (this means, all the
files loaded are in place, the syntax is correct, furthermore, I think the
variable classes should also be alright - maybe).
The issue now is that when I call the file via spm_bch('h_grp_bch') it looks
as if it is called twice within itself since I am prompted twice for
[analysedirs and grp_workdir], that is the part marked
%specify working directories-----------------------------------------start
...
%specify working directories-----------------------------------------end
What causes this? Is it not possible to use spm_get for actual user input
(rather than spm_get('files',...))?
The whole idea behing it all is that I do not want to modify the batchfile
each time I get another subject, thus I want to analyse a growing group.
Thanks for any hints,
Helmut
__________________________________
Helmut Laufs ([log in to unmask])
Johann Wolfgang Goethe-Universität
ZNN, Klinik für Neurologie
Haus 95, Raum 031
Schleusenweg 2-16
60528 Frankfurt / Main
h_grp_bch.m
% NB : this file includes the analyses level,
% (such that only one m-file is necessary)
%---------------------------------------------------------------
%---------------------------------------------------------------
% user variables defined here
%---------------------------------------------------------------
%specify loacation of this file
mfileloc = '//export/raid2/fMRI/laufs/prg/MATLAB/h_grp_bch.m'
%specify working directories-----------------------------------------start
analysedirs = spm_get([-1 -99],'Input basedirectories on which to apply
scheme!') %parent directories (=subjects) to subdir
subdir = '/analyse_O12' %this should reappear in all analysedirs, that's
where the regressors are stored in matlab.mat
grp_workdir = spm_get([-1],'Specify working directory for output!')
%instead of using pwd, have it specified
%specify working directories-----------------------------------------end
nop = size(analysedirs,1); %number of directories (ie people or subjecs)
this analysis will have to deal with
%now, do the big loop to create the batch variables dynamically depending on
how many subjects (2 sessions each) there are
for tmp=1:nop
%-----------------------------------
%load regressors, each called regs_a and regs_b, then put them in
regsa{1..nop} for 1st session and regsb{1..nop} for 2nd session
%regs_a is of format 11 X 295 double array (5 user specified regressors,
6 realignment params.), so need to rotate
%regs_b same as regs_a just for 2nd session
%for some reason, there is a space at the end of dirname, so need to
deblank
load([deblank(analysedirs(tmp,:)) subdir '/matlab.mat']);
regsa{tmp} = regs_a'; %rotate!
regsb{tmp} = regs_b'; %rotate!
regnamesa{tmp} = [];
for innertmp=1:size(regnames_a,1)
regnamesa{tmp} = [regnamesa{tmp} {regnames_a(innertmp,:)}]; %convert
to STRINGS
end
regnamesb{tmp} = [];
for innertmp=1:size(regnames_b,1)
regnamesb{tmp} = [regnamesb{tmp} {regnames_b(innertmp,:)}]; %convert
to STRINGS
end
%-----------------------------------
%now specify source of images (sn*.img) which are in subdir './a' for
session one, subdir './b' for session 2
%for some reason, there is a space at the end of dirname, so need to
deblank
F1{tmp} = spm_get('Files',[deblank(analysedirs(tmp,:)) '/a'],'sn*.img');
%read filenames for session 1
F2{tmp} = spm_get('Files',[deblank(analysedirs(tmp,:)) '/b'],'sn*.img');
%read filenames for session 2
%
%need to create variables when first used, cannot append to a
nonexisting variable as in 'else' part
%in the 'else' part, arguments are appended to account for nop in
analysis
if tmp == 1
grp_type = [2]; %could have specified explicitly below, just
for later changes: model
grp_index = [tmp]; %could have specified explicitly below, just
for later changes: index always 1 (one model)
grp_work_dir = [tmp]; %could have specified explicitly below, just
for later changes: only one working dir (tmp=1)
grp_mfile = [1]; %could have specified explicitly below, just
for later changes: this is the only mfile
grp_nscans = [size(F1{tmp},1) size(F2{tmp},1)]; %determine session
length from number of files
grp_files = {F1{tmp} F2{tmp}}; %store filenames
grp_conditions_nb = [0]; %no conditions
grp_replicated = 0; %no conditions, nor
replicated
grp_conditions = [0]; %same
grp_parametrics_type = {{'none'}};
grp_parametrics = [];
grp_regressors_nb = [1 1]; %each session has
one variable in which all regressors are stored -> 1 1
grp_regressors = [2*(tmp-1)+1 2*(tmp-1)+2]; %the latter are
numbered from 1..2*nop (see at the end of the file)
grp_HF_cut = [120]; %filter
%for the else part, the same comments apply as above; variables are
'growing' to meet number of arguments needet to be specified
else
grp_nscans = [grp_nscans size(F1{tmp},1) size(F2{tmp},1)];
%determine session length from number of files...
grp_files = [grp_files {F1{tmp} F2{tmp}}];
grp_conditions_nb = [grp_conditions_nb 0];
grp_replicated = 0;
grp_conditions = [grp_conditions 0];
grp_parametrics_type = [grp_parametrics_type {'none'}];
grp_parametrics = [];
grp_regressors_nb = [grp_regressors_nb 1 1];
grp_regressors = [grp_regressors 2*(tmp-1)+1 2*(tmp-1)+2];
grp_HF_cut = [grp_HF_cut 120];
end
end
%let's do some memory cleaning
clear regs_a, regnames_a, regnames_b, regs_b;
%---------------------------------------------------------------
% batch variables defined here for analysis 'model'
%---------------------------------------------------------------
analyses = struct( ...
'type', grp_type, ...
'index', grp_index, ...
'work_dir', grp_work_dir, ...
'mfile', grp_mfile ...
);
%---------------------------------------------------------------
type = {'defaults_edit','model','contrasts','headers',...
'means','realignment','normalisation','smooth'};
%---------------------------------------------------------------
work_dir = {grp_workdir};
%---------------------------------------------------------------
% file names are either full pathname or relative to work_dir
mfile = {mfileloc};
%---------------------------------------------------------------
%---------------------------------------------------------------
% batch variables defined here for analysis 'model'
%---------------------------------------------------------------
model(1) = struct( ...
'types', 4, ...
'nsess', 2, ...
'nscans', grp_nscans, ...
'files', {grp_files}, ...
'RT', 4.58, ...
'conditions_nb', grp_conditions_nb, ...
'replicated', grp_replicated, ...
'conditions', grp_conditions, ...
'parametrics_type', {grp_parametrics_type}, ...
'parametrics', [], ...
'regressors_nb', grp_regressors_nb, ...
'regressors', grp_regressors, ...
'global_effects', {'Scaling'}, ...
'HF_fil', 'specify', ...
'HF_cut', grp_HF_cut, ...
'LF_fil', 'hrf', ...
'LF_cut', [], ...
'int_corr', 'none', ...
'stop_writing', 0, ...
'trial_fcon', 0, ...
'now_later', 1 ...
);
%-------------------------------------------
%define regressors here (two succeeding (= 2 sessions) at a time)
for tmp=1:nop
regressors(2*(tmp-1)+1) = struct( ...
'names', {regnamesa{tmp}}, ...
'values', regsa{tmp}...
);
regressors(2*(tmp-1)+2) = struct( ...
'names', {regnamesb{tmp}}, ...
'values', regsb{tmp}...
);
end
%-------------------------------------------
|