rmeddis@36: % multiThreshold = 'experimenter GUI for multiThreshold rmeddis@36: % allows the experimenter to design experiments. rmeddis@36: % The *running* of experiments is left to subjGUI.m rmeddis@36: % rmeddis@36: % There are three kinds of experiments known as 'earOptions': rmeddis@36: % 1. Measurements using real listeners rmeddis@36: % 'left', 'right', 'diotic', 'dichoticLeft', 'dichoticRight' rmeddis@36: % 2. Measurements using the MAP model as the subject rmeddis@36: % 'MAPmodelListen', 'MAPmodelMultiCh', 'MAPmodelSingleCh' rmeddis@36: % 3. Monte Carlo simulations rmeddis@36: % 'statsModelLogistic','statsModelRareEvent' rmeddis@36: % rmeddis@36: % There are many stimulus configurations relating to different measurement rmeddis@36: % requirements. These configurations are defined in paradigm files located rmeddis@36: % in the 'paradigms' folder with names of the form paradigm_.m. These rmeddis@36: % files specify values in the stimulusParameter and experiment structures. rmeddis@36: % Some minor parameters are specified in the intialiseGUI function below. rmeddis@36: % Each configuration is only a start up arrangement and the user can modify rmeddis@36: % the parameters on the GUI itself. rmeddis@36: % rmeddis@36: % the 'RUN' button initiates the measurements and hands control over to the rmeddis@36: % subjGUI program. When the measurements are complete control is handed rmeddis@36: % back and the stack unwinds without any further action rmeddis@36: rmeddis@36: function varargout = multiThreshold(varargin) rmeddis@36: %MULTITHRESHOLD M-file for multiThreshold.fig rmeddis@36: % MULTITHRESHOLD, by itself, creates a new MULTITHRESHOLD or raises the existing rmeddis@36: % singleton*. rmeddis@36: % rmeddis@36: % H = MULTITHRESHOLD returns the handle to a new MULTITHRESHOLD or the handle to rmeddis@36: % the existing singleton*. rmeddis@36: % rmeddis@36: % MULTITHRESHOLD('Property','Value',...) creates a new MULTITHRESHOLD using the rmeddis@36: % given property value pairs. Unrecognized properties are passed via rmeddis@36: % varargin to multiThreshold_OpeningFcn. This calling syntax produces a rmeddis@36: % warning when there is an existing singleton*. rmeddis@36: % rmeddis@36: % MULTITHRESHOLD('CALLBACK') and MULTITHRESHOLD('CALLBACK',hObject,...) call the rmeddis@36: % local function named CALLBACK in MULTITHRESHOLD.M with the given input rmeddis@36: % arguments. rmeddis@36: % rmeddis@36: % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one rmeddis@36: % instance to run (singleton)". rmeddis@36: % rmeddis@36: % See also: GUIDE, GUIDATA, GUIHANDLES rmeddis@36: rmeddis@36: % Edit the above text to modify the response to help multiThreshold rmeddis@36: rmeddis@38: % Last Modified by GUIDE v2.5 25-Oct-2011 07:51:14 rmeddis@36: rmeddis@36: % Begin initialization code - DO NOT EDIT rmeddis@36: gui_Singleton = 1; rmeddis@36: gui_State = struct('gui_Name', mfilename, ... rmeddis@36: 'gui_Singleton', gui_Singleton, ... rmeddis@36: 'gui_OpeningFcn', @multiThreshold_OpeningFcn, ... rmeddis@36: 'gui_OutputFcn', @multiThreshold_OutputFcn, ... rmeddis@36: 'gui_LayoutFcn', [], ... rmeddis@36: 'gui_Callback', []); rmeddis@36: if nargin && ischar(varargin{1}) rmeddis@36: gui_State.gui_Callback = str2func(varargin{1}); rmeddis@36: end rmeddis@36: rmeddis@36: if nargout rmeddis@36: [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); rmeddis@36: else rmeddis@36: gui_mainfcn(gui_State, varargin{:}); rmeddis@36: end rmeddis@36: % End initialization code - DO NOT EDIT rmeddis@36: rmeddis@36: % -------------------------------------------------- multiThreshold_OpeningFcn rmeddis@36: function multiThreshold_OpeningFcn(hObject, eventdata, handles, varargin) rmeddis@36: rmeddis@36: % Choose default command line output for multiThreshold rmeddis@36: handles.output = hObject; rmeddis@36: rmeddis@36: cla(handles.axes1) rmeddis@36: cla(handles.axes2) rmeddis@36: cla(handles.axes4) rmeddis@36: cla(handles.axes5) rmeddis@36: rmeddis@36: % Update handles structure rmeddis@36: guidata(hObject, handles); rmeddis@36: rmeddis@36: function varargout = multiThreshold_OutputFcn(hObject, eventdata, handles) rmeddis@36: % Get default command line output from handles structure rmeddis@36: initializeGUI(handles) rmeddis@36: varargout{1} = handles.output; rmeddis@36: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% rmeddis@36: rmeddis@36: % -----------------------------------------------------initializeGUI rmeddis@36: function initializeGUI(handles) rmeddis@36: % Populate the edit boxes and popup menus on the GUI rmeddis@36: % Then wait for user action rmeddis@36: global stimulusParameters experiment betweenRuns rmeddis@36: global targetTypes maskerTypes backgroundTypes rmeddis@38: global variableNames paradigmNames threshEstNames cueNames betweenRunsVariables rmeddis@36: rmeddis@36: % Specify order of fields in main structures rmeddis@36: % identify as empty values or empty strings only rmeddis@36: orderGlobals rmeddis@36: rmeddis@36: addpath ('paradigms') %paradigm informations is stored here rmeddis@36: addpath (['..' filesep 'testPrograms']) % model physiology tests rmeddis@36: rmeddis@36: % specify all variables that need to be set on the GUI rmeddis@36: variableNames={'stimulusDelay','maskerDuration','maskerLevel',... rmeddis@36: 'maskerRelativeFrequency', 'targetFrequency', 'gapDuration',... rmeddis@36: 'targetDuration','targetLevel','rampDuration',... rmeddis@38: 'cueTestDifference', 'WRVstartValues', 'WRVsteps', 'WRVlimits',... rmeddis@38: 'OHIOnTones'}; rmeddis@36: rmeddis@36: % Variable variables rmeddis@36: % (names of variable that can changed between runs) rmeddis@36: betweenRunsVariables={'stimulusDelay','maskerDuration','maskerLevel',... rmeddis@36: 'maskerRelativeFrequency','targetFrequency', 'gapDuration',... rmeddis@38: 'targetDuration','targetLevel','OHIOnTones'}; rmeddis@36: % populate the 'between runs variable' menus rmeddis@36: set(handles.popupmenuVaryParameter1,'string',betweenRunsVariables) rmeddis@36: set(handles.popupmenuVaryParameter2,'string',betweenRunsVariables) rmeddis@36: rmeddis@36: % Trial presentation order - randomize at startup rmeddis@36: presentationOrderNames={'randomize within blocks', 'fixed sequence', ... rmeddis@36: 'randomize across blocks'}; rmeddis@36: set(handles.popupmenuRandomize,'string', presentationOrderNames) rmeddis@36: rmeddis@36: % targetType- value must be set in paradigm rmeddis@36: targetTypes={'tone','noise', 'pinkNoise','whiteNoise','24TalkerBabble',... rmeddis@36: 'speech', 'Twister','digitStrings'}; rmeddis@36: set(handles.popupmenuTargetType, 'string', targetTypes); rmeddis@36: rmeddis@36: % maskerType - value must be set in paradigm rmeddis@36: maskerTypes={'tone','noise', 'pinkNoise','TEN','whiteNoise','24TalkerBabble', ... rmeddis@36: 'speech'}; rmeddis@36: set(handles.popupmenuMaskerType, 'string', maskerTypes); rmeddis@36: rmeddis@36: % background Type- value must be set in paradigm (default = 1, 'none') rmeddis@36: backgroundTypes={'none','noise', 'pinkNoise', 'TEN','noiseDich',... rmeddis@36: 'pinkNoiseDich','whiteNoise','24TalkerBabble',... rmeddis@36: '16TalkerBabble','8TalkerBabble','4TalkerBabble',... rmeddis@36: '4TalkerReversedBabble','2TalkerBabble','1TalkerBabble'}; rmeddis@36: set(handles.popupmenuBackgroundType, 'string', backgroundTypes); rmeddis@36: set(handles.editBackgroundLevel,'string', '0') rmeddis@36: rmeddis@36: % Establish available paradigms by scanning paradigms folder rmeddis@36: paradigmNames= what('paradigms'); rmeddis@36: paradigmNames= paradigmNames.m; % select m files only rmeddis@38: idx=strmatch('paradigm_', paradigmNames); % with 'paradigm_' rmeddis@38: paradigmNames=paradigmNames(idx); rmeddis@36: for i=1:length(paradigmNames) % strip off file extension rmeddis@36: paradigmNames{i}=paradigmNames{i}(10:end-2); rmeddis@36: end rmeddis@36: set(handles.popupmenuParadigm,'string', paradigmNames) rmeddis@36: rmeddis@36: % startup paradigm, 'training' (could be anywhere on the list) rmeddis@36: startupParadigm='training'; rmeddis@36: idx= find(strcmp(paradigmNames,startupParadigm)); rmeddis@36: if ~isempty(idx) rmeddis@36: set(handles.popupmenuParadigm,'value', idx) rmeddis@36: else rmeddis@36: % training paradigm must exist rmeddis@36: error(['expGUI_MT\initializeGUI: No ' startupParadigm... rmeddis@36: ' paradigm found in paradigms folder']) rmeddis@36: end rmeddis@36: rmeddis@36: earOptions={'left', 'right', 'diotic', 'dichoticLeft', 'dichoticRight',... rmeddis@36: 'MAPmodelListen', 'MAPmodelMultiCh', 'MAPmodelSingleCh'... rmeddis@36: 'statsModelLogistic','statsModelRareEvent'}; rmeddis@36: set(handles.popupmenuEar,'string', earOptions) rmeddis@36: defaultOption=1; rmeddis@36: experiment.ear=earOptions{defaultOption}; rmeddis@36: set(handles.popupmenuEar,'value', defaultOption) % 'left' is deafult rmeddis@36: set(handles.pushbuttonSingleShot, 'visible', 'off') % use only for MAP rmeddis@36: rmeddis@36: % phase rmeddis@36: phaseOptions={'sin','cos','alt','rand'}; rmeddis@36: set(handles.popupmenuPhase,'string', phaseOptions) rmeddis@36: set(handles.popupmenuPhase,'value', 1) rmeddis@36: rmeddis@36: % Cue rmeddis@36: cueNames={'cued', 'noCue'}; rmeddis@36: set(handles.popupmenuCueNoCue, 'string', cueNames); rmeddis@36: set(handles.popupmenuCueNoCue, 'value', 1); rmeddis@36: rmeddis@36: % threshold assessment method - value must be set in paradigm rmeddis@36: threshEstNames={'oneIntervalUpDown', 'MaxLikelihood', ... rmeddis@36: '2I2AFC++', '2I2AFC+++'}; rmeddis@36: set(handles.popupmenuThreshEst, 'string', threshEstNames); rmeddis@36: experiment.stopCriteria2IFC=[75 3 5]; rmeddis@38: experiment.stopCriteriaSI=20; rmeddis@36: rmeddis@36: % ** editBoxes that are only set by hand rmeddis@36: % music (relative) level, 'tada!' (manual setting only) rmeddis@36: % increase for the hard of hearing rmeddis@36: set(handles.editMusicLevel,'string','0') rmeddis@36: rmeddis@36: % Catch Trial Rate rmeddis@38: set(handles.editCatchTrialRate,'string','0.2 0.1 '); rmeddis@36: rmeddis@36: % calibration rmeddis@36: stimulusParameters.restoreCalibration=7; rmeddis@36: set(handles.editcalibrationdB,'string',... rmeddis@36: stimulusParameters.restoreCalibration) rmeddis@36: rmeddis@36: % a MAPplot rmeddis@36: experiment.MAPplot=0; %default rmeddis@36: set(handles.editMAPplot,'string',num2str(experiment.MAPplot)) rmeddis@36: rmeddis@36: % saveData rmeddis@36: experiment.saveData=1; rmeddis@36: set(handles.editSaveData,'string',num2str(experiment.saveData)) rmeddis@38: set(handles.pushbuttonSave,'visible','off') rmeddis@36: rmeddis@36: % printTracks rmeddis@36: experiment.printTracks=0; rmeddis@36: set(handles.editPrintTracks,'string',num2str(experiment.printTracks)) rmeddis@36: rmeddis@36: % standard delay between button press and initiation of next stimulus rmeddis@36: experiment.clickToStimulusPause=1; rmeddis@36: rmeddis@36: % buttonBoxType: NB no problem if mouse is used instead rmeddis@36: experiment.buttonBoxType='square'; rmeddis@36: rmeddis@36: % estimation of the mean rmeddis@36: % {'logisticLS', 'logisticML', 'rareEvent'} rmeddis@36: experiment.functionEstMethod='logisticLS'; rmeddis@36: rmeddis@36: % message box rmeddis@36: set(handles.textMSG,'backgroundcolor', 'w', 'ForegroundColor', 'b', 'string', '') rmeddis@36: set(handles.editMsgFont,'string','10') rmeddis@36: set(handles.editSubjectFont,'string','14') rmeddis@36: rmeddis@36: % default psychometric bin size and logistic slopes rmeddis@36: experiment.psyBinWidth=1; % dB rmeddis@36: maxLogisticK=2; % steepest slope contemplated rmeddis@36: experiment.maxLogisticK=maxLogisticK; rmeddis@36: experiment.numPossLogisticK=100; rmeddis@36: experiment.possLogSlopes= ... rmeddis@36: 0.01: maxLogisticK/experiment.numPossLogisticK: maxLogisticK; rmeddis@36: experiment.meanSearchStep=0.25; % dB rmeddis@36: rmeddis@36: % indicate that this is the first run and the GUI should be located in rmeddis@36: % default location. rmeddis@36: experiment.justInitialized=1; rmeddis@36: rmeddis@36: % set up GUI based on training paradigm rmeddis@36: aParadigmSelection(handles); rmeddis@36: earSetUp(handles) rmeddis@36: aThresholdAssessmentMethod(handles) rmeddis@36: aShowRelevantObjects(handles) rmeddis@36: rmeddis@36: % Done. Now wait for action rmeddis@36: rmeddis@36: % -------------------------------------------- popupmenuMaskerType_Callback rmeddis@36: function popupmenuMaskerType_Callback(hObject, eventdata, handles) rmeddis@36: % show or remove masker frequency box rmeddis@36: aShowRelevantObjects(handles) rmeddis@36: rmeddis@36: % -------------------------------------------- popupmenuTargetType_Callback rmeddis@36: function popupmenuTargetType_Callback(hObject, eventdata, handles) rmeddis@36: % show or remove target frequency box rmeddis@36: aShowRelevantObjects(handles) rmeddis@36: rmeddis@36: % -------------------------------------------- popupmenuParadigm_Callback rmeddis@36: function popupmenuParadigm_Callback(hObject, eventdata, handles) rmeddis@36: % Any change to the paradigm selection causes all boxes to be shown rmeddis@36: % showParameters(handles) rmeddis@36: aParadigmSelection(handles); rmeddis@36: rmeddis@36: % -------------------------------------------- aParadigmSelection rmeddis@36: function aParadigmSelection(handles) rmeddis@36: global experiment stimulusParameters betweenRuns paradigmNames rmeddis@36: global variableNames rmeddis@36: rmeddis@36: % identify paradigm selected rmeddis@36: chosenOption=get(handles.popupmenuParadigm,'value'); rmeddis@36: paradigm=paradigmNames{chosenOption}; rmeddis@36: experiment.paradigm=paradigm; rmeddis@36: rmeddis@36: %Paradigm: read in all relevant parameters rmeddis@36: % a file must exist with this name 'paradigm_' rmeddis@36: % 'handles' are only occasionally used rmeddis@36: addpath ('paradigms') rmeddis@36: cmd=['paradigm_' paradigm '(handles);']; rmeddis@36: try rmeddis@36: eval(cmd) rmeddis@36: catch rmeddis@36: error(['ExpGUI\aParadigmSelection:'... rmeddis@36: 'paradigm file not found or error in file']) rmeddis@36: end rmeddis@36: rmpath ('paradigms') rmeddis@36: rmeddis@36: if ~isfield(experiment,'maskerInUse') rmeddis@36: error('selected paradigm does not specify if masker is used') rmeddis@36: end rmeddis@36: rmeddis@36: rmeddis@36: if ~experiment.maskerInUse rmeddis@36: stimulusParameters.maskerType='tone'; rmeddis@36: stimulusParameters.maskerPhase='sin'; rmeddis@36: stimulusParameters.maskerDuration=0.0; rmeddis@36: stimulusParameters.maskerLevel= -50; rmeddis@36: stimulusParameters.maskerRelativeFrequency= 1 ; rmeddis@36: end rmeddis@36: rmeddis@36: % if a variable is subject to change, specify list of values here rmeddis@36: % eg. stimulusParameters.targetFrequency=betweenRuns.variableList1; rmeddis@36: cmd=['stimulusParameters.' ... rmeddis@36: betweenRuns.variableName1 '=betweenRuns.variableList1;']; rmeddis@36: eval (cmd); rmeddis@36: cmd=['stimulusParameters.' ... rmeddis@36: betweenRuns.variableName2 '=betweenRuns.variableList2;']; rmeddis@36: eval (cmd); rmeddis@36: rmeddis@36: % establish popup menus on the basis of the paradigm file rmeddis@36: % set(handles.popupmenuRandomize,'value', betweenRuns.randomizeSequence) rmeddis@36: sequenceOptions=get(handles.popupmenuRandomize,'string'); rmeddis@36: idx=find(strcmp(betweenRuns.randomizeSequence, sequenceOptions)==1); rmeddis@36: set(handles.popupmenuRandomize,'value', idx) rmeddis@36: rmeddis@36: phaseOptions=get(handles.popupmenuPhase,'string'); rmeddis@36: idx=find(strcmp(stimulusParameters.maskerPhase, phaseOptions)==1); rmeddis@36: set(handles.popupmenuPhase,'value', idx) rmeddis@36: rmeddis@36: if stimulusParameters.includeCue rmeddis@36: set(handles.popupmenuCueNoCue,'value', 1) rmeddis@36: else rmeddis@36: set(handles.popupmenuCueNoCue,'value', 2) rmeddis@36: end rmeddis@36: rmeddis@36: set(handles.text34, 'string', stimulusParameters.WRVname) rmeddis@36: rmeddis@36: % Put the new data values into the edit boxes on the GUI rmeddis@36: for i=1:length(variableNames) rmeddis@36: cmd=(['set(handles.edit' variableNames{i} ... rmeddis@36: ',''string'', num2str(stimulusParameters.' ... rmeddis@36: variableNames{i} '));']); rmeddis@36: eval(cmd); rmeddis@36: end rmeddis@36: % backgroundLevel is not a variableName (?!) rmeddis@36: set(handles.editBackgroundLevel,'string', num2str... rmeddis@36: (stimulusParameters.backgroundLevel)) rmeddis@36: rmeddis@38: % values related to assessment method rmeddis@38: switch experiment.threshEstMethod rmeddis@38: case {'MaxLikelihood','oneIntervalUpDown'} rmeddis@38: set(handles.editstopCriteriaBox, 'string', ... rmeddis@38: num2str(experiment.singleIntervalMaxTrials)) rmeddis@38: case {'2I2AFC++','2I2AFC+++'} rmeddis@38: set(handles.editstopCriteriaBox, 'string', ... rmeddis@38: num2str(experiment.stopCriteria2IFC)) rmeddis@38: otherwise rmeddis@38: error([' aResetPopupMenus: threshEstMethod not recognised -> ' ... rmeddis@38: experiment.threshEstMethod]) rmeddis@38: end rmeddis@38: % assessment method popup may be changed between paradigms rmeddis@38: % e.g. SRT must be one interval rmeddis@38: x=get(handles.popupmenuThreshEst, 'string'); rmeddis@38: set(handles.popupmenuThreshEst, 'value', ... rmeddis@38: strmatch(experiment.threshEstMethod, x)); rmeddis@38: rmeddis@38: rmeddis@36: % on RUN the sample rate will be picked from the text box rmeddis@36: % However, MAP overrules the sample rate and sets its own rmeddis@36: aSetSampleRate(stimulusParameters.subjectSampleRate, handles); rmeddis@36: rmeddis@36: rmeddis@36: % used for plotting functions (NB affected by paradigm settings) rmeddis@36: experiment.predictionLevels=stimulusParameters.WRVlimits(1):... rmeddis@36: experiment.meanSearchStep:stimulusParameters.WRVlimits(2); rmeddis@36: experiment.possLogSlopes=abs(experiment.possLogSlopes)*... rmeddis@36: sign(experiment.psyFunSlope); rmeddis@36: rmeddis@36: aResetPopupMenus(handles) rmeddis@36: rmeddis@36: % ------------------------------------------------------ aResetPopupMenus rmeddis@36: function aResetPopupMenus(handles) rmeddis@36: global stimulusParameters betweenRuns variableNames rmeddis@38: global targetTypes maskerTypes experiment backgroundTypes betweenRunsVariables rmeddis@36: rmeddis@36: switch experiment.threshEstMethod rmeddis@36: case {'MaxLikelihood','oneIntervalUpDown'} rmeddis@36: set(handles.editstopCriteriaBox, 'string', ... rmeddis@36: num2str(experiment.singleIntervalMaxTrials)) rmeddis@36: rmeddis@36: case {'2I2AFC++','2I2AFC+++'} rmeddis@36: set(handles.editstopCriteriaBox, 'string', ... rmeddis@36: num2str(experiment.stopCriteria2IFC)) rmeddis@36: otherwise rmeddis@36: error([' aResetPopupMenus: threshEstMethod not recognised -> ' ... rmeddis@36: experiment.threshEstMethod]) rmeddis@36: end rmeddis@36: rmeddis@36: % forced noCue rmeddis@36: switch experiment.paradigm rmeddis@36: case 'discomfort' rmeddis@36: set(handles.popupmenuCueNoCue,'value', 2) rmeddis@36: end rmeddis@36: rmeddis@36: %set variables popupmenus as specified in betweenRuns rmeddis@36: variableParameter1ID=0; variableParameter2ID=0; rmeddis@38: for i=1:length(betweenRunsVariables) % variableNames rmeddis@38: if strcmp(betweenRunsVariables{i},betweenRuns.variableName1) rmeddis@36: variableParameter1ID=i; rmeddis@36: end rmeddis@38: if strcmp(betweenRunsVariables{i},betweenRuns.variableName2) rmeddis@36: variableParameter2ID=i; rmeddis@36: end rmeddis@36: end rmeddis@36: if variableParameter1ID==0 || variableParameter2ID==0; rmeddis@36: Error('a ResetPopMenu: variableParameter not identified') rmeddis@36: end rmeddis@36: rmeddis@36: % display popupmenus rmeddis@36: set(handles.popupmenuVaryParameter1, 'value',round(variableParameter1ID)) rmeddis@36: set(handles.popupmenuVaryParameter2, 'value',round(variableParameter2ID)) rmeddis@36: rmeddis@36: % targetType rmeddis@36: idx= find(strcmp(stimulusParameters.targetType, targetTypes)); rmeddis@36: set(handles.popupmenuTargetType,'value', idx) rmeddis@36: rmeddis@36: % paradigm selection may alter the maskerType rmeddis@36: idx= find(strcmp(stimulusParameters.maskerType, maskerTypes)); rmeddis@36: set(handles.popupmenuMaskerType,'value', idx) rmeddis@36: rmeddis@36: aShowRelevantObjects(handles) rmeddis@36: rmeddis@36: % % backgroundType popup rmeddis@36: idx= find(strcmp(stimulusParameters.backgroundType, backgroundTypes)); rmeddis@36: set(handles.popupmenuBackgroundType,'value', idx) rmeddis@36: set(handles.editBackgroundLevel,'string', ... rmeddis@36: num2str(stimulusParameters.backgroundLevel)) rmeddis@36: rmeddis@36: % ---------------------------------------------- aShowRelevantObjects rmeddis@36: function aShowRelevantObjects(handles) rmeddis@36: global experiment stimulusParameters rmeddis@36: % called from aShowRelevantObjects rmeddis@36: % always on rmeddis@36: set(handles.edittargetLevel, 'visible', 'on') rmeddis@36: set(handles.edittargetDuration, 'visible', 'on') rmeddis@36: set(handles.edittargetFrequency, 'visible', 'on') rmeddis@36: rmeddis@38: switch experiment.paradigm(1:3) rmeddis@38: case 'OHI' rmeddis@38: set(handles.editOHIOnTones, 'visible', 'on') rmeddis@38: set(handles.textOHIOnTones, 'visible', 'on') rmeddis@38: otherwise rmeddis@38: set(handles.editOHIOnTones, 'visible', 'off') rmeddis@38: set(handles.textOHIOnTones, 'visible', 'off') rmeddis@38: end rmeddis@38: rmeddis@36: switch experiment.ear rmeddis@36: case {'statsModelLogistic', 'statsModelRareEvent'} rmeddis@36: set(handles.editStatsModel, 'visible', 'on') rmeddis@36: set(handles.textStatsModel, 'visible', 'on') rmeddis@36: set(handles.pushbuttonStop, 'visible', 'on') rmeddis@36: showModelPushButtons(handles, 0) rmeddis@36: set(handles.editCatchTrialRate, 'visible', 'off') rmeddis@36: set(handles.textCatchTrials, 'visible', 'off') rmeddis@36: set(handles.editcalibrationdB, 'visible', 'off') rmeddis@36: set(handles.textcalibration, 'visible', 'off') rmeddis@36: set(handles.popupmenuCueNoCue, 'visible', 'off') rmeddis@36: set(handles.textCue, 'visible', 'off') rmeddis@36: set(handles.editMusicLevel,'visible', 'off') rmeddis@36: set(handles.textMusicLevel,'visible', 'off') rmeddis@36: rmeddis@36: case {'MAPmodel', 'MAPmodelListen', 'MAPmodelMultiCh', 'MAPmodelSingleCh'} rmeddis@36: set(handles.popupmenuCueNoCue, 'visible', 'off') rmeddis@36: set(handles.editStatsModel, 'visible', 'off') rmeddis@36: set(handles.textStatsModel, 'visible', 'off') rmeddis@36: set(handles.pushbuttonStop, 'visible', 'on') rmeddis@36: showModelPushButtons(handles, 1) rmeddis@36: set(handles.editcalibrationdB, 'visible', 'off') rmeddis@36: set(handles.textcalibration, 'visible', 'off') rmeddis@36: set(handles.textCue, 'visible', 'off') rmeddis@36: set(handles.editMusicLevel,'visible', 'off') rmeddis@36: set(handles.textMusicLevel,'visible', 'off') rmeddis@36: rmeddis@36: otherwise rmeddis@36: % i.e. using real subjects (left, right, diotic, dichotic) rmeddis@36: set(handles.editStatsModel, 'visible', 'off') rmeddis@36: set(handles.textStatsModel, 'visible', 'off') rmeddis@36: set(handles.pushbuttonStop, 'visible', 'off') rmeddis@36: showModelPushButtons(handles, 0) rmeddis@36: set(handles.editCatchTrialRate, 'visible', 'on') rmeddis@36: set(handles.textCatchTrials, 'visible', 'on') rmeddis@36: set(handles.editcalibrationdB, 'visible', 'on') rmeddis@36: set(handles.textcalibration, 'visible', 'on') rmeddis@36: set(handles.popupmenuCueNoCue, 'visible', 'on') rmeddis@36: set(handles.textCue, 'visible', 'on') rmeddis@36: set(handles.editMusicLevel,'visible', 'on') rmeddis@36: set(handles.textMusicLevel,'visible', 'on') rmeddis@36: end rmeddis@36: rmeddis@36: switch experiment.threshEstMethod rmeddis@36: case {'MaxLikelihood','oneIntervalUpDown'} rmeddis@36: set(handles.popupmenuCueNoCue,'visible', 'on') rmeddis@36: set(handles.textCue,'visible', 'on') rmeddis@36: set(handles.editstopCriteriaBox, 'string', ... rmeddis@36: num2str(experiment.singleIntervalMaxTrials)) rmeddis@36: rmeddis@36: if stimulusParameters.includeCue==0 rmeddis@36: set(handles.editcueTestDifference,'visible', 'off') rmeddis@36: set(handles.textcueTestDifference,'visible', 'off') rmeddis@36: else rmeddis@36: set(handles.editcueTestDifference,'visible', 'on') rmeddis@36: set(handles.textcueTestDifference,'visible', 'on') rmeddis@36: end rmeddis@36: rmeddis@36: case {'2I2AFC++','2I2AFC+++'} rmeddis@36: set(handles.editCatchTrialRate, 'visible', 'off') rmeddis@36: set(handles.textCatchTrials, 'visible', 'off') rmeddis@36: set(handles.popupmenuCueNoCue,'visible', 'off') rmeddis@36: set(handles.textCue,'visible', 'off') rmeddis@36: set(handles.editcueTestDifference,'visible', 'off') rmeddis@36: set(handles.textcueTestDifference,'visible', 'off') rmeddis@36: end rmeddis@36: rmeddis@36: % show/ remove masker related boxes rmeddis@36: if ~experiment.maskerInUse rmeddis@36: set(handles.editmaskerDuration,'visible', 'off') rmeddis@36: set(handles.editmaskerLevel,'visible', 'off') rmeddis@36: set(handles.editmaskerRelativeFrequency,'visible', 'off') rmeddis@36: set(handles.editgapDuration,'visible', 'off') rmeddis@36: set(handles.textmaskerDuration,'visible', 'off') rmeddis@36: set(handles.textmaskerLevel,'visible', 'off') rmeddis@36: set(handles.textmaskerRelativeFrequency,'visible', 'off') rmeddis@36: set(handles.textgapDuration,'visible', 'off') rmeddis@36: set(handles.popupmenuMaskerType,'visible', 'off') rmeddis@36: set(handles.textMaskerType,'visible', 'off') rmeddis@36: rmeddis@36: % paradigms with maskers rmeddis@36: else rmeddis@36: set(handles.editmaskerDuration,'visible', 'on') rmeddis@36: set(handles.editmaskerLevel,'visible', 'on') rmeddis@36: set(handles.editmaskerRelativeFrequency,'visible', 'on') rmeddis@36: set(handles.editgapDuration,'visible', 'on') rmeddis@36: set(handles.popupmenuMaskerType,'visible', 'on') rmeddis@36: set(handles.textmaskerDuration,'visible', 'on') rmeddis@36: set(handles.textmaskerLevel,'visible', 'on') rmeddis@36: set(handles.textmaskerRelativeFrequency,'visible', 'on') rmeddis@36: set(handles.textgapDuration,'visible', 'on') rmeddis@36: set(handles.popupmenuMaskerType,'visible', 'on') rmeddis@36: set(handles.textMaskerType,'visible', 'on') rmeddis@36: % masker relative frequency /type rmeddis@36: chosenOption=get(handles.popupmenuMaskerType,'value'); rmeddis@36: maskerTypes=get(handles.popupmenuMaskerType,'string'); rmeddis@36: maskerType=maskerTypes{chosenOption}; rmeddis@36: switch maskerType rmeddis@36: case 'tone' rmeddis@36: set(handles.editmaskerRelativeFrequency,'visible', 'on') rmeddis@36: otherwise rmeddis@36: set(handles.editmaskerRelativeFrequency,'visible', 'off') rmeddis@36: end rmeddis@36: end rmeddis@36: rmeddis@36: eval(['set(handles.edit' stimulusParameters.WRVname ... rmeddis@36: ',''visible'',''off'' )']) rmeddis@36: rmeddis@36: % target type rmeddis@36: chosenOption=get(handles.popupmenuTargetType,'value'); rmeddis@36: targetTypes=get(handles.popupmenuTargetType,'string'); rmeddis@36: targetType=targetTypes{chosenOption}; rmeddis@36: switch targetType rmeddis@36: case 'tone' rmeddis@36: set(handles.edittargetFrequency,'visible', 'on') rmeddis@36: otherwise rmeddis@36: set(handles.edittargetFrequency,'visible', 'off') rmeddis@36: end rmeddis@36: rmeddis@36: if strcmp(stimulusParameters.backgroundType,'none') rmeddis@36: set(handles.popupmenuBackgroundType, 'visible', 'on'); rmeddis@36: set(handles.editBackgroundLevel,'visible','off') rmeddis@36: set(handles.textBGlevel,'visible','off') rmeddis@36: else rmeddis@36: set(handles.popupmenuBackgroundType, 'visible', 'on'); rmeddis@36: set(handles.editBackgroundLevel,'visible','on') rmeddis@36: set(handles.textBGlevel,'visible','on') rmeddis@36: end rmeddis@36: rmeddis@36: % ------------------------------------------------ showModelPushButtons rmeddis@36: function showModelPushButtons(handles,on) rmeddis@36: if on rmeddis@36: set(handles.pushbuttonOME, 'visible', 'on') rmeddis@36: set(handles.pushbuttonBM, 'visible', 'on') rmeddis@36: set(handles.pushbuttonRP, 'visible', 'on') rmeddis@36: set(handles.pushbuttonAN, 'visible', 'on') rmeddis@36: set(handles.pushbuttonPhLk, 'visible', 'on') rmeddis@36: set(handles.pushbuttonSYN, 'visible', 'on') rmeddis@36: set(handles.pushbuttonFM, 'visible', 'on') rmeddis@36: set(handles.pushbuttonParams, 'visible', 'on') rmeddis@36: set(handles.pushbuttonSingleShot, 'visible', 'on') rmeddis@36: set(handles.editMAPplot,'visible', 'on') rmeddis@36: set(handles.textMAPplot,'visible', 'on') rmeddis@36: rmeddis@36: else rmeddis@36: set(handles.pushbuttonOME, 'visible', 'off') rmeddis@36: set(handles.pushbuttonBM, 'visible', 'off') rmeddis@36: set(handles.pushbuttonRP, 'visible', 'off') rmeddis@36: set(handles.pushbuttonAN, 'visible', 'off') rmeddis@36: set(handles.pushbuttonPhLk, 'visible', 'off') rmeddis@36: set(handles.pushbuttonSYN, 'visible', 'off') rmeddis@36: set(handles.pushbuttonFM, 'visible', 'off') rmeddis@36: set(handles.pushbuttonParams, 'visible', 'off') rmeddis@36: set(handles.pushbuttonSingleShot, 'visible', 'off') rmeddis@36: set(handles.editMAPplot,'visible', 'off') rmeddis@36: set(handles.textMAPplot,'visible', 'off') rmeddis@36: rmeddis@36: end rmeddis@36: rmeddis@36: % ------------------------------------------------ pushbuttonRun_Callback rmeddis@36: function pushbuttonRun_Callback(hObject, eventdata, handles) rmeddis@36: global checkForPreviousGUI % holds screen positioning across repeated calls rmeddis@36: global experiment stimulusParameters betweenRuns paradigmNames errormsg rmeddis@36: checkForPreviousGUI.GUIposition=get(handles.figure1,'position'); rmeddis@36: experiment.singleShot=0; rmeddis@36: experiment.stop=0; rmeddis@36: rmeddis@36: switch experiment.paradigm rmeddis@36: case 'profile' rmeddis@36: %% special option for successive and linked measurements rmeddis@36: global resultsTable rmeddis@36: experiment.paradigm='threshold_16ms'; rmeddis@36: set(handles.edittargetDuration,'string', num2str(0.25)) rmeddis@36: set(handles.editstopCriteriaBox,'string','10') % nTrials rmeddis@36: run (handles) rmeddis@36: if experiment.stop rmeddis@36: optionNo=strmatch('profile',paradigmNames); rmeddis@36: set(handles.popupmenuParadigm,'value',optionNo); rmeddis@36: experiment.paradigm='profile'; rmeddis@36: aParadigmSelection(handles) rmeddis@36: return rmeddis@36: end rmeddis@36: rmeddis@36: longTone=resultsTable(2:end,2:end); rmeddis@36: set(handles.edittargetDuration,'string', num2str(0.016)) rmeddis@36: set(handles.editstopCriteriaBox,'string','30') % nTrials rmeddis@36: run (handles) rmeddis@36: if experiment.stop rmeddis@36: disp(errormsg) rmeddis@36: optionNo=strmatch('profile',paradigmNames); rmeddis@36: set(handles.popupmenuParadigm,'value',optionNo); rmeddis@36: experiment.paradigm='profile'; rmeddis@36: experiment.stop=-0; rmeddis@36: aParadigmSelection(handles) rmeddis@36: return rmeddis@36: end rmeddis@36: shortTone=resultsTable(2:end,2:end); rmeddis@36: rmeddis@36: % use 16ms thresholds for TMC rmeddis@36: thresholds16ms=betweenRuns.thresholds; rmeddis@36: optionNo=strmatch('TMC',paradigmNames); rmeddis@36: set(handles.popupmenuParadigm,'value',optionNo); rmeddis@36: aParadigmSelection(handles) rmeddis@36: set(handles.edittargetLevel,'string', thresholds16ms+10); rmeddis@36: set(handles.editstopCriteriaBox,'string','30') % nTrials rmeddis@36: pause(.1) rmeddis@36: run (handles) rmeddis@36: if experiment.stop rmeddis@36: disp(errormsg) rmeddis@36: optionNo=strmatch('profile',paradigmNames); rmeddis@36: set(handles.popupmenuParadigm,'value',optionNo); rmeddis@36: experiment.paradigm='profile'; rmeddis@36: experiment.stop=-0; rmeddis@36: aParadigmSelection(handles) rmeddis@36: return rmeddis@36: end rmeddis@36: TMC=resultsTable(2:end,2:end); rmeddis@36: gaps=resultsTable(2:end,1); rmeddis@36: BFs=resultsTable(1, 2:end); rmeddis@36: rmeddis@36: % use 16ms threshold for IFMC rmeddis@36: optionNo=strmatch('IFMC',paradigmNames); rmeddis@36: set(handles.popupmenuParadigm,'value',optionNo); rmeddis@36: aParadigmSelection(handles) rmeddis@36: set(handles.edittargetLevel,'string', thresholds16ms+10); rmeddis@36: set(handles.editstopCriteriaBox,'string','30') % nTrials rmeddis@36: pause(.1) rmeddis@36: run (handles) rmeddis@36: if experiment.stop rmeddis@36: disp(errormsg) rmeddis@36: optionNo=strmatch('profile',paradigmNames); rmeddis@36: set(handles.popupmenuParadigm,'value',optionNo); rmeddis@36: experiment.paradigm='profile'; rmeddis@36: experiment.stop=-0; rmeddis@36: aParadigmSelection(handles) rmeddis@36: return rmeddis@36: end rmeddis@36: IFMCs=resultsTable(2:end,2:end); rmeddis@36: offBFs=resultsTable(2:end,1); rmeddis@36: rmeddis@36: % reset original paradigm rmeddis@36: optionNo=strmatch('profile',paradigmNames); rmeddis@36: set(handles.popupmenuParadigm,'value',optionNo); rmeddis@36: aParadigmSelection(handles) rmeddis@36: rmeddis@36: %% save data and plot profile rmeddis@36: rmeddis@36: % save profile longTone shortTone gaps BFs TMC offBFs IFMCs rmeddis@36: fileName=['MTprofile' Util_timeStamp]; rmeddis@36: profile2mFile(longTone, shortTone, gaps, BFs, TMC, offBFs, IFMCs,... rmeddis@36: fileName) rmeddis@36: while ~fopen(fileName), end rmeddis@36: plotProfile(fileName, 'profile_CMA_L') rmeddis@36: %% xx rmeddis@36: if strcmp(errormsg,'manually stopped') rmeddis@36: disp(errormsg) rmeddis@36: optionNo=strmatch('profile',paradigmNames); rmeddis@36: set(handles.popupmenuParadigm,'value',optionNo); rmeddis@36: experiment.paradigm='profile'; rmeddis@36: experiment.stop=-0; rmeddis@36: aParadigmSelection(handles) rmeddis@36: return rmeddis@36: end rmeddis@36: otherwise rmeddis@36: run (handles) rmeddis@36: experiment.stop=0; rmeddis@36: end rmeddis@36: rmeddis@36: function run (handles) rmeddis@36: global experiment expGUIhandles stimulusParameters rmeddis@36: tic rmeddis@36: expGUIhandles=handles; rmeddis@38: set(handles.pushbuttonSave,'visible','off') rmeddis@38: rmeddis@36: set(handles.pushbuttonStop, 'backgroundColor', [.941 .941 .941]) rmeddis@36: % set(handles.editparamChanges,'visible','off') rmeddis@36: rmeddis@36: % message box white (removes any previous error message) rmeddis@36: set(handles.textMSG,... rmeddis@36: 'backgroundcolor', 'w', 'ForegroundColor', 'b', 'string', '') rmeddis@36: rmeddis@36: errorMsg=aReadAndCheckParameterBoxes(handles); rmeddis@36: if ~isempty(errorMsg) rmeddis@36: append=0; rmeddis@36: warning=1; rmeddis@36: addToMsg(['error message:' errorMsg], append, warning) rmeddis@36: return rmeddis@36: end rmeddis@36: rmeddis@36: if isnan(stimulusParameters.targetLevel) rmeddis@36: addToMsg('Error: targetlevel not set', 1) rmeddis@36: error('Error: targetlevel not set') rmeddis@36: end rmeddis@36: rmeddis@36: set(handles.textMSG,'backgroundcolor', 'w') rmeddis@36: set(handles.textMSG,'string', ' ') rmeddis@36: rmeddis@36: % leave the program and start up multiThreshold rmeddis@36: subjGUI_MT % leave the program and start up multiThreshold rmeddis@36: experiment.justInitialized=0;% prevents moving subjectGUI rmeddis@36: toc rmeddis@36: rmeddis@36: % --- Executes on button press in pushbuttonSingleShot. rmeddis@36: function pushbuttonSingleShot_Callback(hObject, eventdata, handles) rmeddis@38: global experiment paradigmNames rmeddis@36: experiment.singleShot=1; rmeddis@36: rmeddis@38: % startup paradigm, 'training' (could be anywhere on the list) rmeddis@38: startupParadigm='training'; rmeddis@38: idx= find(strcmp(paradigmNames,startupParadigm)); rmeddis@38: set(handles.popupmenuParadigm,'value', idx) rmeddis@38: aParadigmSelection(handles); rmeddis@38: rmeddis@36: % special test for spontaneous activity rmeddis@36: x=get(handles.editWRVstartValues, 'string'); rmeddis@36: y=get(handles.edittargetDuration, 'string'); rmeddis@36: set(handles.editWRVstartValues, 'string', '-20') rmeddis@36: set(handles.edittargetDuration, 'string', '1') rmeddis@36: rmeddis@36: MAPplot=get(handles.editMAPplot, 'string'); rmeddis@36: set(handles.editMAPplot, 'string', '1') rmeddis@36: drawnow rmeddis@36: rmeddis@36: run (handles) rmeddis@36: rmeddis@36: set(handles.editMAPplot, 'string', MAPplot) rmeddis@36: set(handles.editWRVstartValues, 'string', x) rmeddis@36: set(handles.edittargetDuration, 'string', y) rmeddis@36: rmeddis@36: % ------------------------------------------aReadAndCheckParameterBoxes rmeddis@36: function errorMsg=aReadAndCheckParameterBoxes(handles) rmeddis@36: global experiment stimulusParameters betweenRuns statsModel rmeddis@38: global variableNames LevittControl paramChanges betweenRunsVariables rmeddis@36: % When the program sets the parameters all should be well rmeddis@36: % But when the user changes them... rmeddis@36: rmeddis@36: errorMsg=''; rmeddis@36: rmeddis@36: % name rmeddis@36: experiment.name=get(handles.editName,'string'); rmeddis@36: rmeddis@36: % ear/models rmeddis@36: option=get(handles.popupmenuEar,'value'); rmeddis@36: strings=get(handles.popupmenuEar,'string'); rmeddis@36: experiment.ear=strings{option}; rmeddis@36: rmeddis@36: switch experiment.ear rmeddis@36: case { 'MAPmodel', 'MAPmodelMultiCh', ... rmeddis@36: 'MAPmodelSingleCh', 'MAPmodelListen'} rmeddis@36: % MAPmodel writes forced parameter settings to the screen rmeddis@36: % so that they can be read from there rmeddis@36: % {'randomize within blocks', 'fixed sequence',... rmeddis@36: % 'randomize across blocks'} rmeddis@36: set(handles.popupmenuRandomize,'value',2) % fixed sequence rmeddis@36: set(handles.editstimulusDelay,'string','0.01') % no stimulus delay rmeddis@36: stimulusParameters.includeCue=0; % no cue for MAP rmeddis@36: end rmeddis@36: rmeddis@36: % find tone type rmeddis@36: option=get(handles.popupmenuTargetType,'value'); rmeddis@36: strings=get(handles.popupmenuTargetType,'string'); rmeddis@36: stimulusParameters.targetType=strings{option}; rmeddis@36: rmeddis@36: % find masker type rmeddis@36: option=get(handles.popupmenuMaskerType,'value'); rmeddis@36: strings=get(handles.popupmenuMaskerType,'string'); rmeddis@36: stimulusParameters.maskerType=strings{option}; rmeddis@36: rmeddis@36: % find background type and level rmeddis@36: option=get(handles.popupmenuBackgroundType,'value'); rmeddis@36: strings=get(handles.popupmenuBackgroundType,'string'); rmeddis@36: stimulusParameters.backgroundTypeValue=option; rmeddis@36: stimulusParameters.backgroundLevel=... rmeddis@36: str2num(get(handles.editBackgroundLevel,'string')); rmeddis@36: stimulusParameters.backgroundType=strings{option}; rmeddis@36: rmeddis@36: % Read all stimulus parameter boxes rmeddis@36: for i=1:length(variableNames) rmeddis@36: cmd=['stimulusParameters.' variableNames{i} ... rmeddis@36: '= str2num(get(handles.edit' variableNames{i} ',''string'' ));']; rmeddis@36: eval(cmd); rmeddis@36: end rmeddis@36: % for multiple levels rmeddis@36: stimulusParameters.targetLevels=stimulusParameters.targetLevel; rmeddis@36: rmeddis@36: % check that all required values are in the edit boxes rmeddis@36: for i=1:length(variableNames)-3 % do not include 'level limits' rmeddis@36: eval([ 'variableValues=stimulusParameters.' variableNames{i} ';']) rmeddis@36: if isempty(variableValues), errorMsg=[ variableNames{i} ... rmeddis@36: ' is an empty box']; return, end rmeddis@36: end rmeddis@36: rmeddis@36: chosenOption=get(handles.popupmenuVaryParameter1,'value'); rmeddis@38: betweenRuns.variableName1=betweenRunsVariables{chosenOption}; rmeddis@36: eval(['betweenRuns.variableList1 = stimulusParameters.' ... rmeddis@36: betweenRuns.variableName1 ';']); rmeddis@36: rmeddis@36: chosenOption=get(handles.popupmenuVaryParameter2,'value'); rmeddis@36: betweenRuns.variableName2=variableNames{chosenOption}; rmeddis@36: eval(['betweenRuns.variableList2 = stimulusParameters.' ... rmeddis@36: betweenRuns.variableName2 ';']); rmeddis@36: rmeddis@36: % Check that variable parameters 1 & 2 have different names rmeddis@36: if strcmp(betweenRuns.variableName1,betweenRuns.variableName2) ... rmeddis@36: && ~strcmp(betweenRuns.variableName1,'none') rmeddis@36: errorMsg='variable parameters have the same name'; rmeddis@36: return rmeddis@36: end rmeddis@36: rmeddis@36: % calibration rmeddis@36: % this is used to *reduce* the output signal from what it otherwise rmeddis@36: % would be rmeddis@36: % signal values are between 1 - 2^23 rmeddis@36: % these are interpreted as microPascals between -29 dB and 128 dB SPL rmeddis@36: % calibrationdB adjusts these values to compensate for equipment rmeddis@36: % characteristics rmeddis@36: % this will change the range. e.g. a 7 dB calibration will yield rmeddis@36: % a range of -36 to 121 dB SPL rmeddis@36: % Calibration is not used when modelling. Values are treated as dB SPL rmeddis@36: stimulusParameters.calibrationdB=... rmeddis@36: str2num(get(handles.editcalibrationdB,'string')); rmeddis@36: rmeddis@36: % check on cue rmeddis@36: cueSetUp(handles) rmeddis@36: rmeddis@36: stimulusParameters.WRVinitialStep=stimulusParameters.WRVsteps(1); rmeddis@36: stimulusParameters.WRVsmallStep=stimulusParameters.WRVsteps(2); rmeddis@36: rmeddis@36: % jitter start value set after reading in new parameters rmeddis@36: switch experiment.paradigm rmeddis@36: case 'discomfort' rmeddis@36: stimulusParameters.jitterStartdB=0; rmeddis@36: otherwise rmeddis@36: stimulusParameters.jitterStartdB=abs(stimulusParameters.WRVsteps(1)); rmeddis@36: end rmeddis@36: rmeddis@36: rmeddis@36: % stats model mean and slope rmeddis@36: statsModelParameters= str2num(get(handles.editStatsModel,'string')); rmeddis@36: switch experiment.ear rmeddis@36: case {'statsModelLogistic'} rmeddis@36: statsModel.logisticMean=statsModelParameters(1) ; rmeddis@36: statsModel.logisticSlope=statsModelParameters(2); rmeddis@36: statsModel.rareEvenGain=NaN ; rmeddis@36: statsModel.rareEventVmin=NaN; rmeddis@36: case 'statsModelRareEvent' rmeddis@36: statsModel.logisticMean=NaN ; rmeddis@36: statsModel.logisticSlope=NaN; rmeddis@36: statsModel.rareEvenGain=statsModelParameters(2) ; rmeddis@36: statsModel.rareEventVmin=statsModelParameters(1); rmeddis@36: end rmeddis@36: rmeddis@36: % MAP plotting rmeddis@36: experiment.MAPplot=str2num(get(handles.editMAPplot,'string')); rmeddis@36: % if ~isequal(experiment.MAPplot, 0), rmeddis@36: % % any other character will do it rmeddis@36: % experiment.MAPplot=1; rmeddis@36: % end rmeddis@36: rmeddis@36: % save data rmeddis@36: experiment.saveData=str2num(get(handles.editSaveData,'string')); rmeddis@36: if ~isequal(experiment.saveData, 0), rmeddis@36: % any other character will do it rmeddis@36: experiment.saveData=1; rmeddis@36: end rmeddis@36: rmeddis@36: % print tracks rmeddis@36: experiment.printTracks=str2num(get(handles.editPrintTracks,'string')); rmeddis@36: if ~isequal(experiment.printTracks, 0), rmeddis@36: % any other character will do it rmeddis@36: experiment.printTracks=1; rmeddis@36: end rmeddis@36: rmeddis@36: % catch trial rate rmeddis@36: % (1)= start rate, (2)= base rate, (3)= time constant (trials) rmeddis@36: stimulusParameters.catchTrialRates=... rmeddis@36: str2num(get(handles.editCatchTrialRate,'string')); rmeddis@36: if stimulusParameters.catchTrialRates(1) ... rmeddis@36: < stimulusParameters.catchTrialRates(2) rmeddis@36: errorMsg=... rmeddis@36: 'catch trial base rates must be less than catch trial start rate'; rmeddis@36: return, rmeddis@36: end rmeddis@38: % force the decay rate for catchTrialRate rmeddis@38: % to avoid having to explain it to the user rmeddis@38: stimulusParameters.catchTrialRates(3)=2; rmeddis@36: rmeddis@36: % sample rate rmeddis@36: % The sample rate is set in the paradigm file. rmeddis@36: % Normally this is set in the startUp paradigm file and then left rmeddis@36: % When the model is used, the multiThreshold sample rate rmeddis@36: % overrules anything in the model rmeddis@36: stimulusParameters.sampleRate=... rmeddis@36: str2num(get(handles.textsampleRate,'string')); rmeddis@36: rmeddis@36: % music level rmeddis@36: stimulusParameters.musicLeveldB=... rmeddis@36: str2num(get(handles.editMusicLevel,'string')); rmeddis@36: rmeddis@36: % set message box font size rmeddis@36: experiment.msgFontSize=str2num(get(handles.editMsgFont,'string')); rmeddis@36: experiment.subjGUIfontSize=str2num(get(handles.editSubjectFont,'string')); rmeddis@36: rmeddis@36: % stop criteria rmeddis@36: experiment.singleIntervalMaxTrials=... rmeddis@36: str2num(get(handles.editstopCriteriaBox,'string')); rmeddis@36: experiment.maxTrials=experiment.singleIntervalMaxTrials(1); rmeddis@36: rmeddis@36: % set up 2IFC is required (? better in atrhesholdAssessmentMethod) rmeddis@36: switch experiment.threshEstMethod rmeddis@36: case {'2I2AFC++', '2A2AIFC+++'} rmeddis@36: experiment.peaksUsed=experiment.singleIntervalMaxTrials(2); rmeddis@36: experiment.PeakTroughCriterionSD=... rmeddis@36: experiment.singleIntervalMaxTrials(3); rmeddis@36: experiment.trialsToBeUsed= 5; rmeddis@36: LevittControl.maxTrials=experiment.singleIntervalMaxTrials(1); rmeddis@36: % start value for step until reduced rmeddis@36: LevittControl.startLevelStep= stimulusParameters.WRVsteps(1); rmeddis@36: % reduced step size rmeddis@36: LevittControl.steadyLevittStep= stimulusParameters.WRVsteps(2); rmeddis@36: LevittControl.TurnsToSmallSteps= 2; rmeddis@36: LevittControl.useLastNturns= 2*experiment.peaksUsed; rmeddis@36: LevittControl.minReversals= ... rmeddis@36: LevittControl.TurnsToSmallSteps+2*experiment.peaksUsed; rmeddis@36: LevittControl.targetsdPT = experiment.PeakTroughCriterionSD; rmeddis@36: LevittControl.maxLevittValue= stimulusParameters.WRVlimits(2); rmeddis@36: Levitt2; rmeddis@36: end rmeddis@36: rmeddis@36: % What kind of randomisation is required? rmeddis@36: idx=get(handles.popupmenuRandomize,'value'); rmeddis@36: s=get(handles.popupmenuRandomize,'string'); rmeddis@36: betweenRuns.randomizeSequence=s{idx}; rmeddis@36: rmeddis@36: % Make small adjustments to variable values rmeddis@36: % to keep values unique against later sorting rmeddis@36: x=betweenRuns.variableList1; rmeddis@36: [y idx]= sort(x); rmeddis@36: for i=1:length(y)-1, if y(i+1)==y(i); y(i+1)=y(i)*1.001; end, end rmeddis@36: x(idx)=y; rmeddis@36: betweenRuns.variableList1=x; rmeddis@36: rmeddis@36: x=betweenRuns.variableList2; rmeddis@36: [y idx]= sort(x); rmeddis@36: for i=1:length(y)-1, if y(i+1)==y(i); y(i+1)=y(i)*1.001; end, end rmeddis@36: x(idx)=y; rmeddis@36: betweenRuns.variableList2=x; rmeddis@36: rmeddis@36: % Checks: after reading and setting parameters ------------------------------------------ rmeddis@36: % check for finger trouble (more checks possible rmeddis@36: if stimulusParameters.maskerDuration>10 rmeddis@36: errorMsg='maskerDuration is too long'; return, end rmeddis@36: if stimulusParameters.gapDuration>10 rmeddis@36: errorMsg='gapDuration is too long'; return, end rmeddis@36: if stimulusParameters.targetDuration>10 rmeddis@36: errorMsg='targetDuration is too long'; return, end rmeddis@36: rmeddis@36: % rare event slope check rmeddis@36: if experiment.psyFunSlope<0 ... rmeddis@36: && strcmp(experiment.functionEstMethod,'rareEvent') rmeddis@36: errorMsg='cannot use rareEvent option for negative psychometr slopes'; rmeddis@36: return rmeddis@36: end rmeddis@36: rmeddis@36: % check ramps rmeddis@36: if stimulusParameters.rampDuration*2> stimulusParameters.targetDuration rmeddis@36: errorMsg=' ramp duration is too long for the target'; rmeddis@36: return rmeddis@36: end rmeddis@36: rmeddis@36: if max(stimulusParameters.maskerDuration)>0 ... rmeddis@36: && max(stimulusParameters.rampDuration... rmeddis@36: *2> stimulusParameters.maskerDuration) rmeddis@36: errorMsg=' ramp duration is too long for the masker'; rmeddis@36: return rmeddis@36: end rmeddis@36: rmeddis@36: % Check WRVstartValues for length and compatibility with randomization rmeddis@36: % only one start value supplied so all start values are the same rmeddis@36: if length(stimulusParameters.WRVstartValues)==1 rmeddis@36: stimulusParameters.WRVstartValues= ... rmeddis@36: repmat(stimulusParameters.WRVstartValues, 1, ... rmeddis@36: length(betweenRuns.variableList1)... rmeddis@36: *length(betweenRuns.variableList2)); rmeddis@36: elseif ~isequal(length(stimulusParameters.WRVstartValues), ... rmeddis@36: length(betweenRuns.variableList1)... rmeddis@36: *length(betweenRuns.variableList2)) rmeddis@36: % otherwise we need one value for each combination of var1/ var2 rmeddis@36: errorMsg='WRVstartValues not the same length as number of runs'; rmeddis@36: return rmeddis@36: elseif strcmp(betweenRuns.randomizeSequence, 'randomize within blocks')... rmeddis@36: && length(stimulusParameters.WRVstartValues)>1 rmeddis@36: errorMsg='multiple WRVstartValues inappropriate'; rmeddis@36: return rmeddis@36: end rmeddis@36: rmeddis@36: % set the target level in advance for every wnticipated run rmeddis@36: switch experiment.paradigm rmeddis@36: case {'trainingIFMC', 'TMC','TMC_16ms', 'TMC - ELP', ... rmeddis@36: 'IFMC', 'IFMC_16ms'} rmeddis@36: % For TMC and IFMC multiple target levels can be set rmeddis@36: if length(stimulusParameters.targetLevel)==1 rmeddis@36: betweenRuns.targetLevels=... rmeddis@36: repmat(stimulusParameters.targetLevel, 1, ... rmeddis@36: length(betweenRuns.variableList1)... rmeddis@36: *length(betweenRuns.variableList2)); rmeddis@36: elseif length(stimulusParameters.targetLevel)==... rmeddis@36: length(betweenRuns.variableList2) rmeddis@36: % only one level specified, so use this throughout rmeddis@36: x=stimulusParameters.targetLevel; rmeddis@36: x=repmat(x,length(betweenRuns.variableList1),1); rmeddis@36: x=reshape(x,1,length(betweenRuns.variableList1)*length(betweenRuns.variableList2)); rmeddis@36: betweenRuns.targetLevels=x; rmeddis@36: else rmeddis@36: errorMsg='targetLevels not the same length as number of targetFrequencies'; rmeddis@36: end rmeddis@36: end rmeddis@36: rmeddis@36: switch experiment.paradigm rmeddis@36: case {'gapDetection', 'frequencyDiscrimination'} rmeddis@36: if ~isequal(stimulusParameters.targetDuration, ... rmeddis@36: stimulusParameters.maskerDuration) rmeddis@36: addToMsg(... rmeddis@36: 'Warning: masker and target duration not the same.',1,1) rmeddis@36: end rmeddis@36: if ~isequal(stimulusParameters.maskerLevel, ... rmeddis@36: stimulusParameters.targetLevel) rmeddis@36: addToMsg(['Warning: masker and target level different.'... rmeddis@36: 'They will be changed to be equal',1,1]); rmeddis@36: end rmeddis@36: end rmeddis@36: rmeddis@36: % identify model parameter changes if any rmeddis@36: paramChanges=get(handles.editparamChanges,'string'); rmeddis@36: if ~strcmp(paramChanges, ';'), paramChanges=[paramChanges ';']; end rmeddis@38: try rmeddis@36: eval(paramChanges); rmeddis@38: catch rmeddis@38: error('Problems with suggested parameter changes') rmeddis@38: end rmeddis@38: rmeddis@36: rmeddis@36: % -------------------------------------------- aSetSampleRate rmeddis@36: function aSetSampleRate(sampleRate, handles) rmeddis@36: global stimulusParameters rmeddis@36: stimulusParameters.sampleRate=sampleRate; rmeddis@36: set(handles.textsampleRate,'string',num2str(stimulusParameters.sampleRate)) rmeddis@36: rmeddis@36: % -------------------------------------------- popupmenuEar_Callback rmeddis@36: function popupmenuEar_Callback(hObject, eventdata, handles) rmeddis@36: global experiment rmeddis@36: option=get(handles.popupmenuEar,'value'); rmeddis@36: options=get(handles.popupmenuEar,'string'); % left/right/model rmeddis@36: experiment.ear=options{option}; rmeddis@36: set(handles.editparamChanges,'visible','off') rmeddis@36: switch experiment.ear rmeddis@36: case 'statsModelLogistic' rmeddis@36: set(handles.editStatsModel,'string', '15, 0.5') rmeddis@36: case 'statsModelRareEvent' rmeddis@36: set(handles.editStatsModel,'string', '20 1') rmeddis@36: case {'MAPmodelListen', 'MAPmodelMultiCh', 'MAPmodelSingleCh'} rmeddis@36: set(handles.editparamChanges,'visible','on') rmeddis@36: end rmeddis@36: earSetUp(handles) rmeddis@36: rmeddis@36: % -------------------------------------------- earSetUp rmeddis@36: function earSetUp(handles) rmeddis@36: global experiment stimulusParameters rmeddis@36: % option=get(handles.popupmenuEar,'value'); rmeddis@36: % options=get(handles.popupmenuEar,'string'); % left/right/model rmeddis@36: % experiment.ear=options{option}; rmeddis@36: rmeddis@36: switch experiment.ear rmeddis@36: case {'statsModelLogistic'} rmeddis@36: statsModel.logisticSlope=0.5; rmeddis@36: statsModel.logisticMean=15; rmeddis@36: set(handles.editStatsModel,'string', ... rmeddis@36: num2str([statsModel.logisticMean statsModel.logisticSlope])) rmeddis@36: set(handles.textStatsModel,... rmeddis@36: 'string', {'statsModel',' logistic threshold\ slope'}) rmeddis@36: case 'statsModelRareEvent' rmeddis@36: set(handles.textStatsModel,'string', ... rmeddis@36: {'statsModel',' rareEvent Vmin\ gain'}) rmeddis@36: end rmeddis@36: rmeddis@36: switch experiment.ear rmeddis@36: case {'statsModelLogistic', 'statsModelRareEvent'} rmeddis@36: set(handles.editStatsModel, 'visible', 'off') rmeddis@36: set(handles.textStatsModel, 'visible', 'off') rmeddis@36: rmeddis@36: % default psychometric bin size and logistic slopes rmeddis@36: set(handles.popupmenuRandomize,'value',2) % fixed sequence rmeddis@36: set(handles.editName,'string', 'statsModel') rmeddis@36: % experiment.headphonesUsed=0; rmeddis@36: rmeddis@36: case {'MAPmodelListen', 'MAPmodelMultiCh', 'MAPmodelSingleCh'} rmeddis@36: stimulusParameters.includeCue=0; % no cue rmeddis@36: set(handles.popupmenuCueNoCue,'value', 2) rmeddis@36: rmeddis@38: set(handles.editCatchTrialRate,'string','0 0');%no catch trials rmeddis@36: set(handles.editName,'string', 'Normal') % force name rmeddis@36: experiment.name=get(handles.editName,'string'); % read name back rmeddis@36: set(handles.editcalibrationdB,'string','0') rmeddis@36: rmeddis@36: set(handles.popupmenuRandomize,'value',2) % fixed sequence rmeddis@36: set(handles.editstimulusDelay,'string','0') rmeddis@36: rmeddis@36: set(handles.editSaveData,'string', '0') rmeddis@36: set(handles.editSubjectFont,'string', '10'); rmeddis@36: experiment.MacGThreshold=0; % num MacG spikes to exceed threshold rmeddis@38: otherwise rmeddis@38: set(handles.editCatchTrialRate,'string','0.2 0.1');%no catch trials rmeddis@38: rmeddis@36: end rmeddis@36: aResetPopupMenus(handles) rmeddis@36: rmeddis@36: % --------------------------------------------- popupmenuCueNoCue_Callback rmeddis@36: function popupmenuCueNoCue_Callback(hObject, eventdata, handles) rmeddis@36: cueSetUp(handles) rmeddis@36: rmeddis@36: % ------------------------------------------------------------- cueSetUp rmeddis@36: function cueSetUp(handles) rmeddis@38: global stimulusParameters experiment rmeddis@36: rmeddis@38: switch experiment.threshEstMethod rmeddis@38: case {'oneIntervalUpDown', 'MaxLikelihood'} rmeddis@38: chosenOption=get(handles.popupmenuCueNoCue,'value'); rmeddis@38: if chosenOption==1 rmeddis@38: stimulusParameters.includeCue=1; rmeddis@38: set(handles.editcueTestDifference,'visible', 'on') rmeddis@38: set(handles.textcueTestDifference,'visible', 'on') rmeddis@38: stimulusParameters.subjectText=stimulusParameters.instructions{2}; rmeddis@38: else rmeddis@38: stimulusParameters.includeCue=0; rmeddis@38: set(handles.editcueTestDifference,'visible', 'off') rmeddis@38: set(handles.textcueTestDifference,'visible', 'off') rmeddis@38: stimulusParameters.subjectText= stimulusParameters.instructions{1}; rmeddis@38: end rmeddis@36: end rmeddis@36: rmeddis@36: % -------------------------------------------- popupmenuThreshEst_Callback rmeddis@36: function popupmenuThreshEst_Callback(hObject, eventdata, handles) rmeddis@36: aThresholdAssessmentMethod(handles); rmeddis@36: rmeddis@36: % --------------------------------------------- aThresholdAssessmentMethod rmeddis@36: function aThresholdAssessmentMethod(handles) rmeddis@36: % identify the threshold assessment method rmeddis@36: % and set various parameters on the GUI appropriately rmeddis@36: global stimulusParameters experiment threshEstNames LevittControl rmeddis@36: rmeddis@36: chosenOption=get(handles.popupmenuThreshEst,'value'); rmeddis@36: experiment.threshEstMethod=threshEstNames{chosenOption}; rmeddis@36: set(handles.editCatchTrialRate, 'visible', 'on') rmeddis@36: set(handles.textCatchTrials, 'visible', 'on') rmeddis@36: rmeddis@36: % establish appropriate stop criterion and post on GUI rmeddis@36: switch experiment.threshEstMethod rmeddis@36: case 'MaxLikelihood' rmeddis@36: experiment.functionEstMethod='logisticML'; rmeddis@36: stimulusParameters.WRVsteps=10*experiment.psyFunSlope; % ??? rmeddis@36: set(handles.textstopCriteria,'string', 'stop criteria \ maxTrials') rmeddis@36: experiment.singleIntervalMaxTrials=experiment.stopCriteriaSI; rmeddis@36: experiment.allowCatchTrials= 1; rmeddis@36: switch experiment.paradigm rmeddis@36: case 'training' rmeddis@36: experiment.possLogSlopes=0.5; rmeddis@36: end rmeddis@36: rmeddis@36: case 'oneIntervalUpDown' rmeddis@36: experiment.functionEstMethod='logisticLS'; rmeddis@36: set(handles.textstopCriteria,'string', 'stop criteria \ maxTrials') rmeddis@36: experiment.singleIntervalMaxTrials=experiment.stopCriteriaSI; rmeddis@36: switch experiment.paradigm rmeddis@36: case 'discomfort' rmeddis@36: experiment.allowCatchTrials= 0; rmeddis@36: otherwise rmeddis@36: experiment.allowCatchTrials= 1; rmeddis@36: end rmeddis@36: rmeddis@36: case {'2I2AFC++', '2I2AFC+++'} rmeddis@36: LevittControl.rule='++'; % e.g. '++' or '+++' rmeddis@36: experiment.singleIntervalMaxTrials=experiment.stopCriteria2IFC; rmeddis@36: experiment.functionEstMethod='peaksAndTroughs'; rmeddis@36: LevittControl.maxTrials=experiment.singleIntervalMaxTrials(1); rmeddis@36: set(handles.editWRVsteps,'string', ... rmeddis@36: num2str(stimulusParameters.WRVsteps)) rmeddis@36: set(handles.textstopCriteria,'string', {'trials peaks sdCrit'}) rmeddis@36: experiment.allowCatchTrials= 0; rmeddis@36: end rmeddis@36: rmeddis@36: set(handles.textstopCriteria,'fontSize',8) rmeddis@36: set(handles.editstopCriteriaBox,'string',... rmeddis@36: num2str(experiment.singleIntervalMaxTrials)) rmeddis@36: rmeddis@36: % establish the appropriate instructions to the subject rmeddis@36: % NB responsibility for this is now transferred to the paradigm file rmeddis@36: switch experiment.threshEstMethod rmeddis@36: % only one value required for level change rmeddis@36: case {'2I2AFC++', '2A2AIFC+++'} rmeddis@36: stimulusParameters.subjectText=... rmeddis@36: 'did the tone occur in window 1 or 2?'; rmeddis@36: case {'MaxLikelihood', 'oneIntervalUpDown'}; rmeddis@36: switch stimulusParameters.includeCue rmeddis@36: case 0 rmeddis@36: stimulusParameters.subjectText=... rmeddis@36: stimulusParameters.instructions{1}; rmeddis@36: case 1 rmeddis@36: stimulusParameters.subjectText= ... rmeddis@36: stimulusParameters.instructions{2}; rmeddis@36: end rmeddis@36: end rmeddis@36: stimulusParameters.messageString={'training'}; rmeddis@36: rmeddis@36: aResetPopupMenus(handles) rmeddis@36: % -------------------------------------------------- function orderGlobals rmeddis@36: function orderGlobals rmeddis@36: global stimulusParameters experiment betweenRuns withinRuns rmeddis@36: rmeddis@36: stimulusParameters=[]; rmeddis@36: stimulusParameters.sampleRate= []; rmeddis@36: stimulusParameters.targetType= ''; rmeddis@36: stimulusParameters.targetFrequency= []; rmeddis@36: stimulusParameters.targetDuration= []; rmeddis@36: stimulusParameters.targetLevel= []; rmeddis@36: stimulusParameters.gapDuration= []; rmeddis@36: stimulusParameters.maskerType= ''; rmeddis@36: stimulusParameters.maskerRelativeFrequency= []; rmeddis@36: stimulusParameters.maskerDuration= []; rmeddis@36: stimulusParameters.maskerLevel= []; rmeddis@36: stimulusParameters.backgroundType= ''; rmeddis@36: stimulusParameters.backgroundTypeValue= []; rmeddis@36: stimulusParameters.backgroundLevel= []; rmeddis@36: stimulusParameters.includeCue= []; rmeddis@36: experiment.clickToStimulusPause=[]; rmeddis@36: stimulusParameters.stimulusDelay= []; rmeddis@36: stimulusParameters.rampDuration= []; rmeddis@36: stimulusParameters.absThresholds= []; rmeddis@36: stimulusParameters.numOHIOtones= []; rmeddis@36: rmeddis@36: stimulusParameters.WRVname= ''; rmeddis@36: stimulusParameters.WRVstartValues= []; rmeddis@36: stimulusParameters.WRVsteps= []; rmeddis@36: stimulusParameters.WRVlimits= []; rmeddis@36: stimulusParameters.WRVinitialStep= []; rmeddis@36: stimulusParameters.WRVsmallStep= []; rmeddis@36: experiment.singleIntervalMaxTrials= []; rmeddis@36: stimulusParameters.calibrationdB= []; rmeddis@36: rmeddis@36: stimulusParameters.catchTrialRates= []; rmeddis@36: stimulusParameters.catchTrialBaseRate= []; rmeddis@36: stimulusParameters.catchTrialRate= []; rmeddis@36: stimulusParameters.catchTrialTimeConstant= []; rmeddis@36: rmeddis@36: stimulusParameters.dt= []; rmeddis@36: rmeddis@36: stimulusParameters.jitterStartdB= []; rmeddis@36: stimulusParameters.restoreCalibration= []; rmeddis@36: stimulusParameters.messageString= []; rmeddis@36: stimulusParameters.cueTestDifference= []; rmeddis@36: stimulusParameters.subjectText= ''; rmeddis@36: stimulusParameters.testTargetBegins= []; rmeddis@36: stimulusParameters.testTargetEnds= []; rmeddis@36: stimulusParameters.musicLeveldB= []; rmeddis@36: rmeddis@36: stimulusParameters.subjectSampleRate=[]; rmeddis@36: stimulusParameters.MAPSampleRate=[]; rmeddis@36: rmeddis@36: experiment=[]; rmeddis@36: experiment.name= ''; rmeddis@36: experiment.date= ''; rmeddis@36: experiment.paradigm= ''; rmeddis@36: experiment.ear= ''; rmeddis@36: experiment.headphonesUsed=[]; rmeddis@36: experiment.singleShot= []; rmeddis@36: experiment.randomize= ''; rmeddis@36: experiment.maxTrials= []; rmeddis@36: experiment.MacGThreshold= []; rmeddis@36: experiment.resetCriterion= []; rmeddis@36: experiment.runResetCriterion= []; rmeddis@36: rmeddis@36: experiment.comparisonData= []; rmeddis@36: experiment.absThresholds= []; rmeddis@36: experiment.threshEstMethod= ''; rmeddis@36: experiment.functionEstMethod= ''; rmeddis@36: experiment.psyBinWidth= []; rmeddis@36: experiment.maxLogisticK=[]; rmeddis@36: experiment.numPossLogisticK=[]; rmeddis@36: experiment.possLogSlopes= []; rmeddis@36: experiment.meanSearchStep= []; rmeddis@36: experiment.psyFunSlope= []; rmeddis@36: experiment.predictionLevels=[]; rmeddis@36: rmeddis@36: experiment.buttonBoxType= ''; rmeddis@36: experiment.buttonBoxStatus= ''; rmeddis@36: experiment.status= ''; rmeddis@36: experiment.stop= []; rmeddis@36: experiment.pleaseRepeat= []; rmeddis@36: experiment.justInitialized=[]; rmeddis@36: rmeddis@36: experiment.MAPplot= []; rmeddis@36: experiment.saveData= []; rmeddis@36: experiment.printTracks= []; rmeddis@36: experiment.msgFontSize= []; rmeddis@36: experiment.subjGUIfontSize= []; rmeddis@36: rmeddis@36: experiment.timeAtStart= ''; rmeddis@36: experiment.minElapsed= []; rmeddis@36: rmeddis@36: betweenRuns=[]; rmeddis@36: betweenRuns.variableName1= ''; rmeddis@36: betweenRuns.variableList1= []; rmeddis@36: betweenRuns.variableName2= ''; rmeddis@36: betweenRuns.variableList2= []; rmeddis@36: betweenRuns.var1Sequence= []; rmeddis@36: betweenRuns.var2Sequence= []; rmeddis@36: betweenRuns.randomizeSequence=[]; rmeddis@36: betweenRuns.timeNow= []; rmeddis@36: betweenRuns.runNumber= []; rmeddis@36: betweenRuns.thresholds= []; rmeddis@36: betweenRuns.forceThresholds= []; rmeddis@36: betweenRuns.observationCount= []; rmeddis@36: betweenRuns.timesOfFirstReversals= []; rmeddis@36: betweenRuns.bestThresholdTracks=''; rmeddis@36: betweenRuns.levelTracks=''; rmeddis@36: betweenRuns.responseTracks=''; rmeddis@36: betweenRuns.slopeKTracks= []; rmeddis@36: betweenRuns.gainTracks= []; rmeddis@36: betweenRuns.VminTracks= []; rmeddis@36: betweenRuns.bestGain= []; rmeddis@36: betweenRuns.bestVMin= []; rmeddis@36: betweenRuns.bestPaMin= []; rmeddis@36: betweenRuns.bestLogisticM= []; rmeddis@36: betweenRuns.bestLogisticK= []; rmeddis@36: betweenRuns.psychometicFunction=''; rmeddis@36: betweenRuns.catchTrials= []; rmeddis@36: betweenRuns.caughtOut= []; rmeddis@36: rmeddis@36: withinRuns=[]; rmeddis@36: withinRuns.trialNumber=[]; rmeddis@36: withinRuns.nowInPhase2=[]; rmeddis@36: withinRuns.beginningOfPhase2=[]; rmeddis@36: withinRuns.variableValue=[]; rmeddis@36: withinRuns.direction=''; rmeddis@36: withinRuns.peaks=[]; rmeddis@36: withinRuns.troughs= []; rmeddis@36: withinRuns.levelList= []; rmeddis@36: withinRuns.responseList= []; rmeddis@36: withinRuns.meanEstTrack= []; rmeddis@36: withinRuns.meanLogisticEstTrack=[]; rmeddis@36: withinRuns.bestSlopeK= []; rmeddis@36: withinRuns.bestGain= []; rmeddis@36: withinRuns.bestVMin= []; rmeddis@36: withinRuns.forceThreshold=[]; rmeddis@36: withinRuns.catchTrial= []; rmeddis@36: withinRuns.caughtOut=[]; rmeddis@36: withinRuns.catchTrialCount=[]; rmeddis@36: withinRuns.wrongButton= []; rmeddis@36: withinRuns.babblePlaying=[]; rmeddis@36: rmeddis@36: % --- Executes on selection change in popupmenuBackgroundType. rmeddis@36: function popupmenuBackgroundType_Callback(hObject, eventdata, handles) rmeddis@36: global backgroundTypes rmeddis@36: option=get(handles.popupmenuBackgroundType,'value'); rmeddis@36: selectedBackground=backgroundTypes{option}; rmeddis@36: stimulusParameters.backgroundType=selectedBackground; rmeddis@36: rmeddis@36: switch selectedBackground rmeddis@36: case 'none' rmeddis@36: set(handles.editBackgroundLevel,'visible','off') rmeddis@36: set(handles.textBGlevel,'visible','off') rmeddis@36: otherwise rmeddis@36: set(handles.editBackgroundLevel,'visible','on') rmeddis@36: set(handles.textBGlevel,'visible','on') rmeddis@36: end rmeddis@36: rmeddis@36: rmeddis@36: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% rmeddis@36: function pushbuttonStop_Callback(hObject, eventdata, handles) rmeddis@36: global experiment rmeddis@36: experiment.stop=1; rmeddis@36: disp('stop!') rmeddis@36: set(handles.pushbuttonStop, 'backgroundColor','r') rmeddis@36: pause(.1) rmeddis@36: drawnow rmeddis@36: rmeddis@36: function pushbuttonOME_Callback(hObject, eventdata, handles) rmeddis@36: global experiment paramChanges rmeddis@36: aReadAndCheckParameterBoxes(handles); rmeddis@36: testOME(experiment.name, paramChanges); rmeddis@36: rmeddis@36: function pushbuttonBM_Callback(hObject, eventdata, handles) rmeddis@36: global stimulusParameters experiment paramChanges rmeddis@36: aReadAndCheckParameterBoxes(handles); rmeddis@36: relativeFrequencies=[0.25 .5 .75 1 1.25 1.5 2]; rmeddis@36: relativeFrequencies=[ 1 ]; rmeddis@36: AN_spikesOrProbability='probability'; rmeddis@36: AN_spikesOrProbability='spikes'; rmeddis@36: testBM(stimulusParameters.targetFrequency, ... rmeddis@36: experiment.name,relativeFrequencies, AN_spikesOrProbability, ... rmeddis@36: paramChanges); rmeddis@36: rmeddis@36: function pushbuttonAN_Callback(hObject, eventdata, handles) rmeddis@36: global stimulusParameters experiment paramChanges rmeddis@36: aReadAndCheckParameterBoxes(handles); rmeddis@36: % now carry out tests rmeddis@36: showPSTHs=0; rmeddis@36: targetFrequency=stimulusParameters.targetFrequency(1); rmeddis@36: BFlist=targetFrequency; rmeddis@36: testLevels=-10:10:90; rmeddis@36: % testLevels=80:10:90; rmeddis@36: testAN(targetFrequency,BFlist,testLevels,experiment.name, paramChanges); rmeddis@36: rmeddis@36: function pushbuttonPhLk_Callback(hObject, eventdata, handles) rmeddis@36: global experiment rmeddis@36: aReadAndCheckParameterBoxes(handles); rmeddis@36: testPhaseLocking(experiment.name) rmeddis@36: rmeddis@36: function pushbuttonSYN_Callback(hObject, eventdata, handles) rmeddis@36: global stimulusParameters experiment paramChanges rmeddis@36: aReadAndCheckParameterBoxes(handles); rmeddis@36: % now carry out tests rmeddis@36: showPSTHs=0; rmeddis@36: targetFrequency=stimulusParameters.targetFrequency(1); rmeddis@36: BFlist=targetFrequency; rmeddis@36: testSynapse(BFlist,experiment.name, paramChanges) rmeddis@36: rmeddis@36: function pushbuttonFM_Callback(hObject, eventdata, handles) rmeddis@36: global stimulusParameters experiment paramChanges rmeddis@36: aReadAndCheckParameterBoxes(handles); rmeddis@36: showPSTHs=1; rmeddis@36: testFM(stimulusParameters.targetFrequency(1),experiment.name, ... rmeddis@36: 'spikes', paramChanges) rmeddis@36: rmeddis@36: function popupmenuPhase_Callback(hObject, eventdata, handles) rmeddis@36: global stimulusParameters rmeddis@36: rmeddis@36: optionNo=get(handles.popupmenuPhase,'value'); rmeddis@36: options=get(handles.popupmenuPhase,'string'); rmeddis@36: phase=options{optionNo}; rmeddis@36: stimulusParameters.maskerPhase=phase; rmeddis@36: stimulusParameters.targetPhase=phase; rmeddis@36: rmeddis@36: function pushbuttonParams_Callback(hObject, eventdata, handles) rmeddis@36: global experiment stimulusParameters rmeddis@36: aReadAndCheckParameterBoxes(handles); rmeddis@36: showParams=1; BFlist=-1; rmeddis@36: paramChanges=get(handles.editparamChanges,'string'); rmeddis@36: eval(paramChanges); rmeddis@36: rmeddis@36: paramFunctionName=['method=MAPparams' experiment.name ... rmeddis@36: '(BFlist, stimulusParameters.sampleRate, showParams,paramChanges);']; rmeddis@36: eval(paramFunctionName) % go and fetch the parameters requesting parameter printout rmeddis@36: rmeddis@36: rmeddis@36: % --- Executes on button press in pushbuttonRP. rmeddis@36: function pushbuttonRP_Callback(hObject, eventdata, handles) rmeddis@36: global experiment stimulusParameters paramChanges rmeddis@36: aReadAndCheckParameterBoxes(handles); rmeddis@36: % now carry out test rmeddis@36: testRP(stimulusParameters.targetFrequency,experiment.name, paramChanges) rmeddis@36: rmeddis@36: % function handles % ?? rmeddis@36: rmeddis@36: rmeddis@36: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% rmeddis@36: rmeddis@36: function editmaskerDuration_Callback(hObject, eventdata, handles) rmeddis@36: rmeddis@36: function editmaskerDuration_CreateFcn(hObject, eventdata, handles) rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','white'); rmeddis@36: end rmeddis@36: rmeddis@36: function editmaskerLevel_Callback(hObject, eventdata, handles) rmeddis@36: rmeddis@36: function editmaskerLevel_CreateFcn(hObject, eventdata, handles) rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','white'); rmeddis@36: end rmeddis@36: rmeddis@36: function editmaskerRelativeFrequency_Callback(hObject, eventdata, handles) rmeddis@36: rmeddis@36: function editmaskerRelativeFrequency_CreateFcn(hObject, eventdata, handles) rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','white'); rmeddis@36: end rmeddis@36: rmeddis@36: function editWRVstartValues_Callback(hObject, eventdata, handles) rmeddis@36: rmeddis@36: function editWRVstartValues_CreateFcn(hObject, eventdata, handles) rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','white'); rmeddis@36: end rmeddis@36: rmeddis@36: function editgapDuration_Callback(hObject, eventdata, handles) rmeddis@36: rmeddis@36: function editgapDuration_CreateFcn(hObject, eventdata, handles) rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','white'); rmeddis@36: end rmeddis@36: rmeddis@36: function edittargetDuration_Callback(hObject, eventdata, handles) rmeddis@36: rmeddis@36: function edittargetDuration_CreateFcn(hObject, eventdata, handles) rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','white'); rmeddis@36: end rmeddis@36: rmeddis@36: function edittargetLevel_Callback(hObject, eventdata, handles) rmeddis@36: rmeddis@36: function edittargetLevel_CreateFcn(hObject, eventdata, handles) rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','white'); rmeddis@36: end rmeddis@36: rmeddis@36: function editrampDuration_Callback(hObject, eventdata, handles) rmeddis@36: rmeddis@36: function editrampDuration_CreateFcn(hObject, eventdata, handles) rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','white'); rmeddis@36: end rmeddis@36: rmeddis@36: function editcueTestDifference_Callback(hObject, eventdata, handles) rmeddis@36: rmeddis@36: function editcueTestDifference_CreateFcn(hObject, eventdata, handles) rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','white'); rmeddis@36: end rmeddis@36: rmeddis@36: rmeddis@36: function editWRVsteps_Callback(hObject, eventdata, handles) rmeddis@36: rmeddis@36: function editWRVsteps_CreateFcn(hObject, eventdata, handles) rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','white'); rmeddis@36: end rmeddis@36: rmeddis@36: function editWRVlimits_Callback(hObject, eventdata, handles) rmeddis@36: rmeddis@36: function editWRVlimits_CreateFcn(hObject, eventdata, handles) rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','white'); rmeddis@36: end rmeddis@36: rmeddis@36: function edittargetFrequency_Callback(hObject, eventdata, handles) rmeddis@36: rmeddis@36: function edittargetFrequency_CreateFcn(hObject, eventdata, handles) rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','white'); rmeddis@36: end rmeddis@36: rmeddis@36: function editName_Callback(hObject, eventdata, handles) rmeddis@36: rmeddis@36: function editName_CreateFcn(hObject, eventdata, handles) rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','white'); rmeddis@36: end rmeddis@36: rmeddis@36: function editcalibrationdB_Callback(hObject, eventdata, handles) rmeddis@36: rmeddis@36: function editcalibrationdB_CreateFcn(hObject, eventdata, handles) rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','white'); rmeddis@36: end rmeddis@36: rmeddis@36: function editMAPplot_Callback(hObject, eventdata, handles) rmeddis@36: rmeddis@36: function editMAPplot_CreateFcn(hObject, eventdata, handles) rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','white'); rmeddis@36: end rmeddis@36: rmeddis@36: function editMsgFont_Callback(hObject, eventdata, handles) rmeddis@36: rmeddis@36: function editMsgFont_CreateFcn(hObject, eventdata, handles) rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','white'); rmeddis@36: end rmeddis@36: rmeddis@36: function editCatchTrialRate_Callback(hObject, eventdata, handles) rmeddis@36: rmeddis@36: function editCatchTrialRate_CreateFcn(hObject, eventdata, handles) rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','white'); rmeddis@36: end rmeddis@36: rmeddis@36: rmeddis@36: function editSaveData_Callback(hObject, eventdata, handles) rmeddis@36: rmeddis@36: function editSaveData_CreateFcn(hObject, eventdata, handles) rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','white'); rmeddis@36: end rmeddis@36: rmeddis@36: function editStatsModel_Callback(hObject, eventdata, handles) rmeddis@36: rmeddis@36: function editStatsModel_CreateFcn(hObject, eventdata, handles) rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','white'); rmeddis@36: end rmeddis@36: rmeddis@36: function editBackgroundLevel_Callback(hObject, eventdata, handles) rmeddis@36: rmeddis@36: function editBackgroundLevel_CreateFcn(hObject, eventdata, handles) rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','white'); rmeddis@36: end rmeddis@36: rmeddis@36: function editPrintTracks_Callback(hObject, eventdata, handles) rmeddis@36: rmeddis@36: function editPrintTracks_CreateFcn(hObject, eventdata, handles) rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','white'); rmeddis@36: end rmeddis@36: rmeddis@36: function editstopCriteriaBox_Callback(hObject, eventdata, handles) rmeddis@36: rmeddis@36: function editstopCriteriaBox_CreateFcn(hObject, eventdata, handles) rmeddis@36: rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','white'); rmeddis@36: end rmeddis@36: rmeddis@36: function editstimulusDelay_Callback(hObject, eventdata, handles) rmeddis@36: rmeddis@36: function editstimulusDelay_CreateFcn(hObject, eventdata, handles) rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','white'); rmeddis@36: end rmeddis@36: rmeddis@36: rmeddis@36: function popupmenuCueNoCue_CreateFcn(hObject, eventdata, handles) rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','white'); rmeddis@36: end rmeddis@36: rmeddis@36: function popupmenuEar_CreateFcn(hObject, eventdata, handles) rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','red'); rmeddis@36: end rmeddis@36: rmeddis@36: function popupmenuVaryParameter1_Callback(hObject, eventdata, handles) rmeddis@36: rmeddis@36: function popupmenuVaryParameter1_CreateFcn(hObject, eventdata, handles) rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','white'); rmeddis@36: end rmeddis@36: rmeddis@36: function popupmenuVaryParameter2_Callback(hObject, eventdata, handles) rmeddis@36: rmeddis@36: function popupmenuVaryParameter2_CreateFcn(hObject, eventdata, handles) rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','white'); rmeddis@36: end rmeddis@36: rmeddis@36: function popupmenuRandomize_Callback(hObject, eventdata, handles) rmeddis@36: rmeddis@36: function popupmenuRandomize_CreateFcn(hObject, eventdata, handles) rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','white'); rmeddis@36: end rmeddis@36: rmeddis@36: function popupmenuParadigm_CreateFcn(hObject, eventdata, handles) rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','white'); rmeddis@36: end rmeddis@36: rmeddis@36: rmeddis@36: function popupmenuMaskerType_CreateFcn(hObject, eventdata, handles) rmeddis@36: rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','white'); rmeddis@36: end rmeddis@36: rmeddis@36: rmeddis@36: function popupmenuThreshEst_CreateFcn(hObject, eventdata, handles) rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','white'); rmeddis@36: end rmeddis@36: rmeddis@36: function popupmenuBackgroundType_CreateFcn(hObject, eventdata, handles) rmeddis@36: rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','white'); rmeddis@36: end rmeddis@36: rmeddis@36: rmeddis@36: function popupmenuTargetType_CreateFcn(hObject, eventdata, handles) rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','white'); rmeddis@36: end rmeddis@36: rmeddis@36: function editSubjectFont_Callback(hObject, eventdata, handles) rmeddis@36: rmeddis@36: function editSubjectFont_CreateFcn(hObject, eventdata, handles) rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','white'); rmeddis@36: end rmeddis@36: rmeddis@36: function editMusicLevel_Callback(hObject, eventdata, handles) rmeddis@36: rmeddis@36: function editMusicLevel_CreateFcn(hObject, eventdata, handles) rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','white'); rmeddis@36: end rmeddis@36: rmeddis@36: function figure1_ButtonDownFcn(hObject, eventdata, handles) rmeddis@36: rmeddis@36: rmeddis@36: function edit33_Callback(hObject, eventdata, handles) rmeddis@36: rmeddis@36: function edit33_CreateFcn(hObject, eventdata, handles) rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','white'); rmeddis@36: end rmeddis@36: rmeddis@36: rmeddis@36: function popupmenuPhase_CreateFcn(hObject, eventdata, handles) rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','white'); rmeddis@36: end rmeddis@36: rmeddis@36: function editsegSize_Callback(hObject, eventdata, handles) rmeddis@36: rmeddis@36: function editsegSize_CreateFcn(hObject, eventdata, handles) rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','white'); rmeddis@36: end rmeddis@36: rmeddis@36: rmeddis@36: function editnumOHIOtones_Callback(hObject, eventdata, handles) rmeddis@36: % hObject handle to editnumOHIOtones (see GCBO) rmeddis@36: % eventdata reserved - to be defined in a future version of MATLAB rmeddis@36: % handles structure with handles and user data (see GUIDATA) rmeddis@36: rmeddis@36: % Hints: get(hObject,'String') returns contents of editnumOHIOtones as text rmeddis@36: % str2double(get(hObject,'String')) returns contents of editnumOHIOtones as a double rmeddis@36: rmeddis@36: rmeddis@36: % --- Executes during object creation, after setting all properties. rmeddis@36: function editnumOHIOtones_CreateFcn(hObject, eventdata, handles) rmeddis@36: % hObject handle to editnumOHIOtones (see GCBO) rmeddis@36: % eventdata reserved - to be defined in a future version of MATLAB rmeddis@36: % handles empty - handles not created until after all CreateFcns called rmeddis@36: rmeddis@36: % Hint: edit controls usually have a white background on Windows. rmeddis@36: % See ISPC and COMPUTER. rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','white'); rmeddis@36: end rmeddis@36: rmeddis@36: rmeddis@36: rmeddis@36: rmeddis@36: rmeddis@36: function editparamChanges_Callback(hObject, eventdata, handles) rmeddis@36: rmeddis@36: rmeddis@36: function editparamChanges_CreateFcn(hObject, eventdata, handles) rmeddis@36: rmeddis@36: % Hint: edit controls usually have a white background on Windows. rmeddis@36: % See ISPC and COMPUTER. rmeddis@36: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@36: set(hObject,'BackgroundColor','white'); rmeddis@36: end rmeddis@36: rmeddis@36: rmeddis@38: rmeddis@38: rmeddis@38: function pushbuttonSave_Callback(hObject, eventdata, handles) rmeddis@38: global experiment rmeddis@38: rmeddis@38: subjectName=experiment.name; rmeddis@38: if ~isdir(['savedData' filesep subjectName ]) rmeddis@38: mkdir(['savedData' filesep subjectName ]) rmeddis@38: end rmeddis@38: rmeddis@38: % date and time and replace ':' with '_' rmeddis@38: date=datestr(now);idx=findstr(':',date);date(idx)='_'; rmeddis@38: fileName=[subjectName ' ' date '.mat']; rmeddis@38: movefile(['savedData' filesep 'mostRecentResults.mat'], ... rmeddis@38: ['savedData' filesep subjectName filesep fileName]) rmeddis@38: set(handles.pushbuttonSave,'visible','off') rmeddis@38: rmeddis@38: rmeddis@38: rmeddis@38: function editOHIOnTones_Callback(hObject, eventdata, handles) rmeddis@38: rmeddis@38: rmeddis@38: function editOHIOnTones_CreateFcn(hObject, eventdata, handles) rmeddis@38: rmeddis@38: % Hint: edit controls usually have a white background on Windows. rmeddis@38: % See ISPC and COMPUTER. rmeddis@38: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@38: set(hObject,'BackgroundColor','white'); rmeddis@38: end rmeddis@38: rmeddis@38: