rmeddis@0
|
1 % expGUI_MT = 'experimenter GUI for multiThreshold
|
rmeddis@0
|
2 % allows the experimenter to design experiments.
|
rmeddis@0
|
3 % The *running* of experiments is left to subjGUI.m
|
rmeddis@0
|
4 %
|
rmeddis@0
|
5 % There are three kinds of experiments known as 'earOptions':
|
rmeddis@0
|
6 % 1. Measurements using real listeners
|
rmeddis@0
|
7 % 'left', 'right', 'diotic', 'dichoticLeft', 'dichoticRight'
|
rmeddis@0
|
8 % 2. Measurements using the MAP model as the subject
|
rmeddis@0
|
9 % 'MAPmodelListen', 'MAPmodelMultiCh', 'MAPmodelSingleCh'
|
rmeddis@0
|
10 % 3. Monte Carlo simulations
|
rmeddis@0
|
11 % 'statsModelLogistic','statsModelRareEvent'
|
rmeddis@0
|
12 %
|
rmeddis@0
|
13 % There are many stimulus configurations relating to different measurement
|
rmeddis@0
|
14 % requirements. These configurations are defined in paradigm files located
|
rmeddis@0
|
15 % in the 'paradigms' folder with names of the form paradigm_<name>.m. These
|
rmeddis@0
|
16 % files specify values in the stimulusParameter and experiment structures.
|
rmeddis@0
|
17 % Some minor parameters are specified in the intialiseGUI function below.
|
rmeddis@0
|
18 % Each configuration is only a start up arrangement and the user can modify
|
rmeddis@0
|
19 % the parameters on the GUI itself.
|
rmeddis@0
|
20 %
|
rmeddis@0
|
21 % the 'RUN' button initiates the measurements and hands control over to the
|
rmeddis@0
|
22 % subjGUI program. When the measurements are complete control is handed
|
rmeddis@0
|
23 % back and the stack unwinds without any further action
|
rmeddis@0
|
24
|
rmeddis@0
|
25 function varargout = expGUI_MT(varargin)
|
rmeddis@0
|
26 %EXPGUI_MT M-file for expGUI_MT.fig
|
rmeddis@0
|
27 % EXPGUI_MT, by itself, creates a new EXPGUI_MT or raises the existing
|
rmeddis@0
|
28 % singleton*.
|
rmeddis@0
|
29 %
|
rmeddis@0
|
30 % H = EXPGUI_MT returns the handle to a new EXPGUI_MT or the handle to
|
rmeddis@0
|
31 % the existing singleton*.
|
rmeddis@0
|
32 %
|
rmeddis@0
|
33 % EXPGUI_MT('Property','Value',...) creates a new EXPGUI_MT using the
|
rmeddis@0
|
34 % given property value pairs. Unrecognized properties are passed via
|
rmeddis@0
|
35 % varargin to expGUI_MT_OpeningFcn. This calling syntax produces a
|
rmeddis@0
|
36 % warning when there is an existing singleton*.
|
rmeddis@0
|
37 %
|
rmeddis@0
|
38 % EXPGUI_MT('CALLBACK') and EXPGUI_MT('CALLBACK',hObject,...) call the
|
rmeddis@0
|
39 % local function named CALLBACK in EXPGUI_MT.M with the given input
|
rmeddis@0
|
40 % arguments.
|
rmeddis@0
|
41 %
|
rmeddis@0
|
42 % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
|
rmeddis@0
|
43 % instance to run (singleton)".
|
rmeddis@0
|
44 %
|
rmeddis@0
|
45 % See also: GUIDE, GUIDATA, GUIHANDLES
|
rmeddis@0
|
46
|
rmeddis@0
|
47 % Edit the above text to modify the response to help expGUI_MT
|
rmeddis@0
|
48
|
rmeddis@0
|
49 % Last Modified by GUIDE v2.5 07-Apr-2011 07:20:00
|
rmeddis@0
|
50
|
rmeddis@0
|
51 % Begin initialization code - DO NOT EDIT
|
rmeddis@0
|
52 gui_Singleton = 1;
|
rmeddis@0
|
53 gui_State = struct('gui_Name', mfilename, ...
|
rmeddis@0
|
54 'gui_Singleton', gui_Singleton, ...
|
rmeddis@0
|
55 'gui_OpeningFcn', @expGUI_MT_OpeningFcn, ...
|
rmeddis@0
|
56 'gui_OutputFcn', @expGUI_MT_OutputFcn, ...
|
rmeddis@0
|
57 'gui_LayoutFcn', [], ...
|
rmeddis@0
|
58 'gui_Callback', []);
|
rmeddis@0
|
59 if nargin && ischar(varargin{1})
|
rmeddis@0
|
60 gui_State.gui_Callback = str2func(varargin{1});
|
rmeddis@0
|
61 end
|
rmeddis@0
|
62
|
rmeddis@0
|
63 if nargout
|
rmeddis@0
|
64 [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
|
rmeddis@0
|
65 else
|
rmeddis@0
|
66 gui_mainfcn(gui_State, varargin{:});
|
rmeddis@0
|
67 end
|
rmeddis@0
|
68 % End initialization code - DO NOT EDIT
|
rmeddis@0
|
69
|
rmeddis@0
|
70 % -------------------------------------------------- expGUI_MT_OpeningFcn
|
rmeddis@0
|
71 function expGUI_MT_OpeningFcn(hObject, eventdata, handles, varargin)
|
rmeddis@0
|
72
|
rmeddis@0
|
73 % Choose default command line output for expGUI_MT
|
rmeddis@0
|
74 handles.output = hObject;
|
rmeddis@0
|
75
|
rmeddis@0
|
76 cla(handles.axes1)
|
rmeddis@0
|
77 cla(handles.axes2)
|
rmeddis@0
|
78 cla(handles.axes4)
|
rmeddis@0
|
79 cla(handles.axes5)
|
rmeddis@0
|
80
|
rmeddis@0
|
81 % Update handles structure
|
rmeddis@0
|
82 guidata(hObject, handles);
|
rmeddis@0
|
83
|
rmeddis@0
|
84 function varargout = expGUI_MT_OutputFcn(hObject, eventdata, handles)
|
rmeddis@0
|
85 % Get default command line output from handles structure
|
rmeddis@0
|
86 initializeGUI(handles)
|
rmeddis@0
|
87 varargout{1} = handles.output;
|
rmeddis@0
|
88 setLocationOfGUIs(handles)
|
rmeddis@0
|
89
|
rmeddis@0
|
90 function setLocationOfGUIs(handles)
|
rmeddis@0
|
91 global checkForPreviousGUI % holds screen positioning across repeated calls
|
rmeddis@0
|
92 scrnsize=get(0,'screensize');
|
rmeddis@0
|
93 checkForPreviousGUI=[];
|
rmeddis@0
|
94 % if isstruct(checkForPreviousGUI)...
|
rmeddis@0
|
95 % && checkForPreviousGUI.GUIalreadyStarted==1 ...
|
rmeddis@0
|
96 % && isfield(checkForPreviousGUI,'GUIposition')
|
rmeddis@0
|
97 % set(handles.figure1,'position',checkForPreviousGUI.GUIposition)
|
rmeddis@0
|
98 % else
|
rmeddis@0
|
99 % % relocate the GUI only if this is the first time of use
|
rmeddis@0
|
100 % set(0, 'units','pixels')
|
rmeddis@0
|
101 % % occupies top to bottom of screen but only 60% width
|
rmeddis@0
|
102 % % [left bottom width height]
|
rmeddis@0
|
103 % firstPos=[0.01*scrnsize(4) 0.03*scrnsize(3) 0.6*scrnsize(3) 0.92*scrnsize(4)];
|
rmeddis@0
|
104 % firstPos=[4 0.045*scrnsize(4) 0.6*scrnsize(3) 0.93*scrnsize(4)];
|
rmeddis@0
|
105 % set(handles.figure1, 'units','pixels')
|
rmeddis@0
|
106 % set(handles.figure1,'position',firstPos)
|
rmeddis@0
|
107 % checkForPreviousGUI.GUIalreadyStarted=1;
|
rmeddis@0
|
108 % checkForPreviousGUI.GUIposition=firstPos;
|
rmeddis@0
|
109 % end
|
rmeddis@0
|
110 set(handles.figure1,'color',[.871 .961 .996])
|
rmeddis@0
|
111 set(handles.figure1,'name', pwd)
|
rmeddis@0
|
112
|
rmeddis@0
|
113 % MAP model figure; sits alongside GUI if requested
|
rmeddis@0
|
114 figure(99)
|
rmeddis@0
|
115 % [left bottom width height]
|
rmeddis@0
|
116 MAPpos=[0.615*scrnsize(3) 0.05*scrnsize(4) 0.15*scrnsize(3) 0.85*scrnsize(4)];
|
rmeddis@0
|
117 % visible only on request.
|
rmeddis@0
|
118 set(gcf,'position',MAPpos , 'visible','off')
|
rmeddis@0
|
119
|
rmeddis@0
|
120
|
rmeddis@0
|
121 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
rmeddis@0
|
122
|
rmeddis@0
|
123 % -----------------------------------------------------initializeGUI
|
rmeddis@0
|
124 function initializeGUI(handles)
|
rmeddis@0
|
125 % Populate the edit boxes and popup menus on the GUI
|
rmeddis@0
|
126 % Then wait for user action
|
rmeddis@0
|
127 global stimulusParameters experiment betweenRuns
|
rmeddis@0
|
128 global targetTypes maskerTypes backgroundTypes
|
rmeddis@0
|
129 global variableNames paradigmNames threshEstNames cueNames
|
rmeddis@0
|
130
|
rmeddis@0
|
131 % dbstop if error % allow for debugging and user error reporting
|
rmeddis@0
|
132 % dbstop if warning
|
rmeddis@0
|
133
|
rmeddis@0
|
134 % specify structure fields for pretty automatic printing
|
rmeddis@0
|
135 % It also initialises some simple variables
|
rmeddis@0
|
136 orderGlobals
|
rmeddis@0
|
137
|
rmeddis@0
|
138 addpath ('paradigms') % preset paradigm informations is stored here
|
rmeddis@0
|
139 % filesep is usd to be compatible with other operating systems
|
rmeddis@0
|
140 % addpath (['..' filesep 'modules'], ['..' filesep 'utilities'], ...
|
rmeddis@0
|
141 % ['..' filesep 'parameterStore'], ['..' filesep 'wavFileStore'],...
|
rmeddis@0
|
142 % ['..' filesep 'testPrograms'])
|
rmeddis@0
|
143
|
rmeddis@0
|
144 % specify all variables that need to be set on the GUI
|
rmeddis@0
|
145 variableNames={'stimulusDelay','maskerDuration','maskerLevel',...
|
rmeddis@0
|
146 'maskerRelativeFrequency', 'targetFrequency', 'gapDuration',...
|
rmeddis@0
|
147 'targetDuration','targetLevel','rampDuration',...
|
rmeddis@0
|
148 'cueTestDifference', 'WRVstartValues', 'WRVsteps', 'WRVlimits'};
|
rmeddis@0
|
149
|
rmeddis@0
|
150 % Variable variables
|
rmeddis@0
|
151 % (specifies paradigm paramaters that can changed on a 'between runs' basis)
|
rmeddis@0
|
152 % make them options in the two between runs variable menus
|
rmeddis@0
|
153 % NB 'numOHIOtones' is used only to solve a problem; it should not be
|
rmeddis@0
|
154 % selected manually
|
rmeddis@0
|
155 betweenRunsVariables={'stimulusDelay','maskerDuration','maskerLevel',...
|
rmeddis@0
|
156 'maskerRelativeFrequency','targetFrequency', 'gapDuration',...
|
rmeddis@0
|
157 'targetDuration','targetLevel','numOHIOtones'};
|
rmeddis@0
|
158 set(handles.popupmenuVaryParameter1,'string',betweenRunsVariables)
|
rmeddis@0
|
159 set(handles.popupmenuVaryParameter2,'string',betweenRunsVariables)
|
rmeddis@0
|
160
|
rmeddis@0
|
161 % NB 'Warning: popupmenu control requires a scalar Value'
|
rmeddis@0
|
162 % indicates that an inappropriate 'value' is being set.
|
rmeddis@0
|
163 % when testing for this, always clear the GUI before running
|
rmeddis@0
|
164
|
rmeddis@0
|
165 % Trial presentation order - randomize at startup
|
rmeddis@0
|
166 presentationOrderNames={'randomize within blocks', 'fixed sequence', ...
|
rmeddis@0
|
167 'randomize across blocks'};
|
rmeddis@0
|
168 set(handles.popupmenuRandomize,'string', presentationOrderNames)
|
rmeddis@0
|
169
|
rmeddis@0
|
170 % targetType- value must be set in paradigm
|
rmeddis@0
|
171 targetTypes={'tone','noise', 'pinkNoise','whiteNoise','24TalkerBabble',...
|
rmeddis@0
|
172 'speech', 'Twister','digitStrings'};
|
rmeddis@0
|
173 set(handles.popupmenuTargetType, 'string', targetTypes);
|
rmeddis@0
|
174
|
rmeddis@0
|
175 % maskerType - value must be set in paradigm
|
rmeddis@0
|
176 maskerTypes={'tone','noise', 'pinkNoise','TEN','whiteNoise','24TalkerBabble', ...
|
rmeddis@0
|
177 'speech'};
|
rmeddis@0
|
178 set(handles.popupmenuMaskerType, 'string', maskerTypes);
|
rmeddis@0
|
179
|
rmeddis@0
|
180 % background Type- value must be set in paradigm (default = 1, 'none')
|
rmeddis@0
|
181 backgroundTypes={'none','noise', 'pinkNoise', 'TEN','noiseDich',...
|
rmeddis@0
|
182 'pinkNoiseDich','whiteNoise','24TalkerBabble',...
|
rmeddis@0
|
183 '16TalkerBabble','8TalkerBabble','4TalkerBabble',...
|
rmeddis@0
|
184 '4TalkerReversedBabble','2TalkerBabble','1TalkerBabble'};
|
rmeddis@0
|
185 set(handles.popupmenuBackgroundType, 'string', backgroundTypes);
|
rmeddis@0
|
186 set(handles.editBackgroundLevel,'string',...
|
rmeddis@0
|
187 num2str(stimulusParameters.backgroundLevel))
|
rmeddis@0
|
188
|
rmeddis@0
|
189 % Establish available paradigms by scanning paradigms folder
|
rmeddis@0
|
190 paradigmNames= what('paradigms');
|
rmeddis@0
|
191 paradigmNames=paradigmNames.m; % m files only
|
rmeddis@0
|
192 for i=1:length(paradigmNames), paradigmNames{i}=paradigmNames{i}(10:end-2); end
|
rmeddis@0
|
193 set(handles.popupmenuParadigm,'string', paradigmNames)
|
rmeddis@0
|
194
|
rmeddis@0
|
195 % startup paradigm, 'training' (could be anywhere on the list)
|
rmeddis@0
|
196 startupParadigm='training';
|
rmeddis@0
|
197 idx= find(strcmp(paradigmNames,startupParadigm));
|
rmeddis@0
|
198 if ~isempty(idx)
|
rmeddis@0
|
199 set(handles.popupmenuParadigm,'value', idx)
|
rmeddis@0
|
200 else
|
rmeddis@0
|
201 % training paradigm is always the startup paradigm
|
rmeddis@0
|
202 error(['expGUI_MT\initializeGUI: No ' startupParadigm...
|
rmeddis@0
|
203 ' paradigm found in paradigms folder'])
|
rmeddis@0
|
204 end
|
rmeddis@0
|
205
|
rmeddis@0
|
206 earOptions={'left', 'right', 'diotic', 'dichoticLeft', 'dichoticRight',...
|
rmeddis@0
|
207 'MAPmodelListen', 'MAPmodelMultiCh', 'MAPmodelSingleCh'...
|
rmeddis@0
|
208 'statsModelLogistic','statsModelRareEvent'};
|
rmeddis@0
|
209 set(handles.popupmenuEar,'string', earOptions)
|
rmeddis@0
|
210 defaultOption=1;
|
rmeddis@0
|
211 experiment.ear=earOptions{defaultOption};
|
rmeddis@0
|
212 set(handles.popupmenuEar,'value', defaultOption) % 'left' is deafult
|
rmeddis@0
|
213 set(handles.pushbuttonSingleShot, 'visible', 'off') % use only for MAP
|
rmeddis@0
|
214
|
rmeddis@0
|
215 % masker phase box- value must be set in paradigm
|
rmeddis@0
|
216 phaseOptions={'sin','cos','alt','rand'};
|
rmeddis@0
|
217 set(handles.popupmenuPhase,'string', phaseOptions)
|
rmeddis@0
|
218
|
rmeddis@0
|
219 % Cue
|
rmeddis@0
|
220 cueNames={'cued', 'noCue'};
|
rmeddis@0
|
221 set(handles.popupmenuCueNoCue, 'string', cueNames);
|
rmeddis@0
|
222
|
rmeddis@0
|
223 % threshold assessment method - value must be set in paradigm
|
rmeddis@0
|
224 threshEstNames={'oneIntervalUpDown', 'MaxLikelihood', ...
|
rmeddis@0
|
225 '2I2AFC++', '2I2AFC+++'};
|
rmeddis@0
|
226 set(handles.popupmenuThreshEst, 'string', threshEstNames);
|
rmeddis@0
|
227 experiment.stopCriteria2IFC=[75 3 5];
|
rmeddis@0
|
228 experiment.stopCriteriaSI=[20];
|
rmeddis@0
|
229
|
rmeddis@0
|
230 % ** editBoxes that are only set by hand
|
rmeddis@0
|
231 % music (relative) level, 'tada!' (manual setting only)
|
rmeddis@0
|
232 % increase for the hard of hearing
|
rmeddis@0
|
233 set(handles.editMusicLevel,'string','0')
|
rmeddis@0
|
234
|
rmeddis@0
|
235 % Catch Trial Rate
|
rmeddis@0
|
236 set(handles.editCatchTrialRate,'string','0.2 0.1 2 ');
|
rmeddis@0
|
237
|
rmeddis@0
|
238 % calibration
|
rmeddis@0
|
239 stimulusParameters.restoreCalibration=7;
|
rmeddis@0
|
240 set(handles.editcalibrationdB,'string',...
|
rmeddis@0
|
241 stimulusParameters.restoreCalibration)
|
rmeddis@0
|
242
|
rmeddis@0
|
243 % a MAPplot
|
rmeddis@0
|
244 experiment.MAPplot=0; %default
|
rmeddis@0
|
245 set(handles.editMAPplot,'string',num2str(experiment.MAPplot))
|
rmeddis@0
|
246
|
rmeddis@0
|
247 % saveData
|
rmeddis@0
|
248 experiment.saveData=1;
|
rmeddis@0
|
249 set(handles.editSaveData,'string',num2str(experiment.saveData))
|
rmeddis@0
|
250
|
rmeddis@0
|
251 % printTracks
|
rmeddis@0
|
252 experiment.printTracks=0;
|
rmeddis@0
|
253 set(handles.editPrintTracks,'string',num2str(experiment.printTracks))
|
rmeddis@0
|
254
|
rmeddis@0
|
255 % standard delay between button press and initiation of next stimulus
|
rmeddis@0
|
256 experiment.clickToStimulusPause=1;
|
rmeddis@0
|
257
|
rmeddis@0
|
258 % buttonBoxType: NB no problem if mouse is used instead
|
rmeddis@0
|
259 experiment.buttonBoxType='square';
|
rmeddis@0
|
260
|
rmeddis@0
|
261 % estimation of the mean
|
rmeddis@0
|
262 % {'logisticLS', 'logisticML', 'rareEvent'}
|
rmeddis@0
|
263 experiment.functionEstMethod='logisticLS';
|
rmeddis@0
|
264
|
rmeddis@0
|
265 % message box
|
rmeddis@0
|
266 set(handles.textMSG,'backgroundcolor', 'w', 'ForegroundColor', 'b', 'string', '')
|
rmeddis@0
|
267 set(handles.editMsgFont,'string','7')
|
rmeddis@0
|
268 set(handles.editSubjectFont,'string','14')
|
rmeddis@0
|
269
|
rmeddis@0
|
270 % default psychometric bin size and logistic slopes
|
rmeddis@0
|
271 experiment.psyBinWidth=1; % dB
|
rmeddis@0
|
272 maxLogisticK=2; % steepest slope contemplated
|
rmeddis@0
|
273 experiment.maxLogisticK=maxLogisticK;
|
rmeddis@0
|
274 experiment.numPossLogisticK=100;
|
rmeddis@0
|
275 experiment.possLogSlopes= ...
|
rmeddis@0
|
276 0.01: maxLogisticK/experiment.numPossLogisticK: maxLogisticK;
|
rmeddis@0
|
277 experiment.meanSearchStep=0.25; % dB
|
rmeddis@0
|
278
|
rmeddis@0
|
279 % indicate that this is the first run and the GUI should be located in
|
rmeddis@0
|
280 % default location.
|
rmeddis@0
|
281 experiment.justInitialized=1;
|
rmeddis@0
|
282
|
rmeddis@0
|
283 % set up GUI based on training paradigm
|
rmeddis@0
|
284 aParadigmSelection(handles);
|
rmeddis@0
|
285 earSetUp(handles)
|
rmeddis@0
|
286 aThresholdAssessmentMethod(handles)
|
rmeddis@0
|
287 aShowRelevantObjects(handles)
|
rmeddis@0
|
288
|
rmeddis@0
|
289 % Done. Now wait for action
|
rmeddis@0
|
290
|
rmeddis@0
|
291 % -------------------------------------------- popupmenuMaskerType_Callback
|
rmeddis@0
|
292 function popupmenuMaskerType_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
293 % show or remove masker frequency box
|
rmeddis@0
|
294 aShowRelevantObjects(handles)
|
rmeddis@0
|
295
|
rmeddis@0
|
296 % -------------------------------------------- popupmenuTargetType_Callback
|
rmeddis@0
|
297 function popupmenuTargetType_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
298 % show or remove target frequency box
|
rmeddis@0
|
299 aShowRelevantObjects(handles)
|
rmeddis@0
|
300
|
rmeddis@0
|
301 % -------------------------------------------- popupmenuParadigm_Callback
|
rmeddis@0
|
302 function popupmenuParadigm_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
303 % Any change to the paradigm selection causes all boxes to be shown
|
rmeddis@0
|
304 % showParameters(handles)
|
rmeddis@0
|
305 aParadigmSelection(handles);
|
rmeddis@0
|
306
|
rmeddis@0
|
307 % -------------------------------------------- aParadigmSelection
|
rmeddis@0
|
308 function aParadigmSelection(handles)
|
rmeddis@0
|
309 global experiment stimulusParameters betweenRuns paradigmNames
|
rmeddis@0
|
310 global variableNames
|
rmeddis@0
|
311
|
rmeddis@0
|
312 % identify paradigm selected
|
rmeddis@0
|
313 chosenOption=get(handles.popupmenuParadigm,'value');
|
rmeddis@0
|
314 paradigm=paradigmNames{chosenOption};
|
rmeddis@0
|
315 experiment.paradigm=paradigm;
|
rmeddis@0
|
316
|
rmeddis@0
|
317 %Paradigm: read in all relevant parameters
|
rmeddis@0
|
318 % a file must exist with this name 'paradigm_<paradigm>'
|
rmeddis@0
|
319 % 'handles' are only occasionally used
|
rmeddis@0
|
320 addpath ('paradigms')
|
rmeddis@0
|
321 cmd=['paradigm_' paradigm '(handles);'];
|
rmeddis@0
|
322 try
|
rmeddis@0
|
323 eval(cmd)
|
rmeddis@0
|
324 catch
|
rmeddis@0
|
325 error(['ExpGUI\aParadigmSelection:'...
|
rmeddis@0
|
326 'paradigm file not found or error in file'])
|
rmeddis@0
|
327 end
|
rmeddis@0
|
328 rmpath ('paradigms')
|
rmeddis@0
|
329
|
rmeddis@0
|
330 % if a variable is subject to change, specify list of values here
|
rmeddis@0
|
331 % eg. stimulusParameters.targetFrequency=betweenRuns.variableList1;
|
rmeddis@0
|
332 cmd=['stimulusParameters.' ...
|
rmeddis@0
|
333 betweenRuns.variableName1 '=betweenRuns.variableList1;'];
|
rmeddis@0
|
334 eval (cmd);
|
rmeddis@0
|
335 cmd=['stimulusParameters.' ...
|
rmeddis@0
|
336 betweenRuns.variableName2 '=betweenRuns.variableList2;'];
|
rmeddis@0
|
337 eval (cmd);
|
rmeddis@0
|
338
|
rmeddis@0
|
339 % establish popup menus on the basis of the paradigm file
|
rmeddis@0
|
340 set(handles.popupmenuRandomize,'value', betweenRuns.randomizeSequence)
|
rmeddis@0
|
341 set(handles.popupmenuPhase,'string', stimulusParameters.maskerPhase)
|
rmeddis@0
|
342 if stimulusParameters.includeCue
|
rmeddis@0
|
343 set(handles.popupmenuCueNoCue,'value', 1)
|
rmeddis@0
|
344 else
|
rmeddis@0
|
345 set(handles.popupmenuCueNoCue,'value', 2)
|
rmeddis@0
|
346 end
|
rmeddis@0
|
347
|
rmeddis@0
|
348 set(handles.text34, 'string', stimulusParameters.WRVname)
|
rmeddis@0
|
349
|
rmeddis@0
|
350 % Put the new data values into the edit boxes on the GUI
|
rmeddis@0
|
351 for i=1:length(variableNames)
|
rmeddis@0
|
352 cmd=(['set(handles.edit' variableNames{i} ...
|
rmeddis@0
|
353 ',''string'', num2str(stimulusParameters.' ...
|
rmeddis@0
|
354 variableNames{i} '));']);
|
rmeddis@0
|
355 eval(cmd);
|
rmeddis@0
|
356 end
|
rmeddis@0
|
357 % backgroundLevel is not a variableName (?!)
|
rmeddis@0
|
358 set(handles.editBackgroundLevel,'string', num2str...
|
rmeddis@0
|
359 (stimulusParameters.backgroundLevel))
|
rmeddis@0
|
360
|
rmeddis@0
|
361 % on RUN the sample rate will be picked from the text box
|
rmeddis@0
|
362 % However, MAP overrules the sample rate and sets its own
|
rmeddis@0
|
363 aSetSampleRate(stimulusParameters.subjectSampleRate, handles);
|
rmeddis@0
|
364
|
rmeddis@0
|
365
|
rmeddis@0
|
366 % used for plotting functions (NB affected by paradigm settings)
|
rmeddis@0
|
367 experiment.predictionLevels=stimulusParameters.WRVlimits(1):...
|
rmeddis@0
|
368 experiment.meanSearchStep:stimulusParameters.WRVlimits(2);
|
rmeddis@0
|
369 experiment.possLogSlopes=abs(experiment.possLogSlopes)*...
|
rmeddis@0
|
370 sign(experiment.psyFunSlope);
|
rmeddis@0
|
371
|
rmeddis@0
|
372 aResetPopupMenus(handles)
|
rmeddis@0
|
373
|
rmeddis@0
|
374 % ------------------------------------------------------ aResetPopupMenus
|
rmeddis@0
|
375 function aResetPopupMenus(handles)
|
rmeddis@0
|
376 global stimulusParameters betweenRuns variableNames
|
rmeddis@0
|
377 global targetTypes maskerTypes experiment backgroundTypes
|
rmeddis@0
|
378
|
rmeddis@0
|
379 switch experiment.threshEstMethod
|
rmeddis@0
|
380 case {'MaxLikelihood','oneIntervalUpDown'}
|
rmeddis@0
|
381 set(handles.editstopCriteriaBox, 'string', ...
|
rmeddis@0
|
382 num2str(experiment.singleIntervalMaxTrials))
|
rmeddis@0
|
383
|
rmeddis@0
|
384 case {'2I2AFC++','2I2AFC+++'}
|
rmeddis@0
|
385 set(handles.editstopCriteriaBox, 'string', ...
|
rmeddis@0
|
386 num2str(experiment.stopCriteria2IFC))
|
rmeddis@0
|
387 otherwise
|
rmeddis@0
|
388 error([' aResetPopupMenus: threshEstMethod not recognised -> ' ...
|
rmeddis@0
|
389 experiment.threshEstMethod])
|
rmeddis@0
|
390 end
|
rmeddis@0
|
391
|
rmeddis@0
|
392 % forced noCue
|
rmeddis@0
|
393 switch experiment.paradigm
|
rmeddis@0
|
394 case 'discomfort'
|
rmeddis@0
|
395 set(handles.popupmenuCueNoCue,'value', 2)
|
rmeddis@0
|
396 end
|
rmeddis@0
|
397
|
rmeddis@0
|
398 %set variables popupmenus as specified in betweenRuns
|
rmeddis@0
|
399 variableParameter1ID=0; variableParameter2ID=0;
|
rmeddis@0
|
400 for i=1:length(variableNames)
|
rmeddis@0
|
401 if strcmp(variableNames{i},betweenRuns.variableName1)
|
rmeddis@0
|
402 variableParameter1ID=i;
|
rmeddis@0
|
403 end
|
rmeddis@0
|
404 if strcmp(variableNames{i},betweenRuns.variableName2)
|
rmeddis@0
|
405 variableParameter2ID=i;
|
rmeddis@0
|
406 end
|
rmeddis@0
|
407 end
|
rmeddis@0
|
408 if variableParameter1ID==0 || variableParameter2ID==0;
|
rmeddis@0
|
409 Error('a ResetPopMenu: variableParameter not identified')
|
rmeddis@0
|
410 end
|
rmeddis@0
|
411
|
rmeddis@0
|
412 % display popupmenus
|
rmeddis@0
|
413 set(handles.popupmenuVaryParameter1, 'value',round(variableParameter1ID))
|
rmeddis@0
|
414 set(handles.popupmenuVaryParameter2, 'value',round(variableParameter2ID))
|
rmeddis@0
|
415
|
rmeddis@0
|
416 % targetType
|
rmeddis@0
|
417 idx= find(strcmp(stimulusParameters.targetType, targetTypes));
|
rmeddis@0
|
418 set(handles.popupmenuTargetType,'value', idx)
|
rmeddis@0
|
419
|
rmeddis@0
|
420 % paradigm selection may alter the maskerType
|
rmeddis@0
|
421 idx= find(strcmp(stimulusParameters.maskerType, maskerTypes));
|
rmeddis@0
|
422 set(handles.popupmenuMaskerType,'value', idx)
|
rmeddis@0
|
423
|
rmeddis@0
|
424 aShowRelevantObjects(handles)
|
rmeddis@0
|
425
|
rmeddis@0
|
426 % % backgroundType
|
rmeddis@0
|
427 idx= find(strcmp(stimulusParameters.backgroundType, backgroundTypes));
|
rmeddis@0
|
428 set(handles.popupmenuBackgroundType,'value', idx)
|
rmeddis@0
|
429 set(handles.editBackgroundLevel,'string', ...
|
rmeddis@0
|
430 num2str(stimulusParameters.backgroundLevel))
|
rmeddis@0
|
431
|
rmeddis@0
|
432 % ---------------------------------------------- aShowRelevantObjects
|
rmeddis@0
|
433 function aShowRelevantObjects(handles)
|
rmeddis@0
|
434 global experiment stimulusParameters
|
rmeddis@0
|
435 % always on
|
rmeddis@0
|
436 set(handles.edittargetLevel, 'visible', 'on')
|
rmeddis@0
|
437 set(handles.edittargetDuration, 'visible', 'on')
|
rmeddis@0
|
438 set(handles.edittargetFrequency, 'visible', 'on')
|
rmeddis@0
|
439
|
rmeddis@0
|
440 switch experiment.ear
|
rmeddis@0
|
441 case {'statsModelLogistic', 'statsModelRareEvent'}
|
rmeddis@0
|
442 set(handles.editStatsModel, 'visible', 'on')
|
rmeddis@0
|
443 set(handles.textStatsModel, 'visible', 'on')
|
rmeddis@0
|
444 set(handles.pushbuttonStop, 'visible', 'on')
|
rmeddis@0
|
445 set(handles.pushbuttonOME, 'visible', 'off')
|
rmeddis@0
|
446 set(handles.pushbuttonBM, 'visible', 'off')
|
rmeddis@0
|
447 set(handles.pushbuttonRP, 'visible', 'off')
|
rmeddis@0
|
448 set(handles.pushbuttonAN, 'visible', 'off')
|
rmeddis@0
|
449 set(handles.pushbuttonRF, 'visible', 'off')
|
rmeddis@0
|
450 set(handles.pushbuttonSYN, 'visible', 'off')
|
rmeddis@0
|
451 set(handles.pushbuttonFM, 'visible', 'off')
|
rmeddis@0
|
452 set(handles.pushbuttonParams, 'visible', 'off')
|
rmeddis@0
|
453 set(handles.pushbuttonSingleShot, 'visible', 'off')
|
rmeddis@0
|
454 set(handles.editCatchTrialRate, 'visible', 'off')
|
rmeddis@0
|
455 set(handles.textCatchTrials, 'visible', 'off')
|
rmeddis@0
|
456 set(handles.editcalibrationdB, 'visible', 'off')
|
rmeddis@0
|
457 set(handles.textcalibration, 'visible', 'off')
|
rmeddis@0
|
458 set(handles.popupmenuCueNoCue, 'visible', 'off')
|
rmeddis@0
|
459 set(handles.textCue, 'visible', 'off')
|
rmeddis@0
|
460 set(handles.editMusicLevel,'visible', 'off')
|
rmeddis@0
|
461 set(handles.textMusicLevel,'visible', 'off')
|
rmeddis@0
|
462 set(handles.editMAPplot,'visible', 'off')
|
rmeddis@0
|
463 set(handles.textMAPplot,'visible', 'off')
|
rmeddis@0
|
464
|
rmeddis@0
|
465 case {'MAPmodel', 'MAPmodelListen', 'MAPmodelMultiCh', 'MAPmodelSingleCh'}
|
rmeddis@0
|
466 set(handles.popupmenuCueNoCue, 'visible', 'off')
|
rmeddis@0
|
467 set(handles.editStatsModel, 'visible', 'off')
|
rmeddis@0
|
468 set(handles.textStatsModel, 'visible', 'off')
|
rmeddis@0
|
469 set(handles.pushbuttonStop, 'visible', 'on')
|
rmeddis@0
|
470 set(handles.pushbuttonOME, 'visible', 'on')
|
rmeddis@0
|
471 set(handles.pushbuttonBM, 'visible', 'on')
|
rmeddis@0
|
472 set(handles.pushbuttonRP, 'visible', 'on')
|
rmeddis@0
|
473 set(handles.pushbuttonAN, 'visible', 'on')
|
rmeddis@0
|
474 set(handles.pushbuttonRF, 'visible', 'on')
|
rmeddis@0
|
475 set(handles.pushbuttonSYN, 'visible', 'on')
|
rmeddis@0
|
476 set(handles.pushbuttonFM, 'visible', 'on')
|
rmeddis@0
|
477 set(handles.pushbuttonParams, 'visible', 'on')
|
rmeddis@0
|
478 set(handles.pushbuttonSingleShot, 'visible', 'on')
|
rmeddis@0
|
479 set(handles.editcalibrationdB, 'visible', 'off')
|
rmeddis@0
|
480 set(handles.textcalibration, 'visible', 'off')
|
rmeddis@0
|
481 set(handles.textCue, 'visible', 'off')
|
rmeddis@0
|
482 set(handles.editMusicLevel,'visible', 'off')
|
rmeddis@0
|
483 set(handles.textMusicLevel,'visible', 'off')
|
rmeddis@0
|
484 set(handles.editMAPplot,'visible', 'on')
|
rmeddis@0
|
485 set(handles.textMAPplot,'visible', 'on')
|
rmeddis@0
|
486
|
rmeddis@0
|
487 otherwise
|
rmeddis@0
|
488 set(handles.editStatsModel, 'visible', 'off')
|
rmeddis@0
|
489 set(handles.textStatsModel, 'visible', 'off')
|
rmeddis@0
|
490 set(handles.pushbuttonStop, 'visible', 'off')
|
rmeddis@0
|
491 set(handles.pushbuttonOME, 'visible', 'off')
|
rmeddis@0
|
492 set(handles.pushbuttonBM, 'visible', 'off')
|
rmeddis@0
|
493 set(handles.pushbuttonRP, 'visible', 'off')
|
rmeddis@0
|
494 set(handles.pushbuttonAN, 'visible', 'off')
|
rmeddis@0
|
495 set(handles.pushbuttonRF, 'visible', 'off')
|
rmeddis@0
|
496 set(handles.pushbuttonSYN, 'visible', 'off')
|
rmeddis@0
|
497 set(handles.pushbuttonFM, 'visible', 'off')
|
rmeddis@0
|
498 set(handles.pushbuttonParams, 'visible', 'off')
|
rmeddis@0
|
499 set(handles.pushbuttonSingleShot, 'visible', 'off')
|
rmeddis@0
|
500 set(handles.editCatchTrialRate, 'visible', 'on')
|
rmeddis@0
|
501 set(handles.textCatchTrials, 'visible', 'on')
|
rmeddis@0
|
502 set(handles.editcalibrationdB, 'visible', 'on')
|
rmeddis@0
|
503 set(handles.textcalibration, 'visible', 'on')
|
rmeddis@0
|
504 set(handles.popupmenuCueNoCue, 'visible', 'on')
|
rmeddis@0
|
505 set(handles.textCue, 'visible', 'on')
|
rmeddis@0
|
506 set(handles.editMusicLevel,'visible', 'on')
|
rmeddis@0
|
507 set(handles.textMusicLevel,'visible', 'on')
|
rmeddis@0
|
508 set(handles.editMAPplot,'visible', 'off')
|
rmeddis@0
|
509 set(handles.textMAPplot,'visible', 'off')
|
rmeddis@0
|
510 end
|
rmeddis@0
|
511
|
rmeddis@0
|
512 switch experiment.threshEstMethod
|
rmeddis@0
|
513 case {'MaxLikelihood','oneIntervalUpDown'}
|
rmeddis@0
|
514 set(handles.popupmenuCueNoCue,'visible', 'on')
|
rmeddis@0
|
515 set(handles.textCue,'visible', 'on')
|
rmeddis@0
|
516 set(handles.editstopCriteriaBox, 'string', ...
|
rmeddis@0
|
517 num2str(experiment.singleIntervalMaxTrials))
|
rmeddis@0
|
518
|
rmeddis@0
|
519 if stimulusParameters.includeCue==0
|
rmeddis@0
|
520 set(handles.editcueTestDifference,'visible', 'off')
|
rmeddis@0
|
521 set(handles.textcueTestDifference,'visible', 'off')
|
rmeddis@0
|
522 else
|
rmeddis@0
|
523 set(handles.editcueTestDifference,'visible', 'on')
|
rmeddis@0
|
524 set(handles.textcueTestDifference,'visible', 'on')
|
rmeddis@0
|
525 end
|
rmeddis@0
|
526
|
rmeddis@0
|
527 case {'2I2AFC++','2I2AFC+++'}
|
rmeddis@0
|
528 set(handles.editCatchTrialRate, 'visible', 'off')
|
rmeddis@0
|
529 set(handles.textCatchTrials, 'visible', 'off')
|
rmeddis@0
|
530 set(handles.popupmenuCueNoCue,'visible', 'off')
|
rmeddis@0
|
531 set(handles.textCue,'visible', 'off')
|
rmeddis@0
|
532 set(handles.editcueTestDifference,'visible', 'off')
|
rmeddis@0
|
533 set(handles.textcueTestDifference,'visible', 'off')
|
rmeddis@0
|
534 end
|
rmeddis@0
|
535
|
rmeddis@0
|
536
|
rmeddis@0
|
537 % show/ remove masker related boxes
|
rmeddis@0
|
538 switch experiment.paradigm
|
rmeddis@0
|
539 % masker free paradigms
|
rmeddis@0
|
540 case {'training', 'discomfort','absThreshold', 'absThreshold_8',...
|
rmeddis@0
|
541 'TENtest', 'threshold_duration','SRT'}
|
rmeddis@0
|
542 set(handles.editmaskerDuration,'visible', 'off')
|
rmeddis@0
|
543 set(handles.editmaskerLevel,'visible', 'off')
|
rmeddis@0
|
544 set(handles.editmaskerRelativeFrequency,'visible', 'off')
|
rmeddis@0
|
545 set(handles.editgapDuration,'visible', 'off')
|
rmeddis@0
|
546 set(handles.textmaskerDuration,'visible', 'off')
|
rmeddis@0
|
547 set(handles.textmaskerLevel,'visible', 'off')
|
rmeddis@0
|
548 set(handles.textmaskerRelativeFrequency,'visible', 'off')
|
rmeddis@0
|
549 set(handles.textgapDuration,'visible', 'off')
|
rmeddis@0
|
550 set(handles.popupmenuMaskerType,'visible', 'off')
|
rmeddis@0
|
551 set(handles.textMaskerType,'visible', 'off')
|
rmeddis@0
|
552
|
rmeddis@0
|
553 % paradigms with maskers
|
rmeddis@0
|
554 case {'forwardMasking','forwardMaskingD','trainingIFMC', 'TMC','TMC_16ms', ...
|
rmeddis@0
|
555 'TMCmodel','IFMC','IFMC_8ms','GOM','overShoot','overShootB',...
|
rmeddis@0
|
556 'gapDetection', 'psychometric', 'FMreProbe'}
|
rmeddis@0
|
557 set(handles.editmaskerDuration,'visible', 'on')
|
rmeddis@0
|
558 set(handles.editmaskerLevel,'visible', 'on')
|
rmeddis@0
|
559 set(handles.editmaskerRelativeFrequency,'visible', 'on')
|
rmeddis@0
|
560 set(handles.editgapDuration,'visible', 'on')
|
rmeddis@0
|
561 set(handles.popupmenuMaskerType,'visible', 'on')
|
rmeddis@0
|
562 set(handles.textmaskerDuration,'visible', 'on')
|
rmeddis@0
|
563 set(handles.textmaskerLevel,'visible', 'on')
|
rmeddis@0
|
564 set(handles.textmaskerRelativeFrequency,'visible', 'on')
|
rmeddis@0
|
565 set(handles.textgapDuration,'visible', 'on')
|
rmeddis@0
|
566 set(handles.popupmenuMaskerType,'visible', 'on')
|
rmeddis@0
|
567 set(handles.textMaskerType,'visible', 'on')
|
rmeddis@0
|
568 % masker relative frequency /type
|
rmeddis@0
|
569 chosenOption=get(handles.popupmenuMaskerType,'value');
|
rmeddis@0
|
570 maskerTypes=get(handles.popupmenuMaskerType,'string');
|
rmeddis@0
|
571 maskerType=maskerTypes{chosenOption};
|
rmeddis@0
|
572 switch maskerType
|
rmeddis@0
|
573 case 'tone'
|
rmeddis@0
|
574 set(handles.editmaskerRelativeFrequency,'visible', 'on')
|
rmeddis@0
|
575 otherwise
|
rmeddis@0
|
576 set(handles.editmaskerRelativeFrequency,'visible', 'off')
|
rmeddis@0
|
577 end
|
rmeddis@0
|
578 end
|
rmeddis@0
|
579
|
rmeddis@0
|
580 eval(['set(handles.edit' stimulusParameters.WRVname ...
|
rmeddis@0
|
581 ',''visible'',''off'' )'])
|
rmeddis@0
|
582
|
rmeddis@0
|
583 % target type
|
rmeddis@0
|
584 chosenOption=get(handles.popupmenuTargetType,'value');
|
rmeddis@0
|
585 targetTypes=get(handles.popupmenuTargetType,'string');
|
rmeddis@0
|
586 targetType=targetTypes{chosenOption};
|
rmeddis@0
|
587 switch targetType
|
rmeddis@0
|
588 case 'tone'
|
rmeddis@0
|
589 set(handles.edittargetFrequency,'visible', 'on')
|
rmeddis@0
|
590 otherwise
|
rmeddis@0
|
591 set(handles.edittargetFrequency,'visible', 'off')
|
rmeddis@0
|
592 end
|
rmeddis@0
|
593
|
rmeddis@0
|
594 if strcmp(stimulusParameters.backgroundType,'none')
|
rmeddis@0
|
595 set(handles.popupmenuBackgroundType, 'visible', 'on');
|
rmeddis@0
|
596 set(handles.editBackgroundLevel,'visible','off')
|
rmeddis@0
|
597 set(handles.textBGlevel,'visible','off')
|
rmeddis@0
|
598 else
|
rmeddis@0
|
599 set(handles.popupmenuBackgroundType, 'visible', 'on');
|
rmeddis@0
|
600 set(handles.editBackgroundLevel,'visible','on')
|
rmeddis@0
|
601 set(handles.textBGlevel,'visible','on')
|
rmeddis@0
|
602 end
|
rmeddis@0
|
603
|
rmeddis@0
|
604
|
rmeddis@0
|
605
|
rmeddis@0
|
606 % ------------------------------------------------ pushbuttonRun_Callback
|
rmeddis@0
|
607 function pushbuttonRun_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
608 global checkForPreviousGUI % holds screen positioning across repeated calls
|
rmeddis@0
|
609 global experiment
|
rmeddis@0
|
610 checkForPreviousGUI.GUIposition=get(handles.figure1,'position');
|
rmeddis@0
|
611 experiment.singleShot=0;
|
rmeddis@0
|
612 run (handles)
|
rmeddis@0
|
613 experiment.stop=0;
|
rmeddis@0
|
614
|
rmeddis@0
|
615 function run (handles)
|
rmeddis@0
|
616 global experiment expGUIhandles stimulusParameters
|
rmeddis@0
|
617 tic
|
rmeddis@0
|
618 expGUIhandles=handles;
|
rmeddis@0
|
619 set(handles.pushbuttonStop, 'backgroundColor', [.941 .941 .941])
|
rmeddis@0
|
620
|
rmeddis@0
|
621 % message box white (removes any previous error message)
|
rmeddis@0
|
622 set(handles.textMSG,...
|
rmeddis@0
|
623 'backgroundcolor', 'w', 'ForegroundColor', 'b', 'string', '')
|
rmeddis@0
|
624
|
rmeddis@0
|
625 errorMsg=aReadAndCheckParameterBoxes(handles);
|
rmeddis@0
|
626 if ~isempty(errorMsg)
|
rmeddis@0
|
627 append=0;
|
rmeddis@0
|
628 warning=1;
|
rmeddis@0
|
629 addToMsg(['error message:' errorMsg], append, warning)
|
rmeddis@0
|
630 return
|
rmeddis@0
|
631 end
|
rmeddis@0
|
632
|
rmeddis@0
|
633 if isnan(stimulusParameters.targetLevel)
|
rmeddis@0
|
634 addToMsg('Error: targetlevel not set', 1)
|
rmeddis@0
|
635 error('Error: targetlevel not set')
|
rmeddis@0
|
636 end
|
rmeddis@0
|
637
|
rmeddis@0
|
638 set(handles.textMSG,'backgroundcolor', 'w')
|
rmeddis@0
|
639 set(handles.textMSG,'string', ' ')
|
rmeddis@0
|
640
|
rmeddis@0
|
641 % leave the program and start up multiThreshold
|
rmeddis@0
|
642 subjGUI_MT % leave the program and start up multiThreshold
|
rmeddis@0
|
643 experiment.justInitialized=0;% prevents moving subjectGUI
|
rmeddis@0
|
644 toc
|
rmeddis@0
|
645
|
rmeddis@0
|
646 % --- Executes on button press in pushbuttonSingleShot.
|
rmeddis@0
|
647 function pushbuttonSingleShot_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
648 global experiment
|
rmeddis@0
|
649 experiment.singleShot=1;
|
rmeddis@0
|
650
|
rmeddis@0
|
651 % special test for spontaneous activity
|
rmeddis@0
|
652 x=get(handles.editWRVstartValues, 'string');
|
rmeddis@0
|
653 y=get(handles.edittargetDuration, 'string');
|
rmeddis@0
|
654 set(handles.editWRVstartValues, 'string', '-20')
|
rmeddis@0
|
655 set(handles.edittargetDuration, 'string', '1')
|
rmeddis@0
|
656
|
rmeddis@0
|
657 MAPplot=get(handles.editMAPplot, 'string');
|
rmeddis@0
|
658 set(handles.editMAPplot, 'string', '1')
|
rmeddis@0
|
659 drawnow
|
rmeddis@0
|
660
|
rmeddis@0
|
661 run (handles)
|
rmeddis@0
|
662
|
rmeddis@0
|
663 set(handles.editMAPplot, 'string', MAPplot)
|
rmeddis@0
|
664 set(handles.editWRVstartValues, 'string', x)
|
rmeddis@0
|
665 set(handles.edittargetDuration, 'string', y)
|
rmeddis@0
|
666
|
rmeddis@0
|
667 % ------------------------------------------aReadAndCheckParameterBoxes
|
rmeddis@0
|
668 function errorMsg=aReadAndCheckParameterBoxes(handles)
|
rmeddis@0
|
669 global experiment stimulusParameters betweenRuns statsModel
|
rmeddis@0
|
670 global variableNames LevittControl
|
rmeddis@0
|
671 % When the program sets the parameters all should be well
|
rmeddis@0
|
672 % But when the user changes them...
|
rmeddis@0
|
673
|
rmeddis@0
|
674 errorMsg='';
|
rmeddis@0
|
675
|
rmeddis@0
|
676 % name
|
rmeddis@0
|
677 experiment.name=get(handles.editName,'string');
|
rmeddis@0
|
678
|
rmeddis@0
|
679 % ear/models
|
rmeddis@0
|
680 option=get(handles.popupmenuEar,'value');
|
rmeddis@0
|
681 strings=get(handles.popupmenuEar,'string');
|
rmeddis@0
|
682 experiment.ear=strings{option};
|
rmeddis@0
|
683
|
rmeddis@0
|
684 switch experiment.ear
|
rmeddis@0
|
685 case { 'MAPmodel', 'MAPmodelMultiCh', ...
|
rmeddis@0
|
686 'MAPmodelSingleCh', 'MAPmodelListen'}
|
rmeddis@0
|
687 % MAPmodel writes forced parameter settings to the screen
|
rmeddis@0
|
688 % so that they can be read from there
|
rmeddis@0
|
689 set(handles.popupmenuRandomize,'value',2) % fixed sequence
|
rmeddis@0
|
690 set(handles.editstimulusDelay,'string','0.01') % no stimulus delay
|
rmeddis@0
|
691 stimulusParameters.includeCue=0; % no cue for MAP
|
rmeddis@0
|
692 end
|
rmeddis@0
|
693
|
rmeddis@0
|
694 % find tone type
|
rmeddis@0
|
695 option=get(handles.popupmenuTargetType,'value');
|
rmeddis@0
|
696 strings=get(handles.popupmenuTargetType,'string');
|
rmeddis@0
|
697 stimulusParameters.targetType=strings{option};
|
rmeddis@0
|
698
|
rmeddis@0
|
699 % find masker type
|
rmeddis@0
|
700 option=get(handles.popupmenuMaskerType,'value');
|
rmeddis@0
|
701 strings=get(handles.popupmenuMaskerType,'string');
|
rmeddis@0
|
702 stimulusParameters.maskerType=strings{option};
|
rmeddis@0
|
703
|
rmeddis@0
|
704 % find background type and level
|
rmeddis@0
|
705 option=get(handles.popupmenuBackgroundType,'value');
|
rmeddis@0
|
706 strings=get(handles.popupmenuBackgroundType,'string');
|
rmeddis@0
|
707 stimulusParameters.backgroundTypeValue=option;
|
rmeddis@0
|
708 stimulusParameters.backgroundLevel=...
|
rmeddis@0
|
709 str2num(get(handles.editBackgroundLevel,'string'));
|
rmeddis@0
|
710 stimulusParameters.backgroundType=strings{option};
|
rmeddis@0
|
711
|
rmeddis@0
|
712 % Read all stimulus parameter boxes
|
rmeddis@0
|
713 for i=1:length(variableNames)
|
rmeddis@0
|
714 cmd=['stimulusParameters.' variableNames{i} ...
|
rmeddis@0
|
715 '= str2num(get(handles.edit' variableNames{i} ',''string'' ));'];
|
rmeddis@0
|
716 eval(cmd);
|
rmeddis@0
|
717 end
|
rmeddis@0
|
718 % for multiple levels
|
rmeddis@0
|
719 stimulusParameters.targetLevels=stimulusParameters.targetLevel;
|
rmeddis@0
|
720
|
rmeddis@0
|
721 % check that all required values are in the edit boxes
|
rmeddis@0
|
722 for i=1:length(variableNames)-3 % do not include 'level limits'
|
rmeddis@0
|
723 eval([ 'variableValues=stimulusParameters.' variableNames{i} ';'])
|
rmeddis@0
|
724 if isempty(variableValues), errorMsg=[ variableNames{i} ...
|
rmeddis@0
|
725 ' is an empty box']; return, end
|
rmeddis@0
|
726 end
|
rmeddis@0
|
727
|
rmeddis@0
|
728 chosenOption=get(handles.popupmenuVaryParameter1,'value');
|
rmeddis@0
|
729 betweenRuns.variableName1=variableNames{chosenOption};
|
rmeddis@0
|
730 eval(['betweenRuns.variableList1 = stimulusParameters.' ...
|
rmeddis@0
|
731 betweenRuns.variableName1 ';']);
|
rmeddis@0
|
732
|
rmeddis@0
|
733 chosenOption=get(handles.popupmenuVaryParameter2,'value');
|
rmeddis@0
|
734 betweenRuns.variableName2=variableNames{chosenOption};
|
rmeddis@0
|
735 eval(['betweenRuns.variableList2 = stimulusParameters.' ...
|
rmeddis@0
|
736 betweenRuns.variableName2 ';']);
|
rmeddis@0
|
737
|
rmeddis@0
|
738 % Check that variable parameters 1 & 2 have different names
|
rmeddis@0
|
739 if strcmp(betweenRuns.variableName1,betweenRuns.variableName2) ...
|
rmeddis@0
|
740 && ~strcmp(betweenRuns.variableName1,'none')
|
rmeddis@0
|
741 errorMsg='variable parameters have the same name';
|
rmeddis@0
|
742 return
|
rmeddis@0
|
743 end
|
rmeddis@0
|
744
|
rmeddis@0
|
745 % calibration
|
rmeddis@0
|
746 % this is used to *reduce* the output signal from what it otherwise
|
rmeddis@0
|
747 % would be
|
rmeddis@0
|
748 % signal values are between 1 - 2^23
|
rmeddis@0
|
749 % these are interpreted as microPascals between -29 dB and 128 dB SPL
|
rmeddis@0
|
750 % calibrationdB adjusts these values to compensate for equipment
|
rmeddis@0
|
751 % characteristics
|
rmeddis@0
|
752 % this will change the range. e.g. a 7 dB calibration will yield
|
rmeddis@0
|
753 % a range of -36 to 121 dB SPL
|
rmeddis@0
|
754 % Calibration is not used when modelling. Values are treated as dB SPL
|
rmeddis@0
|
755 stimulusParameters.calibrationdB=...
|
rmeddis@0
|
756 str2num(get(handles.editcalibrationdB,'string'));
|
rmeddis@0
|
757
|
rmeddis@0
|
758 % check on cue
|
rmeddis@0
|
759 cueSetUp(handles)
|
rmeddis@0
|
760
|
rmeddis@0
|
761 stimulusParameters.WRVinitialStep=stimulusParameters.WRVsteps(1);
|
rmeddis@0
|
762 stimulusParameters.WRVsmallStep=stimulusParameters.WRVsteps(2);
|
rmeddis@0
|
763
|
rmeddis@0
|
764 % jitter start value set after reading in new parameters
|
rmeddis@0
|
765 switch experiment.paradigm
|
rmeddis@0
|
766 case 'discomfort'
|
rmeddis@0
|
767 stimulusParameters.jitterStartdB=0;
|
rmeddis@0
|
768 otherwise
|
rmeddis@0
|
769 stimulusParameters.jitterStartdB=abs(stimulusParameters.WRVsteps(1));
|
rmeddis@0
|
770 end
|
rmeddis@0
|
771
|
rmeddis@0
|
772
|
rmeddis@0
|
773 % stats model mean and slope
|
rmeddis@0
|
774 statsModelParameters= str2num(get(handles.editStatsModel,'string'));
|
rmeddis@0
|
775 switch experiment.ear
|
rmeddis@0
|
776 case {'statsModelLogistic'}
|
rmeddis@0
|
777 statsModel.logisticMean=statsModelParameters(1) ;
|
rmeddis@0
|
778 statsModel.logisticSlope=statsModelParameters(2);
|
rmeddis@0
|
779 statsModel.rareEvenGain=NaN ;
|
rmeddis@0
|
780 statsModel.rareEventVmin=NaN;
|
rmeddis@0
|
781 case 'statsModelRareEvent'
|
rmeddis@0
|
782 statsModel.logisticMean=NaN ;
|
rmeddis@0
|
783 statsModel.logisticSlope=NaN;
|
rmeddis@0
|
784 statsModel.rareEvenGain=statsModelParameters(2) ;
|
rmeddis@0
|
785 statsModel.rareEventVmin=statsModelParameters(1);
|
rmeddis@0
|
786 end
|
rmeddis@0
|
787
|
rmeddis@0
|
788 % MAP plotting
|
rmeddis@0
|
789 experiment.MAPplot=str2num(get(handles.editMAPplot,'string'));
|
rmeddis@0
|
790 % if ~isequal(experiment.MAPplot, 0),
|
rmeddis@0
|
791 % % any other character will do it
|
rmeddis@0
|
792 % experiment.MAPplot=1;
|
rmeddis@0
|
793 % end
|
rmeddis@0
|
794
|
rmeddis@0
|
795 % save data
|
rmeddis@0
|
796 experiment.saveData=str2num(get(handles.editSaveData,'string'));
|
rmeddis@0
|
797 if ~isequal(experiment.saveData, 0),
|
rmeddis@0
|
798 % any other character will do it
|
rmeddis@0
|
799 experiment.saveData=1;
|
rmeddis@0
|
800 end
|
rmeddis@0
|
801
|
rmeddis@0
|
802 % print tracks
|
rmeddis@0
|
803 experiment.printTracks=str2num(get(handles.editPrintTracks,'string'));
|
rmeddis@0
|
804 if ~isequal(experiment.printTracks, 0),
|
rmeddis@0
|
805 % any other character will do it
|
rmeddis@0
|
806 experiment.printTracks=1;
|
rmeddis@0
|
807 end
|
rmeddis@0
|
808
|
rmeddis@0
|
809 % catch trial rate
|
rmeddis@0
|
810 % (1)= start rate, (2)= base rate, (3)= time constant (trials)
|
rmeddis@0
|
811 stimulusParameters.catchTrialRates=...
|
rmeddis@0
|
812 str2num(get(handles.editCatchTrialRate,'string'));
|
rmeddis@0
|
813 if stimulusParameters.catchTrialRates(1) ...
|
rmeddis@0
|
814 < stimulusParameters.catchTrialRates(2)
|
rmeddis@0
|
815 errorMsg=...
|
rmeddis@0
|
816 'catch trial base rates must be less than catch trial start rate';
|
rmeddis@0
|
817 return,
|
rmeddis@0
|
818 end
|
rmeddis@0
|
819
|
rmeddis@0
|
820 % sample rate
|
rmeddis@0
|
821 % The sample rate is set in the paradigm file.
|
rmeddis@0
|
822 % Normally this is set in the startUp paradigm file and then left
|
rmeddis@0
|
823 % When the model is used, the multiThreshold sample rate
|
rmeddis@0
|
824 % overrules anything in the model
|
rmeddis@0
|
825 stimulusParameters.sampleRate=...
|
rmeddis@0
|
826 str2num(get(handles.textsampleRate,'string'));
|
rmeddis@0
|
827
|
rmeddis@0
|
828 % music level
|
rmeddis@0
|
829 stimulusParameters.musicLeveldB=...
|
rmeddis@0
|
830 str2num(get(handles.editMusicLevel,'string'));
|
rmeddis@0
|
831
|
rmeddis@0
|
832 % set message box font size
|
rmeddis@0
|
833 experiment.msgFontSize=str2num(get(handles.editMsgFont,'string'));
|
rmeddis@0
|
834 experiment.subjGUIfontSize=str2num(get(handles.editSubjectFont,'string'));
|
rmeddis@0
|
835
|
rmeddis@0
|
836 % stop criteria
|
rmeddis@0
|
837 experiment.singleIntervalMaxTrials=...
|
rmeddis@0
|
838 str2num(get(handles.editstopCriteriaBox,'string'));
|
rmeddis@0
|
839 experiment.maxTrials=experiment.singleIntervalMaxTrials(1);
|
rmeddis@0
|
840
|
rmeddis@0
|
841 % set up 2IFC is required (? better in atrhesholdAssessmentMethod)
|
rmeddis@0
|
842 switch experiment.threshEstMethod
|
rmeddis@0
|
843 case {'2I2AFC++', '2A2AIFC+++'}
|
rmeddis@0
|
844 experiment.peaksUsed=experiment.singleIntervalMaxTrials(2);
|
rmeddis@0
|
845 experiment.PeakTroughCriterionSD=...
|
rmeddis@0
|
846 experiment.singleIntervalMaxTrials(3);
|
rmeddis@0
|
847 experiment.trialsToBeUsed= 5;
|
rmeddis@0
|
848 LevittControl.maxTrials=experiment.singleIntervalMaxTrials(1);
|
rmeddis@0
|
849 % start value for step until reduced
|
rmeddis@0
|
850 LevittControl.startLevelStep= stimulusParameters.WRVsteps(1);
|
rmeddis@0
|
851 % reduced step size
|
rmeddis@0
|
852 LevittControl.steadyLevittStep= stimulusParameters.WRVsteps(2);
|
rmeddis@0
|
853 LevittControl.TurnsToSmallSteps= 2;
|
rmeddis@0
|
854 LevittControl.useLastNturns= 2*experiment.peaksUsed;
|
rmeddis@0
|
855 LevittControl.minReversals= ...
|
rmeddis@0
|
856 LevittControl.TurnsToSmallSteps+2*experiment.peaksUsed;
|
rmeddis@0
|
857 LevittControl.targetsdPT = experiment.PeakTroughCriterionSD;
|
rmeddis@0
|
858 LevittControl.maxLevittValue= stimulusParameters.WRVlimits(2);
|
rmeddis@0
|
859 Levitt2;
|
rmeddis@0
|
860 end
|
rmeddis@0
|
861
|
rmeddis@0
|
862 % What kind of randomisation is required?
|
rmeddis@0
|
863 idx=get(handles.popupmenuRandomize,'value');
|
rmeddis@0
|
864 s=get(handles.popupmenuRandomize,'string');
|
rmeddis@0
|
865 betweenRuns.randomizeSequence=s{idx};
|
rmeddis@0
|
866
|
rmeddis@0
|
867 % Make small adjustments to variable values
|
rmeddis@0
|
868 % to keep values unique against later sorting
|
rmeddis@0
|
869 x=betweenRuns.variableList1;
|
rmeddis@0
|
870 [y idx]= sort(x);
|
rmeddis@0
|
871 for i=1:length(y)-1, if y(i+1)==y(i); y(i+1)=y(i)*1.001; end, end
|
rmeddis@0
|
872 x(idx)=y;
|
rmeddis@0
|
873 betweenRuns.variableList1=x;
|
rmeddis@0
|
874
|
rmeddis@0
|
875 x=betweenRuns.variableList2;
|
rmeddis@0
|
876 [y idx]= sort(x);
|
rmeddis@0
|
877 for i=1:length(y)-1, if y(i+1)==y(i); y(i+1)=y(i)*1.001; end, end
|
rmeddis@0
|
878 x(idx)=y;
|
rmeddis@0
|
879 betweenRuns.variableList2=x;
|
rmeddis@0
|
880
|
rmeddis@0
|
881 % Checks: after reading and setting parameters ------------------------------------------
|
rmeddis@0
|
882 % check for finger trouble (more checks possible
|
rmeddis@0
|
883 if stimulusParameters.maskerDuration>10
|
rmeddis@0
|
884 errorMsg='maskerDuration is too long'; return, end
|
rmeddis@0
|
885 if stimulusParameters.gapDuration>10
|
rmeddis@0
|
886 errorMsg='gapDuration is too long'; return, end
|
rmeddis@0
|
887 if stimulusParameters.targetDuration>10
|
rmeddis@0
|
888 errorMsg='targetDuration is too long'; return, end
|
rmeddis@0
|
889
|
rmeddis@0
|
890 % rare event slope check
|
rmeddis@0
|
891 if experiment.psyFunSlope<0 ...
|
rmeddis@0
|
892 && strcmp(experiment.functionEstMethod,'rareEvent')
|
rmeddis@0
|
893 errorMsg='cannot use rareEvent option for negative psychometr slopes';
|
rmeddis@0
|
894 return
|
rmeddis@0
|
895 end
|
rmeddis@0
|
896
|
rmeddis@0
|
897 % check ramps
|
rmeddis@0
|
898 if stimulusParameters.rampDuration*2> stimulusParameters.targetDuration
|
rmeddis@0
|
899 errorMsg=' ramp duration is too long for the target';
|
rmeddis@0
|
900 return
|
rmeddis@0
|
901 end
|
rmeddis@0
|
902
|
rmeddis@0
|
903 if max(stimulusParameters.maskerDuration)>0 ...
|
rmeddis@0
|
904 && max(stimulusParameters.rampDuration...
|
rmeddis@0
|
905 *2> stimulusParameters.maskerDuration)
|
rmeddis@0
|
906 errorMsg=' ramp duration is too long for the masker';
|
rmeddis@0
|
907 return
|
rmeddis@0
|
908 end
|
rmeddis@0
|
909
|
rmeddis@0
|
910 % Check WRVstartValues for length and compatibility with randomization
|
rmeddis@0
|
911 % only one start value supplied so all start values are the same
|
rmeddis@0
|
912 if length(stimulusParameters.WRVstartValues)==1
|
rmeddis@0
|
913 stimulusParameters.WRVstartValues= ...
|
rmeddis@0
|
914 repmat(stimulusParameters.WRVstartValues, 1, ...
|
rmeddis@0
|
915 length(betweenRuns.variableList1)...
|
rmeddis@0
|
916 *length(betweenRuns.variableList2));
|
rmeddis@0
|
917 elseif ~isequal(length(stimulusParameters.WRVstartValues), ...
|
rmeddis@0
|
918 length(betweenRuns.variableList1)...
|
rmeddis@0
|
919 *length(betweenRuns.variableList2))
|
rmeddis@0
|
920 % otherwise we need one value for each combination of var1/ var2
|
rmeddis@0
|
921 errorMsg='WRVstartValues not the same length as number of runs';
|
rmeddis@0
|
922 return
|
rmeddis@0
|
923 elseif strcmp(betweenRuns.randomizeSequence, 'randomize within blocks')...
|
rmeddis@0
|
924 && length(stimulusParameters.WRVstartValues)>1
|
rmeddis@0
|
925 errorMsg='multiple WRVstartValues inappropriate';
|
rmeddis@0
|
926 return
|
rmeddis@0
|
927 end
|
rmeddis@0
|
928
|
rmeddis@0
|
929 switch experiment.paradigm
|
rmeddis@0
|
930 % case { 'TMC', 'TMCmodel','IFMC'}
|
rmeddis@0
|
931 case {'trainingIFMC', 'TMC','TMC_16ms', 'TMC - ELP', 'IFMC'}
|
rmeddis@0
|
932
|
rmeddis@0
|
933 % For TMC and IFMC multiple target levels can be set
|
rmeddis@0
|
934 if length(stimulusParameters.targetLevel)==1
|
rmeddis@0
|
935 betweenRuns.targetLevels=...
|
rmeddis@0
|
936 repmat(stimulusParameters.targetLevel, 1, ...
|
rmeddis@0
|
937 length(betweenRuns.variableList1)...
|
rmeddis@0
|
938 *length(betweenRuns.variableList2));
|
rmeddis@0
|
939 elseif length(stimulusParameters.targetLevel)==...
|
rmeddis@0
|
940 length(betweenRuns.variableList2)
|
rmeddis@0
|
941 x=stimulusParameters.targetLevel;
|
rmeddis@0
|
942 x=repmat(x,length(betweenRuns.variableList1),1);
|
rmeddis@0
|
943 x=reshape(x,1,length(betweenRuns.variableList1)*length(betweenRuns.variableList2));
|
rmeddis@0
|
944 betweenRuns.targetLevels=x;
|
rmeddis@0
|
945 else
|
rmeddis@0
|
946 errorMsg='targetLevels not the same length as number of targetFrequencies';
|
rmeddis@0
|
947 end
|
rmeddis@0
|
948 end
|
rmeddis@0
|
949
|
rmeddis@0
|
950 switch experiment.paradigm
|
rmeddis@0
|
951 case {'gapDetection', 'frequencyDiscrimination'}
|
rmeddis@0
|
952 if ~isequal(stimulusParameters.targetDuration, ...
|
rmeddis@0
|
953 stimulusParameters.maskerDuration)
|
rmeddis@0
|
954 addToMsg(...
|
rmeddis@0
|
955 'Warning: masker and target duration not the same.',1,1)
|
rmeddis@0
|
956 end
|
rmeddis@0
|
957 if ~isequal(stimulusParameters.maskerLevel, ...
|
rmeddis@0
|
958 stimulusParameters.targetLevel)
|
rmeddis@0
|
959 addToMsg(['Warning: masker and target level different.'...
|
rmeddis@0
|
960 'They will be changed to be equal',1,1]);
|
rmeddis@0
|
961 end
|
rmeddis@0
|
962 end
|
rmeddis@0
|
963
|
rmeddis@0
|
964 % -------------------------------------------- aSetSampleRate
|
rmeddis@0
|
965 function aSetSampleRate(sampleRate, handles)
|
rmeddis@0
|
966 global stimulusParameters
|
rmeddis@0
|
967 stimulusParameters.sampleRate=sampleRate;
|
rmeddis@0
|
968 set(handles.textsampleRate,'string',num2str(stimulusParameters.sampleRate))
|
rmeddis@0
|
969
|
rmeddis@0
|
970 % -------------------------------------------- popupmenuEar_Callback
|
rmeddis@0
|
971 function popupmenuEar_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
972 global experiment
|
rmeddis@0
|
973 option=get(handles.popupmenuEar,'value');
|
rmeddis@0
|
974 options=get(handles.popupmenuEar,'string'); % left/right/model
|
rmeddis@0
|
975 experiment.ear=options{option};
|
rmeddis@0
|
976 switch experiment.ear
|
rmeddis@0
|
977 case 'statsModelLogistic'
|
rmeddis@0
|
978 set(handles.editStatsModel,'string', '15, 0.5')
|
rmeddis@0
|
979 case 'statsModelRareEvent'
|
rmeddis@0
|
980 set(handles.editStatsModel,'string', '20 1')
|
rmeddis@0
|
981 end
|
rmeddis@0
|
982 earSetUp(handles)
|
rmeddis@0
|
983
|
rmeddis@0
|
984 % -------------------------------------------- earSetUp
|
rmeddis@0
|
985 function earSetUp(handles)
|
rmeddis@0
|
986 global experiment stimulusParameters
|
rmeddis@0
|
987 % option=get(handles.popupmenuEar,'value');
|
rmeddis@0
|
988 % options=get(handles.popupmenuEar,'string'); % left/right/model
|
rmeddis@0
|
989 % experiment.ear=options{option};
|
rmeddis@0
|
990
|
rmeddis@0
|
991 switch experiment.ear
|
rmeddis@0
|
992 case {'statsModelLogistic'}
|
rmeddis@0
|
993 statsModel.logisticSlope=0.5;
|
rmeddis@0
|
994 statsModel.logisticMean=15;
|
rmeddis@0
|
995 set(handles.editStatsModel,'string', ...
|
rmeddis@0
|
996 num2str([statsModel.logisticMean statsModel.logisticSlope]))
|
rmeddis@0
|
997 set(handles.textStatsModel,...
|
rmeddis@0
|
998 'string', {'statsModel',' logistic threshold\ slope'})
|
rmeddis@0
|
999 case 'statsModelRareEvent'
|
rmeddis@0
|
1000 set(handles.textStatsModel,'string', ...
|
rmeddis@0
|
1001 {'statsModel',' rareEvent Vmin\ gain'})
|
rmeddis@0
|
1002 end
|
rmeddis@0
|
1003
|
rmeddis@0
|
1004 switch experiment.ear
|
rmeddis@0
|
1005 case {'statsModelLogistic', 'statsModelRareEvent'}
|
rmeddis@0
|
1006 set(handles.editStatsModel, 'visible', 'off')
|
rmeddis@0
|
1007 set(handles.textStatsModel, 'visible', 'off')
|
rmeddis@0
|
1008
|
rmeddis@0
|
1009 % default psychometric bin size and logistic slopes
|
rmeddis@0
|
1010 set(handles.popupmenuRandomize,'value',2) % fixed sequence
|
rmeddis@0
|
1011 set(handles.editName,'string', 'statsModel')
|
rmeddis@0
|
1012 % experiment.headphonesUsed=0;
|
rmeddis@0
|
1013
|
rmeddis@0
|
1014 case {'MAPmodelListen', 'MAPmodelMultiCh', 'MAPmodelSingleCh'}
|
rmeddis@0
|
1015 stimulusParameters.includeCue=0; % no cue
|
rmeddis@0
|
1016 set(handles.popupmenuCueNoCue,'value', 2)
|
rmeddis@0
|
1017
|
rmeddis@0
|
1018 set(handles.editCatchTrialRate,'string','0 0 2 ');%no catch trials
|
rmeddis@0
|
1019 set(handles.editName,'string', 'Normal') % force name
|
rmeddis@0
|
1020 experiment.name=get(handles.editName,'string'); % read name back
|
rmeddis@0
|
1021 set(handles.editcalibrationdB,'string','0')
|
rmeddis@0
|
1022
|
rmeddis@0
|
1023 set(handles.popupmenuRandomize,'value',2) % fixed sequence
|
rmeddis@0
|
1024 set(handles.editstimulusDelay,'string','0')
|
rmeddis@0
|
1025
|
rmeddis@0
|
1026 set(handles.editSaveData,'string', '0')
|
rmeddis@0
|
1027 set(handles.editSubjectFont,'string', '10');
|
rmeddis@0
|
1028 experiment.MacGThreshold=0; % num MacG spikes to exceed threshold
|
rmeddis@0
|
1029 end
|
rmeddis@0
|
1030 aResetPopupMenus(handles)
|
rmeddis@0
|
1031
|
rmeddis@0
|
1032 % --------------------------------------------- popupmenuCueNoCue_Callback
|
rmeddis@0
|
1033 function popupmenuCueNoCue_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1034 cueSetUp(handles)
|
rmeddis@0
|
1035
|
rmeddis@0
|
1036 % ------------------------------------------------------------- cueSetUp
|
rmeddis@0
|
1037 function cueSetUp(handles)
|
rmeddis@0
|
1038 global stimulusParameters
|
rmeddis@0
|
1039
|
rmeddis@0
|
1040 chosenOption=get(handles.popupmenuCueNoCue,'value');
|
rmeddis@0
|
1041 if chosenOption==1
|
rmeddis@0
|
1042 stimulusParameters.includeCue=1;
|
rmeddis@0
|
1043 set(handles.editcueTestDifference,'visible', 'on')
|
rmeddis@0
|
1044 set(handles.textcueTestDifference,'visible', 'on')
|
rmeddis@0
|
1045 stimulusParameters.subjectText=stimulusParameters.instructions{2};
|
rmeddis@0
|
1046 else
|
rmeddis@0
|
1047 stimulusParameters.includeCue=0;
|
rmeddis@0
|
1048 set(handles.editcueTestDifference,'visible', 'off')
|
rmeddis@0
|
1049 set(handles.textcueTestDifference,'visible', 'off')
|
rmeddis@0
|
1050 stimulusParameters.subjectText= stimulusParameters.instructions{1};
|
rmeddis@0
|
1051 end
|
rmeddis@0
|
1052
|
rmeddis@0
|
1053 % -------------------------------------------- popupmenuThreshEst_Callback
|
rmeddis@0
|
1054 function popupmenuThreshEst_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1055 aThresholdAssessmentMethod(handles);
|
rmeddis@0
|
1056
|
rmeddis@0
|
1057 % --------------------------------------------- aThresholdAssessmentMethod
|
rmeddis@0
|
1058 function aThresholdAssessmentMethod(handles)
|
rmeddis@0
|
1059 % identify the threshold assessment method
|
rmeddis@0
|
1060 % and set various parameters on the GUI appropriately
|
rmeddis@0
|
1061 global stimulusParameters experiment threshEstNames LevittControl
|
rmeddis@0
|
1062
|
rmeddis@0
|
1063 chosenOption=get(handles.popupmenuThreshEst,'value');
|
rmeddis@0
|
1064 experiment.threshEstMethod=threshEstNames{chosenOption};
|
rmeddis@0
|
1065 set(handles.editCatchTrialRate, 'visible', 'on')
|
rmeddis@0
|
1066 set(handles.textCatchTrials, 'visible', 'on')
|
rmeddis@0
|
1067
|
rmeddis@0
|
1068 % establish appropriate stop criterion and post on GUI
|
rmeddis@0
|
1069 switch experiment.threshEstMethod
|
rmeddis@0
|
1070 case 'MaxLikelihood'
|
rmeddis@0
|
1071 experiment.functionEstMethod='logisticML';
|
rmeddis@0
|
1072 stimulusParameters.WRVsteps=10*experiment.psyFunSlope; % ???
|
rmeddis@0
|
1073 set(handles.textstopCriteria,'string', 'stop criteria \ maxTrials')
|
rmeddis@0
|
1074 experiment.singleIntervalMaxTrials=experiment.stopCriteriaSI;
|
rmeddis@0
|
1075 experiment.allowCatchTrials= 1;
|
rmeddis@0
|
1076 switch experiment.paradigm
|
rmeddis@0
|
1077 case 'training'
|
rmeddis@0
|
1078 experiment.possLogSlopes=0.5;
|
rmeddis@0
|
1079 end
|
rmeddis@0
|
1080
|
rmeddis@0
|
1081 case 'oneIntervalUpDown'
|
rmeddis@0
|
1082 experiment.functionEstMethod='logisticLS';
|
rmeddis@0
|
1083 set(handles.textstopCriteria,'string', 'stop criteria \ maxTrials')
|
rmeddis@0
|
1084 experiment.singleIntervalMaxTrials=experiment.stopCriteriaSI;
|
rmeddis@0
|
1085 switch experiment.paradigm
|
rmeddis@0
|
1086 case 'discomfort'
|
rmeddis@0
|
1087 experiment.allowCatchTrials= 0;
|
rmeddis@0
|
1088 otherwise
|
rmeddis@0
|
1089 experiment.allowCatchTrials= 1;
|
rmeddis@0
|
1090 end
|
rmeddis@0
|
1091
|
rmeddis@0
|
1092 case {'2I2AFC++', '2I2AFC+++'}
|
rmeddis@0
|
1093 LevittControl.rule='++'; % e.g. '++' or '+++'
|
rmeddis@0
|
1094 experiment.singleIntervalMaxTrials=experiment.stopCriteria2IFC;
|
rmeddis@0
|
1095 experiment.functionEstMethod='peaksAndTroughs';
|
rmeddis@0
|
1096 LevittControl.maxTrials=experiment.singleIntervalMaxTrials(1);
|
rmeddis@0
|
1097 set(handles.editWRVsteps,'string', ...
|
rmeddis@0
|
1098 num2str(stimulusParameters.WRVsteps))
|
rmeddis@0
|
1099 set(handles.textstopCriteria,'string', {'trials peaks sdCrit'})
|
rmeddis@0
|
1100 experiment.allowCatchTrials= 0;
|
rmeddis@0
|
1101 end
|
rmeddis@0
|
1102
|
rmeddis@0
|
1103 set(handles.textstopCriteria,'fontSize',8)
|
rmeddis@0
|
1104 set(handles.editstopCriteriaBox,'string',...
|
rmeddis@0
|
1105 num2str(experiment.singleIntervalMaxTrials))
|
rmeddis@0
|
1106
|
rmeddis@0
|
1107 % establish the appropriate instructions to the subject
|
rmeddis@0
|
1108 % NB responsibility for this is now transferred to the paradigm file
|
rmeddis@0
|
1109 switch experiment.threshEstMethod
|
rmeddis@0
|
1110 % only one value required for level change
|
rmeddis@0
|
1111 case {'2I2AFC++', '2A2AIFC+++'}
|
rmeddis@0
|
1112 stimulusParameters.subjectText=...
|
rmeddis@0
|
1113 'did the tone occur in window 1 or 2?';
|
rmeddis@0
|
1114 case {'MaxLikelihood', 'oneIntervalUpDown'};
|
rmeddis@0
|
1115 switch stimulusParameters.includeCue
|
rmeddis@0
|
1116 case 0
|
rmeddis@0
|
1117 stimulusParameters.subjectText=...
|
rmeddis@0
|
1118 stimulusParameters.instructions{1};
|
rmeddis@0
|
1119 case 1
|
rmeddis@0
|
1120 stimulusParameters.subjectText= ...
|
rmeddis@0
|
1121 stimulusParameters.instructions{2};
|
rmeddis@0
|
1122 end
|
rmeddis@0
|
1123 end
|
rmeddis@0
|
1124 stimulusParameters.messageString={'training'};
|
rmeddis@0
|
1125
|
rmeddis@0
|
1126 aResetPopupMenus(handles)
|
rmeddis@0
|
1127 % -------------------------------------------------- function orderGlobals
|
rmeddis@0
|
1128 function orderGlobals
|
rmeddis@0
|
1129 global stimulusParameters experiment betweenRuns withinRuns
|
rmeddis@0
|
1130
|
rmeddis@0
|
1131 stimulusParameters=[];
|
rmeddis@0
|
1132 stimulusParameters.sampleRate= [];
|
rmeddis@0
|
1133 stimulusParameters.targetType= '';
|
rmeddis@0
|
1134 stimulusParameters.targetFrequency= [];
|
rmeddis@0
|
1135 stimulusParameters.targetDuration= [];
|
rmeddis@0
|
1136 stimulusParameters.targetLevel= [];
|
rmeddis@0
|
1137 stimulusParameters.gapDuration= [];
|
rmeddis@0
|
1138 stimulusParameters.maskerType= '';
|
rmeddis@0
|
1139 stimulusParameters.maskerRelativeFrequency= [];
|
rmeddis@0
|
1140 stimulusParameters.maskerDuration= [];
|
rmeddis@0
|
1141 stimulusParameters.maskerLevel= [];
|
rmeddis@0
|
1142 stimulusParameters.backgroundType= '';
|
rmeddis@0
|
1143 stimulusParameters.backgroundTypeValue= [];
|
rmeddis@0
|
1144 stimulusParameters.backgroundLevel= [];
|
rmeddis@0
|
1145 stimulusParameters.includeCue= [];
|
rmeddis@0
|
1146 experiment.clickToStimulusPause=[];
|
rmeddis@0
|
1147 stimulusParameters.stimulusDelay= [];
|
rmeddis@0
|
1148 stimulusParameters.rampDuration= [];
|
rmeddis@0
|
1149 stimulusParameters.absThresholds= [];
|
rmeddis@0
|
1150 stimulusParameters.numOHIOtones= [];
|
rmeddis@0
|
1151
|
rmeddis@0
|
1152 stimulusParameters.WRVname= '';
|
rmeddis@0
|
1153 stimulusParameters.WRVstartValues= [];
|
rmeddis@0
|
1154 stimulusParameters.WRVsteps= [];
|
rmeddis@0
|
1155 stimulusParameters.WRVlimits= [];
|
rmeddis@0
|
1156 stimulusParameters.WRVinitialStep= [];
|
rmeddis@0
|
1157 stimulusParameters.WRVsmallStep= [];
|
rmeddis@0
|
1158 experiment.singleIntervalMaxTrials= [];
|
rmeddis@0
|
1159 stimulusParameters.calibrationdB= [];
|
rmeddis@0
|
1160
|
rmeddis@0
|
1161 stimulusParameters.catchTrialRates= [];
|
rmeddis@0
|
1162 stimulusParameters.catchTrialBaseRate= [];
|
rmeddis@0
|
1163 stimulusParameters.catchTrialRate= [];
|
rmeddis@0
|
1164 stimulusParameters.catchTrialTimeConstant= [];
|
rmeddis@0
|
1165
|
rmeddis@0
|
1166 stimulusParameters.dt= [];
|
rmeddis@0
|
1167
|
rmeddis@0
|
1168 stimulusParameters.jitterStartdB= [];
|
rmeddis@0
|
1169 stimulusParameters.restoreCalibration= [];
|
rmeddis@0
|
1170 stimulusParameters.messageString= [];
|
rmeddis@0
|
1171 stimulusParameters.cueTestDifference= [];
|
rmeddis@0
|
1172 stimulusParameters.subjectText= '';
|
rmeddis@0
|
1173 stimulusParameters.testTargetBegins= [];
|
rmeddis@0
|
1174 stimulusParameters.testTargetEnds= [];
|
rmeddis@0
|
1175 stimulusParameters.musicLeveldB= [];
|
rmeddis@0
|
1176
|
rmeddis@0
|
1177 stimulusParameters.subjectSampleRate=[];
|
rmeddis@0
|
1178 stimulusParameters.MAPSampleRate=[];
|
rmeddis@0
|
1179
|
rmeddis@0
|
1180 experiment=[];
|
rmeddis@0
|
1181 experiment.name= '';
|
rmeddis@0
|
1182 experiment.date= '';
|
rmeddis@0
|
1183 experiment.paradigm= '';
|
rmeddis@0
|
1184 experiment.ear= '';
|
rmeddis@0
|
1185 experiment.headphonesUsed=[];
|
rmeddis@0
|
1186 experiment.singleShot= [];
|
rmeddis@0
|
1187 experiment.randomize= '';
|
rmeddis@0
|
1188 experiment.maxTrials= [];
|
rmeddis@0
|
1189 experiment.MacGThreshold= [];
|
rmeddis@0
|
1190 experiment.resetCriterion= [];
|
rmeddis@0
|
1191 experiment.runResetCriterion= [];
|
rmeddis@0
|
1192
|
rmeddis@0
|
1193 experiment.comparisonData= [];
|
rmeddis@0
|
1194 experiment.absThresholds= [];
|
rmeddis@0
|
1195 experiment.threshEstMethod= '';
|
rmeddis@0
|
1196 experiment.functionEstMethod= '';
|
rmeddis@0
|
1197 experiment.psyBinWidth= [];
|
rmeddis@0
|
1198 experiment.maxLogisticK=2;
|
rmeddis@0
|
1199 experiment.numPossLogisticK=100;
|
rmeddis@0
|
1200 experiment.possLogSlopes= [];
|
rmeddis@0
|
1201 experiment.meanSearchStep= [];
|
rmeddis@0
|
1202 experiment.psyFunSlope= [];
|
rmeddis@0
|
1203 experiment.predictionLevels=[];
|
rmeddis@0
|
1204
|
rmeddis@0
|
1205 experiment.buttonBoxType= '';
|
rmeddis@0
|
1206 experiment.buttonBoxStatus= '';
|
rmeddis@0
|
1207 experiment.status= '';
|
rmeddis@0
|
1208 experiment.stop= 0;
|
rmeddis@0
|
1209 experiment.pleaseRepeat= [];
|
rmeddis@0
|
1210 experiment.justInitialized=[];
|
rmeddis@0
|
1211
|
rmeddis@0
|
1212 experiment.MAPplot= [];
|
rmeddis@0
|
1213 experiment.saveData= [];
|
rmeddis@0
|
1214 experiment.printTracks= [];
|
rmeddis@0
|
1215 experiment.msgFontSize= [];
|
rmeddis@0
|
1216 experiment.subjGUIfontSize= [];
|
rmeddis@0
|
1217
|
rmeddis@0
|
1218 experiment.timeAtStart= '';
|
rmeddis@0
|
1219 experiment.minElapsed= [];
|
rmeddis@0
|
1220
|
rmeddis@0
|
1221 betweenRuns=[];
|
rmeddis@0
|
1222 betweenRuns.variableName1= '';
|
rmeddis@0
|
1223 betweenRuns.variableList1= [];
|
rmeddis@0
|
1224 betweenRuns.variableName2= '';
|
rmeddis@0
|
1225 betweenRuns.variableList2= [];
|
rmeddis@0
|
1226 betweenRuns.var1Sequence= [];
|
rmeddis@0
|
1227 betweenRuns.var2Sequence= [];
|
rmeddis@0
|
1228 betweenRuns.randomizeSequence=[];
|
rmeddis@0
|
1229 betweenRuns.timeNow= [];
|
rmeddis@0
|
1230 betweenRuns.runNumber= [];
|
rmeddis@0
|
1231 % betweenRuns.variableCount1= [];
|
rmeddis@0
|
1232 % betweenRuns.variableCount2= [];
|
rmeddis@0
|
1233 betweenRuns.thresholds= [];
|
rmeddis@0
|
1234 betweenRuns.forceThresholds= [];
|
rmeddis@0
|
1235 betweenRuns.observationCount= [];
|
rmeddis@0
|
1236 betweenRuns.timesOfFirstReversals= [];
|
rmeddis@0
|
1237 betweenRuns.bestThresholdTracks='';
|
rmeddis@0
|
1238 betweenRuns.bestThresholdMeanTracks='';
|
rmeddis@0
|
1239 betweenRuns.bestThresholdMedianTracks='';
|
rmeddis@0
|
1240 betweenRuns.levelTracks='';
|
rmeddis@0
|
1241 betweenRuns.responseTracks='';
|
rmeddis@0
|
1242 betweenRuns.slopeKTracks= [];
|
rmeddis@0
|
1243 betweenRuns.gainTracks= [];
|
rmeddis@0
|
1244 betweenRuns.VminTracks= [];
|
rmeddis@0
|
1245 betweenRuns.bestGain= [];
|
rmeddis@0
|
1246 betweenRuns.bestVMin= [];
|
rmeddis@0
|
1247 betweenRuns.bestPaMin= [];
|
rmeddis@0
|
1248 betweenRuns.bestLogisticM= [];
|
rmeddis@0
|
1249 betweenRuns.bestLogisticK= [];
|
rmeddis@0
|
1250 betweenRuns.psychometicFunction='';
|
rmeddis@0
|
1251 betweenRuns.catchTrials= [];
|
rmeddis@0
|
1252 betweenRuns.caughtOut= [];
|
rmeddis@0
|
1253
|
rmeddis@0
|
1254 withinRuns=[];
|
rmeddis@0
|
1255 withinRuns.trialNumber=[];
|
rmeddis@0
|
1256 withinRuns.nowInPhase2=0;
|
rmeddis@0
|
1257 withinRuns.beginningOfPhase2=0;
|
rmeddis@0
|
1258 withinRuns.variableValue=[];
|
rmeddis@0
|
1259 withinRuns.direction='';
|
rmeddis@0
|
1260 withinRuns.peaks=[];
|
rmeddis@0
|
1261 withinRuns.troughs= [];
|
rmeddis@0
|
1262 withinRuns.levelList= [];
|
rmeddis@0
|
1263 withinRuns.responseList= [];
|
rmeddis@0
|
1264 withinRuns.meanEstTrack= [];
|
rmeddis@0
|
1265 withinRuns.meanLogisticEstTrack=[];
|
rmeddis@0
|
1266 withinRuns.bestSlopeK= [];
|
rmeddis@0
|
1267 withinRuns.bestGain= [];
|
rmeddis@0
|
1268 withinRuns.bestVMin= [];
|
rmeddis@0
|
1269 withinRuns.forceThreshold=[];
|
rmeddis@0
|
1270 withinRuns.catchTrial= [];
|
rmeddis@0
|
1271 withinRuns.caughtOut=[];
|
rmeddis@0
|
1272 withinRuns.catchTrialCount=[];
|
rmeddis@0
|
1273 withinRuns.wrongButton= [];
|
rmeddis@0
|
1274 withinRuns.babblePlaying=0;
|
rmeddis@0
|
1275
|
rmeddis@0
|
1276 % --- Executes on selection change in popupmenuBackgroundType.
|
rmeddis@0
|
1277 function popupmenuBackgroundType_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1278 global backgroundTypes
|
rmeddis@0
|
1279 option=get(handles.popupmenuBackgroundType,'value');
|
rmeddis@0
|
1280 selectedBackground=backgroundTypes{option};
|
rmeddis@0
|
1281 stimulusParameters.backgroundType=selectedBackground;
|
rmeddis@0
|
1282
|
rmeddis@0
|
1283 switch selectedBackground
|
rmeddis@0
|
1284 case 'none'
|
rmeddis@0
|
1285 set(handles.editBackgroundLevel,'visible','off')
|
rmeddis@0
|
1286 set(handles.textBGlevel,'visible','off')
|
rmeddis@0
|
1287 otherwise
|
rmeddis@0
|
1288 set(handles.editBackgroundLevel,'visible','on')
|
rmeddis@0
|
1289 set(handles.textBGlevel,'visible','on')
|
rmeddis@0
|
1290 end
|
rmeddis@0
|
1291
|
rmeddis@0
|
1292
|
rmeddis@0
|
1293 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
rmeddis@0
|
1294 function pushbuttonStop_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1295 global experiment
|
rmeddis@0
|
1296 experiment.stop=1;
|
rmeddis@0
|
1297 disp('stop!')
|
rmeddis@0
|
1298 set(handles.pushbuttonStop, 'backgroundColor','r')
|
rmeddis@0
|
1299 pause(.1)
|
rmeddis@0
|
1300 drawnow
|
rmeddis@0
|
1301
|
rmeddis@0
|
1302 function pushbuttonOME_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1303 aReadAndCheckParameterBoxes(handles);
|
rmeddis@0
|
1304 testOME
|
rmeddis@0
|
1305
|
rmeddis@0
|
1306 function pushbuttonBM_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1307 global stimulusParameters experiment
|
rmeddis@0
|
1308 aReadAndCheckParameterBoxes(handles);
|
rmeddis@0
|
1309 testBM(stimulusParameters.targetFrequency, experiment.name);
|
rmeddis@0
|
1310
|
rmeddis@0
|
1311 function pushbuttonAN_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1312 aReadAndCheckParameterBoxes(handles);
|
rmeddis@0
|
1313 % now carry out tests
|
rmeddis@0
|
1314 showPSTHs=0;
|
rmeddis@0
|
1315 testAN
|
rmeddis@0
|
1316
|
rmeddis@0
|
1317 function pushbuttonRF_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1318 aReadAndCheckParameterBoxes(handles);
|
rmeddis@0
|
1319 showPSTHs=1;
|
rmeddis@0
|
1320 testRF
|
rmeddis@0
|
1321
|
rmeddis@0
|
1322 function pushbuttonSYN_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1323 aReadAndCheckParameterBoxes(handles);
|
rmeddis@0
|
1324 testSynapse
|
rmeddis@0
|
1325
|
rmeddis@0
|
1326 function pushbuttonFM_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1327 aReadAndCheckParameterBoxes(handles);
|
rmeddis@0
|
1328 testFM
|
rmeddis@0
|
1329
|
rmeddis@0
|
1330 function popupmenuPhase_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1331 global stimulusParameters
|
rmeddis@0
|
1332
|
rmeddis@0
|
1333 optionNo=get(handles.popupmenuPhase,'value');
|
rmeddis@0
|
1334 options=get(handles.popupmenuPhase,'string');
|
rmeddis@0
|
1335 phase=options{optionNo};
|
rmeddis@0
|
1336 stimulusParameters.maskerPhase=phase;
|
rmeddis@0
|
1337 stimulusParameters.targetPhase=phase;
|
rmeddis@0
|
1338
|
rmeddis@0
|
1339 function pushbuttonParams_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1340 global experiment stimulusParameters
|
rmeddis@0
|
1341 aReadAndCheckParameterBoxes(handles);
|
rmeddis@0
|
1342 % print model parameters using the 'name' box (e.g. CTa -> MAPparamsCTa)
|
rmeddis@0
|
1343 showParams=1; BFlist=-1;
|
rmeddis@0
|
1344 paramFunctionName=['method=MAPparams' experiment.name ...
|
rmeddis@0
|
1345 '(BFlist, stimulusParameters.sampleRate, showParams);'];
|
rmeddis@0
|
1346 eval(paramFunctionName) % go and fetch the parameters requesting parameter printout
|
rmeddis@0
|
1347
|
rmeddis@0
|
1348
|
rmeddis@0
|
1349 % --- Executes on button press in pushbuttonRP.
|
rmeddis@0
|
1350 function pushbuttonRP_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1351 global experiment stimulusParameters
|
rmeddis@0
|
1352 aReadAndCheckParameterBoxes(handles);
|
rmeddis@0
|
1353 % now carry out test
|
rmeddis@0
|
1354 testRP(stimulusParameters.targetFrequency,experiment.name)
|
rmeddis@0
|
1355
|
rmeddis@0
|
1356 % function handles % ??
|
rmeddis@0
|
1357
|
rmeddis@0
|
1358
|
rmeddis@0
|
1359 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
rmeddis@0
|
1360
|
rmeddis@0
|
1361 function editmaskerDuration_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1362
|
rmeddis@0
|
1363 function editmaskerDuration_CreateFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1364 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
rmeddis@0
|
1365 set(hObject,'BackgroundColor','white');
|
rmeddis@0
|
1366 end
|
rmeddis@0
|
1367
|
rmeddis@0
|
1368 function editmaskerLevel_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1369
|
rmeddis@0
|
1370 function editmaskerLevel_CreateFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1371 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
rmeddis@0
|
1372 set(hObject,'BackgroundColor','white');
|
rmeddis@0
|
1373 end
|
rmeddis@0
|
1374
|
rmeddis@0
|
1375 function editmaskerRelativeFrequency_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1376
|
rmeddis@0
|
1377 function editmaskerRelativeFrequency_CreateFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1378 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
rmeddis@0
|
1379 set(hObject,'BackgroundColor','white');
|
rmeddis@0
|
1380 end
|
rmeddis@0
|
1381
|
rmeddis@0
|
1382 function editWRVstartValues_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1383
|
rmeddis@0
|
1384 function editWRVstartValues_CreateFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1385 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
rmeddis@0
|
1386 set(hObject,'BackgroundColor','white');
|
rmeddis@0
|
1387 end
|
rmeddis@0
|
1388
|
rmeddis@0
|
1389 function editgapDuration_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1390
|
rmeddis@0
|
1391 function editgapDuration_CreateFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1392 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
rmeddis@0
|
1393 set(hObject,'BackgroundColor','white');
|
rmeddis@0
|
1394 end
|
rmeddis@0
|
1395
|
rmeddis@0
|
1396 function edittargetDuration_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1397
|
rmeddis@0
|
1398 function edittargetDuration_CreateFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1399 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
rmeddis@0
|
1400 set(hObject,'BackgroundColor','white');
|
rmeddis@0
|
1401 end
|
rmeddis@0
|
1402
|
rmeddis@0
|
1403 function edittargetLevel_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1404
|
rmeddis@0
|
1405 function edittargetLevel_CreateFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1406 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
rmeddis@0
|
1407 set(hObject,'BackgroundColor','white');
|
rmeddis@0
|
1408 end
|
rmeddis@0
|
1409
|
rmeddis@0
|
1410 function editrampDuration_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1411
|
rmeddis@0
|
1412 function editrampDuration_CreateFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1413 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
rmeddis@0
|
1414 set(hObject,'BackgroundColor','white');
|
rmeddis@0
|
1415 end
|
rmeddis@0
|
1416
|
rmeddis@0
|
1417 function editcueTestDifference_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1418
|
rmeddis@0
|
1419 function editcueTestDifference_CreateFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1420 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
rmeddis@0
|
1421 set(hObject,'BackgroundColor','white');
|
rmeddis@0
|
1422 end
|
rmeddis@0
|
1423
|
rmeddis@0
|
1424
|
rmeddis@0
|
1425 function editWRVsteps_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1426
|
rmeddis@0
|
1427 function editWRVsteps_CreateFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1428 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
rmeddis@0
|
1429 set(hObject,'BackgroundColor','white');
|
rmeddis@0
|
1430 end
|
rmeddis@0
|
1431
|
rmeddis@0
|
1432 function editWRVlimits_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1433
|
rmeddis@0
|
1434 function editWRVlimits_CreateFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1435 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
rmeddis@0
|
1436 set(hObject,'BackgroundColor','white');
|
rmeddis@0
|
1437 end
|
rmeddis@0
|
1438
|
rmeddis@0
|
1439 function edittargetFrequency_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1440
|
rmeddis@0
|
1441 function edittargetFrequency_CreateFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1442 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
rmeddis@0
|
1443 set(hObject,'BackgroundColor','white');
|
rmeddis@0
|
1444 end
|
rmeddis@0
|
1445
|
rmeddis@0
|
1446 function editName_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1447
|
rmeddis@0
|
1448 function editName_CreateFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1449 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
rmeddis@0
|
1450 set(hObject,'BackgroundColor','white');
|
rmeddis@0
|
1451 end
|
rmeddis@0
|
1452
|
rmeddis@0
|
1453 function editcalibrationdB_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1454
|
rmeddis@0
|
1455 function editcalibrationdB_CreateFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1456 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
rmeddis@0
|
1457 set(hObject,'BackgroundColor','white');
|
rmeddis@0
|
1458 end
|
rmeddis@0
|
1459
|
rmeddis@0
|
1460 function editMAPplot_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1461
|
rmeddis@0
|
1462 function editMAPplot_CreateFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1463 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
rmeddis@0
|
1464 set(hObject,'BackgroundColor','white');
|
rmeddis@0
|
1465 end
|
rmeddis@0
|
1466
|
rmeddis@0
|
1467 function editMsgFont_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1468
|
rmeddis@0
|
1469 function editMsgFont_CreateFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1470 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
rmeddis@0
|
1471 set(hObject,'BackgroundColor','white');
|
rmeddis@0
|
1472 end
|
rmeddis@0
|
1473
|
rmeddis@0
|
1474 function editCatchTrialRate_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1475
|
rmeddis@0
|
1476 function editCatchTrialRate_CreateFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1477 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
rmeddis@0
|
1478 set(hObject,'BackgroundColor','white');
|
rmeddis@0
|
1479 end
|
rmeddis@0
|
1480
|
rmeddis@0
|
1481
|
rmeddis@0
|
1482 function editSaveData_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1483
|
rmeddis@0
|
1484 function editSaveData_CreateFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1485 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
rmeddis@0
|
1486 set(hObject,'BackgroundColor','white');
|
rmeddis@0
|
1487 end
|
rmeddis@0
|
1488
|
rmeddis@0
|
1489 function editStatsModel_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1490
|
rmeddis@0
|
1491 function editStatsModel_CreateFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1492 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
rmeddis@0
|
1493 set(hObject,'BackgroundColor','white');
|
rmeddis@0
|
1494 end
|
rmeddis@0
|
1495
|
rmeddis@0
|
1496 function editBackgroundLevel_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1497
|
rmeddis@0
|
1498 function editBackgroundLevel_CreateFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1499 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
rmeddis@0
|
1500 set(hObject,'BackgroundColor','white');
|
rmeddis@0
|
1501 end
|
rmeddis@0
|
1502
|
rmeddis@0
|
1503 function editPrintTracks_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1504
|
rmeddis@0
|
1505 function editPrintTracks_CreateFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1506 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
rmeddis@0
|
1507 set(hObject,'BackgroundColor','white');
|
rmeddis@0
|
1508 end
|
rmeddis@0
|
1509
|
rmeddis@0
|
1510 function editstopCriteriaBox_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1511
|
rmeddis@0
|
1512 function editstopCriteriaBox_CreateFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1513
|
rmeddis@0
|
1514 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
rmeddis@0
|
1515 set(hObject,'BackgroundColor','white');
|
rmeddis@0
|
1516 end
|
rmeddis@0
|
1517
|
rmeddis@0
|
1518 function editstimulusDelay_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1519
|
rmeddis@0
|
1520 function editstimulusDelay_CreateFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1521 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
rmeddis@0
|
1522 set(hObject,'BackgroundColor','white');
|
rmeddis@0
|
1523 end
|
rmeddis@0
|
1524
|
rmeddis@0
|
1525
|
rmeddis@0
|
1526 function popupmenuCueNoCue_CreateFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1527 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
rmeddis@0
|
1528 set(hObject,'BackgroundColor','white');
|
rmeddis@0
|
1529 end
|
rmeddis@0
|
1530
|
rmeddis@0
|
1531 function popupmenuEar_CreateFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1532 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
rmeddis@0
|
1533 set(hObject,'BackgroundColor','red');
|
rmeddis@0
|
1534 end
|
rmeddis@0
|
1535
|
rmeddis@0
|
1536 function popupmenuVaryParameter1_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1537
|
rmeddis@0
|
1538 function popupmenuVaryParameter1_CreateFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1539 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
rmeddis@0
|
1540 set(hObject,'BackgroundColor','white');
|
rmeddis@0
|
1541 end
|
rmeddis@0
|
1542
|
rmeddis@0
|
1543 function popupmenuVaryParameter2_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1544
|
rmeddis@0
|
1545 function popupmenuVaryParameter2_CreateFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1546 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
rmeddis@0
|
1547 set(hObject,'BackgroundColor','white');
|
rmeddis@0
|
1548 end
|
rmeddis@0
|
1549
|
rmeddis@0
|
1550 function popupmenuRandomize_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1551
|
rmeddis@0
|
1552 function popupmenuRandomize_CreateFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1553 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
rmeddis@0
|
1554 set(hObject,'BackgroundColor','white');
|
rmeddis@0
|
1555 end
|
rmeddis@0
|
1556
|
rmeddis@0
|
1557 function popupmenuParadigm_CreateFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1558 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
rmeddis@0
|
1559 set(hObject,'BackgroundColor','white');
|
rmeddis@0
|
1560 end
|
rmeddis@0
|
1561
|
rmeddis@0
|
1562
|
rmeddis@0
|
1563 function popupmenuMaskerType_CreateFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1564
|
rmeddis@0
|
1565 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
rmeddis@0
|
1566 set(hObject,'BackgroundColor','white');
|
rmeddis@0
|
1567 end
|
rmeddis@0
|
1568
|
rmeddis@0
|
1569
|
rmeddis@0
|
1570 function popupmenuThreshEst_CreateFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1571 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
rmeddis@0
|
1572 set(hObject,'BackgroundColor','white');
|
rmeddis@0
|
1573 end
|
rmeddis@0
|
1574
|
rmeddis@0
|
1575 function popupmenuBackgroundType_CreateFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1576
|
rmeddis@0
|
1577 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
rmeddis@0
|
1578 set(hObject,'BackgroundColor','white');
|
rmeddis@0
|
1579 end
|
rmeddis@0
|
1580
|
rmeddis@0
|
1581
|
rmeddis@0
|
1582 function popupmenuTargetType_CreateFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1583 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
rmeddis@0
|
1584 set(hObject,'BackgroundColor','white');
|
rmeddis@0
|
1585 end
|
rmeddis@0
|
1586
|
rmeddis@0
|
1587 function editSubjectFont_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1588
|
rmeddis@0
|
1589 function editSubjectFont_CreateFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1590 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
rmeddis@0
|
1591 set(hObject,'BackgroundColor','white');
|
rmeddis@0
|
1592 end
|
rmeddis@0
|
1593
|
rmeddis@0
|
1594 function editMusicLevel_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1595
|
rmeddis@0
|
1596 function editMusicLevel_CreateFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1597 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
rmeddis@0
|
1598 set(hObject,'BackgroundColor','white');
|
rmeddis@0
|
1599 end
|
rmeddis@0
|
1600
|
rmeddis@0
|
1601 function figure1_ButtonDownFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1602
|
rmeddis@0
|
1603
|
rmeddis@0
|
1604 function edit33_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1605
|
rmeddis@0
|
1606 function edit33_CreateFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1607 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
rmeddis@0
|
1608 set(hObject,'BackgroundColor','white');
|
rmeddis@0
|
1609 end
|
rmeddis@0
|
1610
|
rmeddis@0
|
1611
|
rmeddis@0
|
1612 function popupmenuPhase_CreateFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1613 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
rmeddis@0
|
1614 set(hObject,'BackgroundColor','white');
|
rmeddis@0
|
1615 end
|
rmeddis@0
|
1616
|
rmeddis@0
|
1617 function editsegSize_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1618
|
rmeddis@0
|
1619 function editsegSize_CreateFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1620 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
rmeddis@0
|
1621 set(hObject,'BackgroundColor','white');
|
rmeddis@0
|
1622 end
|
rmeddis@0
|
1623
|
rmeddis@0
|
1624
|
rmeddis@0
|
1625 function editnumOHIOtones_Callback(hObject, eventdata, handles)
|
rmeddis@0
|
1626 % hObject handle to editnumOHIOtones (see GCBO)
|
rmeddis@0
|
1627 % eventdata reserved - to be defined in a future version of MATLAB
|
rmeddis@0
|
1628 % handles structure with handles and user data (see GUIDATA)
|
rmeddis@0
|
1629
|
rmeddis@0
|
1630 % Hints: get(hObject,'String') returns contents of editnumOHIOtones as text
|
rmeddis@0
|
1631 % str2double(get(hObject,'String')) returns contents of editnumOHIOtones as a double
|
rmeddis@0
|
1632
|
rmeddis@0
|
1633
|
rmeddis@0
|
1634 % --- Executes during object creation, after setting all properties.
|
rmeddis@0
|
1635 function editnumOHIOtones_CreateFcn(hObject, eventdata, handles)
|
rmeddis@0
|
1636 % hObject handle to editnumOHIOtones (see GCBO)
|
rmeddis@0
|
1637 % eventdata reserved - to be defined in a future version of MATLAB
|
rmeddis@0
|
1638 % handles empty - handles not created until after all CreateFcns called
|
rmeddis@0
|
1639
|
rmeddis@0
|
1640 % Hint: edit controls usually have a white background on Windows.
|
rmeddis@0
|
1641 % See ISPC and COMPUTER.
|
rmeddis@0
|
1642 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
|
rmeddis@0
|
1643 set(hObject,'BackgroundColor','white');
|
rmeddis@0
|
1644 end
|
rmeddis@0
|
1645
|
rmeddis@0
|
1646
|
rmeddis@0
|
1647
|