JiscMail Logo
Email discussion lists for the UK Education and Research communities

Help for SPM Archives


SPM Archives

SPM Archives


SPM@JISCMAIL.AC.UK


View:

Message:

[

First

|

Previous

|

Next

|

Last

]

By Topic:

[

First

|

Previous

|

Next

|

Last

]

By Author:

[

First

|

Previous

|

Next

|

Last

]

Font:

Proportional Font

LISTSERV Archives

LISTSERV Archives

SPM Home

SPM Home

SPM  2006

SPM 2006

Options

Subscribe or Unsubscribe

Subscribe or Unsubscribe

Log In

Log In

Get Password

Get Password

Subject:

Re: PSC values from SPM Anatomy toolbox

From:

"Simon B. Eickhoff" <[log in to unmask]>

Reply-To:

[log in to unmask]

Date:

Fri, 8 Dec 2006 12:34:48 +0100

Content-Type:

multipart/mixed

Parts/Attachments:

Parts/Attachments

text/plain (138 lines) , se_getMap.m (282 lines) , se_PSC_area.m (66 lines) , se_anatomy.m (955 lines)

Dear Denise,


there was indeed a bug in the current version of the PSC calculation, which causes problems if some of your subjects had NaNs at the respective position. These values were simply thrown away.

Please find attached the revised versions of three routines, which will solve the problem (and also a problem that would arise, if the 2nd level analysis was performed after reslicing the data).

There will be uploaded onto our server in the next few days.


Cheers
Simon

-----------------------------------------

Simon Eickhoff
Institut for Medicine (IME);  Research Center Jülich
Leo-Brandt-Str. 5;  52425  Juelich, Germany
Phone + 49 2461-61-5219 / Fax + 49 2461-61-2820
e-mail: [log in to unmask]  /  [log in to unmask] 





----- Original Message -----
From: Denise Dörfel <[log in to unmask]>
Date: Wednesday, December 6, 2006 4:25 pm
Subject: [SPM] PSC values from SPM Anatomy toolbox

> Dear Simon,
> dear List,
> 
> in the mail below you described how to extract the Percent Signal 
> Change 
> values from the Anatomy toolbox.
> I use the version 1.3c with spm2 and loaded the PCS.mat into the 
> workspace.I have 30 subjects (one session each) and 4 conditions.
> So I should have 4 rows and 30 columns, shouldn't I?
> The problem is, that I just got 14 columns. Where are the values 
> of the 
> other subjects?
> 
> I'm very bad in dealing with Matlab, so maybe you could help.
> 
> Denise.
> 
> 
> 
> Simon B. Eickhoff schrieb:
> >
> > Dear Federico,
> >
> >  
> >
> > the extracted PSC values are saved as a matfile called PSC.mat 
> in the 
> > current working directory.
> >
> >  
> >
> > Just type     load PSC.mat   to get them back into the workspace.
> >
> >
> > The respective variable is called PSC and containes the relevant 
> > values in the following fashion:
> >
> > The rows correspond to the different conditions (same order as 
> in the 
> > plot - in this context I would like to raise the important point 
> > again, that the location of the different conditions in the 
> design 
> > matrix must be identical across subjects !)
> >
> > The columns correspond to subjects/sessions in the order: 
> Sub1Ses1 
> > Sub1Ses2 Sub1Ses3 ... Sub2Ses1 Sub2Ses2 Sub2Ses3 ... Sub3Ses1 
> Sub3Ses2 
> > Sub3Ses3 ... ...
> >
> >
> > Hope this helps
> >
> > Simon
> >
> >  
> >
> > *----- Original Message -----* *From*: Federico Tubaldi 
> > <[log in to unmask]> *Date*: Wednesday, September 6, 2006 7:05 
> pm 
> > *Subject*: [SPM] extract values from SPM Anatomy toolbox
> >
> > > Dear Simon and dear All,
> > >
> > > I use SPM Anatomy toolbox v.1.3c and I'd like extract the plotted
> > > % signal
> > > change values and the error bar values [option: Mean response 
> (group> > analysis)]. I can't see them in matlab workspace. How 
> can I do?
> > >
> > > Thank you.
> > >
> > > --
> > > No virus found in this outgoing message.
> > > Checked by AVG Free Edition.
> > > Version: 7.1.405 / Virus Database: 268.11.7/437 - Release Date:
> > > 04/09/2006
> > >
> >
> >  
> >
> > -----------------------------------------
> >
> > Simon Eickhoff
> > Institut for Medicine (IME); Research Center Jülich
> > Leo-Brandt-Str. 5; 52425 Juelich, Germany
> > Phone + 49 2461-61-5219 / Fax + 49 2461-61-2820
> > e-mail: [log in to unmask] / [log in to unmask]
> >
> 
> -- 
> Denise Doerfel
> Dipl.-Psych.
> 
> Biopsychology
> Dresden University of Technology
> Zellescher Weg 17
> 01069 Dresden
> Germany
> 
> Tel.: 0049 - 351 - 463 33708
> Fax.: 0049 - 351 - 463 37274
> mail: [log in to unmask]
> http://biopsychologie.tu-dresden.de
> 
> 



function getMap(welche,MapName) global st; global MAP; global SPM; global xSPM; global CLUSTER; global group; global defaults xtr = 0; ytr = -4; ztr = +5; switch welche     case 'anat'         load(MapName);         flip = -1;         try, flip = defaults.analyze.flip; defaults.analyze.flip = 0; end         MAP(1).MaxMap = spm_vol([MapName(1:end-8) '.img']);         MAP(1).AnatMask = spm_vol(fullfile(spm('Dir','se_anatomy'),'AnatMask.img'));         MAP(1).Macro = spm_vol(fullfile(spm('Dir','se_anatomy'),'MacroLabels.img'));         MAP(1).MLabels = load('Macro.mat');         for i=1:size(MAP,2)             MAP(i).ref = strrep(MAP(i).ref,'\',filesep);             MAP(i).ref = strrep(MAP(i).ref,'/',filesep);             MAP(i).PMap = spm_vol([spm('Dir','se_anatomy') filesep 'PMaps' filesep spm_str_manip(MAP(i).ref,'t')]);             for side = [-1 1]                 MAP(i).AM(side+2) = mean(MAP(i).allZ(MAP(i).allLR == side));                 tmp = hist(MAP(i).allZ(MAP(i).allLR == side),[0:10]);                 MAP(i).nA{side+2} = tmp(2:end)/sum(tmp)*100;             end         end         if flip ~= -1; defaults.analyze.flip = flip; end              case 'IMAGE'         OLimg = spm_vol(spm_select(1,'image','Select overlay image'));         xSPM = struct('xVOL',{});         xSPM(1).xVOL.M = OLimg.mat; xSPM.xVOL.iM = inv(OLimg.mat);         xSPM.xVOL.DIM = OLimg.dim(1:3); xSPM.xVOL.VOX = [abs(OLimg.mat(1,1)); abs(OLimg.mat(2,2)); abs(OLimg.mat(3,3))];         xSPM.xVOL.orig = spm_input('Is the origin already corrected to AC ?','+1','y/n',[1,2],2);         pmult = spm_input(['Premultiply data by '],'+0','r',1,1);         u = spm_input(['Hight threshold (0 for none)'],'+0','r',0,1); k = 0;         k = spm_input(['Extend threshold (0 for none)'],'+0','r',0,1);         if xSPM.xVOL.orig == 2             xSPM.xVOL.M(1,4) = xSPM.xVOL.M(1,4) + xtr;             xSPM.xVOL.M(2,4) = xSPM.xVOL.M(2,4) + ytr;             xSPM.xVOL.M(3,4) = xSPM.xVOL.M(3,4) + ztr;             try, set(st.mAssign,'ToolTipString','Corrdinates given in anatomical MNI space, orig. MNI coordinates in brackets'); end         end         SPM = struct('title','');         SPM.title = spm_str_manip(OLimg.fname,'rt');         SPM.XYZ = []; SPM.Z = [];         spm_progress_bar('Init',OLimg.dim(3),'Preparing data');         for p = 1:OLimg.dim(3)             d = spm_slice_vol(OLimg,inv(spm_matrix([0 0 -p 0 0 0 1 1 1])),OLimg.dim(1:2),[0, NaN])*pmult;             if any(any(d>=u))                 [i,j] = find(d>u);                 SPM.XYZ = [SPM.XYZ [i'; j'; p*ones(1,size(j,1))]];                 SPM.Z = [SPM.Z d(find(d>u))'];             end             spm_progress_bar('Set',p);         end         if any(isinf(SPM.Z))             SPM.Z(isinf(SPM.Z)) = max(SPM.Z(~isinf(SPM.Z)));             spm('alert!','Infinitive values replace by maximum finite value');         end         spm_progress_bar('Clear')         if numel(SPM.XYZ)>0             A = spm_clusters(SPM.XYZ);             Q = [];             for i = 1:max(A)                 j = find(A == i);                 if length(j) >= k; Q = [Q j]; end             end             SPM.Z = SPM.Z(:,Q);             SPM.XYZ = SPM.XYZ(:,Q);             SPM.XYZmm = xSPM.xVOL.M * [SPM.XYZ; ones(1,size(SPM.XYZ,2))]; SPM.XYZmm = SPM.XYZmm(1:3,:);             SPM.XYZp = [round(SPM.XYZmm(1,:)-MAP(1).MaxMap.mat(1,4)); round(SPM.XYZmm(2,:)-MAP(1).MaxMap.mat(2,4)); round(SPM.XYZmm(3,:)-MAP(1).MaxMap.mat(3,4))];             SPM.u = u; SPM.k = k;         end     case 'SPM'         st.SPM = spm('FnBanner');         switch st.SPM;             case 'SPM99'                 [SPM,VOL,xX,xCon,xSDM] = spm_getSPM;                 xSPM = struct('xVOL',VOL,'xX',xX,'xCon',xCon,'Vbeta',xSDM.Vbeta);                 load(fullfile(SPM.swd,'SPMcfg.mat'));                 SPM.FWHM = VOL.FWHM;                 SPM.VOX = VOL.VOX';                 xSPM.xY.VY = VY;                 xSPM.xsDes = xsDes;                 SPM.S = xSDM.S;             otherwise                 [xSPM,SPM] = spm_getSPM;                 if isfield(xSPM.xVol,'mat');                     xSPM.xVol.M = xSPM.xVol.mat                 end                 xSPM.xVol.VOX = [abs(xSPM.xVol.M(1,1)) abs(xSPM.xVol.M(2,2)) abs(xSPM.xVol.M(3,3))];                 xSPM.xVOL = xSPM.xVol;                 xSPM = rmfield(xSPM,'xVol');         end         if numel(SPM.XYZ)>0             xSPM.xVOL.orig = spm_input('Is the origin already corrected to AC ?','+1','y/n',[1,2],2);             if xSPM.xVOL.orig == 2                 xSPM.xVOL.M(1,4) = xSPM.xVOL.M(1,4) + xtr;                 xSPM.xVOL.M(2,4) = xSPM.xVOL.M(2,4) + ytr;                 xSPM.xVOL.M(3,4) = xSPM.xVOL.M(3,4) + ztr;                 SPM.XYZmm = xSPM.xVOL.M * [SPM.XYZ; ones(1,size(SPM.XYZ,2))]; SPM.XYZmm = SPM.XYZmm(1:3,:);                 try, set(st.mAssign,'ToolTipString','Corrdinates given in anatomical MNI space, orig. MNI coordinates in brackets'); end             end             SPM.XYZp = [round(SPM.XYZmm(1,:)-MAP(1).MaxMap.mat(1,4)); round(SPM.XYZmm(2,:)-MAP(1).MaxMap.mat(2,4)); round(SPM.XYZmm(3,:)-MAP(1).MaxMap.mat(3,4))];         end     case 'cluster'         [A] = spm_clusters(SPM.XYZ);         CLUSTER = struct('Z',{},'XYZ',{},'XYZmm',{},'voxel',{},'nrMax',{},'maxZ',{},'maxM',{});         Buffer = struct('Z',{},'XYZ',{},'XYZmm',{},'voxel',{},'nrMax',{},'maxZ',{},'maxM',{});         mx = zeros(1,size(unique(A),2));         for cl=1: size(unique(A),2)             CLUSTER(cl).Z = SPM.Z(:,A == cl);             CLUSTER(cl).XYZ = SPM.XYZ(:,A == cl);             CLUSTER(cl).XYZmm = SPM.XYZmm(:,A == cl);             CLUSTER(cl).XYZp = [CLUSTER(cl).XYZmm(1,:)-MAP(1).MaxMap.mat(1,4); CLUSTER(cl).XYZmm(2,:)-MAP(1).MaxMap.mat(2,4); CLUSTER(cl).XYZmm(3,:)-MAP(1).MaxMap.mat(3,4)];             [CLUSTER(cl).voxel CLUSTER(cl).maxZ CLUSTER(cl).maxM dummy] = spm_max(SPM.Z(:,A == cl),SPM.XYZ(:,A == cl));             if isempty(max(CLUSTER(cl).maxZ)); % binary image                 CLUSTER(cl).voxel = prod(size(find(A == cl)));             end             CLUSTER(cl).nrMax = size(CLUSTER(cl).maxZ,2);             mx(cl) = CLUSTER(cl).voxel(1);         end         CLUSTER(1).VOL = zeros(MAP(1).MaxMap.dim(1:3));         [B,INDEX] = sort(mx); INDEX = fliplr(INDEX); CLUSTER = CLUSTER(INDEX);         for i=1:size(unique(A),2); RIX(i) = find(INDEX == i); end         for i=1:size(A,2)             try                 CLUSTER(1).VOL([SPM.XYZp(1,i)-1:SPM.XYZp(1,i)+1],...                     [SPM.XYZp(2,i)-1:SPM.XYZp(2,i)+1],...                     [SPM.XYZp(3,i)-1:SPM.XYZp(3,i)+1]) = RIX(A(i));             end         end     case 'groupStat'         st.SPM = spm('FnBanner');         group = [];         def = spm_input('Load an existing group ?','+1','y/n',[1,0],1);         if def == 0 % Create new group             cwd = pwd;             nsubjects = spm_input('Number of subjects','+1','i',1);             group = struct('xSPM',{});             for i=1:nsubjects                 a = spm_select(1,'^SPM\.mat$',['Select SPM.mat for subject ' num2str(i)]);                 load(a);                 st.SPM = spm('FnBanner');                 switch st.SPM;                     case 'SPM99'                         for ii=1:size(Vbeta,1)                             try                                 f = cell2struct(Vbeta(ii,1),'name',1);                                 group(i).xSPM.Vbeta(ii) = spm_vol([spm_str_manip(a,'H') '/' f.name]);                             catch                                 f = struct('name',Vbeta{ii,1})                                 group(i).xSPM.Vbeta(ii) = spm_vol([spm_str_manip(a,'H') '/' f.name]);                             end                         end                         group(i).xSPM.xX = xX;                         group(i).xSPM.Sess = Sess;                     otherwise                         for ii=1:size(SPM.Vbeta,2)                             group(i).xSPM.Vbeta(ii) = spm_vol([spm_str_manip(a,'H') '/' SPM.Vbeta(1,ii).fname]);                         end                         group(i).xSPM.xX = SPM.xX;                         group(i).xSPM.VY = SPM.xY.VY;                         group(i).xSPM.XYZ = SPM.xVol.XYZ;                         group(i).xSPM.xVOL.M = SPM.xVol.M;                         group(i).xSPM.xVOL.iM = inv(SPM.xVol.M);                         group(i).xSPM.xCon = SPM.xCon;                         group(i).xSPM.Sess = SPM.Sess;                         group(i).xSPM.swd = SPM.swd;                 end             end             load(spm_select(1,'^SPM\.mat$',['Select SPM.mat for the 2nd level analysis']));             group(1).xSPM.xVOL.orig = spm_input('Is the origin already corrected to AC ?','+1','y/n',[1,2],2);             if group(1).xSPM.xVOL.orig == 2                 for i=1:nsubjects                     group(i).xSPM.xVOL.M(1,4) = group(i).xSPM.xVOL.M(1,4) + xtr;                     group(i).xSPM.xVOL.M(2,4) = group(i).xSPM.xVOL.M(2,4) + ytr;                     group(i).xSPM.xVOL.M(3,4) = group(i).xSPM.xVOL.M(3,4) + ztr;                     try, set(st.mAssign,'ToolTipString','Corrdinates given in anatomical MNI space, orig. MNI coordinates in brackets'); end                     group(i).xSPM.XYZmm = group(i).xSPM.xVOL.M * [group(i).xSPM.XYZ; ones(1,size(group(i).xSPM.XYZ,2))];                     group(i).xSPM.XYZmm = group(i).xSPM.XYZmm(1:3,:);                 end             end             name = spm_input('Name of group','!+1','s','GroupAnalysis');             cd(cwd);             save(deblank(fullfile(pwd,name)),'group','xSPM','SPM')         else % load existing group             load(spm_select(1,'mat',['Select information about the subjects']));             xSPM.xVOL = group(1).xSPM.xVOL;         end         spm('alert!','Statistical information loaded');     case 'group'         st.SPM = spm('FnBanner');         def = spm_input('Load an existing group ?','+1','y/n',[1,0],1);         if def == 0 % Create new group             cwd = pwd;             nsubjects = spm_input('Number of subjects','+1','i',1);             group = struct('xSPM',{});             for i=1:nsubjects                 a = spm_select(1,'^SPM\.mat$',['Select SPM.mat for subject ' num2str(i)]);                 load(a);                 switch st.SPM;                     case 'SPM99'                         for ii=1:size(Vbeta,1)                             try                                 f = cell2struct(Vbeta(ii,1),'name',1);                                 group(i).xSPM.Vbeta(ii) = spm_vol([spm_str_manip(a,'H') '/' f.name]);                             catch                                 f = struct('name',Vbeta{ii,1})                                 group(i).xSPM.Vbeta(ii) = spm_vol([spm_str_manip(a,'H') '/' f.name]);                             end                         end                         group(i).xSPM.xX = xX;                         group(i).xSPM.Sess = Sess;                     otherwise                         for ii=1:size(SPM.Vbeta,2)                             group(i).xSPM.Vbeta(ii) = spm_vol([spm_str_manip(a,'H') '/' SPM.Vbeta(1,ii).fname]);                         end                         group(i).xSPM.xX = SPM.xX;                         group(i).xSPM.VY = SPM.xY.VY;                         group(i).xSPM.XYZ = SPM.xVol.XYZ;                         group(i).xSPM.xVOL.M = SPM.xVol.M;                         group(i).xSPM.xVOL.iM = inv(SPM.xVol.M);                         group(i).xSPM.xCon = SPM.xCon;                         group(i).xSPM.Sess = SPM.Sess;                         group(i).xSPM.swd = SPM.swd;                 end             end             spm('alert"',{'Please specify now the second level statistic'},'Next Step',0,1);             se_getMap('SPM','');             if xSPM.xVOL.orig == 2                 for i=1:nsubjects                     group(i).xSPM.xVOL.M(1,4) = group(i).xSPM.xVOL.M(1,4) + xtr;                     group(i).xSPM.xVOL.M(2,4) = group(i).xSPM.xVOL.M(2,4) + ytr;                     group(i).xSPM.xVOL.M(3,4) = group(i).xSPM.xVOL.M(3,4) + ztr;                     try, set(st.mAssign,'ToolTipString','Corrdinates given in anatomical MNI space, orig. MNI coordinates in brackets'); end                     group(i).xSPM.XYZmm = group(i).xSPM.xVOL.M * [group(i).xSPM.XYZ; ones(1,size(group(i).xSPM.XYZ,2))];                     group(i).xSPM.XYZmm = group(i).xSPM.XYZmm(1:3,:);                 end             end             name = spm_input('Name of group','!+1','s','GroupAnalysis');             cd(cwd);             save(deblank(fullfile(pwd,name)),'group','xSPM','SPM')         else % load existing group             load(spm_select(1,'mat',['Select information about the subjects']));             spm('alert"',{'Please specify now the second level statistic'},'Next Step',0,1);             se_getMap('SPM','');         end end
function [psc] = se_PSC_area(xSPM,targets) global st; global MAP; global SPM; global CLUSTER; global displayType; global group % define number of sessions etc. switch st.SPM;     case 'SPM99'         sess = size(xSPM.Sess,2); %number of sessions         sps = size(xSPM.Sess{1}.row,2); %scans per session         regressors = size(xSPM.Sess{1}.col,2); %number of regressors per session (incl. movement regressors)         allreg = (regressors);         condSeq = [1:regressors];     otherwise         sess = size(xSPM.Sess,2); %number of sessions         sps = size(xSPM.Sess(1).row,2); %scans per session         regressors = size(group(1).xSPM.Sess(1).Fc,2); %number of regressors per session (incl. movement regressors)         allreg = max(xSPM.Sess(1).col);         condSeq =[];         for i=1:regressors             condSeq = [condSeq xSPM.Sess(1).Fc(i).i(1)];         end end PSC = [];     xyz = xSPM.xVOL.iM*[targets;ones(1,size(targets,2))];     betaAll = [];     for i = 1:length(xSPM.Vbeta)      betaAll = [betaAll spm_sample_vol(xSPM.Vbeta(i),xyz(1,:),xyz(2,:),xyz(3,:),0)];     end     betaAll = reshape(betaAll,size(targets,2),length(xSPM.Vbeta));     dimBeta = size(betaAll,2); for tar = 1:size(targets,2)     beta = betaAll(tar,:);     for c = 1:size(condSeq,2)         k = condSeq(c);      seq = []; for i = 1:sess; seq = [seq (i-1)*allreg+k]; end; s = 0; for i = seq, s = s+1; beta_xyz(c,s) = beta(i);         signChg(1:sps) = beta_xyz(c,s)*xSPM.xX.xKXs.X(((s-1)*sps+1):(s*sps),i);      if beta_xyz(c,s)>0 delta(c,s) = max(signChg); % positive signal change      else delta(c,s) = min(signChg); % negative signal change      end; sMSI(s) = beta(dimBeta-(sess-s)); PSCtmp(c,s) = (delta(c,s)/sMSI(s))*100; % k = konditions, s = sessions end;     end          PSC = [PSC PSCtmp]; end      psc = struct('beta',beta_xyz,'delta',delta,'sMSI',sMSI,'PSC',PSC,'number',size(targets,2),'Sessions',size(condSeq,2));                 %-Reset title %----------------------------------------------------------------------- spm('Pointer','Arrow')
function se_anatomy(op,varargin) global st; global MAP; global SPM; global xSPM; global CLUSTER; global displayType; global group global defaults; if strncmp(op,'init',4) & prod(size(op))>4;     clear global MAP SPM xSPM CLUSTER group     fg = se_figure('getWin','Graphics');     delete(fg)     [Finter,Fgraph,CmdLine] = spm('FnUIsetup','Display',0);     SPMid = spm('FnBanner',mfilename,'2.15');     spm_help('!ContextHelp',[mfilename,'.m']);     % get the image's filename {P}     %-----------------------------------------------------------------------     MapName = spm_select(1,'mat',['Select Map'],[],spm('Dir','se_anatomy'),'MPM.',1);     se_getMap('anat',MapName);     P = deblank([MapName(1:end-8) '.img']);     fg = se_figure('GetWin','Graphics');     if isempty(fg), error('Can''t create graphics window'); end     se_figure('Clear','Graphics');     se_orthviews('Reset');     switch spm('FnBanner')         case 'SPM99'             se_orthviews('Image', P, [0.0 0.22 1 .8]); % Image appears         otherwise             se_orthviews('Image', P, [0.0 0.2 1 .8]); % Image appears     end     if strcmp(op,'initO');         st.prog = 'OV';     elseif strcmp(op,'initG');         st.prog = 'GR';     elseif strcmp(op,'initP');         st.prog = 'PX';     elseif strcmp(op,'initA');         st.prog = 'AR';     end     se_anatomy('init',fg);     return; end; if ~strcmp(op,'init') & ~strcmp(op,'reset') & isempty(st.vols{1}), my_reset; warning('Lost all the image information'); return; end; if strcmp(op,'shopos'),     % The position of the crosshairs has been moved.     %-----------------------------------------------------------------------     if strcmp(st.prog,'PX')         fg = se_figure('Findwin','Graphics');         if xSPM.xVOL.orig == 2             set(st.mp,'String',sprintf('%.1f %.1f %.1f',se_orthviews('pos')+[0;+4;-5]));         else             set(st.mp,'String',sprintf('%.1f %.1f %.1f',se_orthviews('pos')));         end         [loc, aVox] = hier_area;         set(st.in,'String',loc);         CLUSTER.XYZmm = se_orthviews('pos');         CLUSTER.XYZp = se_orthviews('pos',1);         [MLev, VLev, m_anz] = se_overlap(1);         set(st.mAssign,'String',MLev);     else         if isfield(st,'mp'),             fg = se_figure('Findwin','Graphics');             if any(findobj(fg) == st.mp),                 set(st.mp,'String',sprintf('%.1f %.1f %.1f',se_orthviews('pos')));                 pos = se_orthviews('pos',1);                 set(st.vp,'String',sprintf('%.1f %.1f %.1f',pos));                 [loc, aVox] = hier_area;                 set(st.in,'String',loc);                 if prod(size(CLUSTER))>0                     fDa = 0;                     try ,fDa = CLUSTER(1).VOL(round(pos(1)),round(pos(2)),round(pos(3))); end                     if fDa;                         if CLUSTER(1).VOL(round(pos(1)),round(pos(2)),round(pos(3))) ~= get(st.cluster,'Value')-1;                             set(st.cluster,'Value',1+CLUSTER(1).VOL(round(pos(1)),round(pos(2)),round(pos(3))));                             clu_title;                         end                     else                         try; delete(st.FX); end                         try; se_anatomy('clearRender'); end                         set(st.titel,'String','');                         if ~strcmp(st.prog,'AR')                             set(st.vAssign,'String',''); set(st.mAssign,'String','');                         end                         set(st.cluster,'Value',1)                     end                 end             else,                 st.Callback = ';'; rmfield(st,{'mp','vp','in'});             end;         else,             st.Callback = ';';         end;     end     return; end; if strcmp(op,'clearRender')     st.Fgraph = findobj(get(0,'Children'),'Flat','Tag','xSATB');     if ~isempty(st.Fgraph)         try             set(0,'CurrentFigure',st.Fgraph);             clf         catch             st.Fgraph = [];         end     end     ax=axes('Parent',st.Fgraph,'units','normalized','Position',[0, 0, 1, 1],'Visible','off'); image(0,'Parent',ax); set(ax,'YTick',[],'XTick',[]); end if strcmp(op,'setposmm'),     % Move the crosshairs to the specified position     %-----------------------------------------------------------------------     if isfield(st,'mp'),         fg = se_figure('Findwin','Graphics');         if any(findobj(fg) == st.mp),             pos = sscanf(get(st.mp,'String'), '%g %g %g');             if strcmp(st.prog,'PX') & xSPM.xVOL.orig == 2                 pos = pos+[0;-4;5];                 se_orthviews('Reposition',pos);             else                 se_orthviews('Reposition',pos);             end         end;     end;     return; end; if strcmp(op,'setposclust'),     % Move the crosshairs to the specified cluster     %--------------------------------------------------------------------------------------------------------------------------------     fg = se_figure('Findwin','Graphics');     poscl = get(st.cluster,'Value')-1;     if poscl > 0         pos = [round(mean(CLUSTER(poscl).XYZmm(1,:)));             round(mean(CLUSTER(poscl).XYZmm(2,:)));             round(mean(CLUSTER(poscl).XYZmm(3,:)))];         set(st.cluster,'Value',poscl+1)         clu_title;         set(st.maxima,'Value',2)         se_anatomy('setposmax');     end;     if get(st.zoomer,'Value')>1         se_anatomy('zoom_in')     end     return; end; if strcmp(op,'setposmax'),     % Move the crosshairs to the specified position     %--------------------------------------------------------------------------------------------------------------------------------     fg = se_figure('Findwin','Graphics');     posmx = get(st.maxima,'Value')-1;     poscl = get(st.cluster,'Value')-1;     if posmx > 0         [B,INDEX] = sort(CLUSTER(poscl).maxZ);         posmx = size(B,2)+1-posmx;         if CLUSTER(poscl).maxZ == 0             pos = xSPM.xVOL.M * [CLUSTER(poscl).maxM(1);...                 CLUSTER(poscl).maxM(2);...                 CLUSTER(poscl).maxM(3); 1]; %-Reorientation matrix         else             pos = xSPM.xVOL.M * [CLUSTER(poscl).maxM(1,INDEX(posmx));...                 CLUSTER(poscl).maxM(2,INDEX(posmx));...                 CLUSTER(poscl).maxM(3,INDEX(posmx)); 1]; %-Reorientation matrix             pos = pos(1:3);         end         if size(CLUSTER(poscl).XYZ,2) ~= 1             se_orthviews('Reposition',pos);         end     end end; if strcmp(op,'setposarea'),     poscl = get(st.cluster,'Value')-1;     if prod(size(group))<2; se_getMap('groupStat'); end     se_figure('Clear','Interactive');     if isfield(st,'hAx');         delete(st.hAx); st = rmfield(st,'hAx');     end     se_orthviews('rmblobs',1);     PSC = []; GV = [MAP.GV];     locNr = get(st.cluster,'Value')-1;     check = spm_input(['Process area ' MAP(locNr).name ' ?'],'+1','y/n',[1,2],1);     if check == 1         side = MAP(1).orient*spm_input_ui('Side','!+1','b','Left|Right',[-1 1],1,'Select side');         mode = spm_input_ui('Voxel','!+1','b','All assigned|Highest probability',[2 1],2,'Select mode');         [nvox, QQ, targets] = se_defineVoxel(side,locNr,mode);         XYZ = MAP(locNr).XYZ(:,QQ);         Z = MAP(locNr).Z(QQ);         se_orthviews('addcolouredblobs',1,XYZ,Z,MAP(1).MaxMap.mat,[1 0 0]);         se_orthviews('Reposition',mean(targets'));         spm_progress_bar('Init',prod(size(group)),'Subjects completed');         for i=1:prod(size(group))             psc(i) = se_PSC_area(group(i).xSPM,targets);             PSC = [PSC mean(psc(i).PSC')'];             spm_progress_bar('Set',i);         end         spm_progress_bar('Clear')         nvox = psc(i).number;         regressors = size(PSC,1)         [PSCmin PSCmax Ay] = displayPSC(PSC,regressors,[0.51 0.17 0.46 0.335],1);         text(PSCmin,Ay-10,sprintf('Area: %s overlap %s (%s voxel)',MAP(locNr).name,int2str(min(Z)/25),int2str(nvox)),'FontSize',12);     else         se_figure('Clear','Interactive');         return     end end; if strcmp(op,'setposvx'),     % Move the crosshairs to the specified position     %-----------------------------------------------------------------------     if isfield(st,'mp'),         fg = se_figure('Findwin','Graphics');         if any(findobj(fg) == st.vp),             pos = sscanf(get(st.vp,'String'), '%g %g %g');             if length(pos)~=3,                 pos = se_orthviews('pos',1);             end;             tmp = st.vols{1}.premul*st.vols{1}.mat;             pos = tmp(1:3,:)*[pos ; 1];             se_orthviews('Reposition',pos);         end;     end;     return; end; if strcmp(op,'addblobs'),     if st.prog == 'AR'     else         % Add blobs to the image - in full colour         se_figure('Clear','Interactive');         if st.prog == 'GR'             try                 group(1);                 spm('alert"',{'Please specify the secound level statistic'},'Next Step',0,1);                 se_getMap('SPM','');             catch                 se_getMap('group','');             end         elseif st.prog == 'PX'             spm('alert!','No activation map in quick-check mode',sqrt(-1));         elseif st.prog == 'OV'             OLwhat = spm_input_ui('Overlay','!+1','b','SPM|Image',[1 2],1,'Select mode');             if OLwhat == 1                 se_getMap('SPM','');             else                 se_getMap('IMAGE','');             end         else             se_getMap('SPM','');         end         if numel(SPM.XYZ)>0             se_getMap('cluster','')             c = spm_input('Colour',1,'m','Red -> White colormap|Red blobs|Yellow blobs|Green blobs|Cyan blobs|Blue blobs|Magenta blobs',[1 2 3 4 5 6 7],1);             if c > 1                 colours = [1 0 0;1 1 0;0 1 0;0 1 1;0 0 1;1 0 1];                 se_orthviews('addcolouredblobs',1,SPM.XYZ,SPM.Z,xSPM.xVOL.M,colours(c-1,:));             else                 se_orthviews('AddBlobs',1,SPM.XYZ,SPM.Z,xSPM.xVOL.M);             end             set(st.blobber,'String','Remove Blobs','Callback','se_anatomy(''rmblobs'');');             set(st.cluster,'String',str2mat(getCluster(1)));             se_orthviews('Redraw');         else             spm('alert"',{'No superthreshold voxel !'},'',0,1);         end     end end; if strcmp(op,'rmblobs'),     % Remove all blobs from the images     se_orthviews('rmblobs',1);     set(st.blobber,'String','Add Blobs','Callback','se_anatomy(''addblobs'');');     set(st.cluster,'String','No activation cluster found','Value',1);     set(st.titel,'String','');     try; delete(st.FX); end     try; se_anatomy('clearRender'); end     if ~(st.prog == 'AR')         set(st.vAssign,'String','');         set(st.mAssign,'String','');     end end; if strcmp(op,'window'),     op = get(st.win,'Value');     if op == 1,         se_orthviews('window',1);     else,         se_orthviews('window',1,spm_input('Range','+1','e','',2));     end; end; if strcmp(op,'reset'),     my_reset; end; if strcmp(op,'exit'),     my_reset;     Anatomy('select'); end; if strcmp(op,'zoom_in'),     op = get(st.zoomer,'Value');     if op==1,         se_orthviews('resolution',1);         se_orthviews('MaxBB');     else,         vx = sqrt(sum(st.Space(1:3,1:3).^2));         vx = vx.^(-1);         pos = se_orthviews('pos');         pos = st.Space\[pos ; 1];         pos = pos(1:3)';         if op == 2, st.bb = [pos-80*vx ; pos+80*vx] ; se_orthviews('resolution',1);         elseif op == 3, st.bb = [pos-40*vx ; pos+40*vx] ; se_orthviews('resolution',.5);         elseif op == 4, st.bb = [pos-20*vx ; pos+20*vx] ; se_orthviews('resolution',.25);         elseif op == 5, st.bb = [pos-10*vx ; pos+10*vx] ; se_orthviews('resolution',.125);         else , st.bb = [pos- 5*vx ; pos+ 5*vx] ; se_orthviews('resolution',.125);         end;     end;     return; end; if strcmp(op,'Info'),     st.mode = 1;     if isfield(st,'hAx');         delete(st.hAx);         st = rmfield(st,'hAx');     end     set(st.titel,'Visible','on');     set(st.mAssign,'Visible','on');     set(st.vAssign,'Visible','on');     set(st.clustBox,'Visible','on');     set(st.maxBox,'Visible','on');     set(st.cluster,'Visible','on');     set(st.maxima,'Visible','on');     se_figure('Clear','Interactive'); end if strcmp(op,'SVC'),     if strcmp(spm('FnBanner'),'SPM99')         h = spm('alert*','Only available for SPM2 and SPM5');     else         if strcmp(get(st.blobber,'String'),'Remove Blobs') & isfield(SPM,'STAT')             Msk = spm_select(1,'image','Image defining search volume',[],pwd,'ROI');             D = spm_vol(Msk);             str = sprintf('image mask: %s',spm_str_manip(Msk,'a30'));             VOX = sqrt(sum(D.mat(1:3,1:3).^2));             FWHM = SPM.FWHM.*(SPM.VOX./VOX);             XYZm = inv(D.mat) * (xSPM.xVOL.M(1:3,:)*[xSPM.xVOL.XYZ; ones(1, xSPM.xVOL.S)]);             k = find(spm_sample_vol(D, XYZm(1,:), XYZm(2,:), XYZm(3,:),0) > 0);             SPM.XYZ = xSPM.xVOL.XYZ(:,k);             SPM.S = length(k);             SPM.R = spm_resels(FWHM,D,'I');             SPM.Z = Inf;             for i = SPM.Ic                 SPM.Z = min(SPM.Z,spm_get_data(xSPM.xCon(i).Vspm,SPM.XYZ));             end             switch SPM.STAT                 case 'T'                     SPM.Ps = (1 - spm_Tcdf(SPM.Z,SPM.df(2))).^SPM.n;                 case 'P'                     SPM.Ps = (1 - SPM.Z).^SPM.n;                 case 'F'                     SPM.Ps = (1 - spm_Fcdf(SPM.Z,SPM.df)).^SPM.n;             end             SPM.u = -Inf; SPM.k = 0;             if SPM.STAT ~= 'P'                 str = 'FWE|none';                 switch spm_input('p value adjustment to control','+1','b',str,[],1)                     case 'FWE' % family-wise false positive rate                         u = spm_input('p value (family-wise error)','+0','r',0.05,1,[0,1]);                         SPM.u = spm_uc(u,SPM.df,SPM.STAT,SPM.R,SPM.n,SPM.S);                     otherwise %-NB: no adjustment                         SPM.u = spm_input(['threshold {',SPM.STAT,' or p value}'],'+0','r',0.001,1);                         if SPM.u <= 1; SPM.u = spm_u(SPM.u^(1/SPM.n),SPM.df,SPM.STAT); end                 end             elseif STAT == 'P'                 SPM.u = spm_input(['p value threshold for PPM'],'+0','r',.95,1);             end % (if STAT)             Q = find(SPM.Z > SPM.u);             SPM.Z = SPM.Z(:,Q);             SPM.XYZ = SPM.XYZ(:,Q);             if isempty(Q)                 warning(sprintf('No voxels survive height threshold u=%0.2g',u))             end             if ~isempty(SPM.XYZ)                 SPM.k = spm_input('& extent threshold {voxels}','+1','r',0,1,[0,Inf]);                 A = spm_clusters(SPM.XYZ); Q = [];                 for i = 1:max(A); j = find(A == i); if length(j) >= SPM.k; Q = [Q j]; end; end                 SPM.Z = SPM.Z(:,Q);                 SPM.XYZ = SPM.XYZ(:,Q);                 if isempty(Q); warning(sprintf('No voxels survive extent threshold k=%0.2g',k)); end             end             SPM.XYZmm = xSPM.xVOL.M * [SPM.XYZ; ones(1,size(SPM.XYZ,2))]; SPM.XYZmm = SPM.XYZmm(1:3,:);             SPM.XYZp = [round(SPM.XYZmm(1,:)-MAP(1).MaxMap.mat(1,4)); round(SPM.XYZmm(2,:)-MAP(1).MaxMap.mat(2,4)); round(SPM.XYZmm(3,:)-MAP(1).MaxMap.mat(3,4))];             if numel(SPM.XYZ)>0                 se_getMap('cluster','')                 c = spm_input('Colour',1,'m','Red blobs|Yellow blobs|Green blobs|Cyan blobs|Blue blobs|Magenta blobs',[1 2 3 4 5 6],1);                 colours = [1 0 0;1 1 0;0 1 0;0 1 1;0 0 1;1 0 1];                 se_orthviews('rmblobs',1);                 se_orthviews('addcolouredblobs',1,SPM.XYZ,SPM.Z,xSPM.xVOL.M,colours(c,:));                 set(st.cluster,'String',str2mat(getCluster(1)));             else                 spm('alert"',{'No superthreshold voxel !'},'',0,1);             end         else             h = spm('alert*','No activation map loaded','SVC not possible');         end     end end if strcmp(op,'Plot'),     se_figure('clear','Interactive')     if strcmp(get(st.blobber,'String'),'Remove Blobs') & isfield(SPM,'STAT')         try; delete(st.FX); end         try; se_anatomy('clearRender'); end         xyzp = round(se_orthviews('pos',1));         fDa = 0;, try ,fDa = CLUSTER(1).VOL((xyzp(1)),(xyzp(2)),(xyzp(3))); end         if 0; fDa             definition = spm_input('Process whole cluster ?','+1','y/n',[1,2],2);             if definition == 1                 xyz = xSPM.xVOL.M*[CLUSTER(fDa).XYZ;ones(1,size(CLUSTER(fDa).XYZ,2))];             else                 xyz = [se_orthviews('pos'); 1];             end         else             definition = 2;             xyz = [se_orthviews('pos'); 1];         end         se_graph(SPM,xSPM,xyz,definition)     else         h = spm('alert*','No activation map loaded');     end end if strcmp(op,'Tab'),     if strcmp(get(st.blobber,'String'),'Remove Blobs') & strcmp(st.prog,'OV')         try             thres = strrep(SPM.thresDef,'0.','');, thres = strrep(thres,'(','-'); thres = strrep(thres,')',''); thres = strrep(thres,'p<','_p'); thres = strrep(thres,'P>','_P');         catch             thres = strrep(num2str(5.231,'%2.1f'),'.','-');         end         filename = [strrep(SPM.title,' ','_') strrep(thres,' ','') '.txt'];         filename = strrep(filename,'>','vs'); filename = strrep(filename,'<','vs');         filename = strrep(filename,')','-'); filename = strrep(filename,'(','-');         filename = strrep(filename,'/','-'); filename = strrep(filename,'\','-');         filename = fullfile(pwd,filename);         if strcmp(computer,'PCWIN')             fid = fopen(filename,'wt');         else             fid = fopen(filename,'w+');         end         for poscl = 1:size(CLUSTER,2)             se_tabelate(poscl,fid)             fprintf(fid,repmat('\n',1,5));         end         status = fclose(fid);         spm('alert"',{'Results saved to file'; spm_str_manip(filename,'t'); 'in path'; pwd});     else         h = spm('alert*','No activation map loaded');     end end if strcmp(op,'PSCG'),     try         group(1);     catch         se_anatomy('addblobs')     end     PSC = [];     xyzp = round(se_orthviews('pos',1));     fDa = 0;, try ,fDa = CLUSTER(1).VOL((xyzp(1)),(xyzp(2)),(xyzp(3))); end     % if fDa;     % PSCmode = spm_input('Which mode ?', '!+1', 'm','Single voxel|Cluster by area|Cluster',[1 2 4],1);     % else     PSCmode = 1;     % end     switch PSCmode         case 1 % Single voxel             targets = round(se_orthviews('pos'));         case 2 % Cluster by area             cl = (get(st.cluster,'Value')-1); GV = [MAP.GV];             tmp = CLUSTER(cl).XYZp; tms = sign(CLUSTER(cl).XYZmm); clear gtmp;             for xbx = 0:xSPM.xVOL.VOX(1)-1, for ybx = 0:xSPM.xVOL.VOX(2)-1, for zbx = 0:xSPM.xVOL.VOX(3)-1                         if exist('gtmp')                             gtmp = [gtmp(1,:) tmp(1,:)-(tms(1,:)*xbx);...                                 gtmp(2,:) tmp(2,:)-(tms(2,:)*ybx);...                                 gtmp(3,:) tmp(3,:)-(tms(3,:)*zbx)];                         else                             gtmp = [tmp(1,:)-(tms(1,:)*xbx);...                                 tmp(2,:)-(tms(2,:)*ybx);...                                 tmp(3,:)-(tms(3,:)*zbx)];                         end                     end, end, end             Msk = spm_sample_vol(MAP(1).AnatMask,gtmp(1,:),gtmp(2,:),gtmp(3,:),0);             Volume = spm_sample_vol(MAP(1).MaxMap,gtmp(1,:),gtmp(2,:),gtmp(3,:),0); % Corresponding voxel + next towards origin in all directions             VLev = {}; vp = [];             for v=1:size(MAP,2)                 if any(Volume(Msk == 2) == GV(v)), vp = [vp; size(find(Volume(Msk == 2) == GV(v)),2) v 2]; end                 if any(Volume(Msk == 1) == GV(v)), vp = [vp; size(find(Volume(Msk == 1) == GV(v)),2) v 1]; end             end, vp = sortrows(vp);             if ~any(vp); spm('alert!','No areas found at the specified positions',sqrt(-1)); return; end             selec = []; sel = []; vp = sortrows(vp); lr = [];             for v=(size(vp,1)):-1:1                 if (100*vp(v,1)/(CLUSTER(cl).voxel(1)*prod(xSPM.xVOL.VOX))) >= 5                     if vp(v,3) == -1;                         selec = [selec '|' ['left ' MAP(vp(v,2)).name] ': ' int2str((100*vp(v,1)/(CLUSTER(cl).voxel(1)*prod(xSPM.xVOL.VOX)))) '%']; sel = [sel vp(v,2)]; lr = [lr vp(v,3)];                     else                         selec = [selec '|' ['right ' MAP(vp(v,2)).name] ': ' int2str((100*vp(v,1)/(CLUSTER(cl).voxel(1)*prod(xSPM.xVOL.VOX)))) '%']; sel = [sel vp(v,2)]; lr = [lr vp(v,3)];                     end                 end             end             choice = spm_input('Select area ', '!+1', 'm',selec,[1:size(sel,2)],1); locNr = sel(choice);             pxyz = round(se_orthviews('pos')); onXYZ = find(SPM.XYZmm(1,:) == pxyz(1) & SPM.XYZmm(2,:) == pxyz(2) & SPM.XYZmm(3,:) == pxyz(3));             A = spm_clusters(SPM.XYZ); Q = find(A == A(onXYZ));             xx = round(SPM.XYZmm(1,Q)-MAP(1).MaxMap.mat(1,4)); yy = round(SPM.XYZmm(2,Q)-MAP(1).MaxMap.mat(2,4)); zz = round(SPM.XYZmm(3,Q)-MAP(1).MaxMap.mat(3,4));             Q = Q(spm_sample_vol(MAP(1).MaxMap,xx,yy,zz,0) == MAP(locNr).GV & ...                 spm_sample_vol(MAP(1).AnatMask,xx,yy,zz,0) == lr(choice));         case 4             A = spm_clusters(SPM.XYZ);             pxyz = round(se_orthviews('pos')); onXYZ = find(SPM.XYZmm(1,:) == pxyz(1) & SPM.XYZmm(2,:) == pxyz(2) & SPM.XYZmm(3,:) == pxyz(3));             Q = find(A == A(onXYZ));     end     if PSCmode > 1         targets = SPM.XYZmm(:,Q);     end     spm_progress_bar('Init',prod(size(group)),'Subjects completed');     for i=1:prod(size(group))         psc(i) = se_PSC_area(group(i).xSPM,targets); % if size(targets,2)>1 % PSC = [PSC mean(psc(i).PSC')']; % else             PSC = [PSC psc(i).PSC]; % end         spm_progress_bar('Set',i);     end     spm_progress_bar('Clear')     if psc(i).Sessions == 1         descrip = ['Rows: Conditions; Columns: Sub1, Sub2, Sub3... Sub' int2str(prod(size(group)))];     else         descrip = ['Rows: Conditions; Columns: Sub1 Ses1 - Ses' int2str(psc(i).Sessions ) ', Sub2 Ses1 - Ses' int2str(psc(i).Sessions ) '... Sub' int2str(prod(size(group))) ' Ses1 - Ses' int2str(psc(i).Sessions )];     end          save PSC.mat PSC descrip;          if PSCmode > 1         nvox = size(targets,2);     else         nvox = 1;     end     regressors = size(PSC,1);     fg = se_figure('GetWin','Graphics'); WS = spm('WinScale');     set(st.mAssign,'Visible','off'); set(st.vAssign,'Visible','off');     set(st.clustBox,'Visible','off'); set(st.maxBox,'Visible','off'); set(st.cluster,'Visible','off'); set(st.maxima,'Visible','off');     st.mode = 3;     se_figure('Clear','Interactive');     if isfield(st,'hAx');         delete(st.hAx);         st = rmfield(st,'hAx');     end     if any(~isnan(sum(PSC)))     [PSCmin, PSCmax, Ay] = displayPSC(PSC(:,~isnan(sum(PSC))),regressors,[0.51 0.21 0.46 0.335],0);     switch PSCmode         case 1             text(PSCmin,Ay,sprintf('Position: x=%1.0f, y=%1.0f, z=%1.0f,',se_orthviews('pos')),'FontSize',12);             [Area, code] = hier_area;             text(PSCmin,Ay-17*WS(2),sprintf('Area: %s',Area),'FontSize',12);         case 2             text(PSCmin,Ay,['Activated voxels in area ' MAP(locNr).name],'FontSize',12);         case 4             text(PSCmin,Ay,['All ' int2str(CLUSTER(CLUSTER(1).VOL(round(xyzp(1)),round(xyzp(2)),round(xyzp(3)))).voxel(1)) ' voxels in cluster ' sprintf('%2.0f', get(st.cluster,'Value')-1)],'FontSize',12);     end     else         spm('alert"',{'No data available !'},'',0,1);         se_anatomy('Info')     end end % ----------------------- INITIALIZE ---------------------------- if strcmp(op,'init'),     st.pwd = pwd;     st.SPM = spm('FnBanner');     fg = se_figure('GetWin','Graphics');     se_orthviews('Interp',0)     if isempty(st.vols{1}), return; end;     se_orthviews('MaxBB');     st.callback = 'se_anatomy(''shopos'');';     st.B = [0 0 0 0 0 0 1 1 1 0 0 0];     WS = spm('WinScale');     xp = -20;     switch st.SPM         case 'SPM99'         otherwise             set(gcf,'DefaultUicontrolFontSize',spm('FontSizes',8));             xp = -30;     end     % Crosshair position     %-----------------------------------------------------------------------     % uicontrol(fg,'Style','Frame','Position',[45 110+xp 190 100].*WS,'DeleteFcn','se_anatomy(''reset'');');     uicontrol(fg,'Style','Frame','Position',[50+10 105-27 180 82].*WS);     uicontrol(fg,'Style','Text', 'Position',[55+10 166-25 170 016].*WS,'String','Crosshair Position');     uicontrol(fg,'Style','PushButton', 'Position',[55+10 161-25 170 006].*WS,...         'Callback','se_orthviews(''Reposition'',[0 0 0]);','ToolTipString','move crosshairs to origin');     uicontrol(fg,'Style','Text', 'Position',[55+10 135-25 35 020].*WS,'String','mm:');     uicontrol(fg,'Style','Text', 'Position',[55+10 115-25 35 020].*WS,'String','vx:');     uicontrol(fg,'Style','Text', 'Position',[55+10 106-25 65 014].*WS,'String','Area:');     st.mp = uicontrol(fg,'Style','edit', 'Position',[90+10 140-25 135 020].*WS,'String','','Callback','se_anatomy(''setposmm'')','ToolTipString','move crosshairs to mm coordinates');     st.vp = uicontrol(fg,'Style','edit', 'Position',[90+10 120-25 135 020].*WS,'String','','Callback','se_anatomy(''setposvx'')','ToolTipString','move crosshairs to voxel coordinates');     st.in = uicontrol(fg,'Style','Text', 'Position',[120+10 106-25 85 014].*WS,'String','');     % Assorted other buttons.     %-----------------------------------------------------------------------     uicontrol(fg,'Style','Frame','Position',[5 30+xp 270 70].*WS);     st.zoomer = uicontrol(fg,'Style','popupmenu' ,'Position',[10 75+xp 125 20].*WS,...         'String',str2mat('Full Volume','160x160x160mm','80x80x80mm','40x40x40mm','20x20x20mm','10x10x10mm'),...         'Callback','se_anatomy(''zoom_in'')','ToolTipString','zoom in by different amounts');     c = 'if get(gco,''Value'')==1, se_orthviews(''Space''), else, se_orthviews(''Space'', 1);end;se_anatomy(''zoom_in'')';     uicontrol(fg,'Style','popupmenu' ,'Position',[10 55+xp 125 20].*WS,...         'String',str2mat('World Space','Voxel Space'),...         'Callback',c,'ToolTipString','display in aquired/world orientation');     c = 'if get(gco,''Value'')==1, se_orthviews(''Xhairs'',''off''), else, se_orthviews(''Xhairs'',''on''); end;';     uicontrol(fg,'Style','togglebutton','Position',[145 75+xp 125 20].*WS,...         'String','Hide Crosshairs','Callback',c,'ToolTipString','show/hide crosshairs');     uicontrol(fg,'Style','popupmenu' ,'Position',[145 55+xp 125 20].*WS,...         'String',str2mat('NN interp','bilin interp','sinc interp'),...         'Callback','tmp_ = [0 1 -4];se_orthviews(''Interp'',tmp_(get(gco,''Value'')))',...         'Value',1,'ToolTipString','interpolation method for displaying images');     uicontrol(fg,'Style','PushButton','Position',[10 35+xp 125 20].*WS,'ForegroundColor','r','FontWeight','bold',...         'String','EXIT','Callback','se_anatomy(''exit'');','ToolTipString','quit');     if ~strcmp(st.prog,'AR')         st.blobber = uicontrol(fg,'Style','pushbutton','Position',[145 35+xp 125 20].*WS,...             'String','Add Blobs','Callback','se_anatomy(''addblobs'');','ToolTipString','superimpose activations');     end     FS = spm('FontSizes');     hFS = FS(8);     if (~strcmp(st.prog,'PX') & ~strcmp(st.prog,'AR'))         if ~isfield(st,'mAssignNr');             st.mAssignNr = 0;         end         if st.mAssignNr             Smax = 'No maximum selected'; for cl=1:st.mAssignNr; Smax = [Smax '|' 'Maximum (' sprintf('%2.0f', cl) ')']; end         else             Smax = 'No maxima found';         end         st.maxBox = uicontrol(fg,'Style','Frame','Position',[285 362 197 35].*WS);         st.maxima = uicontrol(fg,'Style','popupmenu','Position',[290 372 190 20].*WS,...             'String',str2mat(Smax),'Callback','se_anatomy(''setposmax'')','ToolTipString','move crosshairs to maximum','FontSize',hFS+1);         st.clustBox = uicontrol(fg,'Style','Frame','Position',[285 489 260 37].*WS);         st.cluster = uicontrol(fg,'Style','popupmenu','Position',[290 500 250 20].*WS,...             'String',str2mat(getCluster(2)),'Callback','se_anatomy(''setposclust'')','ToolTipString','move crosshairs to cluster','FontSize',hFS+1);         st.titel = uicontrol(fg,'Style','text','Position',[290 460 308 20].*WS,'BackgroundColor',[1 1 1],'FontWeight','bold','HorizontalAlignment','left',...             'String','','FontSize',hFS+1);         st.vAssign = uicontrol(fg,'Style','text','Position',[290 398 300 65].*WS,'BackgroundColor',[1 1 1],'HorizontalAlignment','left',...             'String',{},'FontSize',hFS);         if strcmp(st.prog,'OV')             st.mAssign = uicontrol(fg,'Style','text','Position',[290 50 300 305].*WS,'BackgroundColor',[1 1 1],'HorizontalAlignment','left',...                 'String',{},'FontSize',hFS);         else             st.mAssign = uicontrol(fg,'Style','text','Position',[290 60+xp 300 300-xp].*WS,'BackgroundColor',[1 1 1],'HorizontalAlignment','left',...                 'String',{},'FontSize',hFS);         end     end     if strcmp(st.prog,'AR');         displayType = 'AR';         st.blobber = uicontrol(fg,'Style','pushbutton','Position',[145+20 35+xp 125 20].*WS,...             'String','Read statistics','Callback','se_getMap(''groupStat'')','ToolTipString','load statistical data');         clust = 'No area selected';         for cl=1:size(MAP,2); clust = [clust '|' MAP(cl).name]; end         st.clustBox = uicontrol(fg,'Style','Frame','Position',[285 490 260 35].*WS);         st.cluster = uicontrol(fg,'Style','popupmenu','Position',[290 500 250 20].*WS,...             'String',str2mat(clust),'Callback','se_anatomy(''setposarea'')','ToolTipString','move crosshairs to area','FontSize',hFS+1);         st.titel = uicontrol(fg,'Style','text','Position',[290 460 300 20].*WS,'BackgroundColor',[1 1 1],'FontWeight','bold','HorizontalAlignment','left',...             'String','','FontSize',hFS+1);     elseif strcmp(st.prog,'OV');         displayType = 'OL';         st.SVC = uicontrol(fg,'Style','PushButton','Position',[300 35+xp 75 20].*WS,'FontWeight','bold',...             'String','S. V. C.','Callback','se_anatomy(''SVC'');','ToolTipString','Small volume correction');         st.Tab = uicontrol(fg,'Style','PushButton','Position',[400 35+xp 75 20].*WS,'FontWeight','bold',...             'String','Tab','Callback','se_anatomy(''Tab'');','ToolTipString','Tabelated output to file');         st.Plot = uicontrol(fg,'Style','PushButton','Position',[500 35+xp 75 20].*WS,'FontWeight','bold',...             'String','Plot','Callback','se_anatomy(''Plot'');','ToolTipString','Tabelated output to file');     elseif strcmp(st.prog,'GR')         displayType = 'GA';         st.mode = 1;         st.Info = uicontrol(fg,'Style','PushButton','Position',[300 35+xp 80 20].*WS,'FontWeight','bold',...             'String','Info','Callback','se_anatomy(''Info'');','ToolTipString','Localization of volumes and maxima');         if strcmp(st.prog,'GR')             st.PSC = uicontrol(fg,'Style','PushButton','Position',[480 35+xp 100 20].*WS,'FontWeight','bold',...                 'String','% signal change','Callback','se_anatomy(''PSCG'');','ToolTipString','Calculate % signal change');         end     elseif strcmp(st.prog,'PX')         displayType = 'PX';         hFS = FS(9);         st.mAssign = uicontrol(fg,'Style','text','Position',[290 390 300 135].*WS,'BackgroundColor',[1 1 1],'HorizontalAlignment','left',...             'String',{},'FontSize',hFS);         if ~exist(xSPM)             xSPM = struct('xVOL',{});         end         xSPM(1).xVOL.M = MAP(1).MaxMap.mat;         xF = spm_figure('GetWin','Graphics'); xI = spm_figure('GetWin','Interactive');         set(xF,'visible','off'), figure(xI)         xSPM(1).xVOL.orig = spm_input_ui('Coordinates','!+1','b','Anatomical|MNI',[1 2],2,'Select mode'); set(xF,'visible','on'),     end end; return; function my_reset st.FX = findobj(get(0,'Children'),'Flat','Tag','SATB'); st.Fgraph = findobj(get(0,'Children'),'Flat','Tag','xSATB'); try; delete(st.FX); delete(st.Fgraph); end se_figure('Clear','Graphics'); return; function [PSCmin, PSCmax, Ay] = displayPSC(PSC,regressors,position,dotext) global st global group FS = spm('FontSizes'); %-Scaled font sizes WS = spm('WinScale'); set(st.titel,'Visible','off'); fg = se_figure('GetWin','Graphics'); st.hAx = axes('Position',position,'DefaultTextInterpreter','Tex',...     'DefaultTextVerticalAlignment','Baseline','Units','points','Visible','on'); AxPos = get(st.hAx,'Position'); Ay = floor(AxPos(4))-10; sem = sqrt(var(PSC')/size(PSC,2)); PSCmin = min([0 min(mean(PSC')-sem*1.2)]); PSCmax = max([0 max(mean(PSC')+sem*1.2)]); boxMax = Ay-25-regressors*35; set(st.hAx,'YLim',[boxMax,AxPos(4)-28]); set(st.hAx,'XLim',[PSCmin,PSCmax]); set(st.hAx,'YTick',[]); set(st.hAx,'YTickLabel',''); pp = 0; line([PSCmin PSCmin],[Ay-19 boxMax],'Color','k'); line([PSCmax PSCmax],[Ay-19 boxMax],'Color','k'); line([PSCmin PSCmax],[boxMax boxMax],'Color','k'); line([PSCmin PSCmax],[Ay-19 Ay-19],'Color','k'); line([0 0],[Ay-19 boxMax],'Color','k','LineWidth',1); lab = {'% signal change','(Mean and SEM indicated)'}; off = (max(max(PSCmax))-min(min(PSCmin)))*0.01; for k = 1:regressors,     line([0 mean(PSC(k,:))],[Ay-40-pp*35 Ay-40-pp*35],'Color',[0 0 0],'LineWidth',25)     if mean(PSC(k,:))>0         line([off/2 mean(PSC(k,:))-off],[Ay-40-pp*35 Ay-40-pp*35],'Color',[0.5 0.5 0.5],'LineWidth',22)     else         line([-off/2 mean(PSC(k,:))+off],[Ay-40-pp*35 Ay-40-pp*35],'Color',[0.5 0.5 0.5],'LineWidth',22)     end     line([mean(PSC(k,:))-sem(k) mean(PSC(k,:))+sem(k)],[Ay-40-pp*35 Ay-40-pp*35],'Color',[0 0 0],'LineWidth',1)     line([mean(PSC(k,:))-sem(k) mean(PSC(k,:))-sem(k)],[Ay-45-pp*35 Ay-35-pp*35],'Color',[0 0 0],'LineWidth',1)     line([mean(PSC(k,:))+sem(k) mean(PSC(k,:))+sem(k)],[Ay-45-pp*35 Ay-35-pp*35],'Color',[0 0 0],'LineWidth',1)     text(0,Ay-40-pp*35,int2str(k),'Color','r','FontWeight','bold','FontSize',17,...         'HorizontalAlignment','Center','VerticalAlignment','Middle')     pp = pp+1; end xlabel(lab); ys = get(st.hAx,'YLim'); Ay2 = boxMax-(ys(2)-ys(1))*.27; for i=1:ceil(regressors/3)     text(PSCmin,Ay2-((i-1)*(10+regressors)),[int2str(i*3-2) ': ' getCondLabel(i*3-2) ' (' num2str(mean(PSC(i*3-2,:)),'%5.3f') ')'],'VerticalAlignment','middle','FontSize',FS(10));     if (i-1)*3+2 <= regressors         text(PSCmin+((PSCmax-PSCmin)/3)*1,Ay2-((i-1)*(10+regressors)),[int2str(i*3-1) ': ' getCondLabel(i*3-1) ' (' num2str(mean(PSC(i*3-1,:)),'%5.3f') ')'],'VerticalAlignment','middle','FontSize',FS(10))     end     if (i-1)*3+3 <= regressors         text(PSCmin+((PSCmax-PSCmin)/3)*2,Ay2-((i-1)*(10+regressors)),[int2str(i*3) ': ' getCondLabel(i*3) ' (' num2str(mean(PSC(i*3,:)),'%5.3f') ')'],'VerticalAlignment','middle','FontSize',FS(10))     end end function string = getCondLabel(i) global st global group switch st.SPM     case 'SPM99'; strin = group(1).xSPM.Sess{1}.name{i};     otherwise, strin = group(1).xSPM.Sess(1).Fc(i).name; end string = strrep(strin,'0',''); string = strrep(string,'1',''); string = strrep(string,'_',' '); string = strrep(string,' ',' '); function [Area, code] = hier_area global MAP global st xyzv = se_orthviews('pos',1); locNr = 0; aVox = find([MAP.GV] == spm_sample_vol(st.vols{1},xyzv(1),xyzv(2),xyzv(3),st.hld)); if aVox; Area = MAP(aVox).name; code = aVox; else;     ML = spm_sample_vol(MAP(1).Macro,xyzv(1),xyzv(2),xyzv(3),0)';     code = 0;     if ML > 0;         Area = MAP(1).MLabels.Labels{ML};     else         Area = 'Unknown area';     end end function clu_title global st global SPM global CLUSTER if isfield(SPM,'STAT')     try         set(st.titel,'String',['Cluster ' int2str(get(st.cluster,'Value')-1) ' (' int2str(CLUSTER(get(st.cluster,'Value')-1).voxel(1)) ' vox)'...             ': ' SPM.title ' ' SPM.thresDef]);     catch         set(st.titel,'String',['Cluster ' int2str(get(st.cluster,'Value')-1) ' (' int2str(CLUSTER(get(st.cluster,'Value')-1).voxel(1)) ' vox)'...             ': ' SPM.title ' ( ' SPM.STAT '> ' sprintf('%4.2f', SPM.u) ')']);     end else     titl = SPM.title;     if length(titl)>15; titl = titl(1:15); end     set(st.titel,'String',['Cluster ' int2str(get(st.cluster,'Value')-1) ' (' int2str(CLUSTER(get(st.cluster,'Value')-1).voxel(1)) ' vox)'...         ': ' titl ' (u > ' sprintf('%4.2f', SPM.u) ', k > ' int2str(SPM.k) ')']); end [MLev, VLev, m_anz] = se_overlap(get(st.cluster,'Value')-1); set(st.vAssign,'String',VLev); set(st.mAssign,'String',MLev); st.mAssignNr = m_anz; Smax = 'No maximum selected'; for cl=1:st.mAssignNr;     Smax = [Smax '|' 'Maximum (' sprintf('%2.0f', cl) ')']; end set(st.maxima,'String',Smax,'Value',1); function clust = getCluster(mode) global st; global MAP; global SPM; global xSPM; global CLUSTER; global displayType; global group global defaults; if mode == 1     clust = 'No cluster selected';     for cl=1:size(CLUSTER,2)         clust = [clust '|Cluster ' sprintf('%2.0f', cl) ': x= ' sprintf('%+3.0f', mean(CLUSTER(cl).XYZmm(1,:)))...             ' y= ' sprintf('%+2.0f', mean(CLUSTER(cl).XYZmm(2,:))) ' z= ' sprintf('%+2.0f', mean(CLUSTER(cl).XYZmm(3,:)))];         if xSPM.xVOL.orig == 2             clust = [clust ' (MNI: ' sprintf('%+3.0f', mean(CLUSTER(cl).XYZmm(1,:))) '/'...                 sprintf('%+3.0f', mean(CLUSTER(cl).XYZmm(2,:))+4) '/' sprintf('%+3.0f', mean(CLUSTER(cl).XYZmm(3,:))-4) ')'];         end     end else     clear clust     if prod(size(CLUSTER))>0         clust = 'No cluster selected';         for cl=1:size(CLUSTER,2)             clust = [clust '|Cluster ' sprintf('%2.0f', cl) ': x= ' sprintf('%+3.0f', mean(CLUSTER(cl).XYZmm(1,:)))...                 ' y= ' sprintf('%+2.0f', mean(CLUSTER(cl).XYZmm(2,:))) ' z= ' sprintf('%+2.0f', mean(CLUSTER(cl).XYZmm(3,:)))];             if xSPM.xVOL.orig == 2                 clust = [clust ' (orig. MNI: ' sprintf('%+3.0f', mean(CLUSTER(cl).XYZmm(1,:))) '/'...                     sprintf('%+3.0f', mean(CLUSTER(cl).XYZmm(2,:))+4) '/' sprintf('%+3.0f', mean(CLUSTER(cl).XYZmm(3,:))-4) ')'];             end         end     end     if ~exist('clust')         clust = 'No activation cluster found';     end end

Top of Message | Previous Page | Permalink

JiscMail Tools


RSS Feeds and Sharing


Advanced Options


Archives

May 2024
April 2024
March 2024
February 2024
January 2024
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
2006
2005
2004
2003
2002
2001
2000
1999
1998


JiscMail is a Jisc service.

View our service policies at https://www.jiscmail.ac.uk/policyandsecurity/ and Jisc's privacy policy at https://www.jisc.ac.uk/website/privacy-notice

For help and support help@jisc.ac.uk

Secured by F-Secure Anti-Virus CataList Email List Search Powered by the LISTSERV Email List Manager