view multithreshold 1.46/old files/MAPmodel.m @ 38:c2204b18f4a2 tip

End nov big change
author Ray Meddis <rmeddis@essex.ac.uk>
date Mon, 28 Nov 2011 13:34:28 +0000
parents b51bf546ca3f
children
line wrap: on
line source
function [modelResponse, MacGregorResponse]=MAPmodel( MAPplot, method)

global experiment stimulusParameters audio withinRuns
global outerMiddleEarParams DRNLParams AN_IHCsynapseParams

savePath=path;
addpath(['..' filesep 'MAP'], ['..' filesep 'utilities'])
modelResponse=[];
MacGregorResponse=[];

% mono only (column vector)
audio=audio(:,1)';

% if stop button pressed earlier
if experiment.stop, return, end

% -------------------------------------------------------------- run Model
MAPparamsName=experiment.name;
showPlotsAndDetails=experiment.MAPplot;
AN_spikesOrProbability='spikes';

% [response, method]=MAPsequenceSeg(audio, method, 1:8);
global ICoutput dtSpikes
    MAP1_14(audio, 1/method.dt, method.nonlinCF,...
        MAPparamsName, AN_spikesOrProbability);
    
if showPlotsAndDetails
    options.printModelParameters=0;
    options.showModelOutput=1;
    options.printFiringRates=1;
    options.showACF=0;
    options.showEfferent=0;
    UTIL_showMAP(options)
end

% No response,  probably caused by hitting 'stop' button
if isempty(ICoutput), return, end

% MacGregor response is the sum total of all final stage spiking
MacGregorResponse= sum(ICoutput,1);                 % use IC

% ---------------------------------------------------------- end model run

dt=dtSpikes;
time=dt:dt:dt*length(MacGregorResponse);

% group delay on unit response
MacGonsetDelay= 0.004;
MacGoffsetDelay= 0.022;

% now find the response of the MacGregor model during the target presentation + group delay
switch experiment.threshEstMethod
    case {'2I2AFC++', '2I2AFC+++'}
        idx= time>stimulusParameters.testTargetBegins+MacGonsetDelay ...
            & time<stimulusParameters.testTargetEnds+MacGoffsetDelay;
        nSpikesTrueWindow=sum(MacGregorResponse(:,idx));
        idx=find(time>stimulusParameters.testNonTargetBegins+MacGonsetDelay ...
            & time<stimulusParameters.testNonTargetEnds+MacGoffsetDelay);
        nSpikesFalseWindow=sum(MacGregorResponse(:,idx));
        % nSpikesDuringTarget is +ve when more spikes are found
        %   in the target window
        difference= nSpikesTrueWindow-nSpikesFalseWindow;

        if difference>0
            % hit
            nSpikesDuringTarget=experiment.MacGThreshold+1;
        elseif    difference<0
            % miss (wrong choice)
            nSpikesDuringTarget=experiment.MacGThreshold-1;
        else
            if rand>0.5
                % hit (random choice)
                nSpikesDuringTarget=experiment.MacGThreshold+1;
            else
                % miss (random choice)
                nSpikesDuringTarget=experiment.MacGThreshold-1;
            end
        end
        disp(['level target dummy decision: ' ...
            num2str([withinRuns.variableValue nSpikesTrueWindow ...
            nSpikesFalseWindow  nSpikesDuringTarget], '%4.0f') ] )

    otherwise
        % idx=find(time>stimulusParameters.testTargetBegins+MacGonsetDelay ...
        %         & time<stimulusParameters.testTargetEnds+MacGoffsetDelay);
        % no delay at onset
        idx=find(time>stimulusParameters.testTargetBegins +MacGonsetDelay...
            & time<stimulusParameters.testTargetEnds+MacGoffsetDelay);
        nSpikesDuringTarget=sum(MacGregorResponse(:,idx));
        
        % find(MacGregorResponse)*dt-stimulusParameters.stimulusDelay
        timeX=time(idx);
end

% now find the response of the MacGregor model at the end of the masker
idx2=find(time>stimulusParameters.testTargetBegins-0.02 ...
    & time<stimulusParameters.testTargetBegins);
if ~isempty(idx2)
    maskerRate=mean(mean(MacGregorResponse(idx2)));
else
    %e.g. no masker
    maskerRate=0;
end

if experiment.MAPplot
    % add vertical lines to indicate target region
    figure(99), subplot(6,1,6)
    hold on
    yL=get(gca,'YLim');
    plot([stimulusParameters.testTargetBegins + MacGonsetDelay ...
        stimulusParameters.testTargetBegins   + MacGonsetDelay],yL,'r')
    plot([stimulusParameters.testTargetEnds   + MacGoffsetDelay ...
        stimulusParameters.testTargetEnds     + MacGoffsetDelay],yL,'r')
end

% specify unambiguous response
switch experiment.paradigm
    case 'gapDetection'
        gapResponse=(maskerRate-nSpikesDuringTarget)/maskerRate;
        if gapResponse>0.2
            modelResponse=2;    % gap detected
        else
            modelResponse=1;    % gap not detected
        end
        [nSpikesDuringTarget maskerRate gapResponse modelResponse]
        figure(22), plot(timeX,earObject(idx))
    otherwise
        if nSpikesDuringTarget>experiment.MacGThreshold
            modelResponse=2;    % stimulus detected
        else
            modelResponse=1;    % nothing heard (default)
        end
end


path(savePath)