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