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