annotate multithreshold 1.46/expGUI_MT.m @ 28:02aa9826efe0

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