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.
root / multithreshold 1.46 / old files / MAPmodel.m @ 26:b03ef38fe497
History | View | Annotate | Download (4.57 KB)
| 1 |
function [modelResponse, MacGregorResponse]=MAPmodel( MAPplot, method) |
|---|---|
| 2 |
|
| 3 |
global experiment stimulusParameters audio withinRuns |
| 4 |
global outerMiddleEarParams DRNLParams AN_IHCsynapseParams |
| 5 |
|
| 6 |
savePath=path; |
| 7 |
addpath('..\MAP')
|
| 8 |
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 |
global ICoutput ANdt |
| 24 |
MAP1_14(audio, 1/method.dt, method.nonlinCF,... |
| 25 |
MAPparamsName, AN_spikesOrProbability); |
| 26 |
|
| 27 |
if showPlotsAndDetails |
| 28 |
options.showModelParameters=0; |
| 29 |
options.showModelOutput=1; |
| 30 |
options.printFiringRates=1; |
| 31 |
options.showACF=0; |
| 32 |
options.showEfferent=1; |
| 33 |
UTIL_showMAP(options, paramChanges) |
| 34 |
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 |
dt=ANdt; |
| 45 |
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 |
path(savePath) |