To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.

The primary repository for this project is hosted at git://github.com/rmeddis/MAP.git .
This repository is a read-only copy which is updated automatically every hour.

Statistics Download as Zip
| Branch: | Revision:

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

History | View | Annotate | Download (4.61 KB)

1 9:ecad0ea62b43 rmeddis
function [modelResponse, MacGregorResponse]=MAPmodel( MAPplot, method)
2
3
global experiment stimulusParameters audio withinRuns
4
global outerMiddleEarParams DRNLParams AN_IHCsynapseParams
5
6
savePath=path;
7 29:b51bf546ca3f rmeddis
addpath(['..' filesep 'MAP'], ['..' filesep 'utilities'])
8 9:ecad0ea62b43 rmeddis
modelResponse=[];
9
MacGregorResponse=[];
10
11
% mono only (column vector)
12
audio=audio(:,1)';
13
14
% if stop button pressed earlier
15
if experiment.stop, return, end
16
17
% -------------------------------------------------------------- run Model
18
MAPparamsName=experiment.name;
19
showPlotsAndDetails=experiment.MAPplot;
20
AN_spikesOrProbability='spikes';
21
22
% [response, method]=MAPsequenceSeg(audio, method, 1:8);
23 38:c2204b18f4a2 rmeddis
global ICoutput dtSpikes
24 9:ecad0ea62b43 rmeddis
    MAP1_14(audio, 1/method.dt, method.nonlinCF,...
25
        MAPparamsName, AN_spikesOrProbability);
26
27
if showPlotsAndDetails
28 29:b51bf546ca3f rmeddis
    options.printModelParameters=0;
29 9:ecad0ea62b43 rmeddis
    options.showModelOutput=1;
30
    options.printFiringRates=1;
31
    options.showACF=0;
32 38:c2204b18f4a2 rmeddis
    options.showEfferent=0;
33 29:b51bf546ca3f rmeddis
    UTIL_showMAP(options)
34 9:ecad0ea62b43 rmeddis
end
35
36
% No response,  probably caused by hitting 'stop' button
37
if isempty(ICoutput), return, end
38
39
% MacGregor response is the sum total of all final stage spiking
40
MacGregorResponse= sum(ICoutput,1);                 % use IC
41
42
% ---------------------------------------------------------- end model run
43
44 38:c2204b18f4a2 rmeddis
dt=dtSpikes;
45 9:ecad0ea62b43 rmeddis
time=dt:dt:dt*length(MacGregorResponse);
46
47
% group delay on unit response
48
MacGonsetDelay= 0.004;
49
MacGoffsetDelay= 0.022;
50
51
% now find the response of the MacGregor model during the target presentation + group delay
52
switch experiment.threshEstMethod
53
    case {'2I2AFC++', '2I2AFC+++'}
54
        idx= time>stimulusParameters.testTargetBegins+MacGonsetDelay ...
55
            & time<stimulusParameters.testTargetEnds+MacGoffsetDelay;
56
        nSpikesTrueWindow=sum(MacGregorResponse(:,idx));
57
        idx=find(time>stimulusParameters.testNonTargetBegins+MacGonsetDelay ...
58
            & time<stimulusParameters.testNonTargetEnds+MacGoffsetDelay);
59
        nSpikesFalseWindow=sum(MacGregorResponse(:,idx));
60
        % nSpikesDuringTarget is +ve when more spikes are found
61
        %   in the target window
62
        difference= nSpikesTrueWindow-nSpikesFalseWindow;
63
64
        if difference>0
65
            % hit
66
            nSpikesDuringTarget=experiment.MacGThreshold+1;
67
        elseif    difference<0
68
            % miss (wrong choice)
69
            nSpikesDuringTarget=experiment.MacGThreshold-1;
70
        else
71
            if rand>0.5
72
                % hit (random choice)
73
                nSpikesDuringTarget=experiment.MacGThreshold+1;
74
            else
75
                % miss (random choice)
76
                nSpikesDuringTarget=experiment.MacGThreshold-1;
77
            end
78
        end
79
        disp(['level target dummy decision: ' ...
80
            num2str([withinRuns.variableValue nSpikesTrueWindow ...
81
            nSpikesFalseWindow  nSpikesDuringTarget], '%4.0f') ] )
82
83
    otherwise
84
        % idx=find(time>stimulusParameters.testTargetBegins+MacGonsetDelay ...
85
        %         & time<stimulusParameters.testTargetEnds+MacGoffsetDelay);
86
        % no delay at onset
87
        idx=find(time>stimulusParameters.testTargetBegins +MacGonsetDelay...
88
            & time<stimulusParameters.testTargetEnds+MacGoffsetDelay);
89
        nSpikesDuringTarget=sum(MacGregorResponse(:,idx));
90
91
        % find(MacGregorResponse)*dt-stimulusParameters.stimulusDelay
92
        timeX=time(idx);
93
end
94
95
% now find the response of the MacGregor model at the end of the masker
96
idx2=find(time>stimulusParameters.testTargetBegins-0.02 ...
97
    & time<stimulusParameters.testTargetBegins);
98
if ~isempty(idx2)
99
    maskerRate=mean(mean(MacGregorResponse(idx2)));
100
else
101
    %e.g. no masker
102
    maskerRate=0;
103
end
104
105
if experiment.MAPplot
106
    % add vertical lines to indicate target region
107
    figure(99), subplot(6,1,6)
108
    hold on
109
    yL=get(gca,'YLim');
110
    plot([stimulusParameters.testTargetBegins + MacGonsetDelay ...
111
        stimulusParameters.testTargetBegins   + MacGonsetDelay],yL,'r')
112
    plot([stimulusParameters.testTargetEnds   + MacGoffsetDelay ...
113
        stimulusParameters.testTargetEnds     + MacGoffsetDelay],yL,'r')
114
end
115
116
% specify unambiguous response
117
switch experiment.paradigm
118
    case 'gapDetection'
119
        gapResponse=(maskerRate-nSpikesDuringTarget)/maskerRate;
120
        if gapResponse>0.2
121
            modelResponse=2;    % gap detected
122
        else
123
            modelResponse=1;    % gap not detected
124
        end
125
        [nSpikesDuringTarget maskerRate gapResponse modelResponse]
126
        figure(22), plot(timeX,earObject(idx))
127
    otherwise
128
        if nSpikesDuringTarget>experiment.MacGThreshold
129
            modelResponse=2;    % stimulus detected
130
        else
131
            modelResponse=1;    % nothing heard (default)
132
        end
133
end
134
135
136 23:6cce421531e2 rmeddis
path(savePath)