annotate multithreshold 1.46/multiThreshold.m @ 38:c2204b18f4a2 tip

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