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