524 lines
19 KiB
Matlab
524 lines
19 KiB
Matlab
function varargout = PDToolkit_main(varargin)
|
|
% PDTOOLKIT_MAIN MATLAB code for PDToolkit_main.fig
|
|
% PDTOOLKIT_MAIN, by itself, creates a new PDTOOLKIT_MAIN or raises the existing
|
|
% singleton*.
|
|
%
|
|
% H = PDTOOLKIT_MAIN returns the handle to a new PDTOOLKIT_MAIN or the handle to
|
|
% the existing singleton*.
|
|
%
|
|
% PDTOOLKIT_MAIN('CALLBACK',hObject,eventData,handles,...) calls the local
|
|
% function named CALLBACK in PDTOOLKIT_MAIN.M with the given input arguments.
|
|
%
|
|
% PDTOOLKIT_MAIN('Property','Value',...) creates a new PDTOOLKIT_MAIN or raises the
|
|
% existing singleton*. Starting from the left, property value pairs are
|
|
% applied to the GUI before PDToolkit_main_OpeningFcn gets called. An
|
|
% unrecognized property name or invalid value makes property application
|
|
% stop. All inputs are passed to PDToolkit_main_OpeningFcn via varargin.
|
|
%
|
|
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
|
|
% instance to run (singleton)".
|
|
%
|
|
% See also: GUIDE, GUIDATA, GUIHANDLES
|
|
|
|
% Edit the above text to modify the response to help PDToolkit_main
|
|
|
|
% Last Modified by GUIDE v2.5 22-Feb-2016 00:02:18
|
|
|
|
% Begin initialization code - DO NOT EDIT
|
|
gui_Singleton = 1;
|
|
gui_State = struct('gui_Name', mfilename, ...
|
|
'gui_Singleton', gui_Singleton, ...
|
|
'gui_OpeningFcn', @PDToolkit_main_OpeningFcn, ...
|
|
'gui_OutputFcn', @PDToolkit_main_OutputFcn, ...
|
|
'gui_LayoutFcn', [] , ...
|
|
'gui_Callback', []);
|
|
if nargin && ischar(varargin{1})
|
|
gui_State.gui_Callback = str2func(varargin{1});
|
|
end
|
|
|
|
if nargout
|
|
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
|
|
else
|
|
gui_mainfcn(gui_State, varargin{:});
|
|
end
|
|
% End initialization code - DO NOT EDIT
|
|
|
|
|
|
% --- Executes just before PDToolkit_main is made visible.
|
|
function PDToolkit_main_OpeningFcn(hObject, eventdata, handles, varargin)
|
|
% This function has no output args, see OutputFcn.
|
|
% hObject handle to figure
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
% varargin command line arguments to PDToolkit_main (see VARARGIN)
|
|
|
|
% Choose default command line output for PDToolkit_main
|
|
handles.output = hObject;
|
|
|
|
% Update handles structure
|
|
guidata(hObject, handles);
|
|
|
|
% UIWAIT makes PDToolkit_main wait for user response (see UIRESUME)
|
|
% uiwait(handles.figure1);
|
|
|
|
|
|
% --- Outputs from this function are returned to the command line.
|
|
function varargout = PDToolkit_main_OutputFcn(hObject, eventdata, handles)
|
|
% varargout cell array for returning output args (see VARARGOUT);
|
|
% hObject handle to figure
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
% Get default command line output from handles structure
|
|
varargout{1} = handles.output;
|
|
|
|
|
|
% --- Executes on button press in display_button.
|
|
function display_button_Callback(hObject, eventdata, handles)
|
|
% hObject handle to display_button (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
e = getappdata(handles.figure1, 'PDExperiment');
|
|
text = info(e);
|
|
|
|
|
|
[s,v] = listdlg('PromptString','Info',...
|
|
'SelectionMode','single',...
|
|
'ListString',text)
|
|
|
|
|
|
% --- Executes on button press in settings_button.
|
|
function settings_button_Callback(hObject, eventdata, handles)
|
|
% hObject handle to settings_button (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
e = getappdata(handles.figure1, 'PDExperiment');
|
|
|
|
options = {'<html><b>Dataset</b></html>', ...
|
|
' *) Initial directory readout',...
|
|
' *) Add subjects / sessions',...
|
|
' *) Remove subjects / sessions',...
|
|
'',...
|
|
'<html><b>Trial definitions</b></html',...
|
|
' *) Specify Trial start/end', ....
|
|
' *) Specify Stimulus start/end', ....
|
|
' *) Specify Baseline start/end', ....
|
|
' *) Specify Labels', ....
|
|
' *) Exclude Trials',...
|
|
'',...
|
|
'<html><b>Preprocessing settings</b></html',...
|
|
' *) Specify Blink extension', ....
|
|
' *) Specify Maximium Blink size', ....
|
|
' *) Specify Baseline correction type', ....
|
|
' *) Specify Quality threshold', ...
|
|
};
|
|
|
|
valid_choices = [ 2:4 7:10 13:16];
|
|
choice = 0; choice_is_valid = 0;
|
|
|
|
while ( ~choice_is_valid )
|
|
choice = listdlg('PromptString', 'Select an option', ...
|
|
'SelectionMode', 'single', ...
|
|
'ListSize', [200 200],...
|
|
'ListString', options);
|
|
choice_is_valid = ismember(choice, valid_choices);
|
|
if ~choice_is_valid
|
|
display('No setting selected. Please try again...');
|
|
end
|
|
end
|
|
current_settings = e.settings;
|
|
if choice > 0
|
|
switch choice
|
|
case 2
|
|
hObject = performDirectoryReadout(hObject, handles);
|
|
case 3
|
|
hObject = addSubjectsSessions(hObject, handles);
|
|
case 4
|
|
hObject = removeSubjectsSessions(hObject, handles);
|
|
case 6
|
|
hObject = PDTrialGUI(current_settings, 'trial');
|
|
case 7
|
|
hObject = PDTrialGUI(current_settings, 'stimulus');
|
|
case 8
|
|
hObject = PDTrialGUI(current_settings, 'baseline');
|
|
case 9
|
|
hObject = PDTrialGUI(current_settings, 'labels');
|
|
|
|
otherwise
|
|
end
|
|
end
|
|
|
|
function[hObject] = performDirectoryReadout(hObject, handles)
|
|
|
|
e = getappdata(handles.figure1, 'PDExperiment');
|
|
cwd = pwd;
|
|
directoryname = uigetdir(pwd, 'Select a folder to read');
|
|
|
|
if (ischar(directoryname) && exist(directoryname, 'dir'))
|
|
e = e.buildExperiment(directoryname);
|
|
cd(cwd);
|
|
nsubj = length(e.subjects); nsess = 0;
|
|
|
|
for i = 1:length(nsubj)
|
|
nsess = nsess + length(e.subjects(i).sessions);
|
|
end
|
|
|
|
status_line = sprintf('Found %d subjects (%d sessions)', nsubj, nsess);
|
|
pdlog(handles, status_line);
|
|
|
|
setappdata(handles.figure1, 'PDExperiment',e);
|
|
end
|
|
|
|
|
|
function [hObject] = addSubjectsSessions(hObject, handles)
|
|
|
|
e = getappdata(handles.figure1, 'PDExperiment');
|
|
answer = questdlg('Please select', 'Add datasets', 'Subjects', 'Sessions for a subject', 'Cancel', 'Cancel');
|
|
|
|
if strcmp(answer, 'Subjects')
|
|
performDirectoryReadout(hObject, handles);
|
|
end
|
|
|
|
|
|
|
|
% --- Executes on button press in rebuild_button.
|
|
function rebuild_button_Callback(hObject, eventdata, handles)
|
|
% hObject handle to rebuild_button (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
|
|
% --- Executes on button press in preprocess_button.
|
|
function preprocess_button_Callback(hObject, eventdata, handles)
|
|
% hObject handle to preprocess_button (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
|
|
% --- Executes on button press in import_button.
|
|
function import_button_Callback(hObject, eventdata, handles)
|
|
% hObject handle to import_button (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
|
|
% --- Executes on button press in setup_button.
|
|
function setup_button_Callback(hObject, eventdata, handles)
|
|
% hObject handle to setup_button (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
|
|
% --- Executes on button press in run_button.
|
|
function run_button_Callback(hObject, eventdata, handles)
|
|
% hObject handle to run_button (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
|
|
% --- Executes on button press in results_button.
|
|
function results_button_Callback(hObject, eventdata, handles)
|
|
% hObject handle to results_button (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
|
|
% --- Executes on button press in newexp_button.
|
|
function newexp_button_Callback(hObject, eventdata, handles)
|
|
% hObject handle to newexp_button (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
prompt = {'Enter name for the experiment (without spaces):', 'Enter a description (optional)'};
|
|
dlg_title = 'New experiment';
|
|
num_lines = 1;
|
|
defaultans = {'PDExp1',''};
|
|
answer = inputdlg(prompt,dlg_title,num_lines,defaultans);
|
|
|
|
if isempty(answer{1})
|
|
return
|
|
end
|
|
|
|
directoryname = uigetdir(pwd, 'Where do you want to save the experiment')
|
|
|
|
if (directoryname == 0)
|
|
return
|
|
end
|
|
|
|
|
|
|
|
filename = [directoryname filesep answer{1} '_PDExp.mat'];
|
|
|
|
%% create an empty PDExperiment object
|
|
e = PDExperiment('placeholder');
|
|
e.filename = filename;
|
|
e.name = answer{1};
|
|
e.description = answer{2};
|
|
|
|
|
|
write =0;
|
|
if (exist(filename, 'file'))
|
|
writeanswer = questdlg('File already exists, do you want to overwrite?','File exists', 'OK', 'Cancel', 'Cancel');
|
|
if strcmp(writeanswer, 'OK')
|
|
write =1;
|
|
end
|
|
|
|
else
|
|
write = 1;
|
|
end
|
|
|
|
if write
|
|
log_file = [directoryname filesep 'pdlog.txt'];
|
|
e.settings.Logfile = log_file;
|
|
|
|
save(filename, 'e');
|
|
|
|
setappdata(handles.figure1, 'PDExperiment', e);
|
|
|
|
handles.experiment_panel.Title = sprintf('Experiment : %s', e.name);
|
|
%% enable all basic buttons for experiment:
|
|
handles.settings_button.Enable = 'on';
|
|
handles.import_button.Enable = 'on';
|
|
handles.display_button.Enable = 'on';
|
|
|
|
pdlog(handles, sprintf('New Experiment ''%s'' succesfully created', e.name));
|
|
else
|
|
pdlog(handles, 'Operation aborted.');
|
|
end
|
|
|
|
|
|
|
|
% --- Executes on button press in loadexp_button.
|
|
function loadexp_button_Callback(hObject, eventdata, handles)
|
|
% hObject handle to loadexp_button (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
[filename,path,FilterIndex] = uigetfile('*_PDExp.mat','Select a PD Experiment file')
|
|
|
|
load([path filesep filename], 'e');
|
|
handles.experiment_panel.Title = sprintf('Experiment : %s', e.name);
|
|
log_file = [path filesep 'pdlog.txt'];
|
|
|
|
e.settings.Logfile = log_file;
|
|
setappdata(handles.figure1, 'PDExperiment', e);
|
|
|
|
%% enable all basic buttons for experiment:
|
|
handles.settings_button.Enable = 'on';
|
|
handles.import_button.Enable = 'on';
|
|
handles.display_button.Enable = 'on';
|
|
|
|
|
|
if exist(log_file, 'file')
|
|
fp = fopen(log_file, 'r'); l=1;
|
|
while(~feof(fp))
|
|
loglines{l} = fgetl(fp); l = l+1;
|
|
end
|
|
handles.loglist.String = loglines;
|
|
fclose(fp);
|
|
end
|
|
|
|
|
|
pdlog(handles, 'Experiment succesfully loaded');
|
|
|
|
% --- Executes on button press in saveexp_button.
|
|
function saveexp_button_Callback(hObject, eventdata, handles)
|
|
% hObject handle to saveexp_button (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
|
|
% --- Executes on button press in closeexp_button.
|
|
function closeexp_button_Callback(hObject, eventdata, handles)
|
|
% hObject handle to closeexp_button (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
|
|
% --- Executes on selection change in listbox2.
|
|
function listbox2_Callback(hObject, eventdata, handles)
|
|
% hObject handle to listbox2 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
% Hints: contents = cellstr(get(hObject,'String')) returns listbox2 contents as cell array
|
|
% contents{get(hObject,'Value')} returns selected item from listbox2
|
|
|
|
|
|
% --- Executes during object creation, after setting all properties.
|
|
function listbox2_CreateFcn(hObject, eventdata, handles)
|
|
% hObject handle to listbox2 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles empty - handles not created until after all CreateFcns called
|
|
|
|
% Hint: listbox controls usually have a white background on Windows.
|
|
% See ISPC and COMPUTER.
|
|
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
|
set(hObject,'BackgroundColor','white');
|
|
end
|
|
|
|
|
|
% --------------------------------------------------------------------
|
|
function log_contextmenu_Callback(hObject, eventdata, handles)
|
|
% hObject handle to log_contextmenu (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
|
|
% --------------------------------------------------------------------
|
|
function Untitled_1_Callback(hObject, eventdata, handles)
|
|
% hObject handle to Untitled_1 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
|
|
% --------------------------------------------------------------------
|
|
function show_log_Callback(hObject, eventdata, handles)
|
|
% hObject handle to show_log (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
handles.loglist.Visible = 'on';
|
|
|
|
|
|
% --------------------------------------------------------------------
|
|
function Untitled_2_Callback(hObject, eventdata, handles)
|
|
% hObject handle to Untitled_2 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
|
|
% --------------------------------------------------------------------
|
|
function Untitled_3_Callback(hObject, eventdata, handles)
|
|
% hObject handle to Untitled_3 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
|
|
% --------------------------------------------------------------------
|
|
function Untitled_4_Callback(hObject, eventdata, handles)
|
|
% hObject handle to Untitled_4 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
|
|
% --------------------------------------------------------------------
|
|
function Untitled_5_Callback(hObject, eventdata, handles)
|
|
% hObject handle to Untitled_5 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
|
|
% --------------------------------------------------------------------
|
|
function Untitled_6_Callback(hObject, eventdata, handles)
|
|
% hObject handle to Untitled_6 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
|
|
% --------------------------------------------------------------------
|
|
function Untitled_7_Callback(hObject, eventdata, handles)
|
|
% hObject handle to Untitled_7 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
|
|
% --------------------------------------------------------------------
|
|
function Untitled_8_Callback(hObject, eventdata, handles)
|
|
% hObject handle to Untitled_8 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
|
|
% --------------------------------------------------------------------
|
|
function Untitled_9_Callback(hObject, eventdata, handles)
|
|
% hObject handle to Untitled_9 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
|
|
% --------------------------------------------------------------------
|
|
function Untitled_10_Callback(hObject, eventdata, handles)
|
|
% hObject handle to Untitled_10 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
|
|
% --------------------------------------------------------------------
|
|
function Untitled_12_Callback(hObject, eventdata, handles)
|
|
% hObject handle to Untitled_12 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
|
|
% --------------------------------------------------------------------
|
|
function Untitled_13_Callback(hObject, eventdata, handles)
|
|
% hObject handle to Untitled_13 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
|
|
% --------------------------------------------------------------------
|
|
function Untitled_14_Callback(hObject, eventdata, handles)
|
|
% hObject handle to Untitled_14 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
|
|
% --------------------------------------------------------------------
|
|
function Untitled_11_Callback(hObject, eventdata, handles)
|
|
% hObject handle to Untitled_11 (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
|
|
function pdlog(handles, text)
|
|
|
|
logline = sprintf('%s\t%s', datestr(now, 'dd/mm/yy HH:MM'), text);
|
|
handles.loglist.String{end} = logline;
|
|
handles.logline.String = logline;
|
|
|
|
%% -- save the logfile
|
|
e = getappdata(handles.figure1,'PDExperiment');
|
|
|
|
try
|
|
fp = fopen(e.settings.Logfile, 'a+');
|
|
fprintf(fp, '%s\n', logline);
|
|
fclose(fp);
|
|
catch
|
|
warning('Could not save logfile.');
|
|
end
|
|
|
|
% --- Executes on selection change in loglist.
|
|
function loglist_Callback(hObject, eventdata, handles)
|
|
% hObject handle to loglist (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
|
|
% Hints: contents = cellstr(get(hObject,'String')) returns loglist contents as cell array
|
|
% contents{get(hObject,'Value')} returns selected item from loglist
|
|
|
|
|
|
|
|
|
|
% --- Executes during object creation, after setting all properties.
|
|
function loglist_CreateFcn(hObject, eventdata, handles)
|
|
% hObject handle to loglist (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles empty - handles not created until after all CreateFcns called
|
|
|
|
% Hint: listbox controls usually have a white background on Windows.
|
|
% See ISPC and COMPUTER.
|
|
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
|
set(hObject,'BackgroundColor','white');
|
|
end
|
|
|
|
|
|
% --- If Enable == 'on', executes on mouse press in 5 pixel border.
|
|
% --- Otherwise, executes on mouse press in 5 pixel border or over loglist.
|
|
function loglist_ButtonDownFcn(hObject, eventdata, handles)
|
|
% hObject handle to loglist (see GCBO)
|
|
% eventdata reserved - to be defined in a future version of MATLAB
|
|
% handles structure with handles and user data (see GUIDATA)
|
|
handles.loglist.Visible = 'off';
|
|
|