function []=multistat_gui_cb(); Volume = get(gcf,'UserData'); Volume.Multi.OutputFile.Base = get(findobj(gcf,'Tag','OutputFileBase'),'String'); Volume.Multi.WStats(1) = get(findobj(gcf,'Tag','Tstat'),'Value'); Volume.Multi.WStats(2) = get(findobj(gcf,'Tag','Effect'),'Value'); Volume.Multi.WStats(3) = get(findobj(gcf,'Tag','SdEffect'),'Value'); Volume.Multi.WStats(4) = get(findobj(gcf,'Tag','SdRatio'),'Value'); Volume.Multi.FWHMIn = str2num(get(findobj(gcf,'Tag','InputFWHM'),'String')); Volume.Multi.FWHMvaratio = str2num(get(findobj(gcf,'Tag','FWHMvaratio'),'String')); Volume.Multi.Niter = str2num(get(findobj(gcf,'Tag','Niter'),'String')); callfig = Volume.fig; errchk=1; if (get(findobj(gcf,'Tag','InputFile'),'Value'))==1 [filename,filepath]=uigetfile(['*.txt'],'Choose Input File List'); if filename fid=fopen([filepath,filename]);FileList=[]; line=fgetl(fid); while line~=-1 if isstr(line);[t,r]=strtok(line);FileList=strvcat(FileList,t);end line=fgetl(fid); end fclose(fid); if (isfield(Volume.Multi.InputSD,'numinput')) errchk=Volume.Multi.InputSD.numinput==size(FileList,1); end if (size(FileList,1)>1)&errchk Volume.Multi.Input.filename=filename; Volume.Multi.Input.filepath=filepath; Volume.Multi.Input.filelist=FileList; Volume.Multi.Input.numinput=size(Volume.Multi.Input.filelist,1); set(findobj(gcf,'Tag','InputFileName'),'String',[Volume.Multi.Input.filepath,Volume.Multi.Input.filename]); else errordlg('Invalid Image File List or SD Dims dont match','File Load Error'); end end elseif (get(findobj(gcf,'Tag','InputSDFile'),'Value'))==1 [filename,filepath]=uigetfile(['*.txt'],'Choose Input SDFile List'); if filename fid=fopen([filepath,filename]);FileList=[]; line=fgetl(fid); while line~=-1 if isstr(line);[t,r]=strtok(line);FileList=strvcat(FileList,t);end line=fgetl(fid); end fclose(fid); if (isfield(Volume.Multi.Input,'numinput')) errchk=Volume.Multi.Input.numinput==size(FileList,1); end if (size(FileList,1)>1)&errchk Volume.Multi.InputSD.filename=filename; Volume.Multi.InputSD.filepath=filepath; Volume.Multi.InputSD.filelist=FileList; Volume.Multi.InputSD.numinput=size(Volume.Multi.InputSD.filelist,1); set(findobj(gcf,'Tag','InputSDFileName'),'String',[Volume.Multi.Input.filepath,Volume.Multi.Input.filename]); else errordlg('Invalid SD File List or Image File Dims dont match','File Load Error'); end end elseif (get(findobj(gcf,'Tag','InputFileDfs'),'Value'))==1 btn=questdlg('Do you wish to manually enter file dfs?','Df Input','File','Keyboard','File'); if strcmp('File',btn) [filename,filepath]=uigetfile(['*.txt'],'Choose Df file'); if filename fid=fopen([filepath,filename]);Dfs=[]; line=fgetl(fid); while line~=-1 if isstr(line);[t,r]=strtok(line);Dfs=strvcat(Dfs,t);end line=fgetl(fid); end fclose(fid); if (isfield(Volume.Multi.Input,'numinput')) errchk=(Volume.Multi.Input.numinput~=length(Dfs))|(length(Dfs)==1); end if errchk&(size(Dfs,1)==1|size(Dfs,2)==1) Volume.Multi.Dfs.filename=filename; Volume.Multi.Dfs.filepath=filepath; Volume.Multi.Dfs.Dfs=Dfs(:)'; Volume.Multi.Dfs.string=[Volume.Multi.Dfs.filepath,Volume.Multi.Dfs.filename]; set(findobj(gcf,'Tag','InputFileDfsList'),'String',Volume.Multi.Dfs.string); else errordlg('Invalid Df File or Image/SD Dims dont match','File Load Error'); end end else Dfs_str=inputdlg('Enter Dfs in one line','Dfs'); Dfs=str2num(cat(1,Dfs_str{:})); if (isfield(Volume.Multi.Input,'numinput')) errchk=(Volume.Multi.Input.numinput~=length(Dfs))|(length(Dfs)==1); end if (isfield(Volume.Multi.InputSD,'numinput')) errchk=errchk&((Volume.Multi.InputSD.numinput~=length(Dfs))|(length(Dfs)==1)); end if errchk&(size(Dfs,1)==1|size(Dfs,2)==1) Volume.Multi.Dfs.Dfs=Dfs(:)'; Volume.Multi.Dfs.string=num2str(Volume.Multi.Dfs.Dfs); set(findobj(gcf,'Tag','InputFileDfsList'),'String',Volume.Multi.Dfs.string); else errordlg('Invalid Dfs Input or Image/SD Dims dont match','Dfs Error'); end end elseif (get(findobj(gcf,'Tag','X'),'Value'))==1 btn=questdlg('Do you wish to manually enter a X matrix?','X matrix Input','File','Keyboard','File'); if strcmp('File',btn) [filename,filepath]=uigetfile(['*.txt'],'Choose X matrix file'); if filename Xmat=load([filepath,filename]); if (isfield(Volume.Multi.Input,'numinput')) errchk=Volume.Multi.Input.numinput==size(Xmat,1); end if (isfield(Volume.Multi.InputSD,'numinput')) errchk=errchk&(Volume.Multi.InputSD.numinput==size(Xmat,1)); end if errchk Volume.Multi.X.filename=filename; Volume.Multi.X.filepath=filepath; Volume.Multi.X.X=Xmat; Volume.Multi.X.string=[Volume.Multi.X.filepath,Volume.Multi.X.filename]; set(findobj(gcf,'Tag','ContrastList'),'String',Volume.Multi.Contrast.string); else errordlg('Invalid X matrix File or Image/SD Dims dont match','File Load Error'); end end else Xmat_str=inputdlg('Enter Contrast in Matlab notation (no brackets ; separates lines)','Contrast'); Xmat=str2num(cat(1,Xmat_str{:})); if ~isempty(Xmat) if (isfield(Volume.Multi.Input,'numinput')) errchk=Volume.Multi.Input.numinput==size(Xmat,1); end if (isfield(Volume.Multi.InputSD,'numinput')) errchk=errchk&(Volume.Multi.InputSD.numinput==size(Xmat,1)); end if errchk Volume.Multi.X.X=Xmat; Volume.Multi.X.string=[]; for i=1:size(Xmat,1) Volume.Multi.X.string=[Volume.Multi.X.string,num2str(Volume.Multi.X.X(i,:)),' ; ']; end set(findobj(gcf,'Tag','Xmatrix'),'String',Volume.Multi.X.string); else errordlg('Invalid X matrix, Image/SD Dims dont match','X matrix Error'); end else errordlg('Invalid X matrix, Different number of elements in rows','X matrix Error'); end end elseif (get(findobj(gcf,'Tag','Contrast'),'Value'))==1 btn=questdlg('Do you wish to manually enter a Contrast?','Contrast Input','File','Keyboard','File'); if strcmp('File',btn) [filename,filepath]=uigetfile(['*.txt'],'Choose Contrast file'); if filename Contrast=load([filepath,filename]); if (isfield(Volume.Multi.X,'X')) errchk=size(Volume.Multi.X.X,2)==length(Contrast); end if errchk&(size(Contrast,1)==1|size(Contrast,2)==1) Volume.Multi.Dfs.filename=filename; Volume.Multi.Dfs.filepath=filepath; Volume.Multi.Dfs.Dfs=Contrast(:)'; Volume.Multi.Dfs.string=[Volume.Multi.Contrast.filepath,Volume.Multi.Contrast.filename]; set(findobj(gcf,'Tag','ContrastList'),'String',Volume.Multi.Contrast.string); else errordlg('Invalid Contrast File or X matrix Dims dont match','File Load Error'); end end else Contrast_str=inputdlg('Enter Contrast in one line','Contrast Input'); Contrast=str2num(cat(1,Contrast_str{:})); if (isfield(Volume.Multi.X,'X')) errchk=size(Volume.Multi.X.X,2)==length(Contrast); end if errchk&(size(Contrast,1)==1|size(Contrast,2)==1) Volume.Multi.Contrast.Contrast=Contrast(:)'; Volume.Multi.Contrast.string=num2str(Volume.Multi.Contrast.Contrast); set(findobj(gcf,'Tag','ContrastList'),'String',Volume.Multi.Contrast.string); else errordlg('Invalid Contrast Input or X matrix Dims dont match','Contrast Error'); end end elseif (get(findobj(gcf,'Tag','DefineFile'),'Value'))==1 [Volume.Multi.Define.filename,Volume.Multi.Define.filepath]=uigetfile(['*.mat'],'Choose Definition File (matlab file)'); if Volume.Multi.Define.filename Define=load([Volume.Multi.Define.filepath,Volume.Multi.Define.filename]); if isfield(Define,'Volume') Volume=Define.Volume; if isfield(Volume,'Multi') if isfield(Volume.Multi.Input,'filename');set(findobj(gcf,'Tag','InputFileName'),'String',[Volume.Multi.Input.filepath,Volume.Multi.Input.filename]);end if isfield(Volume.Multi.InputSD,'filename');set(findobj(gcf,'Tag','InputSDFileName'),'String',[Volume.Multi.InputSD.filepath,Volume.Multi.InputSD.filename]);end if isfield(Volume.Multi.Dfs,'string');set(findobj(gcf,'Tag','InputFileDfsList'),'String',Volume.Multi.Dfs.string);end if isfield(Volume.Multi.X,'string');set(findobj(gcf,'Tag','Xmatrix'),'String',Volume.Multi.X.string);end if isfield(Volume.Multi.Contrast,'string');set(findobj(gcf,'Tag','ContrastList'),'String',Volume.Multi.Contrast.string);end end else errordlg('Invalid Definitions File','File Load Error'); end end elseif (get(findobj(gcf,'Tag','ImageDefineFile'),'Value'))==1 [filename,filepath]=uigetfile(['*.txt'],'Choose Image Definition File (3 col text file)'); if filename fid=fopen([filepath,filename]);infile=[];sdfile=[];dfs=[]; line=fgetl(fid); while line~=-1 if isstr(line);[t,r]=strtok(line);infile=strvcat(infile,t);[t,r]=strtok(r);sdfile=strvcat(sdfile,t);dfs=[dfs;str2num(r)];end line=fgetl(fid); end fclose(fid); Volume.Multi.Input.filelist=infile;Volume.Multi.Input.numinput=size(infile,1);Volume.Multi.Input.filepath=filepath;Volume.Multi.Input.filename=filename;set(findobj(gcf,'Tag','InputFileName'),'String',[Volume.Multi.Input.filepath,Volume.Multi.Input.filename]); Volume.Multi.InputSD.filelist=sdfile;Volume.Multi.InputSD.numinput=size(sdfile,1);Volume.Multi.InputSD.filepath=filepath;Volume.Multi.InputSD.filename=filename;set(findobj(gcf,'Tag','InputSDFileName'),'String',[Volume.Multi.InputSD.filepath,Volume.Multi.InputSD.filename]); Volume.Multi.Dfs.Dfs=dfs';Volume.Multi.Dfs.filepath=filepath;Volume.Multi.Dfs.filename=filename;Volume.Multi.Dfs.string=[Volume.Multi.Dfs.filepath,Volume.Multi.Dfs.filename];set(findobj(gcf,'Tag','InputFileDfsList'),'String',Volume.Multi.Dfs.string); end end set(findobj(gcf,'Tag','OutputFileBase'),'String',Volume.Multi.OutputFile.Base); set(findobj(gcf,'Tag','Tstat'),'Value',Volume.Multi.WStats(1)); set(findobj(gcf,'Tag','Effect'),'Value',Volume.Multi.WStats(2)); set(findobj(gcf,'Tag','SdEffect'),'Value',Volume.Multi.WStats(3)); set(findobj(gcf,'Tag','SdRatio'),'Value',Volume.Multi.WStats(4)); set(findobj(gcf,'Tag','InputFWHM'),'String',num2str(Volume.Multi.FWHMIn)); set(findobj(gcf,'Tag','FWHMvaratio'),'String',num2str(Volume.Multi.FWHMvaratio)); set(findobj(gcf,'Tag','Niter'),'String',num2str(Volume.Multi.Niter)); Volume.fig=callfig; if isfield(Volume.Multi.Input,'filelist')&isfield(Volume.Multi.InputSD,'filelist')... &isfield(Volume.Multi.Dfs,'Dfs')&(~isempty(Volume.Multi.OutputFile.Base));Volume.Multi.Status='OK';end set(gcf,'UserData',Volume);