function varargout=conn_process(options,varargin) global CONN_x if nargin<1, options=[]; end if ischar(options), switch(lower(options)), case 'all', disp(['CONN: RUNNING ALL ANALYSIS STEPS']); conn_process([0:14]); case 'all_voxel', disp(['CONN: RUNNING ALL ANALYSIS STEPS (voxel-based analyses only)']); conn_process([0:3,5:6,9:10,12:13]); case 'all_roi', disp(['CONN: RUNNING ALL ANALYSIS STEPS (roi-based analyses only)']); conn_process([0:2,4:5,7,9,11,14]); case 'setup', disp(['CONN: RUNNING SETUP STEP']); conn_process([0:5]); case 'setup_roi', disp(['CONN: RUNNING SETUP STEP (roi-based analyses only)']); conn_process([0:2,4:5]); case 'preprocessing', disp(['CONN: RUNNING PREPROCESSING STEP']); conn_process([5:9],varargin{:}); case 'preprocessing_gui',disp(['CONN: RUNNING PREPROCESSING STEP']); conn_process([6:9],varargin{:}); case 'preprocessing_roi',disp(['CONN: RUNNING PREPROCESSING STEP (roi-based analyses only)']); conn_process([5,7,9],varargin{:}); case 'analyses', disp(['CONN: RUNNING ANALYSIS STEP']); conn_process([9,10:14],varargin{:}); case 'analyses_seed', disp(['CONN: RUNNING ANALYSIS STEP (ROI-to-ROI or seed-to-voxel analyses)']); conn_process([9,10,12],varargin{:}); case 'analyses_vv', disp(['CONN: RUNNING ANALYSIS STEP (voxel-to-voxel analyses)']); conn_process([9,13],varargin{:}); case 'analyses_roi', disp(['CONN: RUNNING ANALYSIS STEP (roi-based analyses only)']); conn_process([9,11,14],varargin{:}); case 'analyses_gui', disp(['CONN: RUNNING ANALYSIS STEP']); conn_process([10:14],varargin{:}); case 'analyses_gui_seed',disp(['CONN: RUNNING ANALYSIS STEP (ROI-to-ROI or seed-to-voxel analyses)']); conn_process([10:12,14],CONN_x.Analysis); case 'analyses_gui_vv', disp(['CONN: RUNNING ANALYSIS STEP (voxel-to-voxel analyses)']); conn_process([13],varargin{:}); case 'prepare_results', conn_process(13:14,varargin{:}); case 'prepare_results_roi',conn_process(14,varargin{:}); case 'results', conn_process(15:16,varargin{:}); case 'results_voxel', [varargout{1:nargout}]=conn_process(15,varargin{:}); case 'results_roi', [varargout{1:nargout}]=conn_process(16,varargin{:}); case 'update', conn gui_setup_saveas; conn_process all; conn save; end return; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Checks dimensionality of setup files %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if any(options==0), ERR={}; if isempty(CONN_x.filename)||isempty(dir(CONN_x.filename)),ERR{end+1}=['WARNING: Project not saved or empty project information']; end try, conn_updatefilepaths; catch, ERR{end+1}=['ERROR: Files not found. Check that all your functional/structural/ROIs/first-level covariate files point to existing files.']; end nl1covariates=length(CONN_x.Setup.l1covariates.names)-1; nconditions=length(CONN_x.Setup.conditions.names)-1; nrois=length(CONN_x.Setup.rois.names)-1; if nconditions<1, ERR{end+1}=['ERROR: No conditions defined. You must define at least one condition (use onset=0; duration=inf; for encompassing the entire scanning session)']; end for nsub=1:CONN_x.Setup.nsubjects, nsess=CONN_x.Setup.nsessions(min(length(CONN_x.Setup.nsessions),nsub)); if nsess<1,ERR{end+1}=['ERROR: Subject ',num2str(nsub),' has no functional data assigned (number of sessions = 0); increase the number of sessions in Setup->Basic or remove this subject']; end if numel(CONN_x.Setup.conditions.values)<nsub, ERR{end+1}=['ERROR: Subject ',num2str(nsub),' has no experimental conditions defined']; end if numel(CONN_x.Setup.conditions.values)>=nsub&&numel(CONN_x.Setup.conditions.values{nsub})<nconditions, ERR{end+1}=['ERROR: Missing experimental conditions on Subject ',num2str(nsub)]; end okconditions=false(1,nconditions); for nses=1:nsess, if length(CONN_x.Setup.nscans)<nsub, ERR{end+1}=['ERROR: Subject ',num2str(nsub),' has no functional data defined']; elseif length(CONN_x.Setup.nscans{nsub})<nses, ERR{end+1}=['ERROR: Subject ',num2str(nsub),' has no functional data defined for session ',num2str(nses)]; else, nscans=CONN_x.Setup.nscans{nsub}{nses}; if isempty(nscans),ERR{end+1}=['ERROR: Subject ',num2str(nsub),' Session ',num2str(nses), ' functional data has not been defined']; elseif nscans<2, ERR{end+1}=['ERROR: Subject ',num2str(nsub),' Session ',num2str(nses), ' functional data has ',num2str(nscans),' time-points (scans) defined']; end for nroi=1:nrois, if numel(CONN_x.Setup.rois.files)<nsub||numel(CONN_x.Setup.rois.files{nsub})<nroi||numel(CONN_x.Setup.rois.files{nsub}{nroi})<3||isempty(CONN_x.Setup.rois.files{nsub}{nroi}{1}), ERR{end+1}=['ERROR: Subject ',num2str(nsub),' ROI ',num2str(nroi), ' file has not been defined']; end end for nl1covariate=1:nl1covariates, filename=CONN_x.Setup.l1covariates.files{nsub}{nl1covariate}{nses}{1}; switch(filename), case '[raw values]', data=CONN_x.Setup.l1covariates.files{nsub}{nl1covariate}{nses}{3}; otherwise, data=load(filename); if isstruct(data), tempnames=fieldnames(data); data=data.(tempnames{1}); end end names=CONN_x.Setup.l1covariates.names{nl1covariate}; if size(data,1)~=nscans, ERR{end+1}=['ERROR: Subject ',num2str(nsub),' Session ',num2str(nses), ' first-level covariate ',names,' mismatched dimensions (',num2str(size(data,1)),' rows, while functional data has ',num2str(nscans),' scans; the number of rows of a first-level covariate should equal the number of scans for this subject/session)']; end end for ncondition=1:nconditions, if numel(CONN_x.Setup.conditions.values)>=nsub&&numel(CONN_x.Setup.conditions.values{nsub})>=ncondition&&(numel(CONN_x.Setup.conditions.values{nsub}{ncondition})<nses||numel(CONN_x.Setup.conditions.values{nsub}{ncondition}{nses})<2), disp(['warning: Subject ',num2str(nsub),' condition ',CONN_x.Setup.conditions.names{ncondition},' has not been defined for session ',num2str(nses),'. Assuming this condition is not present in this session']); CONN_x.Setup.conditions.values{nsub}{ncondition}{nses}={[],[]}; else okconditions(ncondition)=okconditions(ncondition)|(~isempty(CONN_x.Setup.conditions.values{nsub}{ncondition}{nses}{1})&&~isempty(CONN_x.Setup.conditions.values{nsub}{ncondition}{nses}{2})); end end end end if any(~okconditions) for ncondition=find(~okconditions); ERR{end+1}=['ERROR: Subject ',num2str(nsub),' does not have any scan associated with condition ',CONN_x.Setup.conditions.names{ncondition}]; end end end if ~isempty(ERR), disp('SOME ERROR FOUNDS!: Please revise the Setup information'); disp(strvcat(ERR)); return; end % check coregistration of reference files CONN_x.Setup.normalized=1; if CONN_x.Setup.spatialresolution~=1 ok=1; for nsub=1:CONN_x.Setup.nsubjects, switch(CONN_x.Setup.spatialresolution) case 2, v=CONN_x.Setup.structural{nsub}{3}.dim; case 3, v=CONN_x.Setup.functional{nsub}{1}{3}.dim; end if nsub==1, vref=v; elseif any(v~=vref), ok=0; end end if ~ok, switch(CONN_x.Setup.spatialresolution) case 2, vname='structural'; case 3, vname='functional'; end txt=sprintf('Warning: %s volumes do not have the same dimensions. Multi-subject voxel-level analyses will NOT be performed. Choose ''same as template'' option in ''spatial resolution'' field if you wish to resample the data to a common voxel-resolution instead',vname); if isfield(CONN_x,'gui')&&isnumeric(CONN_x.gui)&&CONN_x.gui, answ= questdlg(txt,'','Continue', 'Stop','Stop'); if strcmp(answ,'Stop'), return; end CONN_x.Setup.normalized=0; else disp(txt); CONN_x.Setup.normalized=0; end end end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Segments structural data if appropriate %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if any(options==1), h=conn_waitbar(0,['Step ',num2str(sum(options<=1)),'/',num2str(length(options)),': Segmentation']); [path,name,ext]=fileparts(CONN_x.filename); for nsub=1:CONN_x.Setup.nsubjects, nsess=CONN_x.Setup.nsessions(min(length(CONN_x.Setup.nsessions),nsub)); dosegm=0;for n1=1:3,if length(CONN_x.Setup.rois.files{nsub})<n1||isempty(CONN_x.Setup.rois.files{nsub}{n1})||~iscell(CONN_x.Setup.rois.files{nsub}{n1})||isempty(CONN_x.Setup.rois.files{nsub}{n1}{1}),dosegm=1;end;end; if dosegm, file=deblank(CONN_x.Setup.structural{nsub}{1}); if (~conn_existfile(conn_prepend(['c',num2str(1)],file)))||(~conn_existfile(conn_prepend(['c',num2str(2)],file)))||(~conn_existfile(conn_prepend(['c',num2str(3)],file))), V=spm_vol(file); res=spm_preproc(V); [sn,isn]=spm_prep2sn(res); savefields(conn_prepend('',deblank(CONN_x.Setup.structural{nsub}{1}),'_seg_sn.mat'),sn); savefields(conn_prepend('',deblank(CONN_x.Setup.structural{nsub}{1}),'_seg_inv_sn.mat'),isn); opts=struct('biascor',0,'GM',[0 0 1],'WM',[0 0 1],'CSF',[0 0 1],'cleanup',0); spm_preproc_write(sn,opts); end for n1=1:3, ffile=conn_prepend(['c',num2str(n1)],file); [V,str,icon]=conn_getinfo(ffile); CONN_x.Setup.rois.files{nsub}{n1}={ffile,str,icon}; end end conn_waitbar(nsub/CONN_x.Setup.nsubjects,h); end conn_waitbar('close',h); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Creates COV_Subject###_Session###.mat files (first-level temporal covariate values) % Creates COND_Subject###_Session###.mat files (temporal samples included in each condition) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if any(options==2), [path,name,ext]=fileparts(CONN_x.filename); %[ok,nill]=mkdir(path,name); %[ok,nill]=mkdir(fullfile(path,name),'data'); %filepath=fullfile(path,name,'data'); filepath=CONN_x.folders.data; h=conn_waitbar(0,['Step ',num2str(sum(options<=2)),'/',num2str(length(options)),': Importing covariates']); REDO=[]; nl1covariates=length(CONN_x.Setup.l1covariates.names)-1; nconditions=length(CONN_x.Setup.conditions.names)-1; N=sum(CONN_x.Setup.nsessions); if length(CONN_x.Setup.nsessions)==1, N=N*CONN_x.Setup.nsubjects; end N=N*(nl1covariates+nconditions); maxdims=[];n=0; for nsub=1:CONN_x.Setup.nsubjects, nsess=CONN_x.Setup.nsessions(min(length(CONN_x.Setup.nsessions),nsub)); for nses=1:nsess, filename=fullfile(filepath,['COND_Subject',num2str(nsub,'%03d'),'_Session',num2str(nses,'%03d'),'.mat']); if isempty(REDO)&&~isempty(dir(filename)), if isfield(CONN_x,'gui')&&isstruct(CONN_x.gui)&&isfield(CONN_x.gui,'overwrite'), REDO=CONN_x.gui.overwrite; else, REDO=questdlg('Overwrite existing subject results?','','Yes', 'No', 'Yes');end; end if strcmp(REDO,'Yes')||isempty(dir(filename)), clear data names; clear samples weights; nscans=CONN_x.Setup.nscans; for nl1covariate=1:nl1covariates, filename=CONN_x.Setup.l1covariates.files{nsub}{nl1covariate}{nses}{1}; switch(filename), case '[raw values]', data{nl1covariate}=CONN_x.Setup.l1covariates.files{nsub}{nl1covariate}{nses}{3}; otherwise, data{nl1covariate}=load(filename); if isstruct(data{nl1covariate}), tempnames=fieldnames(data{nl1covariate}); data{nl1covariate}=data{nl1covariate}.(tempnames{1}); end end names{nl1covariate}=CONN_x.Setup.l1covariates.names{nl1covariate}; n=n+1; conn_waitbar(n/N,h); end for ncondition=1:nconditions, onset=CONN_x.Setup.conditions.values{nsub}{ncondition}{nses}{1}; durat=CONN_x.Setup.conditions.values{nsub}{ncondition}{nses}{2}; rt=CONN_x.Setup.RT/10; durat=max(rt,min(CONN_x.Setup.RT*CONN_x.Setup.nscans{nsub}{nsess},durat)); hrf=spm_hrf(rt); x=zeros(ceil(CONN_x.Setup.nscans{nsub}{nses}*CONN_x.Setup.RT/rt),1); for n1=1:length(onset), x(round(1+onset(n1)/rt+(0:durat(min(length(durat),n1))/rt-1)))=1; end if CONN_x.Setup.acquisitiontype==1, x=convn(x,hrf); end x=mean(reshape(x(1:10*CONN_x.Setup.nscans{nsub}{nses}),[10,CONN_x.Setup.nscans{nsub}{nses}]),1)';%x=x(1+10*(0:CONN_x.Setup.nscans{nsub}{nses}-1)); data{nl1covariates+ncondition}=x; names{nl1covariates+ncondition}=['Effect of ',CONN_x.Setup.conditions.names{ncondition}]; samples{ncondition}=[]; weights{ncondition}=cell(1,2); idx1=find(x>0); idx2=[0;find(diff(idx1)>1);length(idx1)]; for n1=1:length(idx2)-1, idx=idx1(idx2(n1)+1:idx2(n1+1)); samples{ncondition}=cat(1,samples{ncondition},idx(:)); weights{ncondition}{1}=cat(1,weights{ncondition}{1},x(idx(:))); weights{ncondition}{2}=cat(1,weights{ncondition}{2},conn_hanning(length(idx))); end n=n+1; conn_waitbar(n/N,h); end filename=fullfile(filepath,['COV_Subject',num2str(nsub,'%03d'),'_Session',num2str(nses,'%03d'),'.mat']); save(filename,'data','names'); % if str2num(version('-release'))>=14, save(filename,'-V6','data','names'); % else, save(filename,'data','names'); end for n1=1:length(data), if length(maxdims)<n1, maxdims(n1)=size(data{n1},2); else, maxdims(n1)=max(maxdims(n1),size(data{n1},2)); end; end names={CONN_x.Setup.conditions.names{1:nconditions}}; filename=fullfile(filepath,['COND_Subject',num2str(nsub,'%03d'),'_Session',num2str(nses,'%03d'),'.mat']); save(filename,'samples','weights','names'); % if str2num(version('-release'))>=14, save(filename,'-V6','samples','weights','names'); % else, save(filename,'samples','weights','names'); end end end end conn_waitbar('close',h); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Creates DATA_Subject###_Session###.mat files (percentage signal change data at analysis mask) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if any(options==3) && any(CONN_x.Setup.steps([2,3])), [path,name,ext]=fileparts(CONN_x.filename); filepath=CONN_x.folders.data; h=conn_waitbar(0,['Step ',num2str(sum(options<=3)),'/',num2str(length(options)),': Importing functional data']); REDO='Yes';filename=fullfile(filepath,['DATA_Subject',num2str(1,'%03d'),'_Session',num2str(1,'%03d'),'.mat']); if ~isempty(dir(filename)),if isfield(CONN_x,'gui')&&isstruct(CONN_x.gui)&&isfield(CONN_x.gui,'overwrite'), REDO=CONN_x.gui.overwrite; else, REDO=questdlg('Overwrite existing subject results?','','Yes', 'No', 'Yes');end; end N=sum(CONN_x.Setup.nsessions); if length(CONN_x.Setup.nsessions)==1, N=N*CONN_x.Setup.nsubjects; end n=0; if CONN_x.Setup.analysismask==1,%CONN_x.Setup.normalized, filename=fullfile(fileparts(which('spm')),'apriori','brainmask.nii'); Vmask=spm_vol(filename); elseif 0,%isfield(CONN_x.Setup,'usebrainmask')&&CONN_x.Setup.usebrainmask, Vmask1=spm_vol(CONN_x.Setup.rois.files{nsub}{1}{1}); Vmask2=spm_vol(CONN_x.Setup.rois.files{nsub}{2}{1}); Vmask3=spm_vol(CONN_x.Setup.rois.files{nsub}{3}{1}); Vmask=struct('mat',Vmask1.mat,'dim',Vmask1.dim,'fname',conn_prepend('mask_',CONN_x.Setup.functional{nsub}{1}{1}(1,:)),... 'dt',[spm_type('uint8') spm_platform('bigend')]); a=spm_read_vols(Vmask1)+spm_read_vols(Vmask2)+spm_read_vols(Vmask3); try, spm_write_vol(Vmask,a>0); catch, [temp_path,temp_filename,temp_ext]=fileparts(Vmask.fname); Vmask.fname=fullfile(pwd,[temp_filename,temp_ext]); spm_write_vol(Vmask,a>0); end Vmask=spm_vol(Vmask.fname); else, Vmask=[]; end for nsub=1:CONN_x.Setup.nsubjects, switch CONN_x.Setup.spatialresolution case 1, filename=fullfile(fileparts(which('spm')),'apriori','brainmask.nii'); case 2, filename=deblank(CONN_x.Setup.structural{nsub}{1}); case 3, filename=deblank(CONN_x.Setup.functional{nsub}{1}{1}(1,:)); end Vref=spm_vol(filename); Vref=Vref(1); CONN_x.Setup.spatialresolutionvolume{nsub}=Vref; % if ~CONN_x.Setup.normalized, % filename=deblank(CONN_x.Setup.structural{nsub}{1}); % Vref=spm_vol(filename); % end nsess=CONN_x.Setup.nsessions(min(length(CONN_x.Setup.nsessions),nsub)); sfile=[];%conn_prepend('',CONN_x.Setup.structural{nsub}{1},'_seg_inv_sn.mat'); for nses=1:nsess, filename=fullfile(filepath,['DATA_Subject',num2str(nsub,'%03d'),'_Session',num2str(nses,'%03d'),'.mat']); if strcmp(REDO,'Yes')||isempty(dir(filename)), warning off;Vsource=spm_vol(CONN_x.Setup.functional{nsub}{nses}{1});warning on; CONN_x.Setup.nscans{nsub}{nses}=prod(size(Vsource)); if CONN_x.Setup.analysismask==2&&nses==1,%~CONN_x.Setup.normalized&&(isempty(Vmask)), % computes analysis mask Vmask=Vsource(1); Vmask.fname=conn_prepend('mask_',CONN_x.Setup.functional{nsub}{1}{1}(1,:)); Vmask.dt=[spm_type('uint8') spm_platform('bigend')]; a=ones(Vmask.dim(1:3)); [gridx,gridy,gridz]=ndgrid(1:Vmask.dim(1),1:Vmask.dim(2),1:Vmask.dim(3));xyz=Vmask.mat*[gridx(:),gridy(:),gridz(:),ones(numel(gridx),1)]'; for nsest=1:nsess, if nsest==nses,Vsourcet=Vsource;else,warning off;Vsourcet=spm_vol(CONN_x.Setup.functional{nsub}{nsest}{1});warning on;end for nt=1:numel(Vsourcet), b=reshape(spm_get_data(Vsourcet(nt),pinv(Vsourcet(nt).mat)*xyz),Vmask.dim(1:3)); %b=spm_read_vols(Vsourcet(nt)); mb=mean(b(b>mean(b(~isnan(b)))/8)); a=a&(b>0.80*mb); end end try, spm_write_vol(Vmask,a); catch, [temp_path,temp_filename,temp_ext]=fileparts(Vmask.fname); Vmask.fname=fullfile(pwd,[temp_filename,temp_ext]); spm_write_vol(Vmask,a); end end V=conn_create_vol(filename,Vsource,[],Vref,sfile,Vmask); end n=n+1; conn_waitbar(n/N,h); end end conn_waitbar('close',h); clear data; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Creates sDATA_Subject###_Session###.mat files (smoothed functional data) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if 0,%any(options==2.5), [path,name,ext]=fileparts(CONN_x.filename); filepath=CONN_x.folders.data; h=conn_waitbar(0,['Step ',num2str(sum(options<=3)),'/',num2str(length(options)),': Smoothing functional data']); N=sum(CONN_x.Setup.nsessions); if length(CONN_x.Setup.nsessions)==1, N=N*CONN_x.Setup.nsubjects; end n=0; for nsub=1:CONN_x.Setup.nsubjects, [spath,sfile,sext]=fileparts(deblank(CONN_x.Setup.structural{nsub}{1})); nsess=CONN_x.Setup.nsessions(min(length(CONN_x.Setup.nsessions),nsub)); for nses=1:nsess, filename=fullfile(filepath,['DATA_Subject',num2str(nsub,'%03d'),'_Session',num2str(nses,'%03d'),'.mat']); fileout=fullfile(filepath,['sDATA_Subject',num2str(nsub,'%03d'),'_Session',num2str(nses,'%03d'),'.mat']); Y0=conn_vol(filename); conn_reslice(fileout,Y0.matdim.mat,Y0.matdim.dim,Y0,[],CONN_x.Setup.fwhm); n=n+1; conn_waitbar(n/N,h); end end conn_waitbar('close',h); ; clear data; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Creates ROI_Subject###_Session###.mat files (activation timecourses for each roi) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if any(options==4), [path,name,ext]=fileparts(CONN_x.filename); filepath=CONN_x.folders.data; h=conn_waitbar(0,['Step ',num2str(sum(options<=4)),'/',num2str(length(options)),': Importing ROI data']); REDO='Yes';filename=fullfile(filepath,['ROI_Subject',num2str(1,'%03d'),'_Session',num2str(1,'%03d'),'.mat']); if ~isempty(dir(filename)),if isfield(CONN_x,'gui')&&isstruct(CONN_x.gui)&&isfield(CONN_x.gui,'overwrite'), REDO=CONN_x.gui.overwrite; else, REDO=questdlg('Overwrite existing subject results?','','Yes', 'No', 'Yes');end; end nrois=length(CONN_x.Setup.rois.names)-1; N=sum(CONN_x.Setup.nsessions); if length(CONN_x.Setup.nsessions)==1, N=N*CONN_x.Setup.nsubjects; end N=N*nrois; n=0; for nsub=1:CONN_x.Setup.nsubjects, clear Vmask; for nroi=1:nrois, Vmask{nroi}=CONN_x.Setup.rois.files{nsub}{nroi}{1}; end ERODE=1; % erosing level for white/csf masks (voxels) (set to 0 for no erosion) if ERODE>0, for nroi=2:3, Vmask{nroi}=conn_prepend('e',CONN_x.Setup.rois.files{nsub}{nroi}{1}); if (~conn_existfile(conn_prepend('e',CONN_x.Setup.rois.files{nsub}{nroi}{1}))), [nill,nill,ext]=fileparts(Vmask{nroi}); switch(ext), case {'.img','.nii','.hdr'}, V0=spm_vol(CONN_x.Setup.rois.files{nsub}{nroi}{1}); % mask X0=spm_read_vols(V0); idx1=find(X0(:)>.5); [idxx,idxy,idxz]=ind2sub(size(X0),idx1); idxt=find(idxx>ERODE&idxx<size(X0,1)+1-ERODE&idxy>ERODE&idxy<size(X0,2)+1-ERODE&idxz>ERODE&idxz<size(X0,3)+1-ERODE); for n1=1:length(idxt), if (sum(sum(sum(X0(idxx(idxt(n1))+(-ERODE:ERODE),idxy(idxt(n1))+(-ERODE:ERODE),idxz(idxt(n1))+(-ERODE:ERODE))<.5,3),2),1))>1, idxt(n1)=0; end; end idxt=idxt(idxt>0); idx1=idx1(idxt); X1=zeros(size(X0));X1(idx1)=1;V0.fname=conn_prepend('e',CONN_x.Setup.rois.files{nsub}{nroi}{1});spm_write_vol(V0,X1); otherwise, Vmask{nroi}=CONN_x.Setup.rois.files{nsub}{nroi}{1}; end end end end nsess=CONN_x.Setup.nsessions(min(length(CONN_x.Setup.nsessions),nsub)); for nses=1:nsess, filename=fullfile(filepath,['ROI_Subject',num2str(nsub,'%03d'),'_Session',num2str(nses,'%03d'),'.mat']); if ~isempty(dir(filename)), old=load(filename);%,'data','names','source','xyz','sampledata'); else, old=[]; end filename=fullfile(filepath,['COV_Subject',num2str(nsub,'%03d'),'_Session',num2str(nses,'%03d'),'.mat']); covariates=load(filename);covariates=cat(2,covariates.data{:}); source=fullfile(filepath,['DATA_Subject',num2str(nsub,'%03d'),'_Session',num2str(nses,'%03d'),'.mat']); Vsource=CONN_x.Setup.functional{nsub}{nses}{1}; Vsource2=[]; for n1=1:size(Vsource,1), [Vsourcepath,Vsourcename,Vsourceext]=fileparts(Vsource(n1,:)); if Vsourcename(1)~='s' || (~conn_existfile(fullfile(Vsourcepath,[Vsourcename(2:end),Vsourceext]))), Vsource2=[]; break; end Vsource2=strvcat(Vsource2,fullfile(Vsourcepath,[Vsourcename(2:end),Vsourceext])); % exists un-smooth data? end if strcmp(REDO,'Yes')||isempty(old)||~isfield(old,'sampledata'), sampledata=conn_rex(Vsource,Vmask{1},'dims',256,'level','subsetvoxels','scaling','roi','select_clusters',0,'output_type','none'); else, sampledata=old.sampledata; end if ~isempty(Vsource2), Vsource=Vsource2; end clear data names xyz; nroi1=1; for nroi=1:nrois, %if nroi>=5&&nroi<=8,REDO='Yes';else REDO='No'; end if ~isfield(CONN_x.Setup.rois,'mask') || length(CONN_x.Setup.rois.mask)<nroi, CONN_x.Setup.rois.mask(nroi)=0; end if ~isfield(CONN_x.Setup.rois,'multiplelabels') || length(CONN_x.Setup.rois.multiplelabels)<nroi, CONN_x.Setup.rois.multiplelabels(nroi)=0; end if ~isfield(CONN_x.Setup.rois,'regresscovariates') || length(CONN_x.Setup.rois.regresscovariates)<nroi, CONN_x.Setup.rois.regresscovariates(nroi)=double(CONN_x.Setup.rois.dimensions{nrois}>1); end failed=0; if ~strcmp(REDO,'Yes')&&~isempty(old), if CONN_x.Setup.rois.multiplelabels(nroi), [roi_path_dir,roi_path_name]=fileparts(Vmask{nroi}); idx=strmatch([CONN_x.Setup.rois.names{nroi},'.'],old.names); %idx=strmatch([roi_path_name,'.'],old.names); if isempty(idx) failed=1; else if isempty(dir(fullfile(roi_path_dir,[roi_path_name,'.txt']))), if CONN_x.Setup.rois.mask(nroi), mask=CONN_x.Setup.rois.files{nsub}{1}{1}; else, mask=''; end if CONN_x.Setup.rois.multiplelabels(nroi), level='clusters'; else, level='rois'; end if CONN_x.Setup.rois.regresscovariates(nroi), entercovariates=covariates; else, entercovariates=[]; end [nill,tnames]=conn_rex(Vmask{nroi},Vmask{nroi},'summary_measure','mean','conjunction_mask',mask,'level',level,'scaling','roi','select_clusters',0,'covariates',entercovariates,'output_type','saverex'); for n1=1:numel(tnames) if ~isempty(strmatch(roi_path_name,tnames{n1})), tnames{n1}=[tnames{n1}(numel(roi_path_name)+2:end)]; end end else tnames=textread(fullfile(roi_path_dir,[roi_path_name,'.txt']),'%s','delimiter','\n'); end clear tidx; for n1=1:length(tnames), tidx{n1}=strmatch([CONN_x.Setup.rois.names{nroi},'.',tnames{n1}],old.names,'exact'); if isempty(tidx{n1}), failed=1; else, tidx{n1}=tidx{n1}(1); end end if ~failed, for n1=1:length(tnames), data{nroi1}=old.data{tidx{n1}}; names{nroi1}=old.names{tidx{n1}}; xyz{nroi1}=old.xyz{tidx{n1}}; nroi1=nroi1+1; end end end else, idx=strmatch(CONN_x.Setup.rois.names{nroi},old.names,'exact'); if isempty(idx), failed=1; else, idx=idx(1); data{nroi1}=old.data{idx}; names{nroi1}=old.names{idx}; xyz{nroi1}=old.xyz{idx}; nroi1=nroi1+1; end end end if strcmp(REDO,'Yes')||isempty(old)||failed, %disp(nroi); if CONN_x.Setup.rois.mask(nroi), mask=CONN_x.Setup.rois.files{nsub}{1}{1}; else, mask=''; end if CONN_x.Setup.rois.multiplelabels(nroi), level='clusters'; else, level='rois'; end if CONN_x.Setup.rois.regresscovariates(nroi), entercovariates=covariates; else, entercovariates=[]; end if isfield(CONN_x.Setup,'extractSVD')&&CONN_x.Setup.extractSVD [data{nroi1},namesroi{nroi},params]=conn_rex(Vsource,Vmask{nroi},'summary_measure','eigenvariate','PCA',0,'dims',CONN_x.Setup.rois.dimensions{nroi},'conjunction_mask',mask,'level',level,'scaling','roi','select_clusters',0,'covariates',entercovariates,'output_type','saverex'); else if CONN_x.Setup.rois.dimensions{nroi}>1, [data{nroi1},namesroi{nroi},params]=conn_rex(Vsource,Vmask{nroi},'summary_measure','eigenvariate','dims',CONN_x.Setup.rois.dimensions{nroi},'conjunction_mask',mask,'level',level,'scaling','roi','select_clusters',0,'covariates',entercovariates,'output_type','saverex'); else, [data{nroi1},namesroi{nroi},params]=conn_rex(Vsource,Vmask{nroi},'summary_measure','mean','conjunction_mask',mask,'level',level,'scaling','roi','select_clusters',0,'covariates',entercovariates,'output_type','saverex'); end end [data{nroi1},ok]=conn_nan(data{nroi1}); data{nroi1}=detrend(data{nroi1},'constant'); if CONN_x.Setup.rois.multiplelabels(nroi), datatemp=data{nroi1}; [Vmaskfilepath,Vmaskfilename,Vmaskfileext]=fileparts(Vmask{nroi}); for n1=1:size(datatemp,2), data{nroi1}=datatemp(:,n1); names{nroi1}=namesroi{nroi}{n1}; if ~isempty(strmatch(Vmaskfilename,names{nroi1})), names{nroi1}=[CONN_x.Setup.rois.names{nroi},names{nroi1}(numel(Vmaskfilename)+1:end)]; end Z=params.ROIinfo.basis{params.ROIinfo.trans{n1}{1}}{params.ROIinfo.trans{n1}{2}}(params.ROIinfo.trans{n1}{4},params.ROIinfo.trans{n1}{3}); XYZ=params.ROIinfo.voxels{params.ROIinfo.trans{n1}{1}}{params.ROIinfo.trans{n1}{2}}(params.ROIinfo.trans{n1}{4},:); xyz{nroi1}=mean(XYZ(Z==max(Z),:),1); nroi1=nroi1+1; end else, names{nroi1}=CONN_x.Setup.rois.names{nroi}; n1=1; Z=params.ROIinfo.basis{params.ROIinfo.trans{n1}{1}}{params.ROIinfo.trans{n1}{2}}(params.ROIinfo.trans{n1}{4},params.ROIinfo.trans{n1}{3}); XYZ=params.ROIinfo.voxels{params.ROIinfo.trans{n1}{1}}{params.ROIinfo.trans{n1}{2}}(params.ROIinfo.trans{n1}{4},:); xyz{nroi1}=mean(XYZ(Z==max(Z),:),1); nroi1=nroi1+1; end filename=fullfile(filepath,['REX_Subject',num2str(nsub,'%03d'),'_Session',num2str(nses,'%03d'),'_ROI',num2str(nroi),'.mat']); load('REX.mat');save(filename,'params'); end n=n+1; conn_waitbar(n/N,h); end filename=fullfile(filepath,['ROI_Subject',num2str(nsub,'%03d'),'_Session',num2str(nses,'%03d'),'.mat']); save(filename,'data','names','source','xyz','sampledata'); % if str2num(version('-release'))>=14, save(filename,'-V6','data','names','source','xyz','sampledata'); % else, save(filename,'data','names','source','xyz','sampledata');end end end % eliminates ROIs not present in all subjects/sessions for nsub=1:CONN_x.Setup.nsubjects, nsess=CONN_x.Setup.nsessions(min(length(CONN_x.Setup.nsessions),nsub)); for nses=1:nsess, filename=fullfile(filepath,['ROI_Subject',num2str(nsub,'%03d'),'_Session',num2str(nses,'%03d'),'.mat']); load(filename,'names'); if nsub==1&&nses==1,ROInamesall=names; else, temp=zeros(1,length(ROInamesall)); for n1=1:length(ROInamesall), idx=strmatch(ROInamesall{n1},names,'exact'); temp(n1)=~isempty(idx); end if ~all(temp), idx=find(~temp); for n1=1:length(idx), disp(['Warning: ROI ',ROInamesall{idx(n1)},' missing from Subject ',num2str(nsub),' Session ',num2str(nses)]); end end ROInamesall={ROInamesall{find(temp)}}; end end end tmp=[]; for nsub=1:CONN_x.Setup.nsubjects, nsess=CONN_x.Setup.nsessions(min(length(CONN_x.Setup.nsessions),nsub)); for nses=1:nsess, filename=fullfile(filepath,['ROI_Subject',num2str(nsub,'%03d'),'_Session',num2str(nses,'%03d'),'.mat']); load(filename,'data','names','source','xyz','sampledata'); temp=zeros(1,length(names)); for n1=1:length(names), idx=strmatch(names{n1},ROInamesall,'exact'); temp(n1)=~isempty(idx); end if ~all(temp), if isempty(tmp), tmp=questdlg('Remove regions with incomplete data?','','Yes', 'No', 'Yes'); end if strcmp(tmp,'Yes'), data={data{find(temp)}}; names={names{find(temp)}}; xyz={xyz{find(temp)}}; save(filename,'data','names','source','xyz','sampledata'); % if str2num(version('-release'))>=14, save(filename,'-V6','data','names','source','xyz','sampledata'); % else, save(filename,'data','names','source','xyz','sampledata');end end end end end conn_waitbar('close',h); ; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % updates CONN_x.Preproc structure with a subset of ROIs plus all covariates %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if any(options==5), [path,name,ext]=fileparts(CONN_x.filename); filepath=CONN_x.folders.data; filename1=fullfile(filepath,['ROI_Subject',num2str(1,'%03d'),'_Session',num2str(1,'%03d'),'.mat']); filename2=fullfile(filepath,['COV_Subject',num2str(1,'%03d'),'_Session',num2str(1,'%03d'),'.mat']); if isempty(dir(filename1)), disp(['Not ready to process step conn_process_5']); return; end x1=load(filename1); x2=load(filename2); CONN_x.Preproc.variables.names=cat(2,x1.names,x2.names); CONN_x.Preproc.variables.types=cat(2,repmat({'roi'},[1,length(x1.names)]),repmat({'cov'},[1,length(x2.names)])); CONN_x.Preproc.variables.deriv=cat(2,repmat({0},[1,length(x1.names)]),repmat({1},[1,length(x2.names)])); CONN_x.Preproc.variables.dimensions={}; for n1=1:length(x1.names), CONN_x.Preproc.variables.dimensions{end+1}=size(x1.data{n1},2)*ones(1,2); end for n1=1:length(x2.names), CONN_x.Preproc.variables.dimensions{end+1}=size(x2.data{n1},2)*ones(1,2); end N1=length(x1.names);N2=length(x2.names); for nsub=1:CONN_x.Setup.nsubjects, nsess=CONN_x.Setup.nsessions(min(length(CONN_x.Setup.nsessions),nsub)); for nses=1:nsess, filename2=fullfile(filepath,['COV_Subject',num2str(nsub,'%03d'),'_Session',num2str(nses,'%03d'),'.mat']); x2=load(filename2); for n1=1:N2, CONN_x.Preproc.variables.dimensions{N1+n1}=max(CONN_x.Preproc.variables.dimensions{N1+n1},size(x2.data{n1},2)*ones(1,2)); end end end if isfield(CONN_x.Preproc.confounds,'names') && ~isempty(CONN_x.Preproc.confounds.names), initial=CONN_x.Preproc.confounds.names; dims=CONN_x.Preproc.confounds.dimensions; ders=CONN_x.Preproc.confounds.deriv; else, initial={'White Matter','CSF',x2.names{:}};dims={5,5}; ders={}; end CONN_x.Preproc.confounds.names={}; CONN_x.Preproc.confounds.types={}; CONN_x.Preproc.confounds.deriv={}; CONN_x.Preproc.confounds.dimensions={}; for n1=1:length(initial), idx=strmatch(initial{n1},CONN_x.Preproc.variables.names,'exact'); if ~isempty(idx), CONN_x.Preproc.confounds.names{end+1}=CONN_x.Preproc.variables.names{idx}; CONN_x.Preproc.confounds.types{end+1}=CONN_x.Preproc.variables.types{idx}; if length(ders)>=n1&&~isempty(ders{n1}), CONN_x.Preproc.confounds.deriv{end+1}=ders{n1}; else, CONN_x.Preproc.confounds.deriv{end+1}=CONN_x.Preproc.variables.deriv{idx};end if length(dims)>=n1&&~isempty(dims{n1}), CONN_x.Preproc.confounds.dimensions{end+1}=[min(dims{n1}(1),CONN_x.Preproc.variables.dimensions{idx}(1)),CONN_x.Preproc.variables.dimensions{idx}(1)]; else, CONN_x.Preproc.confounds.dimensions{end+1}=CONN_x.Preproc.variables.dimensions{idx}; end end end if ~isfield(CONN_x.Preproc,'filter')||isempty(CONN_x.Preproc.filter), CONN_x.Preproc.filter=[0,1/(2*CONN_x.Setup.RT)]; end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Creates DATA_Subject###_Condition###.mat files (whole-brain data after removal of confounding effects & filtering) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if any(options==6) && any(CONN_x.Setup.steps([2,3])), [path,name,ext]=fileparts(CONN_x.filename); filepath=CONN_x.folders.data; filepathresults=CONN_x.folders.preprocessing; nconditions=length(CONN_x.Setup.conditions.names)-1; h=conn_waitbar(0,['Step ',num2str(sum(options<=6)),'/',num2str(length(options)),': Preprocessing functional data']); REDO='Yes';filename=fullfile(filepathresults,['DATA_Subject',num2str(1,'%03d'),'_Condition',num2str(1,'%03d'),'.mat']); if ~isempty(dir(filename)),if isfield(CONN_x,'gui')&&isstruct(CONN_x.gui)&&isfield(CONN_x.gui,'overwrite'), REDO=CONN_x.gui.overwrite; else, REDO=questdlg('Overwrite existing subject results?','','Yes', 'No', 'Yes');end; end N=CONN_x.Setup.nsubjects; %sum(CONN_x.Setup.nsessions); if length(CONN_x.Setup.nsessions)==1, N=N*CONN_x.Setup.nsubjects; end n=0; for nsub=1:CONN_x.Setup.nsubjects, filename=fullfile(filepathresults,['DATA_Subject',num2str(nsub,'%03d'),'_Condition',num2str(1,'%03d'),'.mat']); if strcmp(REDO,'Yes')||isempty(dir(filename)), nsess=CONN_x.Setup.nsessions(min(length(CONN_x.Setup.nsessions),nsub)); clear Y X iX X1 X2 C; for nses=1:nsess, % loads all ROI COV COND data for this subject filename=fullfile(filepath,['DATA_Subject',num2str(nsub,'%03d'),'_Session',num2str(nses,'%03d'),'.mat']); if isempty(dir(filename)), disp(['Not ready to process step conn_process_6']); conn_waitbar('close',h); return; end Y{nses}=conn_vol(filename); filename=fullfile(filepath,['ROI_Subject',num2str(nsub,'%03d'),'_Session',num2str(nses,'%03d'),'.mat']); X1{nses}=load(filename); filename=fullfile(filepath,['COV_Subject',num2str(nsub,'%03d'),'_Session',num2str(nses,'%03d'),'.mat']); X2{nses}=load(filename); filename=fullfile(filepath,['COND_Subject',num2str(nsub,'%03d'),'_Session',num2str(nses,'%03d'),'.mat']); C{nses}=load(filename); X{nses}=conn_designmatrix(CONN_x.Preproc.confounds,X1{nses},X2{nses}); %X{nses}=conn_filter(CONN_x.Setup.RT,CONN_x.Preproc.filter,X{nses}); if size(X{nses},1)~=CONN_x.Setup.nscans{nsub}{nses}, error('Wrong dimensions'); end iX{nses}=pinv(X{nses}); end clear nsamples time0 dataroi conditionsweights; for ncondition=1:nconditions, % computes number of samples per condition nsamples{ncondition}=0; for nses=1:nsess, nsamples{ncondition}=nsamples{ncondition}+length(C{nses}.samples{ncondition}); end % dataroi{ncondition}=cell(1,length(X1{1}.data)); conditionsweights{ncondition}=cell(1,length(C{1}.weights{ncondition})); for nses=1:nsess, for nweight=1:length(C{nses}.weights{ncondition}), conditionsweights{ncondition}{nweight}=cat(1,conditionsweights{ncondition}{nweight},C{nses}.weights{ncondition}{nweight}); end end end clear Yout; for ncondition=1:nconditions, filename=fullfile(filepathresults,['DATA_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'.mat']); Yout{ncondition}=Y{1}; Yout{ncondition}.fname=filename; Yout{ncondition}.size.Nt=nsamples{ncondition}; Yout{ncondition}.conditionsweights=conditionsweights{ncondition}; Yout{ncondition}=conn_init_vol(Yout{ncondition}); end B=[]; for slice=1:Y{1}.matdim.dim(3), Bb=[]; if 1, % analyses per slice (all sessions together, faster but requires more memory) clear y; for nses=1:nsess, [y{nses},idx]=conn_get_slice(Y{nses},slice); if size(y{nses},1)~=CONN_x.Setup.nscans{nsub}{nses}, error('Wrong dimensions'); end if slice==1&&rank(X{nses})>=size(y{nses},1), disp(['Warning: Over-determined model (no degrees of freedom for subject ',num2str(nsub),' session ',num2str(nses),'). Please consider reducing the number, dimensions, or covariates order of the confounds or disregarding this subject/session']); end b=iX{nses}*y{nses}; y{nses}=y{nses}-X{nses}*b; y{nses}=conn_filter(CONN_x.Setup.RT,CONN_x.Preproc.filter,y{nses}); if isfield(CONN_x.Setup,'outputfiles')&&numel(CONN_x.Setup.outputfiles)>=1&&CONN_x.Setup.outputfiles(1), Bb=cat(1,Bb,b); end end for ncondition=1:nconditions, ytemp=[]; for nses=1:nsess, ytemp=cat(1,ytemp,y{nses}(C{nses}.samples{ncondition},:)); end conn_write_slice(Yout{ncondition},ytemp,slice); end else, % analyses per slice/session (slower but requires less memory) for nses=1:nsess, [y,idx]=conn_get_slice(Y{nses},slice); if size(y,1)~=CONN_x.Setup.nscans{nsub}{nses}, error('Wrong dimensions'); end if slice==1&&rank(X{nses})>=size(y,1), disp(['Warning: Over-determined model (no degrees of freedom for subject ',num2str(nsub),' session ',num2str(nses),'). Please consider reducing the number, dimensions, or covariates order of the confounds or disregarding this subject/session']); end b=iX{nses}*y; y=y-X{nses}*b; y=conn_filter(CONN_x.Setup.RT,CONN_x.Preproc.filter,y); if isfield(CONN_x.Setup,'outputfiles')&&numel(CONN_x.Setup.outputfiles)>=1&&CONN_x.Setup.outputfiles(1), Bb=cat(1,Bb,b); end for ncondition=1:nconditions, if nses==1, time0{ncondition}=1; end conn_write_slice(Yout{ncondition},y(C{nses}.samples{ncondition},:),slice,time0{ncondition}); time0{ncondition}=time0{ncondition}+length(C{nses}.samples{ncondition}); end end end if isfield(CONN_x.Setup,'outputfiles')&&numel(CONN_x.Setup.outputfiles)>=1&&CONN_x.Setup.outputfiles(1), if 0, %%% 0 to avoid memory errors B=cat(2,B,Bb); else if slice==1 V=struct('mat',Y{1}.matdim.mat,'dim',Y{1}.matdim.dim,'pinfo',[1;0;0],'fname',fullfile(filepathresults,['BETA_Subject',num2str(nsub,'%03d'),'.nii']),... 'dt',[spm_type('float32') spm_platform('bigend')]); %V=CONN_x.Setup.structural{nsub}{3}; V=V(1); %if isfield(V,'dt'), V.dt=[spm_type('float32') spm_platform('bigend')]; %elseif length(V.dim)>3, V.dim(4)=spm_type('float32'); end %V.fname=fullfile(filepathresults,['BETA_Subject',num2str(nsub),'.nii']); V=repmat(V,[size(Bb,1),1]);for nh=1:numel(V),V(nh).n=[nh,1];end V=spm_create_vol(V); % for n1=1:size(Bb,1) % V(n1)=V(1); % V(n1).fname=fullfile(filepathresults,['BETA_Subject',num2str(nsub),'_Regressor',num2str(n1,'%04d'),'.nii']); % V(n1)=spm_create_vol(V(n1)); % end end t=nan+zeros(Y{1}.matdim.dim(1:2)); for n1=1:size(Bb,1), t(idx)=Bb(n1,:); V(n1)=spm_write_plane(V(n1),t,slice); end end end conn_waitbar((n+slice/Y{1}.matdim.dim(3))/N,h); end if 0,%%% 0 to avoid memory errors if isfield(CONN_x.Setup,'outputfiles')&&numel(CONN_x.Setup.outputfiles)>=1&&CONN_x.Setup.outputfiles(1), t=nan+zeros(Y{1}.matdim.dim); V=struct('mat',Y{1}.matdim.mat,'dim',Y{1}.matdim.dim,'pinfo',[1;0;0],'fname','',... 'dt',[spm_type('float32') spm_platform('bigend')]); %V=CONN_x.Setup.structural{nsub}{3}; V=V(1); %if isfield(V,'dt'), V.dt=[spm_type('float32') spm_platform('bigend')]; %elseif length(V.dim)>3, V.dim(4)=spm_type('float32'); end for n1=1:size(B,1), t(Y{1}.voxels)=B(n1,:); V.fname=fullfile(filepathresults,['BETA_Subject',num2str(nsub,'%03d'),'_Regressor',num2str(n1,'%04d'),'.nii']); spm_write_vol(V,t); end end end if isfield(CONN_x.Setup,'outputfiles')&&numel(CONN_x.Setup.outputfiles)>=2&&CONN_x.Setup.outputfiles(2), for ncondition=1:nconditions, conn_matc2nii(Yout{ncondition}.fname,0); end end end n=n+1; conn_waitbar(n/N,h); end conn_waitbar('close',h); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Creates ROI_Subject###_Condition###.mat files (roi data after removal of confounding effects & filtering) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if any(options==7) && any(CONN_x.Setup.steps([1,2])), [path,name,ext]=fileparts(CONN_x.filename); filepath=CONN_x.folders.data; filepathresults=CONN_x.folders.preprocessing; nconditions=length(CONN_x.Setup.conditions.names)-1; h=conn_waitbar(0,['Step ',num2str(sum(options<=7)),'/',num2str(length(options)),': Preprocessing ROI data']); %REDO='Yes';filename=fullfile(filepathresults,['ROI_Subject',num2str(1,'%03d'),'_Condition',num2str(1,'%03d'),'.mat']); %if ~isempty(dir(filename)),if isfield(CONN_x,'gui')&&isstruct(CONN_x.gui)&&isfield(CONN_x.gui,'overwrite'), REDO=CONN_x.gui.overwrite; else, REDO=questdlg('Overwrite existing subject results?','','Yes', 'No', 'Yes');end; end REDO=[]; N=CONN_x.Setup.nsubjects; %sum(CONN_x.Setup.nsessions); if length(CONN_x.Setup.nsessions)==1, N=N*CONN_x.Setup.nsubjects; end n=0; for nsub=1:CONN_x.Setup.nsubjects, filename=fullfile(filepathresults,['ROI_Subject',num2str(nsub,'%03d'),'_Condition',num2str(1,'%03d'),'.mat']); if isempty(REDO)&&~isempty(dir(filename)), if isfield(CONN_x,'gui')&&isstruct(CONN_x.gui)&&isfield(CONN_x.gui,'overwrite'), REDO=CONN_x.gui.overwrite; else, REDO=questdlg('Overwrite existing subject results?','','Yes', 'No', 'Yes');end; end if strcmp(REDO,'Yes')||isempty(dir(filename)), nsess=CONN_x.Setup.nsessions(min(length(CONN_x.Setup.nsessions),nsub)); clear Y X iX X1 X2 C; for nses=1:nsess, % loads all ROI COV COND data for this subject filename=fullfile(filepath,['ROI_Subject',num2str(nsub,'%03d'),'_Session',num2str(nses,'%03d'),'.mat']); if isempty(dir(filename)), disp(['Not ready to process step conn_process_7']); conn_waitbar('close',h); return; end X1{nses}=load(filename); filename=fullfile(filepath,['COV_Subject',num2str(nsub,'%03d'),'_Session',num2str(nses,'%03d'),'.mat']); X2{nses}=load(filename); filename=fullfile(filepath,['COND_Subject',num2str(nsub,'%03d'),'_Session',num2str(nses,'%03d'),'.mat']); C{nses}=load(filename); X{nses}=conn_designmatrix(CONN_x.Preproc.confounds,X1{nses},X2{nses}); %X{nses}=conn_filter(CONN_x.Setup.RT,CONN_x.Preproc.filter,X{nses}); if size(X{nses},1)~=CONN_x.Setup.nscans{nsub}{nses}, error('Wrong dimensions'); end iX{nses}=pinv(X{nses}); end clear nsamples time0 dataroi d1dataroi d2dataroi conditionsweights; for ncondition=1:nconditions, % computes number of samples per condition nsamples{ncondition}=0; for nses=1:nsess, nsamples{ncondition}=nsamples{ncondition}+length(C{nses}.samples{ncondition}); end dataroi{ncondition}=cell(1,length(X1{1}.data)+length(X2{1}.data)); d1dataroi{ncondition}=cell(1,length(X1{1}.data)+length(X2{1}.data)); d2dataroi{ncondition}=cell(1,length(X1{1}.data)+length(X2{1}.data)); conditionsweights{ncondition}=cell(1,length(C{1}.weights{ncondition})); for nses=1:nsess, for nweight=1:length(C{nses}.weights{ncondition}), conditionsweights{ncondition}{nweight}=cat(1,conditionsweights{ncondition}{nweight},C{nses}.weights{ncondition}{nweight}); end end end for nroi=1:length(X1{1}.data), for nses=1:nsess, y=X1{nses}.data{nroi}; if size(y,1)~=CONN_x.Setup.nscans{nsub}{nses}, error('Wrong dimensions'); end b=iX{nses}*y; y=y-X{nses}*b; y=conn_filter(CONN_x.Setup.RT,CONN_x.Preproc.filter,y); d1y=convn(cat(1,y(1,:),y,y(end,:)),[1;0;-1]/2,'valid'); d2y=convn(cat(1,d1y(1,:),d1y,d1y(end,:)),[1;0;-1]/2,'valid'); for ncondition=1:nconditions, dataroi{ncondition}{nroi}=cat(1,dataroi{ncondition}{nroi},y(C{nses}.samples{ncondition},:)); d1dataroi{ncondition}{nroi}=cat(1,d1dataroi{ncondition}{nroi},d1y(C{nses}.samples{ncondition},:)); d2dataroi{ncondition}{nroi}=cat(1,d2dataroi{ncondition}{nroi},d2y(C{nses}.samples{ncondition},:)); end end end for ncov=1:length(X2{1}.data), for nses=1:nsess, y=X2{nses}.data{ncov}; if size(y,1)~=CONN_x.Setup.nscans{nsub}{nses}, error('Wrong dimensions'); end b=iX{nses}*y; y=y-X{nses}*b; y=conn_filter(CONN_x.Setup.RT,CONN_x.Preproc.filter,y); d1y=convn(cat(1,y(1,:),y,y(end,:)),[1;0;-1]/2,'valid'); d2y=convn(cat(1,d1y(1,:),d1y,d1y(end,:)),[1;0;-1]/2,'valid'); for ncondition=1:nconditions, if size(y,2)>size(dataroi{ncondition}{length(X1{1}.data)+ncov},2)&&size(dataroi{ncondition}{length(X1{1}.data)+ncov},2)>0, dataroi{ncondition}{length(X1{1}.data)+ncov}=cat(2,dataroi{ncondition}{length(X1{1}.data)+ncov}, zeros(size(dataroi{ncondition}{length(X1{1}.data)+ncov},1),size(y,2)-size(dataroi{ncondition}{length(X1{1}.data)+ncov},2))); d1dataroi{ncondition}{length(X1{1}.data)+ncov}=cat(2,d1dataroi{ncondition}{length(X1{1}.data)+ncov}, zeros(size(d1dataroi{ncondition}{length(X1{1}.data)+ncov},1),size(y,2)-size(d1dataroi{ncondition}{length(X1{1}.data)+ncov},2))); d2dataroi{ncondition}{length(X1{1}.data)+ncov}=cat(2,d2dataroi{ncondition}{length(X1{1}.data)+ncov}, zeros(size(d2dataroi{ncondition}{length(X1{1}.data)+ncov},1),size(y,2)-size(d2dataroi{ncondition}{length(X1{1}.data)+ncov},2))); end if size(y,2)<size(dataroi{ncondition}{length(X1{1}.data)+ncov},2), y=cat(2,y,zeros(size(y,1),size(dataroi{ncondition}{length(X1{1}.data)+ncov},2)-size(y,2))); d1y=cat(2,d1y,zeros(size(d1y,1),size(d1dataroi{ncondition}{length(X1{1}.data)+ncov},2)-size(d1y,2))); d2y=cat(2,d2y,zeros(size(d2y,1),size(d2dataroi{ncondition}{length(X1{1}.data)+ncov},2)-size(d2y,2))); end dataroi{ncondition}{length(X1{1}.data)+ncov}=cat(1,dataroi{ncondition}{length(X1{1}.data)+ncov},y(C{nses}.samples{ncondition},:)); d1dataroi{ncondition}{length(X1{1}.data)+ncov}=cat(1,d1dataroi{ncondition}{length(X1{1}.data)+ncov},d1y(C{nses}.samples{ncondition},:)); d2dataroi{ncondition}{length(X1{1}.data)+ncov}=cat(1,d2dataroi{ncondition}{length(X1{1}.data)+ncov},d2y(C{nses}.samples{ncondition},:)); end end end for ncondition=1:nconditions, data=dataroi{ncondition}; d1data=d1dataroi{ncondition}; d2data=d2dataroi{ncondition}; names=cat(2,X1{1}.names,X2{1}.names); xyz=cat(2,X1{1}.xyz,repmat({[nan,nan,nan]},[1,length(X2{1}.data)])); %voxels=X1{1}.voxels; %weights=X1{1}.weights; source=X1{1}.source; conditionname=C{1}.names{ncondition}; conditionweights=conditionsweights{ncondition}; filename=fullfile(filepathresults,['ROI_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'.mat']); save(filename,'data','d1data','d2data','names','xyz','source','conditionweights','conditionname'); % if str2num(version('-release'))>=14, save(filename,'-V6','data','names','xyz','source','conditionweights','conditionname'); % else, save(filename,'data','names','xyz','source','conditionweights','conditionname');end end end n=n+1; conn_waitbar(n/N,h); end conn_waitbar('close',h); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Creates vvPC_Subject###_Condition###.mat files (voxel-to-voxel first-level SVD decomposition) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if any(options==8) && any(CONN_x.Setup.steps([3])), [path,name,ext]=fileparts(CONN_x.filename); filepath=CONN_x.folders.preprocessing; nconditions=length(CONN_x.Setup.conditions.names)-1; h=conn_waitbar(0,['Step ',num2str(sum(options<=8)),'/',num2str(length(options)),': preprocessing voxel-to-voxel covariance']); REDO=[]; % filename=fullfile(fileparts(which('spm')),'apriori','brainmask.nii'); % Vmask=spm_vol(filename); % THR_MASK=.25; MAXDIMS=256; filename=fullfile(filepath,['DATA_Subject',num2str(1,'%03d'),'_Condition',num2str(1,'%03d'),'.mat']); if isempty(dir(filename)), disp(['Not ready to process step conn_process_8']); return; end Y=conn_vol(filename); N=1.1*CONN_x.Setup.nsubjects*nconditions*Y.matdim.dim(3);n=0; for nsub=1:CONN_x.Setup.nsubjects, for ncondition=1:nconditions, %filename=fullfile(filepath,['vvPCcov_SubjectA',num2str(nsub,'%03d'),'_SubjectB',num2str(nsub,'%03d'),'_ConditionA',num2str(ncondition,'%03d'),'_ConditionB',num2str(ncondition,'%03d'),'.mat']); filename=fullfile(filepath,['vvPC_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'.mat']); if isempty(REDO)&&~isempty(dir(filename)), if isfield(CONN_x,'gui')&&isstruct(CONN_x.gui)&&isfield(CONN_x.gui,'overwrite'), REDO=CONN_x.gui.overwrite; else, REDO=questdlg('Overwrite existing subject results?','','Yes', 'No', 'Yes');end; end if strcmp(REDO,'Yes')||(isempty(dir(filename))), filename=fullfile(filepath,['DATA_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'.mat']); if isempty(dir(filename)), disp(['Not ready to process step conn_process_8']); return; end Y=conn_vol(filename); if isfield(Y,'conditionsweights') clear X1; X1.conditionweights=Y.conditionsweights; else filename=fullfile(filepath,['ROI_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'.mat']); X1=load(filename); end DOF=max(0,Y.size.Nt*(min(1/(2*CONN_x.Setup.RT),CONN_x.Preproc.filter(2))-max(0,CONN_x.Preproc.filter(1)))/(1/(2*CONN_x.Setup.RT))+1); Cy=0;Cidx=[]; for slice=1:Y.matdim.dim(3), [y,idx]=conn_get_slice(Y,slice); %[xyzx,xyzy]=ind2sub(Y.matdim.dim(1:2),idx);xyz=Y.matdim.mat*[xyzx,xyzy,zeros(size(xyzx))+slice,ones(size(xyzx))]'; %z=spm_get_data(Vmask,pinv(Vmask(1).mat)*xyz); %idxt=find(z>THR_MASK&~any(isnan(y),1)); idxt=find(~any(isnan(y),1)); if ~isempty(idxt), Cidx=cat(1,Cidx,idx(idxt)+(slice-1)*Y.matdim.dim(1)*Y.matdim.dim(2)); y=detrend(y(:,idxt),'constant'); y=y.*repmat(X1.conditionweights{1},[1,size(y,2)]); y=y.*repmat(sqrt(1./max(eps,sum(abs(y).^2,1))),[size(y,1),1]); Cy=Cy+y*y'; end n=n+.1; conn_waitbar(n/N,h); end [Q1,D]=svd(Cy); D=diag(D); DIMS=min([MAXDIMS,ceil(DOF),sum(D>1e-8)]); Q1=Q1(:,1:DIMS); D=D(1:DIMS); filename_D=fullfile(filepath,['vvPCeig_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'.mat']); save(filename_D,'D'); % filename_A=fullfile(filepath,['vvPC_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'.nii']); % spatial base % Yout_A=struct('fname',filename_A,'mat',Y.matdim.mat,'dim',Y.matdim.dim,'pinfo',[1;0;0],'n',[1,1],'dt',[spm_type('float32'),spm_platform('bigend')],'descrip','conn SVD (spatial base)'); % Yout_A=repmat(Yout_A,[DIMS,1]);for nh=1:DIMS,Yout_A(nh).n=[nh,1];end % Yout_A=spm_create_vol(Yout_A); filename_A=fullfile(filepath,['vvPC_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'.mat']); % spatial base Yout_A=Y; Yout_A.fname=filename_A;Yout_A.size.Nt=DIMS;Yout_A.DOF=DOF; Yout_A.BASE.Q1=Q1;Yout_A.BASE.D=D; Yout_A=conn_init_vol(Yout_A,Cidx); for slice=1:Y.matdim.dim(3), [y,idx]=conn_get_slice(Y,slice); %[xyzx,xyzy]=ind2sub(Y.matdim.dim(1:2),idx);xyz=Y.matdim.mat*[xyzx,xyzy,zeros(size(xyzx))+slice,ones(size(xyzx))]'; %z=spm_get_data(Vmask,pinv(Vmask(1).mat)*xyz); %idxt=find(z>THR_MASK&~any(isnan(y),1)); idxt=find(~any(isnan(y),1)); if ~isempty(idxt), y=detrend(y(:,idxt),'constant'); y=y.*repmat(X1.conditionweights{1},[1,size(y,2)]); y=y.*repmat(sqrt(1./max(eps,sum(abs(y).^2,1))),[size(y,1),1]); Q2=Q1'*y; e=sum(abs(y).^2,1); conn_write_slice(Yout_A,Q2,slice); % Fplane=zeros(Y.matdim.dim(1:2)); % for ndim=1:DIMS, % Fplane(idx(idxt))=Q2(ndim,:); % Yout_A(ndim)=spm_write_plane(Yout_A(ndim),Fplane,slice); % % conn_write_slice(Yout_A,Q2(ndim,:),slice,ndim); % end % else % Fplane=zeros(Y.matdim.dim(1:2)); % for ndim=1:DIMS, % Yout_A(ndim)=spm_write_plane(Yout_A(ndim),Fplane,slice); % end end n=n+1; conn_waitbar(n/N,h); end else, n=n+1.1*Y.matdim.dim(3); end end end conn_waitbar('close',h); % if nconditions>1 % N=CONN_x.Setup.nsubjects*(nconditions-1);n=0; % h=conn_waitbar(0,['Step ',num2str(sum(options<=8)),'/',num2str(length(options)),': preprocessing subject-to-subject covariance']); % for nsub=1:CONN_x.Setup.nsubjects, % for ncondition=2:nconditions, % filename=fullfile(filepath,['vvPCeig_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'_Condition',num2str(ncondition,'%03d'),'.mat']); % %filename=fullfile(filepath,['vvPC_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'.nii']); % if isempty(REDO)&&~isempty(dir(filename)), % if isfield(CONN_x,'gui')&&isstruct(CONN_x.gui)&&isfield(CONN_x.gui,'overwrite'), REDO=CONN_x.gui.overwrite; else, REDO=questdlg('Overwrite existing subject results?','','Yes', 'No', 'Yes');end; % end % if strcmp(REDO,'Yes')||(isempty(dir(filename))), % % filename_A=fullfile(filepath,['vvPC_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'.nii']); % % Yout_A=spm_vol(filename_A); % filename_A=fullfile(filepath,['vvPC_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'.mat']); % Yout_A=conn_vol(filename_A); % % [gridx,gridy]=ndgrid(1:Yout_A(1).dim(1),1:Yout_A(1).dim(2));xyz=[gridx(:),gridy(:),ones(numel(gridx),2)]'; % Dall=zeros(Yout_A.size.Nt,Yout_A.size.Nt,ncondition); % for slice=1:Yout_A.size.Ns, % % xyz(3,:)=slice; % yA=conn_get_slice(Yout_A,slice); % for ncondition2=1:ncondition-1, % filename_B=fullfile(filepath,['vvPC_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition2,'%03d'),'.mat']); % Yout_B=conn_vol(filename_B); % yB=conn_get_slice(Yout_B,slice); % Dall(:,:,ncondition2)=Dall(:,:,ncondition2)+yA*yB'; % end % end % for ncondition2=1:ncondition-1, % D=Dall(:,:,ncondition2); % filename_D=fullfile(filepath,['vvPCeig_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'_Condition',num2str(ncondition2,'%03d'),'.mat']); % between-condition cross-product % save(filename_D,'D'); % end % n=n+1; % conn_waitbar(n/N,h); % else, n=n+1; end % end % end % conn_waitbar('close',h); % end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % updates CONN_x.Analyses structure with all ROIs %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if any(options==9), if any(CONN_x.Setup.steps([1,2])) [path,name,ext]=fileparts(CONN_x.filename); filepath=CONN_x.folders.preprocessing; filename1=fullfile(filepath,['ROI_Subject',num2str(1,'%03d'),'_Condition',num2str(1,'%03d'),'.mat']); if isempty(dir(filename1)), disp(['Not ready to process step conn_process_9']); return; end x1=load(filename1); if nargin>1,analyses=varargin{1}; % selected analysis only else, analyses=1:length(CONN_x.Analyses); end; doanalyses=analyses>0; analyses=analyses(doanalyses); analysisbak=CONN_x.Analysis; for ianalysis=analyses, CONN_x.Analysis=ianalysis; if isempty(CONN_x.Analyses(ianalysis).name),CONN_x.Analyses(ianalysis).name=['ANALYSIS_',num2str(ianalysis,'%02d')]; end; if ~exist(fullfile(CONN_x.folders.firstlevel,CONN_x.Analyses(ianalysis).name),'dir'), [ok,nill]=mkdir(CONN_x.folders.firstlevel,CONN_x.Analyses(ianalysis).name); end; CONN_x.Analyses(ianalysis).variables.names={}; CONN_x.Analyses(ianalysis).variables.types={}; CONN_x.Analyses(ianalysis).variables.deriv={}; CONN_x.Analyses(ianalysis).variables.dimensions={}; for n1=1:length(x1.names), idx=strmatch(x1.names{n1},CONN_x.Preproc.confounds.names,'exact'); if isempty(idx), CONN_x.Analyses(ianalysis).variables.names{end+1}=x1.names{n1}; CONN_x.Analyses(ianalysis).variables.types{end+1}='roi'; CONN_x.Analyses(ianalysis).variables.deriv{end+1}=0; CONN_x.Analyses(ianalysis).variables.dimensions{end+1}=[size(x1.data{n1},2),size(x1.data{n1},2)]; end end if isfield(CONN_x.Analyses(ianalysis).regressors,'names') && ~isempty(CONN_x.Analyses(ianalysis).regressors.names), initial=CONN_x.Analyses(ianalysis).regressors.names; dims=CONN_x.Analyses(ianalysis).regressors.dimensions; ders=CONN_x.Analyses(ianalysis).regressors.deriv; else, initial=CONN_x.Analyses(ianalysis).variables.names; dims={}; ders={}; end CONN_x.Analyses(ianalysis).regressors.names={}; CONN_x.Analyses(ianalysis).regressors.types={}; CONN_x.Analyses(ianalysis).regressors.deriv={}; CONN_x.Analyses(ianalysis).regressors.dimensions={}; for n1=1:length(initial), idx=strmatch(initial{n1},CONN_x.Analyses(ianalysis).variables.names,'exact'); if ~isempty(idx)&&~strcmp(initial{n1},'Grey Matter')&&~strcmp(initial{n1},'White Matter')&&~strcmp(initial{n1},'CSF'), CONN_x.Analyses(ianalysis).regressors.names{end+1}=CONN_x.Analyses(ianalysis).variables.names{idx}; CONN_x.Analyses(ianalysis).regressors.types{end+1}=CONN_x.Analyses(ianalysis).variables.types{idx}; if length(ders)>=n1&&~isempty(ders{n1}), CONN_x.Analyses(ianalysis).regressors.deriv{end+1}=ders{n1}; else, CONN_x.Analyses(ianalysis).regressors.deriv{end+1}=CONN_x.Analyses(ianalysis).variables.deriv{idx};end if length(dims)>=n1&&~isempty(dims{n1}), CONN_x.Analyses(ianalysis).regressors.dimensions{end+1}=[min(dims{n1}(1),CONN_x.Analyses(ianalysis).variables.dimensions{idx}(1)),CONN_x.Analyses(ianalysis).variables.dimensions{idx}(1)]; else, CONN_x.Analyses(ianalysis).regressors.dimensions{end+1}=CONN_x.Analyses(ianalysis).variables.dimensions{idx}; end end end if ~isfield(CONN_x.Analyses(ianalysis),'measure') || isempty(CONN_x.Analyses(ianalysis).measure), CONN_x.Analyses(ianalysis).measure=1; end if ~isfield(CONN_x.Analyses(ianalysis),'weight') || isempty(CONN_x.Analyses(ianalysis).weight), CONN_x.Analyses(ianalysis).weight=2; end end CONN_x.Analysis=analysisbak; end if any(CONN_x.Setup.steps([3]))&&(nargin<=1||any(varargin{1}==0)), CONN_x.vvAnalyses.variables=conn_v2v('measures'); if isfield(CONN_x.vvAnalyses.regressors,'names') && ~isempty(CONN_x.vvAnalyses.regressors.names), initial=CONN_x.vvAnalyses.regressors; CONN_x.vvAnalyses.regressors=conn_v2v('empty'); for n1=1:numel(initial.names) idx=strmatch(initial.names{n1},CONN_x.vvAnalyses.variables.names,'exact'); optionsnames=fieldnames(CONN_x.vvAnalyses.variables); for n2=1:numel(optionsnames), if ~isempty(idx)&&isempty(initial.(optionsnames{n2}){n1}), CONN_x.vvAnalyses.regressors.(optionsnames{n2}){n1}=CONN_x.vvAnalyses.variables.(optionsnames{n2}){idx(1)}; else CONN_x.vvAnalyses.regressors.(optionsnames{n2}){n1}=initial.(optionsnames{n2}){n1}; end end if isempty(idx), CONN_x.vvAnalyses.regressors.measuretype{n1}=1; end end else CONN_x.vvAnalyses.regressors=CONN_x.vvAnalyses.variables; end end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Creates resultsDATA_Subject###_Condition###.mat files (first-level voxel-to-voxel analysis) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if 0,%any(options==8.5), [path,name,ext]=fileparts(CONN_x.filename); filepath=CONN_x.folders.preprocessing; nconditions=length(CONN_x.Setup.conditions.names)-1; h=conn_waitbar(0,['Step ',num2str(sum(options<=8.5)),'/',num2str(length(options)),': voxel-to-voxel first-level analyses']); % workinprogress end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Creates resultsDATA_Subject###_Condition###_Source###.mat files (first-level ROI-to-voxel analysis) % Creates BETA_Subject###_Condition###_Source###.mat files (first-level seed-to-voxel analyses) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if any(options==10) && any(CONN_x.Setup.steps([2])), [path,name,ext]=fileparts(CONN_x.filename); filepath=CONN_x.folders.preprocessing; nconditions=length(CONN_x.Setup.conditions.names)-1; filename=fullfile(filepath,['ROI_Subject',num2str(1,'%03d'),'_Condition',num2str(1,'%03d'),'.mat']); if isempty(dir(filename)), disp(['Not ready to process step conn_process_10']); return; end X1=load(filename); if nargin>1,analyses=varargin{1}; % selected analysis only else, analyses=1:length(CONN_x.Analyses); end; doanalyses=false(1,numel(analyses)); for nanalyses=1:numel(analyses),if analyses(nanalyses)>0&&any(CONN_x.Analyses(analyses(nanalyses)).type==[2,3]), doanalyses(nanalyses)=true; end; end analyses=analyses(doanalyses); h=conn_waitbar(0,['Step ',num2str(sum(options<=10)),'/',num2str(length(options)),': ROI-to-voxel first-level analyses']); REDO=[]; analysisbak=CONN_x.Analysis; for nanalyses=1:length(analyses), ianalysis=analyses(nanalyses); CONN_x.Analysis=ianalysis; % ianalysis=CONN_x.Analysis; filepathresults=fullfile(CONN_x.folders.firstlevel,CONN_x.Analyses(ianalysis).name); [X,nill,names]=conn_designmatrix(CONN_x.Analyses(ianalysis).regressors,X1,[]); nrois=size(X,2)-1; iroi=[];isnew=[];for nroi=1:nrois,[iroi(nroi),isnew(nroi)]=conn_sourcenames(names{nroi},'+');end filename=fullfile(filepath,['DATA_Subject',num2str(1,'%03d'),'_Condition',num2str(1,'%03d'),'.mat']); Y=conn_vol(filename); if nanalyses==1, N=CONN_x.Setup.nsubjects*nconditions*Y.matdim.dim(3)*length(analyses);n=0;end for ncondition=1:nconditions, for nsub=1:CONN_x.Setup.nsubjects, filename=fullfile(filepath,['DATA_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'.mat']); Y=conn_vol(filename); filename=fullfile(filepath,['ROI_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'.mat']); X1=load(filename); [X,nill,names]=conn_designmatrix(CONN_x.Analyses(ianalysis).regressors,X1,[]); clear Yout; for nroi=1:nrois, filename=fullfile(filepathresults,['BETA_Subject',num2str(nsub),'_Condition',num2str(ncondition,'%03d'),'_Source',num2str(iroi(nroi),'%03d'),'.nii']); %filename=fullfile(filepathresults,['resultsDATA_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'_Source',num2str(iroi(nroi),'%03d'),'.mat']); isnew(nroi)=isnew(nroi)|isempty(dir(filename)); end if any(isnew), switch(CONN_x.Analyses(ianalysis).measure), case {2,4}, %partial isnew=ones(size(isnew)); end end if isempty(REDO)&&~all(isnew), if isfield(CONN_x,'gui')&&isstruct(CONN_x.gui)&&isfield(CONN_x.gui,'overwrite'), REDO=CONN_x.gui.overwrite; else, REDO=questdlg('Overwrite existing subject results?','','Yes', 'No', 'Yes');end; end if strcmp(REDO,'No'), idxredo=find(isnew); X=cat(2,X(:,1),X(:,1+idxredo)); else, idxredo=1:nrois; end if length(idxredo)>0, X=cat(2,X(:,1),detrend(X(:,2:end),'constant')); switch(CONN_x.Analyses(ianalysis).weight), case 1, case 2, X=X.*repmat(X1.conditionweights{1},[1,size(X,2)]); case 3, X=X.*repmat(X1.conditionweights{2},[1,size(X,2)]); end switch(CONN_x.Analyses(ianalysis).measure), case {1,3}, %bivariate iX=pinv(diag(diag(X'*X))); DOF=max(0,Y.size.Nt*(min(1/(2*CONN_x.Setup.RT),CONN_x.Preproc.filter(2))-max(0,CONN_x.Preproc.filter(1)))/(1/(2*CONN_x.Setup.RT))-1); case {2,4}, %partial iX=pinv(X'*X); DOF=max(0,Y.size.Nt*(min(1/(2*CONN_x.Setup.RT),CONN_x.Preproc.filter(2))-max(0,CONN_x.Preproc.filter(1)))/(1/(2*CONN_x.Setup.RT))-rank(X)+1); end filename=fullfile(filepathresults,['se_Subject',num2str(nsub),'_Condition',num2str(ncondition,'%03d'),'.nii']); SEout=struct('mat',Y.matdim.mat,'dim',Y.matdim.dim,'fname',filename,'dt',[spm_type('float32') spm_platform('bigend')]); SEout=spm_create_vol(SEout); % filename=fullfile(filepathresults,['seDATA_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'.mat']); % SEout=Y; SEout.fname=filename; % SEout.size.Nt=1;%CONN_x.Setup.nsubjects; % SEout.DOF=DOF; % SEout=conn_init_vol(SEout); for nroi=1:length(idxredo), filename=fullfile(filepathresults,['BETA_Subject',num2str(nsub),'_Condition',num2str(ncondition,'%03d'),'_Source',num2str(iroi(idxredo(nroi)),'%03d'),'.nii']); Yout{nroi}=struct('mat',Y.matdim.mat,'dim',Y.matdim.dim,'fname',filename,'pinfo',[1;0;0],'n',[1,1],'dt',[spm_type('float32') spm_platform('bigend')]); Yout{nroi}=spm_create_vol(Yout{nroi}); % filename=fullfile(filepathresults,['resultsDATA_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'_Source',num2str(iroi(idxredo(nroi)),'%03d'),'.mat']); % Yout{nroi}=Y; Yout{nroi}.fname=filename; % Yout{nroi}.size.Nt=1;%CONN_x.Setup.nsubjects; % Yout{nroi}=conn_init_vol(Yout{nroi}); end for slice=1:Y.matdim.dim(3), [y,idx]=conn_get_slice(Y,slice); y=detrend(y,'constant'); switch(CONN_x.Analyses(ianalysis).weight), case 1, case 2, y=y.*repmat(X1.conditionweights{1},[1,size(y,2)]); case 3, y=y.*repmat(X1.conditionweights{2},[1,size(y,2)]); end B=iX*(X'*y); e=sqrt(sum(abs(y).^2,1)); switch(CONN_x.Analyses(ianalysis).measure), case {1,2}, %correlation r=sqrt(diag(iX)); B=B./max(eps,r*e); B=atanh(max(eps-1,min(1-eps,B))); e(:)=1./max(eps,sqrt(DOF-3)); case {3,4}, %regression e=e/max(eps,DOF); end %disp([slice,nsub]) % conn_write_slice(SEout,e,slice);%nsub); % for nroi=1:length(idxredo); % conn_write_slice(Yout{nroi},B(1+nroi,:),slice);%nsub); % end t=zeros(Y.matdim.dim(1:2)); t(idx)=e; SEout=spm_write_plane(SEout,t,slice); for nroi=1:length(idxredo); t(idx)=B(1+nroi,:); Yout{nroi}=spm_write_plane(Yout{nroi},t,slice); end n=n+1; conn_waitbar(n/N,h); end else, n=n+Y.matdim.dim(3); end end end CONN_x.Analyses(ianalysis).sources=names; fileout=fullfile(filepathresults,'_list_sources.txt'); fh=fopen(fileout,'wt'); for n1=1:length(CONN_x.Analyses(ianalysis).sourcenames),fprintf(fh,'Source%03d = %s\n',n1,CONN_x.Analyses(ianalysis).sourcenames{n1});end fclose(fh); fileout=fullfile(filepathresults,'_list_conditions.txt'); fh=fopen(fileout,'wt'); for n1=1:nconditions,fprintf(fh,'Condition%03d = %s\n',n1,CONN_x.Setup.conditions.names{n1});end fclose(fh); end CONN_x.Analysis=analysisbak; conn_waitbar('close',h); ; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Creates resultsROI_Subject###_Condition###.mat files (first-level ROI-to-ROI analyses) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if any(options==11) && any(CONN_x.Setup.steps([1])), [path,name,ext]=fileparts(CONN_x.filename); filepath=CONN_x.folders.preprocessing; if nargin>1,analyses=varargin{1}; % selected analysis only else, analyses=1:length(CONN_x.Analyses); end; doanalyses=false(1,numel(analyses)); for nanalyses=1:numel(analyses),if analyses(nanalyses)>0&&any(CONN_x.Analyses(analyses(nanalyses)).type==[1,3]), doanalyses(nanalyses)=true; end; end analyses=analyses(doanalyses); h=conn_waitbar(0,['Step ',num2str(sum(options<=11)),'/',num2str(length(options)),': ROI-to-ROI first-level analyses']); analysisbak=CONN_x.Analysis; for nanalyses=1:length(analyses), ianalysis=analyses(nanalyses); CONN_x.Analysis=ianalysis; % ianalysis=CONN_x.Analysis; filepathresults=fullfile(CONN_x.folders.firstlevel,CONN_x.Analyses(ianalysis).name); nconditions=length(CONN_x.Setup.conditions.names)-1; %REDO='Yes';filename=fullfile(filepathresults,['resultsROI_Subject',num2str(1,'%03d'),'_Condition',num2str(1,'%03d'),'.mat']); %if ~isempty(dir(filename)),if isfield(CONN_x,'gui')&&isstruct(CONN_x.gui)&&isfield(CONN_x.gui,'overwrite'), REDO=CONN_x.gui.overwrite; else, REDO=questdlg('Overwrite existing subject results?','','Yes', 'No', 'Yes');end; end if nanalyses==1, n=0; end for ncondition=1:nconditions, for nsub=1:CONN_x.Setup.nsubjects, filename=fullfile(filepathresults,['resultsROI_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'.mat']); if 1,%strcmp(REDO,'Yes')||isempty(dir(filename)), filename=fullfile(filepath,['ROI_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'.mat']); if isempty(dir(filename)), disp(['Not ready to process step conn_process_10']); conn_waitbar('close',h);return; end X1=load(filename); [X,nill,names]=conn_designmatrix(CONN_x.Analyses(ianalysis).regressors,X1,[]); nrois=size(X,2)-1; [X2,nill,names2,xyz2]=conn_designmatrix({CONN_x.Analyses(ianalysis).variables,CONN_x.Analyses(ianalysis).regressors},X1,[]); nrois2=size(X2,2)-1; idxroi1roi2=zeros(1,nrois); for n1=1:nrois,temp=strmatch(names{n1},names2,'exact'); idxroi1roi2(n1)=temp(1);end X2=cat(2,X2(:,1),X2(:,1+idxroi1roi2),X2(:,1+setdiff(1:nrois2,idxroi1roi2))); names2=cat(2,{names2{idxroi1roi2}},{names2{setdiff(1:nrois2,idxroi1roi2)}}); xyz=cat(2,{xyz2{idxroi1roi2}},{xyz2{setdiff(1:nrois2,idxroi1roi2)}}); if nanalyses==1&&nsub==1 && ncondition==1,N=CONN_x.Setup.nsubjects*nconditions*nrois2*length(analyses); nrois2bak=nrois2; elseif nsub==1 && ncondition==1, N=N-CONN_x.Setup.nsubjects*nconditions*nrois2bak+CONN_x.Setup.nsubjects*nconditions*nrois2; end Z=zeros(nrois,nrois2);%+diag(nan+zeros(nrois,1)); SE=zeros(1,nrois2); X=cat(2,X(:,1),detrend(X(:,2:end),'constant'));X2=cat(2,X2(:,1),detrend(X2(:,2:end),'constant')); switch(CONN_x.Analyses(ianalysis).weight), case 1, case 2, X=X.*repmat(X1.conditionweights{1},[1,size(X,2)]);X2=X2.*repmat(X1.conditionweights{1},[1,size(X2,2)]); case 3, X=X.*repmat(X1.conditionweights{2},[1,size(X,2)]);X2=X2.*repmat(X1.conditionweights{2},[1,size(X2,2)]); end switch(CONN_x.Analyses(ianalysis).measure), case {1,3}, %bivariate DOF=max(0,size(X,1)*(min(1/(2*CONN_x.Setup.RT),CONN_x.Preproc.filter(2))-max(0,CONN_x.Preproc.filter(1)))/(1/(2*CONN_x.Setup.RT))-1); case {2,4}, %partial DOF=max(0,size(X,1)*(min(1/(2*CONN_x.Setup.RT),CONN_x.Preproc.filter(2))-max(0,CONN_x.Preproc.filter(1)))/(1/(2*CONN_x.Setup.RT))-rank(X)+1); end for nroi=1:nrois2, y=X2(:,1+nroi); switch(CONN_x.Analyses(ianalysis).measure), case {1,3}, %bivariate x=cat(2,X(:,1),X(:,1+setdiff(1:nrois,nroi))); iX=pinv(diag(diag(x'*x))); case {2,4}, %partial x=cat(2,X(:,1),X(:,1+setdiff(1:nrois,nroi))); iX=pinv(x'*x); end B=iX*(x'*y); e=sqrt(sum(abs(y).^2,1)); switch(CONN_x.Analyses(ianalysis).measure), case {1,2}, %correlation r=sqrt(diag(iX)); B=B./max(eps,r*e); B(~isnan(B))=atanh(max(eps-1,min(1-eps,B(~isnan(B))))); SE(nroi)=1./max(eps,sqrt(DOF-3)); case {3,4}, SE(nroi)=e/max(eps,DOF); end Z(setdiff(1:nrois,nroi),nroi)=B(2:end); if nroi<=nrois,Z(nroi,nroi)=nan;end n=n+1; conn_waitbar(n/N,h); end % xyz={}; %note: this assumes constant number of dimensions per subject for analysis regressors % for n1=1:length(CONN_x.Analyses(ianalysis).variables.names), % for n2=1:CONN_x.Analyses(ianalysis).variables.deriv{n1}+1, % for n3=1:CONN_x.Analyses(ianalysis).variables.dimensions{n1}(1), % idx=strmatch(CONN_x.Analyses(ianalysis).variables.names{n1},X1.names,'exact'); % if isempty(idx), xyz{end+1}=''; else, xyz{end+1}=X1.xyz{idx}; end % end % end; % end % xyz=cat(2,{xyz{idxroi1roi2}},{xyz{setdiff(1:nrois2,idxroi1roi2)}}); regressors=CONN_x.Analyses(ianalysis).regressors; filename=fullfile(filepathresults,['resultsROI_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'.mat']); save(filename,'Z','regressors','names','names2','xyz','SE','DOF'); end end end end CONN_x.Analysis=analysisbak; conn_waitbar('close',h); ; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Creates BETA_Subject###_Condition###_Source###.mat files (first-level analysis results for SPM) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if 0,%any(options==12) && any(CONN_x.Setup.steps([2])), [path,name,ext]=fileparts(CONN_x.filename); filepath=CONN_x.folders.preprocessing; if nargin>1,analyses=varargin{1}; % selected analysis only else, analyses=1:length(CONN_x.Analyses); end; doanalyses=false(1,numel(analyses)); for nanalyses=1:numel(analyses),if analyses(nanalyses)>0&&any(CONN_x.Analyses(analyses(nanalyses)).type==[2,3]), doanalyses(nanalyses)=true; end; end analyses=analyses(doanalyses); h=conn_waitbar(0,['Step ',num2str(sum(options<=12)),'/',num2str(length(options)),': Creating BETA volumes']); analysisbak=CONN_x.Analysis; for nanalyses=1:length(analyses), ianalysis=analyses(nanalyses); CONN_x.Analysis=ianalysis; % ianalysis=CONN_x.Analysis; filepathresults=fullfile(CONN_x.folders.firstlevel,CONN_x.Analyses(ianalysis).name); nconditions=length(CONN_x.Setup.conditions.names)-1; %nrois=0;for n1=1:length(CONN_x.Analyses.regressors.names), nrois=nrois+CONN_x.Analyses.regressors.dimensions{n1}(1)*(CONN_x.Analyses.regressors.deriv{n1}+1); end; filename=fullfile(filepath,['ROI_Subject',num2str(1,'%03d'),'_Condition',num2str(1,'%03d'),'.mat']); if isempty(dir(filename)), disp(['Not ready to process step conn_process_11']); conn_waitbar('close',h);return; end X1=load(filename); [X,nill,names]=conn_designmatrix(CONN_x.Analyses(ianalysis).regressors,X1,[]); nrois=size(X,2)-1; iroi=[];isnew=[];for nroi=1:nrois,[iroi(nroi),isnew(nroi)]=conn_sourcenames(names{nroi},'-');end if any(isnew), error(['Non-existing ROI first-level data for ',names{find(isnew)},' subject ',num2str(nsub),'. Please repeat first-level analyses']); return; end if nanalyses==1, REDO=[]; n=0; N=CONN_x.Setup.nsubjects*nconditions*nrois*length(analyses); nroisbak=nrois; else N=N-CONN_x.Setup.nsubjects*nconditions*nroisbak+CONN_x.Setup.nsubjects*nconditions*nrois; end clear Yout; for ncondition=1:nconditions, for nroi=1:nrois, for nsub=1:CONN_x.Setup.nsubjects, filename=fullfile(filepathresults,['BETA_Subject',num2str(nsub),'_Condition',num2str(ncondition,'%03d'),'_Source',num2str(iroi(nroi),'%03d'),'.nii']); if isempty(REDO)&&~(isnew(nroi)||isempty(dir(filename))), if isfield(CONN_x,'gui')&&isstruct(CONN_x.gui)&&isfield(CONN_x.gui,'overwrite'), REDO=CONN_x.gui.overwrite; else, REDO=questdlg('Overwrite existing subject results?','','Yes', 'No', 'Yes');end; end if strcmp(REDO,'Yes')||(isnew(nroi)||isempty(dir(filename))), filename=fullfile(filepathresults,['resultsDATA_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'_Source',num2str(iroi(nroi),'%03d'),'.mat']); Yout=conn_vol(filename); t=nan+zeros(Yout.matdim.dim); y=conn_get_time(Yout,1,[],false);%nsub); %V0=spm_vol(deblank(CONN_x.Setup.functional{nsub}{1}{1}(1,:))); V0=V0(1); %V=spm_vol(deblank(CONN_x.Setup.structural{nsub}{1})); V=V(1); V=CONN_x.Setup.structural{nsub}{3}; V=V(1); t(Yout.voxels)=y; V.fname=fullfile(filepathresults,['BETA_Subject',num2str(nsub),'_Condition',num2str(ncondition,'%03d'),'_Source',num2str(iroi(nroi),'%03d'),'.nii']); if isfield(V,'dt'), V.dt=[spm_type('float32') spm_platform('bigend')]; elseif length(V.dim)>3, V.dim(4)=spm_type('float32'); end spm_write_vol(V,t); if isfield(CONN_x.Setup,'outputfiles')&&numel(CONN_x.Setup.outputfiles)>=3&&CONN_x.Setup.outputfiles(3), V.fname=fullfile(filepathresults,['corr_Subject',num2str(nsub),'_Condition',num2str(ncondition,'%03d'),'_Source',num2str(iroi(nroi),'%03d'),'.nii']); t=tanh(t); spm_write_vol(V,t); end end n=n+1; conn_waitbar(n/N,h); end end end CONN_x.Analyses(ianalysis).sources=names; fileout=fullfile(filepathresults,'_list_sources.txt'); fh=fopen(fileout,'wt'); for n1=1:length(CONN_x.Analyses(ianalysis).sourcenames),fprintf(fh,'Source%03d = %s\n',n1,CONN_x.Analyses(ianalysis).sourcenames{n1});end fclose(fh); fileout=fullfile(filepathresults,'_list_conditions.txt'); fh=fopen(fileout,'wt'); for n1=1:nconditions,fprintf(fh,'Condition%03d = %s\n',n1,CONN_x.Setup.conditions.names{n1});end fclose(fh); end CONN_x.Analysis=analysisbak; conn_waitbar('close',h); ; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Creates BETA_Subject###_Condition###_Measure###.nii files (first-level voxel-to-voxel analyses) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if any(options==13) && any(CONN_x.Setup.steps([3])) && (nargin<=1||any(varargin{1}==0)), [path,name,ext]=fileparts(CONN_x.filename); filepath=CONN_x.folders.preprocessing; filepathresults=CONN_x.folders.firstlevel; nconditions=length(CONN_x.Setup.conditions.names)-1; REDO=[]; N=0;n=0; h=conn_waitbar(0,['Step ',num2str(sum(options<=13)),'/',num2str(length(options)),': Voxel-to-voxel first-level analyses']); measures=CONN_x.vvAnalyses.regressors; [nill,idx]=sort(cat(1,measures.localsupport{:}));mfieldnames=fieldnames(measures);for nfieldnames=1:numel(mfieldnames), measures.(mfieldnames{nfieldnames})=measures.(mfieldnames{nfieldnames})(idx); end % make analyses with same kernel size consecutive for speed improvemnet (using conn_v2v local storage) [measuretypes,idx]=sort(cat(1,measures.measuretype{:}));mfieldnames=fieldnames(measures);for nfieldnames=1:numel(mfieldnames), measures.(mfieldnames{nfieldnames})=measures.(mfieldnames{nfieldnames})(idx); end nmeasures=numel(measures.names); nmeasures2=sum(measuretypes==2); nmeasures3=sum(measuretypes==3); nmeasures1=nmeasures-nmeasures2-nmeasures3; imeasure=[];isnew=[];for nmeasure=1:nmeasures,[imeasure(nmeasure),isnew(nmeasure)]=conn_v2v('match_measures',measures,nmeasure,'+');end if nmeasures1>0 for nsub=1:CONN_x.Setup.nsubjects, for ncondition=1:nconditions, for nmeasure=1:nmeasures1, filename=fullfile(filepathresults,['BETA_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'_Measure',num2str(imeasure(nmeasure),'%03d'),'_Component',num2str(1,'%03d'),'.nii']); isnew(nmeasure)=isnew(nmeasure)|isempty(dir(filename)); end if isempty(REDO)&&~all(isnew(1:nmeasures1)), if isfield(CONN_x,'gui')&&isstruct(CONN_x.gui)&&isfield(CONN_x.gui,'overwrite'), REDO=CONN_x.gui.overwrite; else, REDO=questdlg('Overwrite existing subject results?','','Yes', 'No', 'Yes');end; end if strcmp(REDO,'Yes')||any(isnew(1:nmeasures1)), %filename_B1=fullfile(filepath,['vvPC_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'.nii']); %Y1=spm_vol(filename_B1); filename_B1=fullfile(filepath,['vvPC_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'.mat']); Y1=conn_vol(filename_B1); filename_D1=fullfile(filepath,['vvPCeig_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'.mat']); D1=load(filename_D1,'D'); %if ~N, N=(CONN_x.Setup.nsubjects-nsub+1)*nconditions*numel(Y1); numelY1bak=numel(Y1); %else, N=N-numelY1bak+numel(Y1);end if ~N, N=(CONN_x.Setup.nsubjects-nsub+1)*nconditions*Y1.size.Nt; numelY1bak=Y1.size.Nt; else, N=N-numelY1bak+Y1.size.Nt;end params=cell(1,nmeasures1); for nmeasure=1:nmeasures1, if strcmp(REDO,'Yes')||isnew(nmeasure) params{nmeasure}=conn_v2v('compute_start',measures,nmeasure,Y1.matdim.mat); end end %[gridx,gridy,gridz]=ndgrid(1:Y1(1).dim(1),1:Y1(1).dim(2),1:Y1(1).dim(3));xyz=[gridx(:),gridy(:),gridz(:),ones(numel(gridx),1)]'; for ndim=1:Y1.size.Nt,%numel(Y1), doneread=0; for nmeasure=1:nmeasures1, if (strcmp(REDO,'Yes')||isnew(nmeasure))&&ndim<=params{nmeasure}.dimensions_in, if ~doneread y1=conn_get_time(Y1,ndim); %y1=reshape(spm_get_data(Y1(ndim),xyz),Y1(1).dim); %y1=spm_read_vols(Y1(ndim)); doneread=1; end params{nmeasure}=conn_v2v('compute_step',params{nmeasure},y1,D1.D(ndim)); end end n=n+1; conn_waitbar(n/N,h); end for nmeasure=1:nmeasures1, if strcmp(REDO,'Yes')||isnew(nmeasure) d=conn_v2v('compute_end',params{nmeasure}); if iscell(d) dsum=0; for nout=1:numel(d) filename=fullfile(filepathresults,['BETA_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'_Measure',num2str(imeasure(nmeasure),'%03d'),'_Component',num2str(nout,'%03d'),'.nii']); Yout=struct('fname',filename,'mat',Y1.matdim.mat,'dim',Y1.matdim.dim,'n',[1,1],'pinfo',[1;0;0],'dt',[spm_type('float32'),spm_platform('bigend')],'descrip',mfilename); %Yout=Y1(1);Yout.fname=filename; spm_write_vol(Yout,d{nout}); dsum=dsum+abs(d{nout}).^2; end if numel(d)>1 dsum=sqrt(dsum); filename=fullfile(filepathresults,['BETA_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'_Measure',num2str(imeasure(nmeasure),'%03d'),'_Component',num2str(0,'%03d'),'.nii']); Yout=struct('fname',filename,'mat',Y1.matdim.mat,'dim',Y1.matdim.dim,'n',[1,1],'pinfo',[1;0;0],'dt',[spm_type('float32'),spm_platform('bigend')],'descrip',mfilename); %Yout=Y1(1);Yout.fname=filename; spm_write_vol(Yout,dsum); end else filename=fullfile(filepathresults,['BETA_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'_Measure',num2str(imeasure(nmeasure),'%03d'),'_Component',num2str(1,'%03d'),'.nii']); Yout=struct('fname',filename,'mat',Y1.matdim.mat,'dim',Y1.matdim.dim,'n',[1,1],'pinfo',[1;0;0],'dt',[spm_type('float32'),spm_platform('bigend')],'descrip',mfilename); %Yout=Y1(1);Yout.fname=filename; spm_write_vol(Yout,d); end end end end end end end conn_waitbar('close',h); if nmeasures2>0, MAXDIMS=256; h=conn_waitbar(0,['Step ',num2str(sum(options<=13)),'/',num2str(length(options)),': connectome-level MVPA analyses']); N=nconditions*nmeasures2; n=0; for ncondition=1:nconditions, for nmeasure=nmeasures1+(1:nmeasures2), filename=fullfile(filepathresults,['BETA_Subject',num2str(CONN_x.Setup.nsubjects,'%03d'),'_Condition',num2str(ncondition,'%03d'),'_Measure',num2str(imeasure(nmeasure),'%03d'),'_Component',num2str(1,'%03d'),'.nii']); isnew(nmeasure)=isnew(nmeasure)|isempty(dir(filename)); end end if isempty(REDO)&&~all(isnew(nmeasures1+(1:nmeasures2))), if isfield(CONN_x,'gui')&&isstruct(CONN_x.gui)&&isfield(CONN_x.gui,'overwrite'), REDO=CONN_x.gui.overwrite; else, REDO=questdlg('Overwrite existing subject results?','','Yes', 'No', 'Yes');end; end if strcmp(REDO,'Yes')||any(isnew(nmeasures1+(1:nmeasures2))), % filename_D1=fullfile(filepath,['vvPCcov_SubjectA',num2str(1,'%03d'),'_SubjectB',num2str(1,'%03d'),'_ConditionA',num2str(ncondition,'%03d'),'_ConditionB',num2str(ncondition,'%03d'),'.mat']); % D1=load(filename_D1,'D'); % filename_B1=fullfile(filepath,['vvPC_Subject',num2str(1,'%03d'),'_Condition',num2str(ncondition,'%03d'),'.nii']); % Y1=spm_vol(filename_B1); % sA=prod(Y1(1).dim); % [gridx,gridy,gridz]=ndgrid(1:Y1(1).dim(1),1:Y1(1).dim(2),1:Y1(1).dim(3));xyz=[gridx(:),gridy(:),gridz(:),ones(numel(gridx),1)]'; filename_B1=fullfile(filepath,['vvPC_Subject',num2str(1,'%03d'),'_Condition',num2str(1,'%03d'),'.mat']); Y1=conn_vol(filename_B1); sA=prod(Y1.matdim.dim); for nmeasure=nmeasures1+(1:nmeasures2), if strcmp(REDO,'Yes')||isnew(nmeasure) Y1Nt=zeros(CONN_x.Setup.nsubjects,nconditions); for nsub=1:CONN_x.Setup.nsubjects for ncondition=1:nconditions, filename=fullfile(filepath,['vvPC_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'.mat']); Yout=conn_vol(filename); if ~isequal(Y1.matdim.dim,Yout.matdim.dim) || ~isequal(Y1.voxels,Yout.voxels), error('unequal analysis voxels across subjects'); end Y1Nt(nsub,ncondition)=Yout.size.Nt; end end NdimsIn=min(measures.dimensions_in{nmeasure},max(Y1Nt(:))); h2=conn_waitbar(0,['computing subject x subject covariance']); C=0; for slice=1:Y1.size.Ns, for nsub=1:CONN_x.Setup.nsubjects for ncondition=1:nconditions, Y1.fname=fullfile(filepath,['vvPC_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'.mat']); Y1.size.Nt=Y1Nt(nsub,ncondition); temp=conn_get_slice(Y1,slice); if nsub==1&&ncondition==1, x=zeros([size(temp,2),NdimsIn,CONN_x.Setup.nsubjects,nconditions]); end if ~isempty(temp) x(:,1:min(size(temp,1),NdimsIn),nsub,ncondition)=temp(1:min(size(temp,1),NdimsIn),:)'; end end end x=x(:,:); C=C+x'*x; conn_waitbar(slice/Y1.size.Ns,h2); end close(h2); filename=fullfile(filepathresults,['TEMPORAL1_Measure',num2str(imeasure(nmeasure),'%03d'),'.mat']); save(filename,'C'); C=permute(reshape(C,[NdimsIn,CONN_x.Setup.nsubjects,nconditions,NdimsIn,CONN_x.Setup.nsubjects,nconditions]),[1,4,2,3,5,6]); h2=conn_waitbar(0,['computing MVPA components']); filename=fullfile(filepathresults,['TEMPORAL2_Measure',num2str(imeasure(nmeasure),'%03d'),'.mat']); NdimsOut=min(CONN_x.Setup.nsubjects*nconditions,measures.dimensions_out{nmeasure}); Yout=Y1; Yout.fname=filename;Yout.size.Nt=CONN_x.Setup.nsubjects*nconditions*NdimsOut; Yout=conn_init_vol(Yout); for slice=1:Y1.size.Ns, for nsub=1:CONN_x.Setup.nsubjects for ncondition=1:nconditions, Y1.fname=fullfile(filepath,['vvPC_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'.mat']); Y1.size.Nt=Y1Nt(nsub,ncondition); temp=conn_get_slice(Y1,slice); if nsub==1&&ncondition==1, x=zeros([size(temp,2),NdimsIn,CONN_x.Setup.nsubjects,nconditions]); end if ~isempty(temp) x(:,1:min(size(temp,1),NdimsIn),nsub,ncondition)=temp(1:min(size(temp,1),NdimsIn),:)'; end end end c=zeros([Y1.size.Nv(slice),repmat([CONN_x.Setup.nsubjects,nconditions],[1,2])]); for nsub=1:CONN_x.Setup.nsubjects for ncondition=1:nconditions, for nsub2=1:CONN_x.Setup.nsubjects for ncondition2=1:nconditions, c(:,nsub,ncondition,nsub2,ncondition2)=sum((x(:,:,nsub)*C(:,:,nsub,ncondition,nsub2,ncondition2)).*x(:,:,nsub2),2); end end end end x=zeros([CONN_x.Setup.nsubjects*nconditions,NdimsOut,Y1.size.Nv(slice)]); %nvox0=sum(Y1.size.Nv(1:slice-1)); for nvox=1:Y1.size.Nv(slice), c1=reshape(c(nvox,:),CONN_x.Setup.nsubjects*nconditions*[1,1]); c1=bsxfun(@minus,c1,mean(c1,1)); c1=bsxfun(@minus,c1,mean(c1,2)); [Q,D]=svd(c1); d=diag(D); Q=Q(:,1:NdimsOut); d=sqrt(abs(d(1:NdimsOut))); %doflip=sum(Q,1)<0; %d(doflip)=-d(doflip); Q=bsxfun(@times,Q,d'); x(:,:,nvox)=Q; %conn_write_voxel(Yout,Q,nvox0+nvox); end conn_write_slice(Yout,reshape(x,[CONN_x.Setup.nsubjects*nconditions*NdimsOut,Y1.size.Nv(slice)]),slice); conn_waitbar(slice/Y1.size.Ns,h2); end close(h2); h2=conn_waitbar(0,['creating MVPA score volumes']); for nsub=1:CONN_x.Setup.nsubjects for ncondition=1:nconditions, dsum=0; for ndim=1:NdimsOut x=conn_get_time(Yout,sub2ind([CONN_x.Setup.nsubjects,nconditions,NdimsOut],nsub,ncondition,ndim)); filename=fullfile(filepathresults,['BETA_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'_Measure',num2str(imeasure(nmeasure),'%03d'),'_Component',num2str(ndim,'%03d'),'.nii']); a=struct('fname',filename,'mat',Yout.matdim.mat,'dim',Yout.matdim.dim,'n',[1,1],'pinfo',[1;0;0],'dt',[spm_type('float32'),spm_platform('bigend')],'descrip',mfilename); spm_write_vol(a,x); dsum=dsum+abs(x).^2; end filename=fullfile(filepathresults,['BETA_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'_Measure',num2str(imeasure(nmeasure),'%03d'),'_Component',num2str(0,'%03d'),'.nii']); a=struct('fname',filename,'mat',Yout.matdim.mat,'dim',Yout.matdim.dim,'n',[1,1],'pinfo',[1;0;0],'dt',[spm_type('float32'),spm_platform('bigend')],'descrip',mfilename); spm_write_vol(a,sqrt(dsum)); end conn_waitbar(nsub/CONN_x.Setup.nsubjects,h2); end close(h2); % filename={fullfile(filepathresults,['TEMPORAL1_Measure',num2str(imeasure(nmeasure),'%03d'),'.mat']),... % fullfile(filepathresults,['TEMPORAL2_Measure',num2str(imeasure(nmeasure),'%03d'),'.mat']),... % fullfile(filepathresults,['TEMPORAL2_Measure',num2str(imeasure(nmeasure),'%03d'),'.matc'])}; % spm_unlink(filename{:}); end n=n+1; conn_waitbar(n/N,h); end else n=n+nmeasures2; conn_waitbar(n/N,h); end conn_waitbar('close',h); end % if nmeasures2>0, % MAXDIMS=256; % h=conn_waitbar(0,['Step ',num2str(sum(options<=13)),'/',num2str(length(options)),': connectome-level MVPA analyses']); % N=nconditions*nmeasures2; % n=0; % for ncondition=1:nconditions, % for nmeasure=nmeasures1+(1:nmeasures2), % filename=fullfile(filepathresults,['BETA_Subject',num2str(CONN_x.Setup.nsubjects,'%03d'),'_Condition',num2str(ncondition,'%03d'),'_Measure',num2str(imeasure(nmeasure),'%03d'),'_Component',num2str(1,'%03d'),'.nii']); % isnew(nmeasure)=isnew(nmeasure)|isempty(dir(filename)); % end % end % if isempty(REDO)&&~all(isnew(nmeasures1+(1:nmeasures2))), % if isfield(CONN_x,'gui')&&isstruct(CONN_x.gui)&&isfield(CONN_x.gui,'overwrite'), REDO=CONN_x.gui.overwrite; else, REDO=questdlg('Overwrite existing subject results?','','Yes', 'No', 'Yes');end; % end % if strcmp(REDO,'Yes')||any(isnew(nmeasures1+(1:nmeasures2))), % % filename_D1=fullfile(filepath,['vvPCcov_SubjectA',num2str(1,'%03d'),'_SubjectB',num2str(1,'%03d'),'_ConditionA',num2str(ncondition,'%03d'),'_ConditionB',num2str(ncondition,'%03d'),'.mat']); % % D1=load(filename_D1,'D'); % % filename_B1=fullfile(filepath,['vvPC_Subject',num2str(1,'%03d'),'_Condition',num2str(ncondition,'%03d'),'.nii']); % % Y1=spm_vol(filename_B1); % % sA=prod(Y1(1).dim); % % [gridx,gridy,gridz]=ndgrid(1:Y1(1).dim(1),1:Y1(1).dim(2),1:Y1(1).dim(3));xyz=[gridx(:),gridy(:),gridz(:),ones(numel(gridx),1)]'; % filename_B1=fullfile(filepath,['vvPC_Subject',num2str(1,'%03d'),'_Condition',num2str(1,'%03d'),'.mat']); % Y1=conn_vol(filename_B1); % sA=prod(Y1.matdim.dim); % for nmeasure=nmeasures1+(1:nmeasures2), % if strcmp(REDO,'Yes')||isnew(nmeasure) % opts=struct('issym',true,'isreal',true); % [y,d]=eigs(@(x)conn_v2v('compute_Ax',x,CONN_x.folders.preprocessing,CONN_x.Setup.nsubjects,1:nconditions,measures.dimensions_in{nmeasure}),sA,measures.dimensions_out{nmeasure},'LM',opts); % % dsum=0; % for ndim=1:measures.dimensions_out{nmeasure}, % filename=fullfile(filepathresults,['BETA_Measure',num2str(imeasure(nmeasure),'%03d'),'_Component',num2str(ndim,'%03d'),'.nii']); % Yout=struct('fname',filename,'mat',Y1.matdim.mat,'dim',Y1.matdim.dim,'n',[1,1],'pinfo',[1;0;0],'dt',[spm_type('float32'),spm_platform('bigend')],'descrip',mfilename); % %Yout=Y1(1);Yout.fname=filename; % spm_write_vol(Yout,reshape(y(:,ndim),Y1.matdim.dim)); % dsum=dsum+abs(y(:,ndim)).^2; % end % filename=fullfile(filepathresults,['BETA_Measure',num2str(imeasure(nmeasure),'%03d'),'_Component',num2str(0,'%03d'),'.nii']); % Yout=struct('fname',filename,'mat',Y1.matdim.mat,'dim',Y1.matdim.dim,'n',[1,1],'pinfo',[1;0;0],'dt',[spm_type('float32'),spm_platform('bigend')],'descrip',mfilename); % %Yout=Y1(1);Yout.fname=filename; % spm_write_vol(Yout,reshape(sqrt(dsum),Y1.matdim.dim)); % filename=fullfile(filepathresults,['BETAeig_Measure',num2str(imeasure(nmeasure),'%03d'),'_Component',num2str(0,'%03d'),'.mat']); % D=d;Ndim=measures.dimensions_out{nmeasure};save(filename,'D','Ndim'); % % % filename=fullfile(filepathresults,['TEMPORAL1_Measure',num2str(imeasure(nmeasure),'%03d'),'.mat']); % Y2=Y1; Y2.fname=filename;Y2.size.Nt=CONN_x.Setup.nsubjects*nconditions*measures.dimensions_out{nmeasure}; % Y2=conn_init_vol(Y2); % for nsub=1:CONN_x.Setup.nsubjects % disp([1,nsub]) % for ncondition=1:nconditions, % % filename_B1=fullfile(filepath,['vvPC_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'.nii']); % % Y1=spm_vol(filename_B1); % filename_B1=fullfile(filepath,['vvPC_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'.mat']); % Y1=conn_vol(filename_B1); % dsum=0; % for ndim=1:measures.dimensions_out{nmeasure}, % fprintf('.'); % z=0; % for ncomp=1:measures.dimensions_in{nmeasure}, % x=conn_get_time(Y1,ncomp); %%% % %x=spm_get_data(Y1(ncomp),xyz); % z=z+x(:)*(x(:)'*y(:,ndim)); % end % conn_write_time(Y2,z(Y2.voxels),sub2ind([CONN_x.Setup.nsubjects,nconditions,measures.dimensions_out{nmeasure}],nsub,ncondition,ndim)); % end % fprintf('\n'); % end % end % filename=fullfile(filepathresults,['TEMPORAL2_Measure',num2str(imeasure(nmeasure),'%03d'),'.mat']); % Ndims=min(MAXDIMS,min(CONN_x.Setup.nsubjects*nconditions,measures.dimensions_out{nmeasure})); % Yout=Y1; Yout.fname=filename;Yout.size.Nt=CONN_x.Setup.nsubjects*nconditions*Ndims; % Yout=conn_init_vol(Yout); % for nvox=1:numel(Y2.voxels) % x=reshape(conn_get_voxel(Y2,nvox),[CONN_x.Setup.nsubjects*nconditions,measures.dimensions_out{nmeasure}]); % [Q,D]=svd(x); % conn_write_voxel(Yout,Q*D,nvox); % end % for nsub=1:CONN_x.Setup.nsubjects % disp([2,nsub]) % for ncondition=1:nconditions, % dsum=0; % for ndim=1:Ndims % x=conn_get_time(Yout,sub2ind([CONN_x.Setup.nsubjects,nconditions,Ndims],nsub,ncondition,ndim)); % filename=fullfile(filepathresults,['BETA_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'_Measure',num2str(imeasure(nmeasure),'%03d'),'_Component',num2str(ndim,'%03d'),'.nii']); % Yout=struct('fname',filename,'mat',Yout.matdim.mat,'dim',Yout.matdim.dim,'n',[1,1],'pinfo',[1;0;0],'dt',[spm_type('float32'),spm_platform('bigend')],'descrip',mfilename); % spm_write_vol(Yout,x); % dsum=dsum+abs(x).^2; % end % filename=fullfile(filepathresults,['BETA_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'_Measure',num2str(imeasure(nmeasure),'%03d'),'_Component',num2str(0,'%03d'),'.nii']); % Yout=struct('fname',filename,'mat',Yout.matdim.mat,'dim',Yout.matdim.dim,'n',[1,1],'pinfo',[1;0;0],'dt',[spm_type('float32'),spm_platform('bigend')],'descrip',mfilename); % spm_write_vol(Yout,sqrt(dsum)); % end % end % filename={fullfile(filepathresults,['TEMPORAL1_Measure',num2str(imeasure(nmeasure),'%03d'),'.mat']),... % fullfile(filepathresults,['TEMPORAL1_Measure',num2str(imeasure(nmeasure),'%03d'),'.matc']),... % fullfile(filepathresults,['TEMPORAL2_Measure',num2str(imeasure(nmeasure),'%03d'),'.mat']),... % fullfile(filepathresults,['TEMPORAL2_Measure',num2str(imeasure(nmeasure),'%03d'),'.matc'])}; % spm_unlink(filename{:}); % end % n=n+1; % conn_waitbar(n/N,h); % end % else % n=n+nmeasures2; % conn_waitbar(n/N,h); % end % conn_waitbar('close',h); % end % if nmeasures3>0, % h=conn_waitbar(0,['Step ',num2str(sum(options<=13)),'/',num2str(length(options)),': group-level MVPA analyses']); % N=nconditions*nmeasures3; % n=0; % for ncondition=1:nconditions, % for nmeasure=nmeasures1+(1:nmeasures3), % filename=fullfile(filepathresults,['BETA_Subject',num2str(CONN_x.Setup.nsubjects,'%03d'),'_Condition',num2str(ncondition,'%03d'),'_Measure',num2str(imeasure(nmeasure),'%03d'),'_Component',num2str(1,'%03d'),'.nii']); % isnew(nmeasure)=isnew(nmeasure)|isempty(dir(filename)); % end % end % if isempty(REDO)&&~all(isnew(nmeasures1+(1:nmeasures3))), % if isfield(CONN_x,'gui')&&isstruct(CONN_x.gui)&&isfield(CONN_x.gui,'overwrite'), REDO=CONN_x.gui.overwrite; else, REDO=questdlg('Overwrite existing subject results?','','Yes', 'No', 'Yes');end; % end % if strcmp(REDO,'Yes')||any(isnew(nmeasures1+(1:nmeasures3))), % % filename_D1=fullfile(filepath,['vvPCcov_SubjectA',num2str(1,'%03d'),'_SubjectB',num2str(1,'%03d'),'_ConditionA',num2str(ncondition,'%03d'),'_ConditionB',num2str(ncondition,'%03d'),'.mat']); % % D1=load(filename_D1,'D'); % filename_B1=fullfile(filepath,['vvPC_Subject',num2str(1,'%03d'),'_Condition',num2str(ncondition,'%03d'),'.nii']); % Y1=spm_vol(filename_B1); % sA=prod(Y1(1).dim); % [gridx,gridy,gridz]=ndgrid(1:Y1(1).dim(1),1:Y1(1).dim(2),1:Y1(1).dim(3));xyz=[gridx(:),gridy(:),gridz(:),ones(numel(gridx),1)]'; % for nmeasure=nmeasures1+(1:nmeasures3), % if strcmp(REDO,'Yes')||isnew(nmeasure) % % for nvoxel=1:numel(gridx), % C=zeros([CONN_x.Setup.nsubjects,nconditions,CONN_x.Setup.nsubjects,nconditions]); % for nsub=1:CONN_x.Setup.nsubjects % for ncondition=1:nconditions, % for nsub2=1:nsub % for ncondition2=1:ncondition, % C(nsub,ncondition,nsub2,ncondition2) % end % end % end % end % end % % end % opts=struct('issym',true,'isreal',true); % [y,d]=eigs(@(x)conn_v2v('compute_Ax',x,CONN_x.folders.preprocessing,CONN_x.Setup.nsubjects,ncondition,measures.dimensions_in{nmeasure}),sA,measures.dimensions_out{nmeasure},'LM',opts); % % dsum=0; % for ndim=1:measures.dimensions_out{nmeasure}, % filename=fullfile(filepathresults,['BETA_Condition',num2str(ncondition,'%03d'),'_Measure',num2str(imeasure(nmeasure),'%03d'),'_Component',num2str(ndim,'%03d'),'.nii']); % Yout=Y1(1);Yout.fname=filename; % spm_write_vol(Yout,reshape(y(:,ndim),Y1(1).dim)); % dsum=dsum+abs(y(:,ndim)).^2; % end % filename=fullfile(filepathresults,['BETA_Condition',num2str(ncondition,'%03d'),'_Measure',num2str(imeasure(nmeasure),'%03d'),'_Component',num2str(0,'%03d'),'.nii']); % Yout=Y1(1);Yout.fname=filename; % spm_write_vol(Yout,reshape(sqrt(dsum),Y1(1).dim)); % for nsub=1:CONN_x.Setup.nsubjects % filename_B1=fullfile(filepath,['vvPC_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'.nii']); % Y1=spm_vol(filename_B1); % dsum=0; % for ndim=1:measures.dimensions_out{nmeasure}, % fprintf('.'); % z=0; % for ncomp=1:measures.dimensions_in{nmeasure}, % x=spm_get_data(Y1(ndim),xyz); % z=z+x*(x*y(:,ndim)); % end % filename=fullfile(filepathresults,['BETA_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'_Measure',num2str(imeasure(nmeasure),'%03d'),'_Component',num2str(ndim,'%03d'),'.nii']); % Yout=Y1(1);Yout.fname=filename; % spm_write_vol(Yout,reshape(z,Y1(1).dim)); % dsum=dsum+abs(z).^2; % end % fprintf('\n'); % end % filename=fullfile(filepathresults,['BETA_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'_Measure',num2str(imeasure(nmeasure),'%03d'),'_Component',num2str(0,'%03d'),'.nii']); % Yout=Y1(1);Yout.fname=filename; % spm_write_vol(Yout,reshape(sqrt(dsum),Y1(1).dim)); % % % % end % n=n+1; % conn_waitbar(n/N,h); % end % else % n=n+nmeasures3; % conn_waitbar(n/N,h); % end % end % conn_waitbar('close',h); % end CONN_x.vvAnalyses.measures=conn_v2v('list_extended',CONN_x.vvAnalyses.regressors); fileout=fullfile(filepathresults,'_list_measures.txt'); fh=fopen(fileout,'wt'); for n1=1:length(CONN_x.vvAnalyses.measurenames),fprintf(fh,'Measure%03d = %s\n',n1,CONN_x.vvAnalyses.measurenames{n1});end fclose(fh); fileout=fullfile(filepathresults,'_list_conditions.txt'); fh=fopen(fileout,'wt'); for n1=1:nconditions,fprintf(fh,'Condition%03d = %s\n',n1,CONN_x.Setup.conditions.names{n1});end fclose(fh); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Creates resultsDATA_Condition###_Source###.mat files (combined first-level analyses) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if 0,%any(options==13) && any(CONN_x.Setup.steps([2])), if ~isfield(CONN_x.Setup,'normalized'), CONN_x.Setup.normalized=1; end if ~CONN_x.Setup.normalized, disp(['Not spatially-normalized data. Skipping ROI-to-voxel second-level analyses']); else, [path,name,ext]=fileparts(CONN_x.filename); filepath=CONN_x.folders.preprocessing; if nargin>1,analyses=varargin{1}; % selected analysis only else, analyses=1:length(CONN_x.Analyses); end; h=conn_waitbar(0,['Step ',num2str(sum(options<=13)),'/',num2str(length(options)),': Preparing second-level analyses']); analysisbak=CONN_x.Analysis; for nanalyses=1:length(analyses), ianalysis=analyses(nanalyses); CONN_x.Analysis=ianalysis; % ianalysis=CONN_x.Analysis; filepathresults=fullfile(CONN_x.folders.firstlevel,CONN_x.Analyses(ianalysis).name); nconditions=length(CONN_x.Setup.conditions.names)-1; filename=fullfile(filepath,['ROI_Subject',num2str(1,'%03d'),'_Condition',num2str(1,'%03d'),'.mat']); if isempty(dir(filename)), disp(['Not ready to process step conn_process_12']); conn_waitbar('close',h);return; end X1=load(filename); [X,nill,names]=conn_designmatrix(CONN_x.Analyses(ianalysis).regressors,X1,[]); nrois=size(X,2)-1; iroi=[];isnew=[];for nroi=1:nrois,[iroi(nroi),isnew(nroi)]=conn_sourcenames(names{nroi},'-');end if any(isnew), error(['Non-existing ROI first-level data for ',names{find(isnew)},'. Please repeat first-level analyses']); return; end if nanalyses==1, N=nconditions*nrois*length(analyses);n=0; nroisbak=nrois; else N=N-nconditions*nroisbak+nconditions*nrois; end for ncondition=1:nconditions, for nroi=1:nrois, clear Yin Yout; for nsub=1:CONN_x.Setup.nsubjects, filename=fullfile(filepathresults,['resultsDATA_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'_Source',num2str(iroi(nroi),'%03d'),'.mat']); Yin(nsub)=conn_vol(filename); end filename=fullfile(filepathresults,['resultsDATA_Condition',num2str(ncondition,'%03d'),'_Source',num2str(iroi(nroi),'%03d'),'.mat']); Yout=Yin(1); Yout.fname=filename; % Yout.size.Nt=CONN_x.Setup.nsubjects; % Yout=conn_init_vol(Yout); conn_write_combine(Yin,Yout); n=n+1; conn_waitbar(n/N,h); end clear Yin Yout; for nsub=1:CONN_x.Setup.nsubjects, filename=fullfile(filepathresults,['seDATA_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'.mat']); Yin(nsub)=conn_vol(filename); end filename=fullfile(filepathresults,['seDATA_Condition',num2str(ncondition,'%03d'),'.mat']); Yout=Yin(1); Yout.fname=filename; Yout.DOF=cat(2,Yin(:).DOF); % Yout.size.Nt=CONN_x.Setup.nsubjects; % Yout=conn_init_vol(Yout); conn_write_combine(Yin,Yout); end CONN_x.Analyses(ianalysis).sources=names; end CONN_x.Analysis=analysisbak; conn_waitbar('close',h); %CONN_x.Results.measure=CONN_x.Analyses(ianalysis).measure; end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Creates resultsROI_Condition###.mat files (combined first-level analyses) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if any(options==14) && any(CONN_x.Setup.steps([1])), [path,name,ext]=fileparts(CONN_x.filename); filepath=CONN_x.folders.preprocessing; if nargin>1,analyses=varargin{1}; % selected analysis only else, analyses=1:length(CONN_x.Analyses); end; doanalyses=false(1,numel(analyses)); for nanalyses=1:numel(analyses),if analyses(nanalyses)>0&&any(CONN_x.Analyses(analyses(nanalyses)).type==[1,3]), doanalyses(nanalyses)=true; end; end analyses=analyses(doanalyses); h=conn_waitbar(0,['Step ',num2str(sum(options<=14)),'/',num2str(length(options)),': Preparing second-level ROI analyses']); analysisbak=CONN_x.Analysis; for nanalyses=1:length(analyses), ianalysis=analyses(nanalyses); CONN_x.Analysis=ianalysis; % ianalysis=CONN_x.Analysis; filepathresults=fullfile(CONN_x.folders.firstlevel,CONN_x.Analyses(ianalysis).name); nconditions=length(CONN_x.Setup.conditions.names)-1; filename=fullfile(filepath,['ROI_Subject',num2str(1,'%03d'),'_Condition',num2str(1,'%03d'),'.mat']); if isempty(dir(filename)), disp(['Not ready to process step conn_process_13']); conn_waitbar('close',h);return; end X1=load(filename); [X,nill,names]=conn_designmatrix(CONN_x.Analyses(ianalysis).regressors,X1,[]); nrois=size(X,2)-1; [X2,nill,names2,xyz2]=conn_designmatrix({CONN_x.Analyses(ianalysis).variables,CONN_x.Analyses(ianalysis).regressors},X1,[]); nrois2=size(X2,2)-1; idxroi1roi2=zeros(1,nrois); for n1=1:nrois,temp=strmatch(names{n1},names2,'exact'); idxroi1roi2(n1)=temp(1);end X2=cat(2,X2(:,1),X2(:,1+idxroi1roi2),X2(:,1+setdiff(1:nrois2,idxroi1roi2))); names2=cat(2,{names2{idxroi1roi2}},{names2{setdiff(1:nrois2,idxroi1roi2)}}); xyz=cat(2,{xyz2{idxroi1roi2}},{xyz2{setdiff(1:nrois2,idxroi1roi2)}}); if nanalyses==1, n=0;N=CONN_x.Setup.nsubjects*nconditions*nrois*length(analyses); nroisbak=nrois; else N=N-CONN_x.Setup.nsubjects*nconditions*nroisbak+CONN_x.Setup.nsubjects*nconditions*nrois; end for ncondition=1:nconditions, Z=zeros([nrois,nrois2,CONN_x.Setup.nsubjects]); xyz={}; SE=zeros([CONN_x.Setup.nsubjects,nrois2]); DOF=zeros([1,CONN_x.Setup.nsubjects]); for nsub=1:CONN_x.Setup.nsubjects, filename=fullfile(filepathresults,['resultsROI_Subject',num2str(nsub,'%03d'),'_Condition',num2str(ncondition,'%03d'),'.mat']); t=load(filename,'Z','regressors','names','names2','xyz','SE','DOF'); IDX=[];IDX2=[]; for nroi=1:nrois, idx=strmatch(names{nroi},t.names,'exact'); if isempty(idx), error(['Non-existing ROI first-level data for ',names{nroi},' subject ',num2str(nsub),'. Please repeat first-level analyses']); return; end IDX(nroi)=idx(1); n=n+1; conn_waitbar(n/N,h); end for nroi=1:nrois2, idx=strmatch(names2{nroi},t.names2,'exact'); if isempty(idx), error(['Non-existing ROI first-level data for ',names2{nroi},' subject ',num2str(nsub),'. Please repeat first-level analyses']); return; end IDX2(nroi)=idx(1); end Z(:,:,nsub)=t.Z(IDX,IDX2); xyz={t.xyz{IDX2}}; SE(nsub,:)=t.SE(IDX2); DOF(nsub)=t.DOF; end regressors=CONN_x.Analyses(ianalysis).regressors; filename=fullfile(filepathresults,['resultsROI_Condition',num2str(ncondition,'%03d'),'.mat']); save(filename,'Z','regressors','names','names2','xyz','SE','DOF'); end CONN_x.Analyses(ianalysis).sources=names; end CONN_x.Analysis=analysisbak; conn_waitbar('close',h); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Creates nDATA_Condition###_Source###.mat files (normalized first-level analysis results) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if 0,%any(options==8.5), [path,name,ext]=fileparts(CONN_x.filename); filepath=CONN_x.folders.preprocessing; nconditions=length(CONN_x.Setup.conditions.names)-1; nrois=0;for n1=1:length(CONN_x.Analyses.regressors.names), nrois=nrois+CONN_x.Analyses.regressors.dimensions{n1}(1)*(CONN_x.Analyses.regressors.deriv{n1}+1); end; h=conn_waitbar(0,['Step ',num2str(sum(options<=8)),'/',num2str(length(options)),': Processing functional data']); fileref=fullfile(fileparts(which('spm')),'canonical','avg152T1.nii'); V0=spm_vol(fileref); clear sfile; for nsub=1:CONN_x.Setup.nsubjects, [fpath,ffile,fext]=fileparts(deblank(CONN_x.Setup.structural{nsub}{1})); sfile{nsub}=fullfile(fpath,[ffile,'_seg_inv_sn.mat']); end N=nconditions*nrois; n=0; for ncondition=1:nconditions, for nroi=1:nrois, filename=fullfile(filepath,['DATA_Condition',num2str(ncondition,'%03d'),'_Source',num2str(nroi,'%03d'),'.mat']); fileout=fullfile(filepath,['nDATA_Condition',num2str(ncondition,'%03d'),'_Source',num2str(nroi,'%03d'),'.mat']); Y0=conn_vol(filename); conn_reslice(fileout,V0(1).mat,V0(1).dim,Y0,sfile,0*CONN_x.Setup.fwhm); n=n+1; conn_waitbar(n/N,h); end end conn_waitbar('close',h); ; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Creates second-level SPM.mat results (second-level analysis results for SPM) % CON_Subject### (source files for second-leve analyses) % CON_Subject###_Source###.nii (source files for source-specific second-level analyses) % between-subject contrasts of interest: % T-contrast: "connectivity results": as specified in "between subject contrast" % T-contrast: one per effect specified in "subject effects" (named as the corresponding second-level covariates) % F-contrast: "effects of interest": F- test for all effects in second-levle model %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if any(options==15) && any(CONN_x.Setup.steps([2,3])), if nargin>1, switch(lower(varargin{1})), case 'dosingle',dosinglecontrast=1; % performs one specific analysis case 'doall',dosinglecontrast=0; % one analysis per source case 'readsingle', dosinglecontrast=2; % performs one speficic analysis (if it does not exist already) otherwise, dosinglecontrast=0; end; else, dosinglecontrast=0; end state=2; if nargin>2, switch(lower(varargin{2})), case 'seed-to-voxel', state=2; case 'voxel-to-voxel', state=3; end end if ~isfield(CONN_x,'Results'), disp(['Not ready to process step conn_process_14']); return; end if state==2 filepathresults1=fullfile(CONN_x.folders.firstlevel,CONN_x.Analyses(CONN_x.Analysis).name); else filepathresults1=CONN_x.folders.firstlevel; end filepathresults2=CONN_x.folders.secondlevel; if state==2 nsources=CONN_x.Results.xX.nsources; csources=CONN_x.Results.xX.csources; sources=CONN_x.Analyses(CONN_x.Analysis).sources; else nsources=CONN_x.Results.xX.nmeasures; csources=CONN_x.Results.xX.cmeasures; sources=CONN_x.vvAnalyses.measures; end nconditions=CONN_x.Results.xX.nconditions; cconditions=CONN_x.Results.xX.cconditions; if ~isfield(CONN_x.Results.xX,'modeltype')||isempty(CONN_x.Results.xX.modeltype), CONN_x.Results.xX.modeltype=1; end; %note: obsolete 'modeltype=2' fixed-effect analyses option; remove in next release modeltype=CONN_x.Results.xX.modeltype; % if nargin>1&&varargin{1}>1, nsources=varargin{2}; csources=ones(1,length(nsources)); sources={sources{nsources}}; nsources=1:length(nsources); end % if nargin>1, dosinglecontrast=(varargin{1}==1); else, dosinglecontrast=length(nsources)~=1; end; %~(length(nsources)>1 & all(csources==1/length(nsources))); end if isfield(CONN_x.Results,'foldername')&&~isempty(CONN_x.Results.foldername), [ok,nill]=mkdir(filepathresults2,CONN_x.Results.foldername); filepathresults2=fullfile(filepathresults2,CONN_x.Results.foldername); CONN_x.Results.foldername=[]; else, if state==2 foldername={[CONN_x.Analyses(CONN_x.Analysis).name,'.']}; foldername{end+1}=['SUBJECT_EFFECTS_']; else foldername={'SUBJECT_EFFECTS_'}; end for n1=1:length(CONN_x.Results.xX.nsubjecteffects), if ~any(diff(CONN_x.Results.xX.csubjecteffects)),foldername{end+1}=[CONN_x.Setup.l2covariates.names{CONN_x.Results.xX.nsubjecteffects(n1)},'.']; else, foldername{end+1}=[CONN_x.Setup.l2covariates.names{CONN_x.Results.xX.nsubjecteffects(n1)},'(',num2str(CONN_x.Results.xX.csubjecteffects(n1),'%2.1f'),')','.'];end end foldername{end+1}=['CONDITIONS_']; for n1=1:length(nconditions), if ~any(diff(cconditions(:))),foldername{end+1}=[CONN_x.Setup.conditions.names{nconditions(n1)},'.']; else, foldername{end+1}=[CONN_x.Setup.conditions.names{nconditions(n1)},'(',num2str(cconditions(:,n1)','%2.1f'),')','.'];end end foldername=strcat(foldername{:}); foldername(foldername==' '|foldername==filesep)='_'; [ok,nill]=mkdir(filepathresults2,foldername); if ok,filepathresults2=fullfile(filepathresults2,foldername); else,filepathresults2=uigetdir(filepathresults2,'Select a directory to write the results');end end if ~ischar(filepathresults2), return; end; % disp(['Second-level results stored in ',filepathresults2]); X=zeros(CONN_x.Setup.nsubjects,length(CONN_x.Setup.l2covariates.names)-1); for nsub=1:CONN_x.Setup.nsubjects, for ncovariate=1:length(CONN_x.Setup.l2covariates.names)-1; X(nsub,ncovariate)=CONN_x.Setup.l2covariates.values{nsub}{ncovariate}; end end nsubjects=find(any(X(:,CONN_x.Results.xX.nsubjecteffects)~=0,2)); clear SPMall; cwd=pwd; cd(filepathresults2); REDUCENAMES=(state==2); if dosinglecontrast>0, foldername={}; if state==3 txttmp={};for n2=1:length(nsources),txttmp{end+1}=conn_v2v('pcleartext',sources{nsources(n2)}); end [nill,idxcharstart]=max(any(diff(double(char(txttmp)),1,1),1)); else [nill,idxcharstart]=max(any(diff(double(char(sources(nsources))),1,1),1)); end for n2=1:length(nsources), txttmp=sources{nsources(n2)}; if state==3,txttmp=conn_v2v('pcleartext',txttmp); end if REDUCENAMES&&length(txttmp)>2&&strcmp(txttmp(1:3),'BA.'), idxtxttmp=find(txttmp=='.');idxtxttmp2=find(txttmp=='_'); if length(idxtxttmp)>1&&length(idxtxttmp2)>1&&idxtxttmp(end)-1<idxtxttmp2(end-1), txttmp=txttmp([1:idxtxttmp(end)-1,idxtxttmp2(end-1):end]); end; elseif n2>1&&idxcharstart>1 txttmp=txttmp(idxcharstart:end); end if ~any(diff(csources(:))),foldername{end+1}=[txttmp,'.']; else, foldername{end+1}=[txttmp,'(',num2str(csources(:,n2)','%2.1f'),')','.'];end end foldername=strcat(foldername{:});foldername(foldername==' '|foldername==filesep|foldername=='*')='_'; [ok,nill]=mkdir(filepathresults2,foldername); if ok,filepathresults3{1}=fullfile(filepathresults2,foldername); else,filepathresults3{1}=uigetdir(filepathresults2,'Select a directory to write the results');dosinglecontrast=1;end if dosinglecontrast==2, if isempty(dir(fullfile(filepathresults3{1},'SPM.mat'))), dosinglecontrast=1; elseif ~(isfield(CONN_x,'gui')&&isstruct(CONN_x.gui)&&isfield(CONN_x.gui,'overwrite')), REDO=questdlg('Overwrite existing subject results?','','Yes', 'No', 'No'); if strcmp(REDO,'Yes'),dosinglecontrast=1; end; end end if dosinglecontrast==1, h=conn_waitbar(0,['Step ',num2str(sum(options<=15)),'/',num2str(length(options)),': Functional data second-level analyses']); clear SE Y; altestsmooth=false; for nsub=1:length(nsubjects),%CONN_x.Setup.nsubjects, if 0,%modeltype==2||((length(nsources)>1||length(nconditions)>1)&&size(csources,1)==1&&size(cconditions,1)==1),%||any(csources(:)~=1)||any(cconditions(:)~=1)), % bb=0; % for n1=1:length(nsources), % nroi=nsources(n1); % roiname=sources{nroi}; % if state==2 % [iroi,isnew]=conn_sourcenames(roiname,'-'); % if isnew, error(['Non-existing ROI first-level data for ',roiname,' subject ',num2str(nsubjects(nsub)),'. Please repeat first-level analyses']); return; end % else % [iroi,isnew,ncomp]=conn_v2v('match_extended',roiname); % %[iroi,isnew]=conn_v2v('match_measures',CONN_x.vvAnalyses.regressors,nroi,'-'); % if isnew, error(['Non-existing voxel-to-voxel first-level data for ',roiname,' subject ',num2str(nsubjects(nsub)),'. Please repeat first-level analyses']); return; end % end % b=0; % for n0=1:length(nconditions), % ncondition=nconditions(n0); % if state==2 % filename=fullfile(filepathresults1,['BETA_Subject',num2str(nsubjects(nsub)),'_Condition',num2str(ncondition,'%03d'),'_Source',num2str(iroi,'%03d'),'.nii']); % else % filename=fullfile(filepathresults1,['BETA_Subject',num2str(nsubjects(nsub),'%03d'),'_Condition',num2str(ncondition,'%03d'),'_Measure',num2str(iroi,'%03d'),'_Component',num2str(ncomp,'%03d'),'.nii']); % end % a=spm_vol(filename); % if n0==1&&n1==1&&nsub==1 % [gridx,gridy,gridz]=ndgrid(1:a.dim(1),1:a.dim(2),1:a.dim(3));xyz=a.mat*[gridx(:),gridy(:),gridz(:),ones(numel(gridx),1)]'; adim=a.dim(1:3); % end % b=b+cconditions(n0)*reshape(spm_get_data(a,pinv(a.mat)*xyz),adim);%spm_read_vols(a); % if state==2&&modeltype==2&&nsub==1, % filename=fullfile(filepathresults1,['resultsDATA_Condition',num2str(ncondition,'%03d'),'_Source',num2str(iroi,'%03d'),'.mat']); % Y(n1,n0)=conn_vol(filename); % if n1==1, % filename=fullfile(filepathresults1,['seDATA_Condition',num2str(ncondition,'%03d'),'.mat']); % SE(n0)=conn_vol(filename); % end % end % end % bb=bb+csources(n1)*b; % end % filename=fullfile(filepathresults3{1},['CON_Subject',num2str(nsubjects(nsub),'%03d'),'.nii']); % a.fname=filename; % spm_write_vol(a,bb); % filename={filename}; % contrast=1; else filename={}; for n0=1:numel(nconditions) for n1=1:numel(nsources) nroi=nsources(n1); roiname=sources{nroi}; ncondition=nconditions(n0); if state==2 [iroi,isnew]=conn_sourcenames(roiname,'-'); if isnew, error(['Non-existing seed-to-voxel first-level data for ',roiname,' subject ',num2str(nsubjects(nsub)),'. Please repeat first-level analyses']); return; end tfilename=fullfile(filepathresults1,['BETA_Subject',num2str(nsubjects(nsub)),'_Condition',num2str(ncondition,'%03d'),'_Source',num2str(iroi,'%03d'),'.nii']); else altestsmooth=altestsmooth|~isempty(strmatch('connectome',roiname)); [iroi,isnew,ncomp]=conn_v2v('match_extended',roiname); %[iroi,isnew]=conn_v2v('match_measures',CONN_x.vvAnalyses.regressors,nroi,'-'); if isnew, error(['Non-existing voxel-to-voxel first-level data for ',roiname,' subject ',num2str(nsubjects(nsub)),'. Please repeat first-level analyses']); return; end tfilename=fullfile(filepathresults1,['BETA_Subject',num2str(nsubjects(nsub),'%03d'),'_Condition',num2str(ncondition,'%03d'),'_Measure',num2str(iroi,'%03d'),'_Component',num2str(ncomp,'%03d'),'.nii']); end filename{n1,n0}=tfilename; end end if numel(nconditions)>1&&size(cconditions,1)==1 for n1=1:numel(nsources) b=0; for n0=1:numel(nconditions) a=spm_vol(filename{n1,n0}); b=b+spm_read_vols(a)*cconditions(n0); end tfilename=fullfile(filepathresults3{1},['CON_Subject',num2str(nsubjects(nsub),'%03d'),'_compA',num2str(n1,'%03d'),'.nii']); a.fname=tfilename; spm_write_vol(a,b); filename{n1,numel(nconditions)+1}=tfilename; end filename=filename(:,end); new_cconditions=1; else new_cconditions=cconditions; end if numel(nsources)>1&&size(csources,1)==1 for n0=1:numel(nconditions) b=0; for n1=1:numel(nsources) a=spm_vol(filename{n1,n0}); b=b+spm_read_vols(a)*csources(n1); end tfilename=fullfile(filepathresults3{1},['CON_Subject',num2str(nsubjects(nsub),'%03d'),'_compB',num2str(n1,'%03d'),'.nii']); a.fname=tfilename; spm_write_vol(a,b); filename{numel(nsources)+1,n0}=tfilename; end filename=filename(end,:); new_csources=1; else new_csources=csources; end filename=filename(:); contrast=kron(new_cconditions,new_csources); end SPMall(1).xY.VY(nsub,:)=spm_vol(char(filename))'; SPMall(1).altestsmooth=altestsmooth; for n1=1:numel(filename),SPMall(1).xY.VY(nsub,n1).fname=filename{n1}; end if modeltype==2&&nsub==1, SPMall(1).connvols.Y=Y;SPMall(1).connvols.SE=SE;SPMall(1).connvols.cconditions=cconditions;SPMall(1).connvols.csources=csources;end conn_waitbar(2/4*(nsub/length(nsubjects)),h); end nrepeated=size(SPMall(1).xY.VY,2); SPMall(1).xX.X=kron(eye(nrepeated),X(nsubjects,CONN_x.Results.xX.nsubjecteffects));%CONN_x.Results.xX.X; SPMall(1).xX.name=repmat({CONN_x.Setup.l2covariates.names{CONN_x.Results.xX.nsubjecteffects}},[1,nrepeated]);%CONN_x.Results.xX.name; SPMall(1).xX.iH = []; SPMall(1).xX.iC = 1:size(SPMall(1).xX.X,2); SPMall(1).xX.iB = []; SPMall(1).xX.iG = []; SPMall(1).xGX = []; if nrepeated>1 xVi=struct('I',[repmat((1:size(SPMall(1).xY.VY,1))',[nrepeated,1]),reshape(repmat(1:nrepeated,[size(SPMall(1).xY.VY,1),1]),[],1)],'var',[0,1],'dep',[1,0]); SPMall(1).xVi=spm_non_sphericity(xVi); end end else, h=conn_waitbar(0,['Step ',num2str(sum(options<=15)),'/',num2str(length(options)),': Functional data second-level analyses']); for n1=1:length(sources), txttmp=sources{n1}; if state==3,txttmp=conn_v2v('pcleartext',txttmp); end if REDUCENAMES&&length(txttmp)>2&&strcmp(txttmp(1:3),'BA.'), idxtxttmp=find(txttmp=='.');idxtxttmp2=find(txttmp=='_'); if length(idxtxttmp)>1&&length(idxtxttmp2)>1&&idxtxttmp(end)-1<idxtxttmp2(end-1), txttmp=txttmp([1:idxtxttmp(end)-1,idxtxttmp2(end-1):end]); end; end foldername=[txttmp,'.']; foldername(foldername==' '|foldername==filesep|foldername=='*')='_'; [ok,nill]=mkdir(filepathresults2,foldername); if ok,filepathresults3{n1}=fullfile(filepathresults2,foldername); else,filepathresults3{n1}=uigetdir(filepathresults2,'Select a directory to write the results');end end clear SE Y; for nsub=1:length(nsubjects),%CONN_x.Setup.nsubjects, for n1=1:length(sources), altestsmooth=false; nroi=n1; roiname=sources{n1}; if state==2 [iroi,isnew]=conn_sourcenames(roiname,'-'); if isnew, error(['Non-existing ROI first-level data for ',roiname,' subject ',num2str(nsubjects(nsub)),'. Please repeat first-level analyses']); return; end else altestsmooth=altestsmooth|~isempty(strmatch('connectome',roiname)); [iroi,isnew,ncomp]=conn_v2v('match_extended',roiname); % [iroi,isnew]=conn_v2v('match_measures',CONN_x.vvAnalyses.regressors,nroi,'-'); if isnew, error(['Non-existing voxel-to-voxel first-level data for ',roiname,' subject ',num2str(nsubjects(nsub)),'. Please repeat first-level analyses']); return; end end if modeltype==2||(length(nconditions)>1&&size(cconditions,1)==1),%||any(cconditions~=1), b=0; for n0=1:length(nconditions), ncondition=nconditions(n0); if state==2 filename=fullfile(filepathresults1,['BETA_Subject',num2str(nsubjects(nsub)),'_Condition',num2str(ncondition,'%03d'),'_Source',num2str(iroi,'%03d'),'.nii']); else filename=fullfile(filepathresults1,['BETA_Subject',num2str(nsubjects(nsub),'%03d'),'_Condition',num2str(ncondition,'%03d'),'_Measure',num2str(iroi,'%03d'),'_Component',num2str(ncomp,'%03d'),'.nii']); end a=spm_vol(filename); b=b+cconditions(n0)*spm_read_vols(a); % if n0==1&&n1==1&&nsub==1 % [gridx,gridy,gridz]=ndgrid(1:a.dim(1),1:a.dim(2),1:a.dim(3));xyz=a.mat*[gridx(:),gridy(:),gridz(:),ones(numel(gridx),1)]'; adim=a.dim(1:3); % end % b=b+cconditions(n0)*reshape(spm_get_data(a,pinv(a.mat)*xyz),adim);%spm_read_vols(a); % if state==2&&modeltype==2&&nsub==1, % filename=fullfile(filepathresults1,['resultsDATA_Condition',num2str(ncondition,'%03d'),'_Source',num2str(iroi,'%03d'),'.mat']); % Y(n1,n0)=conn_vol(filename); % if n1==1, % filename=fullfile(filepathresults1,['seDATA_Condition',num2str(ncondition,'%03d'),'.mat']); % SE(n0)=conn_vol(filename); % end % end end filename=fullfile(filepathresults3{n1},['CON_Subject',num2str(nsubjects(nsub),'%03d'),'.nii']); %filename=fullfile(filepathresults2,['CON_Subject',num2str(nsubjects(nsub)),'_Source',num2str(iroi,'%03d'),'.nii']); a.fname=filename; spm_write_vol(a,b); filename={filename}; contrast=1; else filename={}; for n0=1:numel(nconditions) ncondition=nconditions(n0); if state==2 filename{end+1}=fullfile(filepathresults1,['BETA_Subject',num2str(nsubjects(nsub)),'_Condition',num2str(ncondition,'%03d'),'_Source',num2str(iroi,'%03d'),'.nii']); else filename{end+1}=fullfile(filepathresults1,['BETA_Subject',num2str(nsubjects(nsub),'%03d'),'_Condition',num2str(ncondition,'%03d'),'_Measure',num2str(iroi,'%03d'),'_Component',num2str(ncomp,'%03d'),'.nii']); end end contrast=cconditions; end SPMall(n1).xY.VY(nsub,:)=spm_vol(char(filename))'; SPMall(n1).altestsmooth=altestsmooth; if state==2&&modeltype==2&&nsub==1, SPMall(n1).connvols.Y=Y(n1,:);SPMall(n1).connvols.SE=SE;SPMall(1).connvols.cconditions=cconditions;SPMall(1).connvols.csources=1;end end conn_waitbar(2/4*(nsub/length(nsubjects)),h); end for n1=1:length(sources), nrepeated=size(SPMall(n1).xY.VY,2); SPMall(n1).xX.X=kron(eye(nrepeated),X(nsubjects,CONN_x.Results.xX.nsubjecteffects));%CONN_x.Results.xX.X; SPMall(n1).xX.name=repmat({CONN_x.Setup.l2covariates.names{CONN_x.Results.xX.nsubjecteffects}},[1,nrepeated]);%CONN_x.Results.xX.name; SPMall(n1).xX.iH = []; SPMall(n1).xX.iC = 1:size(SPMall(n1).xX.X,2); SPMall(n1).xX.iB = []; SPMall(n1).xX.iG = []; SPMall(n1).xGX = []; if nrepeated>1 xVi=struct('I',[repmat((1:size(SPMall(n1).xY.VY,1))',[nrepeated,1]),reshape(repmat(1:nrepeated,[size(SPMall(n1).xY.VY,1),1]),[],1)],'var',[0,1],'dep',[1,0]); SPMall(n1).xVi=spm_non_sphericity(xVi); end end end if dosinglecontrast==2, cd(filepathresults3{1}); if isfield(CONN_x,'gui')&&isnumeric(CONN_x.gui)&&CONN_x.gui, conn_display('SPM.mat',1); end cd(cwd); else, switch(modeltype), case 1, % random-effects for n1=1:length(SPMall), cd(filepathresults3{n1}); SPM=SPMall(n1); save('SPM.mat','SPM'); spm('Defaults','fmri'); spm_unlink('mask.img'); SPM=spm_spm(SPM); c=kron(contrast,CONN_x.Results.xX.csubjecteffects); %CONN_x.Results.xX.C; cname='connectivity result'; if size(c,1)==1, Statname='T'; else Statname='F'; end SPM.xCon = spm_FcUtil('Set',cname,Statname,'c',c',SPM.xX.xKXs); if 0,%adds other contrasts (one T-test per regressor, and one "effects of interest" F-test) C=eye(length(CONN_x.Results.xX.nsubjecteffects)); if size(C,1)>1, for n2=1:size(C,1), c=C(n2,:); cname=CONN_x.Setup.l2covariates.names{CONN_x.Results.xX.nsubjecteffects(n2)}; %CONN_x.Results.xX.name{n2}; SPM.xCon(end+1) = spm_FcUtil('Set',cname,'T','c',c',SPM.xX.xKXs); end cname='effects of interest'; SPM.xCon(end+1) = spm_FcUtil('Set',cname,'F','c',C,SPM.xX.xKXs); end end if isfield(SPM,'altestsmooth')&&SPM.altestsmooth, % modified smoothness estimation SPM=conn_est_smoothness(SPM); save('SPM.mat','SPM'); end SPM=spm_contrasts(SPM,1:length(SPM.xCon)); save('SPM.mat','SPM'); if state==2&&~isempty(dir('con_0001.img')), switch(CONN_x.Analyses(CONN_x.Analysis).measure), case {1,2}, %correlation V=spm_vol('con_0001.img'); t=spm_read_vols(V); V.fname='corr_0001.img'; spm_write_vol(V,tanh(t)); end end conn_waitbar(1/2+1/2*(n1/(length(SPMall))),h); if isfield(CONN_x,'gui')&&isnumeric(CONN_x.gui)&&CONN_x.gui, conn_display('SPM.mat',1); end end conn_waitbar('close',h); cd(cwd); case 2, % fixed-effects for n1=1:length(SPMall), cd(filepathresults3{n1}); csources=SPMall(n1).connvols.csources; cconditions=SPMall(n1).connvols.cconditions; Y=SPMall(n1).connvols.Y; SE=SPMall(n1).connvols.SE; xf=SPMall(n1).xX.X; filename='CON_spmT_0001.mat'; Yout=Y(1); Yout.fname=filename; Yout.size.Nt=1; Yout.DOF=sum([SE(:).DOF]); Yout=conn_init_vol(Yout); for slice=1:Y(1).matdim.dim(3), yf=0; se.data=0; se.dof=0; for ncondition=1:size(Y,2), for nsource=1:size(Y,1), [temp,y.idx]=conn_get_slice(Y(nsource,ncondition),slice); yf=yf+temp*csources(nsource)*cconditions(ncondition); end; [temp,nill]=conn_get_slice(SE(ncondition),slice); se.data=se.data+sum(csources.^2)*(cconditions(ncondition)*temp).^2; se.dof=se.dof+SE(ncondition).DOF; end se.data=sqrt(se.data); [B,opt]=conn_glmunivariate('estimatefixed',xf,yf,se); [H,F,p,dof,R]=conn_glmunivariate('evaluatefixed',opt,[],CONN_x.Results.xX.csubjecteffects); conn_write_slice(Yout,F,slice); conn_waitbar(1/2+1/2*((n1-1+slice/Y(1).matdim.dim(3))/(length(SPMall))),h); end t=nan+zeros(Yout.matdim.dim); y=conn_get_time(Yout,1,[],false); %V=spm_vol(deblank(CONN_x.Setup.structural{nsub}{1})); V=V(1); V=CONN_x.Setup.structural{1}{3}; V=V(1); t(Yout.voxels)=y; V.fname='spmT_0001.img'; if isfield(V,'dt'), V.dt=[spm_type('float32') spm_platform('bigend')]; elseif length(V.dim)>3, V.dim(4)=spm_type('float32'); end spm_write_vol(V,t); clear SPM; SPM.xCon(1).Vspm=V; SPM.xCon(1).eidf=inf; SPM.xX.erdf=Yout.DOF; SPM.xVol.R=[]; SPM.xVol.S=[]; save('SPM.mat','SPM'); if isfield(CONN_x,'gui')&&isnumeric(CONN_x.gui)&&CONN_x.gui, conn_display('SPM.mat',1); end end conn_waitbar('close',h); cd(cwd); end end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Creates second-level ROI.mat results %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if any(options==16) && any(CONN_x.Setup.steps([1])), filepathresults1=fullfile(CONN_x.folders.firstlevel,CONN_x.Analyses(CONN_x.Analysis).name); filepathresults2=CONN_x.folders.secondlevel; sources=CONN_x.Analyses(CONN_x.Analysis).sources; nconditions=CONN_x.Results.xX.nconditions; cconditions=CONN_x.Results.xX.cconditions; if nargin<=1, dosinglecontrast=0; nsources=1:length(sources); csources=ones(1,length(nsources)); else dosinglecontrast=1; nsources=varargin{1}; csources=varargin{2}; end if ~nargout, if isfield(CONN_x.Results,'foldername')&&~isempty(CONN_x.Results.foldername), [ok,nill]=mkdir(filepathresults2,CONN_x.Results.foldername); filepathresults2=fullfile(filepathresults2,CONN_x.Results.foldername); CONN_x.Results.foldername=[]; else, foldername={[CONN_x.Analyses(CONN_x.Analysis).name,'.']}; foldername{end+1}=['SUBJECT_EFFECTS_']; for n1=1:length(CONN_x.Results.xX.nsubjecteffects), if ~any(diff(CONN_x.Results.xX.csubjecteffects)),foldername{end+1}=[CONN_x.Setup.l2covariates.names{CONN_x.Results.xX.nsubjecteffects(n1)},'.']; else, foldername{end+1}=[CONN_x.Setup.l2covariates.names{CONN_x.Results.xX.nsubjecteffects(n1)},'(',num2str(CONN_x.Results.xX.csubjecteffects(n1),'%2.1f'),')','.'];end end foldername{end+1}=['CONDITIONS_']; for n1=1:length(nconditions), if ~any(diff(cconditions(:))),foldername{end+1}=[CONN_x.Setup.conditions.names{nconditions(n1)},'.']; else, foldername{end+1}=[CONN_x.Setup.conditions.names{nconditions(n1)},'(',num2str(cconditions(:,n1)','%2.1f'),')','.'];end end foldername=strcat(foldername{:}); foldername(foldername==' '|foldername==filesep)='_'; [ok,nill]=mkdir(filepathresults2,foldername); if ok,filepathresults2=fullfile(filepathresults2,foldername); else,filepathresults2=uigetdir(filepathresults2,'Select a directory to write the results');end % if isfield(CONN_x.Results,'foldername')&&~isempty(CONN_x.Results.foldername), % [ok,nill]=mkdir(filepathresults2,CONN_x.Results.foldername); % filepathresults2=fullfile(filepathresults2,CONN_x.Results.foldername); % else, % filepathresults2=CONN_x.folders.secondlevel; % filepathresults2=uigetdir(filepathresults2,'Select a directory to write the results'); % end end if ~ischar(filepathresults2), return; end; end X=zeros(CONN_x.Setup.nsubjects,length(CONN_x.Setup.l2covariates.names)-1); for nsub=1:CONN_x.Setup.nsubjects, for ncovariate=1:length(CONN_x.Setup.l2covariates.names)-1; X(nsub,ncovariate)=CONN_x.Setup.l2covariates.values{nsub}{ncovariate}; end end nsubjects=find(any(X(:,CONN_x.Results.xX.nsubjecteffects)~=0,2)); %h=conn_waitbar(0,['Step ',num2str(sum(options<=16)),'/',num2str(length(options)),': ROI data second-level analyses']); se.data=0; se.dof=0; y=0; Y=repmat({0},[1,length(nsources)]); for n0=1:length(nconditions), ncondition=nconditions(n0); filename=fullfile(filepathresults1,['resultsROI_Condition',num2str(ncondition,'%03d'),'.mat']); if isempty(dir(filename)), Ransw=questdlg('First-level ROI analyses have not completed. Perform now?','warning','Yes','No','Yes'); if strcmp(Ransw,'Yes'), conn_process('analyses_roi'); end end load(filename,'Z','names','names2','xyz','SE','DOF'); iroi=[];clear ixyz; for nroi=1:length(sources), roiname=sources{nroi}; tiroi=strmatch(roiname,names,'exact'); if isempty(tiroi), error(['Non-existing ROI first-level data for ',roiname,'. Please repeat first-level analyses']); return; end iroi(nroi)=tiroi(1); ixyz{nroi}=xyz{tiroi(1)}; end for n1=1:length(nsources), nroi=nsources(n1); yt=permute(Z(iroi(nroi),:,:),[3,2,1]); if n0==1&&n1==1, y=zeros([size(yt,1),size(yt,2),length(nsources),length(nconditions)]); end if n0==1, Y{n1}=zeros([size(yt,1),size(yt,2),length(nconditions)]); end y(:,:,n1,n0)=yt;% subjects x rois x nsources x nconditions Y{n1}(:,:,n0)=yt;% subjects x rois x nconditions %y=y+bsxfun(@times,yt,shiftdim(csources(:,n1)*cconditions(:,n0)',-2)); % subjects x rois x sourcecontrasts x conditioncontrasts %Y{n1}=Y{n1}+bsxfun(@times,yt,shiftdim(cconditions(:,n0),-2)); % subjects x rois x conditioncontrasts end % se.data=se.data+(cconditions(n0)*SE).^2; % se.dof=se.dof+DOF; end % se.data=sqrt(se.data); %if nargin>1, dosinglecontrast=(varargin{1}==1); else, dosinglecontrast=~(length(nsources)>1 & all(csources==1/length(nsources))); end clear SPMall filepathresults3; if dosinglecontrast, ROIall.xX.X=X(nsubjects,CONN_x.Results.xX.nsubjecteffects);%CONN_x.Results.xX.X; ROIall.xX.name={CONN_x.Setup.l2covariates.names{CONN_x.Results.xX.nsubjecteffects}};%CONN_x.Results.xX.name; % if ~nargout, filepathresults3{n1}=filepathresults2; end ROIall.y=y(nsubjects,:,:,:); ROIall.c2=kron(cconditions,csources); % ROIall.se=se; % ROIall.se.data=sqrt(sum(csources.^2))*ROIall.se.data; % ROIall.se.data=ROIall.se.data(nsubjects,:); % ROIall.se.dof=ROIall.se.dof(nsubjects); else for n1=1:length(nsources), ROIall(n1).xX.X=X(nsubjects,CONN_x.Results.xX.nsubjecteffects);%CONN_x.Results.xX.X; ROIall(n1).xX.name={CONN_x.Setup.l2covariates.names{CONN_x.Results.xX.nsubjecteffects}};%CONN_x.Results.xX.name; nroi=nsources(n1); roiname=sources{nroi}; % if ~nargout,[ok,nill]=mkdir(filepathresults2,roiname); filepathresults3{n1}=fullfile(filepathresults2,roiname); end ROIall(n1).y=Y{n1}(nsubjects,:,:); ROIall(n1).c2=cconditions; % ROIall(n1).se=se; % ROIall(n1).se.data=ROIall(n1).se.data(nsubjects,:); % ROIall(n1).se.dof=ROIall(n1).se.dof(nsubjects); end end clear ROIout; for n1=1:length(ROIall), ROI=ROIall(n1); ROI.names=sources; ROI.xyz=ixyz; ROI.names2=names2; ROI.xyz2=xyz; ROI.cname='connectivity result'; ROI.c=CONN_x.Results.xX.csubjecteffects;%CONN_x.Results.xX.C; if ~isfield(CONN_x.Results.xX,'modeltype')||isempty(CONN_x.Results.xX.modeltype), CONN_x.Results.xX.modeltype=1; end if CONN_x.Results.xX.modeltype==1, [ROI.h,ROI.F,ROI.p,ROI.dof,ROI.statsname]=conn_glm(ROI.xX.X,permute(ROI.y(:,:,:),[1,3,2]),ROI.c,ROI.c2); ROI.h=reshape(ROI.h,[size(ROI.h,1)*size(ROI.h,2),size(ROI.h,3)]); if size(ROI.h,1)>1, ROI.h=sqrt(sum(abs(ROI.h).^2,1)); end ROI.F=reshape(ROI.F,[size(ROI.F,1)*size(ROI.F,2),size(ROI.F,3)]); ROI.p=reshape(ROI.p,[size(ROI.p,1)*size(ROI.p,2),size(ROI.p,3)]); %[b,opt]=conn_glmunivariate('estimate',ROI.xX.X,ROI.y); %[ROI.h,ROI.F,ROI.p,ROI.dof,nill,ROI.statsname]=conn_glmunivariate('evaluate',opt,[],ROI.c); else, [b,opt]=conn_glmunivariate('estimatefixed',ROI.xX.X,ROI.y,ROI.se); [ROI.h,ROI.F,ROI.p,ROI.dof,nill,ROI.statsname]=conn_glmunivariate('evaluatefixed',opt,[],ROI.c); end ROIout(n1)=ROI; % if ~(nargin>1), save(fullfile(filepathresults3{n1},'ROI.mat'),'ROI'); % elseif dosinglecontrast, varargout{1}=ROI; % elseif n1<=length(nsources), varargout{1}(n1)=ROI; end %conn_waitbar(1/2+1/2*(n1/(length(nsources)+1)),h); end varargout{1}=ROIout; if ~nargout, ROI=ROIout;save(fullfile(filepathresults2,'ROI.mat'),'ROI'); end %conn_waitbar('close',h); ; %cd(cwd); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Displays second-level SPM.mat results %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if any(options==17) && any(CONN_x.Setup.steps([2])), conn_display; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % additional version-update step %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if 0,%any(options==18), [path,name,ext]=fileparts(CONN_x.filename); % filepath=fullfile(path,name,'data'); filepath=CONN_x.folders.preprocessing; filename=fullfile(filepath,['ROI_Subject',num2str(1,'%03d'),'_Condition',num2str(1,'%03d'),'.mat']); X1=load(filename); [X,nill,names]=conn_designmatrix(CONN_x.Analyses.regressors,X1,[]); CONN_x.Analyses(CONN_x.Analysis).sources=names; % CONN_x.Results.measure=CONN_x.Analyses.measure; end return; % from SPM5 function savefields(fnam,p) if length(p)>1, error('Can''t save fields.'); end; fn = fieldnames(p); if numel(fn)==0, return; end; for i=1:length(fn), eval([fn{i} '= p.' fn{i} ';']); end; if spm_matlab_version_chk('7') >= 0 save(fnam,'-V6',fn{:}); else save(fnam,fn{:}); end; function h=conn_waitbar(varargin); global CONN_x; h=[]; if isfield(CONN_x,'gui')&&isnumeric(CONN_x.gui)&&CONN_x.gui, if ischar(varargin{1}), h=varargin{2}; close(h); else, h=conn_timedwaitbar(varargin{:}); end else, if ischar(varargin{1}), conn_cumdisp; elseif ~varargin{1}, conn_cumdisp;disp(varargin{2}); else, conn_cumdisp([num2str(100*varargin{1},'%3.1f'),'% ']); end end function conn_cumdisp(txt); % CUMDISP persistent disp % cumdisp; initializes persistent display % cumdisp(text); displays persistent text % persistent oldtxt; if nargin<1, oldtxt=''; fprintf(1,'\n'); else, fprintf(1,[repmat('\b',[1,length(oldtxt)]),'%s'],txt); oldtxt=sprintf('%s',txt); end