rmeddis@28: function [modelResponse, MacGregorResponse]=MAPmodel( MAPplot, method) rmeddis@28: rmeddis@28: global experiment stimulusParameters audio withinRuns rmeddis@28: global outerMiddleEarParams DRNLParams AN_IHCsynapseParams rmeddis@28: rmeddis@28: savePath=path; rmeddis@28: addpath('..\MAP') rmeddis@28: modelResponse=[]; rmeddis@28: MacGregorResponse=[]; rmeddis@28: rmeddis@28: % mono only (column vector) rmeddis@28: audio=audio(:,1)'; rmeddis@28: rmeddis@28: % if stop button pressed earlier rmeddis@28: if experiment.stop, return, end rmeddis@28: rmeddis@28: % -------------------------------------------------------------- run Model rmeddis@28: MAPparamsName=experiment.name; rmeddis@28: showPlotsAndDetails=experiment.MAPplot; rmeddis@28: AN_spikesOrProbability='spikes'; rmeddis@28: rmeddis@28: % [response, method]=MAPsequenceSeg(audio, method, 1:8); rmeddis@28: global ICoutput ANdt rmeddis@28: MAP1_14(audio, 1/method.dt, method.nonlinCF,... rmeddis@28: MAPparamsName, AN_spikesOrProbability); rmeddis@28: rmeddis@28: if showPlotsAndDetails rmeddis@28: options.showModelParameters=0; rmeddis@28: options.showModelOutput=1; rmeddis@28: options.printFiringRates=1; rmeddis@28: options.showACF=0; rmeddis@28: options.showEfferent=1; rmeddis@28: UTIL_showMAP(options, paramChanges) rmeddis@28: end rmeddis@28: rmeddis@28: % No response, probably caused by hitting 'stop' button rmeddis@28: if isempty(ICoutput), return, end rmeddis@28: rmeddis@28: % MacGregor response is the sum total of all final stage spiking rmeddis@28: MacGregorResponse= sum(ICoutput,1); % use IC rmeddis@28: rmeddis@28: % ---------------------------------------------------------- end model run rmeddis@28: rmeddis@28: dt=ANdt; rmeddis@28: time=dt:dt:dt*length(MacGregorResponse); rmeddis@28: rmeddis@28: % group delay on unit response rmeddis@28: MacGonsetDelay= 0.004; rmeddis@28: MacGoffsetDelay= 0.022; rmeddis@28: rmeddis@28: % now find the response of the MacGregor model during the target presentation + group delay rmeddis@28: switch experiment.threshEstMethod rmeddis@28: case {'2I2AFC++', '2I2AFC+++'} rmeddis@28: idx= time>stimulusParameters.testTargetBegins+MacGonsetDelay ... rmeddis@28: & timestimulusParameters.testNonTargetBegins+MacGonsetDelay ... rmeddis@28: & time0 rmeddis@28: % hit rmeddis@28: nSpikesDuringTarget=experiment.MacGThreshold+1; rmeddis@28: elseif difference<0 rmeddis@28: % miss (wrong choice) rmeddis@28: nSpikesDuringTarget=experiment.MacGThreshold-1; rmeddis@28: else rmeddis@28: if rand>0.5 rmeddis@28: % hit (random choice) rmeddis@28: nSpikesDuringTarget=experiment.MacGThreshold+1; rmeddis@28: else rmeddis@28: % miss (random choice) rmeddis@28: nSpikesDuringTarget=experiment.MacGThreshold-1; rmeddis@28: end rmeddis@28: end rmeddis@28: disp(['level target dummy decision: ' ... rmeddis@28: num2str([withinRuns.variableValue nSpikesTrueWindow ... rmeddis@28: nSpikesFalseWindow nSpikesDuringTarget], '%4.0f') ] ) rmeddis@28: rmeddis@28: otherwise rmeddis@28: % idx=find(time>stimulusParameters.testTargetBegins+MacGonsetDelay ... rmeddis@28: % & timestimulusParameters.testTargetBegins +MacGonsetDelay... rmeddis@28: & timestimulusParameters.testTargetBegins-0.02 ... rmeddis@28: & time0.2 rmeddis@28: modelResponse=2; % gap detected rmeddis@28: else rmeddis@28: modelResponse=1; % gap not detected rmeddis@28: end rmeddis@28: [nSpikesDuringTarget maskerRate gapResponse modelResponse] rmeddis@28: figure(22), plot(timeX,earObject(idx)) rmeddis@28: otherwise rmeddis@28: if nSpikesDuringTarget>experiment.MacGThreshold rmeddis@28: modelResponse=2; % stimulus detected rmeddis@28: else rmeddis@28: modelResponse=1; % nothing heard (default) rmeddis@28: end rmeddis@28: end rmeddis@28: rmeddis@28: rmeddis@28: path(savePath)