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