function []=fmridesign_gui_cb(); Volume = get(gcf,'UserData'); callfig = Volume.fig; if ~Volume.Design.HRF.Multi Volume.Design.HRF.Error=0; for i=1:5 if isempty(get(findobj(gcf,'Tag',['HRF_' num2str(i)]),'String')) Volume.Design.HRF.Error=1; end end if Volume.Design.HRF.Error==1;errordlg('Error - HRF Param(s) undefined','Design Error');return;end Volume.Design.HRF.HRF = []; Volume.Design.HRF.HRF(1) = str2num(get(findobj(gcf,'Tag','HRF_1'),'String')); Volume.Design.HRF.HRF(2) = str2num(get(findobj(gcf,'Tag','HRF_2'),'String')); Volume.Design.HRF.HRF(3) = str2num(get(findobj(gcf,'Tag','HRF_3'),'String')); Volume.Design.HRF.HRF(4) = str2num(get(findobj(gcf,'Tag','HRF_4'),'String')); Volume.Design.HRF.HRF(5) = str2num(get(findobj(gcf,'Tag','HRF_5'),'String')); end callfig = Volume.fig; if (get(findobj(gcf,'Tag','FrameFile'),'Value'))==1 btn=questdlg('Do you wish to manually enter frametimes?','Frame Time Input','File','Keyboard','File'); if strcmp('File',btn) [Volume.Design.Frames.filename,Volume.Design.Frames.filepath]=uigetfile(['*.txt'],'Choose Frame Time File (text file)'); Volume.Design.Frames.string=[Volume.Design.Frames.filepath,Volume.Design.Frames.filename]; if Volume.Design.Frames.filename Volume.Design.Frames.frametimes=load([Volume.Design.Frames.filepath,Volume.Design.Frames.filename]); if ((size(Volume.Design.Frames.frametimes,1)~=1)*(size(Volume.Design.Frames.frametimes,2)~=1)==1)|(length(size(Volume.Design.Frames.frametimes))>2) Volume.Design.Frames.frametimes=[]; Volume.Design.Frames.filepath=[]; Volume.Design.Frames.filename=[]; Volume.Design.Frames.string='ERROR - reload'; end set(findobj(gcf,'Tag','FrameFileName'),'String',Volume.Design.Frames.string); end else str=inputdlg('Enter Matlab Functional Command for Frame Times','Frame Times Input',1,{'(0:(NumFrames-1))*3'}); if ~isempty(str) Volume.Design.Frames.string=cat(1,str{:}); str=['Volume.Design.Frames.frametimes=' cat(1,str{:}) ';'];Volume.Design.Frames.Error=0; Volume.Design.Frames.filepath=[];Volume.Design.Frames.filename=[]; eval(str,'errordlg(''Invalid Matlab Command'');Volume.Design.Frames.Error=1;'); if (Volume.Design.Frames.Error==1)|((size(Volume.Design.Frames.frametimes,1)~=1)*(size(Volume.Design.Frames.frametimes,2)~=1)==1)|(length(size(Volume.Design.Frames.frametimes))>2); Volume.Design.Frames.frametimes=[]; Volume.Design.Frames.string='ERROR'; end set(findobj(gcf,'Tag','FrameFileName'),'String',Volume.Design.Frames.string); end end elseif (get(findobj(gcf,'Tag','SliceFile'),'Value'))==1 btn=questdlg('Do you wish to manually enter slicetimes?','Slice Time Input','File','Keyboard','File'); if strcmp('File',btn) [Volume.Design.Slice.filename,Volume.Design.Slice.filepath]=uigetfile(['*.txt'],'Choose Slice Time File (text file)'); Volume.Design.Slice.string=[Volume.Design.Slice.filepath,Volume.Design.Slice.filename]; if Volume.Design.Slice.filename Volume.Design.Slice.slicetimes=load([Volume.Design.Slice.filepath,Volume.Design.Slice.filename]); if ((size(Volume.Design.Slice.slicetimes,1)~=1)*(size(Volume.Design.Slice.slicetimes,2)~=1)==1)|(length(size(Volume.Design.Slice.slicetimes))>2) Volume.Design.Slice.slicetimes=0; Volume.Design.Slice.filepath=[];Volume.Design.Slice.filename=[]; Volume.Design.Slice.string='ERROR - using default (0)'; end set(findobj(gcf,'Tag','SliceFileName'),'String',Volume.Design.Slice.string); end else str=inputdlg('Enter Matlab Functional Command for SliceTimes','Slice Times Input',1,{'0'}); Volume.Design.Slice.string=cat(1,str{:}); str=['Volume.Design.Slice.slicetimes=' cat(1,str{:}) ';'];Volume.Design.Slice.Error=0; Volume.Design.Slice.filepath=[];Volume.Design.Slice.filename=[]; eval(str,'errordlg(''Invalid Matlab Command'');Volume.Design.Slice.Error=1;'); if (Volume.Design.Slice.Error==1)|((size(Volume.Design.Slice.slicetimes,1)~=1)*(size(Volume.Design.Slice.slicetimes,2)~=1)==1)|(length(size(Volume.Design.Slice.slicetimes))>2) Volume.Design.Slice.slicetimes=0; Volume.Design.Slice.string='ERROR - Using Default (0)'; end set(findobj(gcf,'Tag','SliceFileName'),'String',Volume.Design.Slice.string); end elseif (get(findobj(gcf,'Tag','EventsFile'),'Value'))==1 btn=questdlg('Do you wish to manually enter events?','Event Input','File','Keyboard','No Events','File'); if strcmp('File',btn) [Volume.Design.Events.filename,Volume.Design.Events.filepath]=uigetfile(['*.txt'],'Choose Events File (text file)'); Volume.Design.Events.string=[Volume.Design.Events.filepath,Volume.Design.Events.filename]; if Volume.Design.Events.filename Volume.Design.Events.events=load([Volume.Design.Events.filepath,Volume.Design.Events.filename]); Volume.Design.Events.numevents=max(Volume.Design.Events.events(:,1)); if (((size(Volume.Design.Events.events,1)<2)|(size(Volume.Design.Events.events,2)<2)==1)|(length(size(Volume.Design.Events.events))>2)) Volume.Design.Events.events=[1 0]; Volume.Design.Events.filepath=[];Volume.Design.Events.filename=[]; Volume.Design.Events.numevents=1; Volume.Design.Events.string='ERROR - using default ([1 0])'; end set(findobj(gcf,'Tag','EventsFileName'),'String',Volume.Design.Events.string); end elseif strcmp('Keyboard',btn) str=inputdlg('Enter Matlab Functional Command for Events','Events Input',1,{''}); if ~isempty(str) Volume.Design.Events.string=cat(1,str{:}); str=['Volume.Design.Events.events=' cat(1,str{:}) ';'];Volume.Design.Events.Error=0; Volume.Design.Events.filepath=[];Volume.Design.Events.filename=[]; eval(str,'errordlg(''Invalid Matlab Command'');Volume.Design.Events.Error=1;'); if (Volume.Design.Events.Error==1)|((size(Volume.Design.Events.events,1)<2)|(size(Volume.Design.Events.events,2)<4)==1)|(length(size(Volume.Design.Events.events))>2) Volume.Design.Events.events=[1 0]; Volume.Design.Events.numevents=1; Volume.Design.Slice.string='ERROR - Using Default ([1 0])'; else Volume.Design.Events.numevents=max(Volume.Design.Events.events(:,1)); end set(findobj(gcf,'Tag','EventsFileName'),'String',Volume.Design.Events.string); end else Volume.Design.Events.events=[]; Volume.Design.Events.filepath=[];Volume.Design.Events.filename=[]; Volume.Design.Events.numevents=0; Volume.Design.Events.string='No Events Defined'; set(findobj(gcf,'Tag','EventsFileName'),'String',Volume.Design.Events.string); end elseif (get(findobj(gcf,'Tag','SFile'),'Value'))==1 btn=questdlg('Do you wish to manually enter S?','S Input','File','Keyboard','No S','File'); if strcmp('File',btn) [Volume.Design.S.filename,Volume.Design.S.filepath]=uigetfile(['*.txt'],'Choose S File (text file)'); Volume.Design.S.string=[Volume.Design.S.filepath,Volume.Design.S.filename]; if Volume.Design.S.filename Volume.Design.S.S=load([Volume.Design.S.filepath,Volume.Design.S.filename]); Volume.Design.S.numS=size(Volume.Design.S.S,2); if (length(size(Volume.Design.S.S))>2) Volume.Design.S.S=[]; Volume.Design.S.filepath=[];Volume.Design.S.filename=[]; Volume.Design.Events.numS=0; Volume.Design.S.string='ERROR - using default ([])'; end set(findobj(gcf,'Tag','SFileName'),'String',Volume.Design.S.string); end elseif strcmp('Keyboard',btn) str=inputdlg('Enter Matlab Functional Command for S','S Input',1,{''}); if ~isempty(str) Volume.Design.S.string=cat(1,str{:}); str=['Volume.Design.S.S=' cat(1,str{:}) ';'];Volume.Design.S.Error=0; Volume.Design.S.filepath=[];Volume.Design.S.filename=[]; eval(str,'errordlg(''Invalid Matlab Command'');Volume.Design.S.Error=1;'); Volume.Design.S.numS=size(Volume.Design.S.S,2); if (Volume.Design.S.Error==1)|(length(size(Volume.Design.S.S))>2) Volume.Design.S.S=[]; Volume.Design.S.numS=0; Volume.Design.S.string='ERROR - Using Default (No S Defined)'; else Volume.Design.S.numS=size(Volume.Design.S.S,2); end set(findobj(gcf,'Tag','SFileName'),'String',Volume.Design.S.string); end else Volume.Design.S.S=[]; Volume.Design.S.filepath=[];Volume.Design.S.filename=[]; Volume.Design.S.numS=0; Volume.Design.S.string='No S Defined'; set(findobj(gcf,'Tag','SFileName'),'String',Volume.Design.S.string); end elseif (get(findobj(gcf,'Tag','MultiHRF'),'Value'))==1 Volume.Design.HRF.maxno=Volume.Design.Events.numevents+Volume.Design.S.numS; if Volume.Design.HRF.maxno<=1;errordlg('Only One Event Defined','Multiple HRF Error');return;end Volume.Design.HRF.Error=1;set(gcf,'Userdata',Volume);hbfget(Volume);Volume=get(gcf,'Userdata'); if ~Volume.Design.HRF.Error for i=1:5; set(findobj(gcf,'Tag',['HRF_',num2str(i)]),'Style','listbox','Max',1,'Min',1,'ListboxTop',1,'String',num2str(Volume.Design.HRF.HRF(:,i))); end Volume.Design.HRF.Multi=1; end elseif (get(findobj(gcf,'Tag','PlotHRF'),'Value'))==1 hpar=gcf; if isfield(Volume.Design.HRF,'plot');figure(Volume.Design.HRF.plot);set(Volume.Design.HRF.plot,'NumberTitle','off','Name','HRF');figure(Volume.Design.HRF.plot);clf;else;Volume.Design.HRF.plot=figure('NumberTitle','off','Name','HRF');end hevents=[(1:size(Volume.Design.HRF.HRF,1))' zeros(size(Volume.Design.HRF.HRF,1),1)]; time=(0:240)/10;hrf0=fmridesign(time,0,hevents,[],Volume.Design.HRF.HRF); plot(time,squeeze(hrf0(:,:,1,1)),'LineWidth',2);xlabel('time (seconds)');ylabel('hrf');title('HRF model'); set(0,'CurrentFigure',hpar); elseif (get(findobj(gcf,'Tag','DefineFile'),'Value'))==1 [Volume.Design.Define.filename,Volume.Design.Define.filepath]=uigetfile(['*.mat'],'Choose Definition File (matlab file)'); if Volume.Design.Define.filename Define=load([Volume.Design.Define.filepath,Volume.Design.Define.filename]); if isfield(Define,'Volume') Volume=Define.Volume; if isfield(Volume,'Design') if isfield(Volume.Design.Frames,'string');set(findobj(gcf,'Tag','FrameFileName'),'String',Volume.Design.Frames.string);end if isfield(Volume.Design.Slice,'string');set(findobj(gcf,'Tag','SliceFileName'),'String',Volume.Design.Slice.string);end if isfield(Volume.Design.Events,'string');set(findobj(gcf,'Tag','EventsFileName'),'String',Volume.Design.Events.string);end if isfield(Volume.Design.S,'string');set(findobj(gcf,'Tag','SFileName'),'String',Volume.Design.S.string);end end else errordlg('Invalid Definitions File','File Load Error'); end end end if ~Volume.Design.HRF.Multi set(findobj(gcf,'Tag','HRF_1'),'String',num2str(Volume.Design.HRF.HRF(1)),'Style','edit'); set(findobj(gcf,'Tag','HRF_2'),'String',num2str(Volume.Design.HRF.HRF(2)),'Style','edit'); set(findobj(gcf,'Tag','HRF_3'),'String',num2str(Volume.Design.HRF.HRF(3)),'Style','edit'); set(findobj(gcf,'Tag','HRF_4'),'String',num2str(Volume.Design.HRF.HRF(4)),'Style','edit'); set(findobj(gcf,'Tag','HRF_5'),'String',num2str(Volume.Design.HRF.HRF(5)),'Style','edit'); else for i=1:5; set(findobj(gcf,'Tag',['HRF_',num2str(i)]),'Style','listbox','Max',1,'Min',1,'ListboxTop',1,'String',num2str(Volume.Design.HRF.HRF(:,i))); end end Volume.fig=callfig; if (Volume.Design.Events.numevents==0)&(Volume.Design.S.numS==0) Volume.Design.Status = 'Error - No Events or S Defined'; else if isempty(Volume.Design.Frames.frametimes) Volume.Design.Status = 'Error - No Frame Times Defined'; else Volume.Design.Status = 'OK'; end end set(gcf,'UserData',Volume); return; function hbfget(Volume); col1 = [0.2 0.6 0.9];col2 = col1*0.9;col3 = [1 1 1];col4 = col2*1;col5 = col1*.8;screen = get(0,'ScreenSize');font_size = round((screen(3)-400)/200)+3;font_name = 'Helvetica'; set(gcf,'Userdata',Volume); numHRF=Volume.Design.HRF.maxno;Volume.Design.HRF.Error=1; hnorm=1/(numHRF+2);thnorm=0.05/(0.1+0.05*numHRF)*0.45; pos=[0.3 0.4 0.5 0.1+0.05*numHRF]; h2=figure('Units','normalized','Color',col1,'Name','HRF define','NumberTitle','off','Resize','off','Position',pos,'Tag','HRF define');set(gcf,'UserData',Volume); h1 = uicontrol('Parent',h2,'Units','normalized','BackgroundColor',col4,'ListboxTop',0,'Position',[0.17 (numHRF+1)*hnorm 0.11 thnorm],'String','Peak1','Style','text','Tag','StaticText1'); h1 = uicontrol('Parent',h2,'Units','normalized','BackgroundColor',col4,'ListboxTop',0,'Position',[0.3 (numHRF+1)*hnorm 0.11 thnorm],'String','FWHM1','Style','text','Tag','StaticText1'); h1 = uicontrol('Parent',h2,'Units','normalized','BackgroundColor',col4,'ListboxTop',0,'Position',[0.42 (numHRF+1)*hnorm 0.11 thnorm],'String','Peak2','Style','text','Tag','StaticText1'); h1 = uicontrol('Parent',h2,'Units','normalized','BackgroundColor',col4,'ListboxTop',0,'Position',[0.54 (numHRF+1)*hnorm 0.11 thnorm],'String','FWHM2','Style','text','Tag','StaticText1'); h1 = uicontrol('Parent',h2,'Units','normalized','BackgroundColor',col4,'ListboxTop',0,'Position',[0.66 (numHRF+1)*hnorm 0.11 thnorm],'String','Dip','Style','text','Tag','StaticText1'); call_str=['Volume=get(gcf,''Userdata'');Volume=fmris_hbfget_cb(Volume);if ~Volume.Design.HRF.Error;delete(gcf);set(gcf,''Userdata'',Volume);uiresume;end']; h1 = uicontrol('Parent',h2,'Units','normalized','BackgroundColor',col5,'CallBack',call_str ,'ListboxTop',0,'Position',[0.82 0.01 0.15 thnorm],'String','Accept','Style','pushbutton','Tag','Push1'); PresHRF=size(Volume.Design.HRF.HRF,1); if PresHRF~=numHRF;if PresHRF>numHRF;HRF=Volume.Design.HRF.HRF(1:numHRF,:);else;HRF=[Volume.Design.HRF.HRF;repmat([5.4,5.2,10.8,7.35,0.35],numHRF-PresHRF,1)];end;else;HRF=Volume.Design.HRF.HRF;end for i=0:(numHRF-1) if i <= (Volume.Design.Events.numevents-1);HRFstr = ['Event ',num2str(i+1)];else;HRFstr = ['S col',num2str(i+1-Volume.Design.Events.numevents)];end h1 = uicontrol('Parent',h2,'Units','normalized','BackgroundColor',col1,'ListboxTop',0,'Position',[0.06 (numHRF-i)*hnorm 0.11 thnorm],'Style','text','String',HRFstr,'Tag','StaticText1'); h1 = uicontrol('Parent',h2,'Units','normalized','BackgroundColor',[1 1 1],'ListboxTop',0,'Position',[0.17 (numHRF-i)*hnorm 0.11 thnorm],'Style','edit','String',num2str(HRF(i+1,1)),'Tag',['HRF_' num2str(i+1) '_1']); h1 = uicontrol('Parent',h2,'Units','normalized','BackgroundColor',[1 1 1],'ListboxTop',0,'Position',[0.3 (numHRF-i)*hnorm 0.11 thnorm],'Style','edit','String',num2str(HRF(i+1,2)),'Tag',['HRF_' num2str(i+1) '_2']); h1 = uicontrol('Parent',h2,'Units','normalized','BackgroundColor',[1 1 1],'ListboxTop',0,'Position',[0.42 (numHRF-i)*hnorm 0.11 thnorm],'Style','edit','String',num2str(HRF(i+1,3)),'Tag',['HRF_' num2str(i+1) '_3']); h1 = uicontrol('Parent',h2,'Units','normalized','BackgroundColor',[1 1 1],'ListboxTop',0,'Position',[0.54 (numHRF-i)*hnorm 0.11 thnorm],'Style','edit','String',num2str(HRF(i+1,4)),'Tag',['HRF_' num2str(i+1) '_4']); h1 = uicontrol('Parent',h2,'Units','normalized','BackgroundColor',[1 1 1],'ListboxTop',0,'Position',[0.66 (numHRF-i)*hnorm 0.11 thnorm],'Style','edit','String',num2str(HRF(i+1,5)),'Tag',['HRF_' num2str(i+1) '_5']); end uiwait; return;