rmeddis@0
|
1 function showMAP (options)
|
rmeddis@0
|
2 % defaults
|
rmeddis@0
|
3 % options.showModelParameters=1;
|
rmeddis@0
|
4 % options.showModelOutput=1;
|
rmeddis@0
|
5 % options.printFiringRates=1;
|
rmeddis@0
|
6 % options.showACF=1;
|
rmeddis@0
|
7 % options.showEfferent=1;
|
rmeddis@0
|
8
|
rmeddis@0
|
9 dbstop if warning
|
rmeddis@0
|
10
|
rmeddis@0
|
11 global dt ANdt saveAN_spikesOrProbability savedBFlist saveMAPparamsName...
|
rmeddis@0
|
12 savedInputSignal TMoutput OMEoutput ARattenuation ...
|
rmeddis@0
|
13 DRNLoutput IHC_cilia_output IHCrestingCiliaCond IHCrestingV...
|
rmeddis@0
|
14 IHCoutput ANprobRateOutput ANoutput savePavailable tauCas ...
|
rmeddis@0
|
15 CNoutput ICoutput ICmembraneOutput ICfiberTypeRates MOCattenuation
|
rmeddis@0
|
16
|
rmeddis@0
|
17 restorePath=path;
|
rmeddis@0
|
18 addpath ( ['..' filesep 'utilities'], ['..' filesep 'parameterStore'])
|
rmeddis@0
|
19
|
rmeddis@0
|
20 if nargin<1
|
rmeddis@0
|
21 options.showModelParameters=1;
|
rmeddis@0
|
22 options.showModelOutput=1;
|
rmeddis@0
|
23 options.printFiringRates=1;
|
rmeddis@0
|
24 options.showACF=1;
|
rmeddis@0
|
25 options.showEfferent=1;
|
rmeddis@0
|
26 end
|
rmeddis@0
|
27
|
rmeddis@0
|
28 if options.showModelParameters
|
rmeddis@0
|
29 % Read parameters from MAPparams<***> file in 'parameterStore' folder
|
rmeddis@0
|
30 % and print out all parameters
|
rmeddis@0
|
31 cmd=['MAPparams' saveMAPparamsName ...
|
rmeddis@0
|
32 '(-1, 1/dt, 1);'];
|
rmeddis@0
|
33 eval(cmd);
|
rmeddis@0
|
34 end
|
rmeddis@0
|
35
|
rmeddis@0
|
36 if options.printFiringRates
|
rmeddis@0
|
37 %% print summary firing rates
|
rmeddis@0
|
38 fprintf('\n\n')
|
rmeddis@0
|
39 disp('summary')
|
rmeddis@0
|
40 disp(['AR: ' num2str(min(ARattenuation))])
|
rmeddis@0
|
41 disp(['MOC: ' num2str(min(min(MOCattenuation)))])
|
rmeddis@0
|
42 nANfiberTypes=length(tauCas);
|
rmeddis@0
|
43 if strcmp(saveAN_spikesOrProbability, 'spikes')
|
rmeddis@0
|
44 nANfibers=size(ANoutput,1);
|
rmeddis@0
|
45 nHSRfibers=nANfibers/nANfiberTypes;
|
rmeddis@0
|
46 duration=size(TMoutput,2)*dt;
|
rmeddis@0
|
47 disp(['AN: ' num2str(sum(sum(ANoutput(end-nHSRfibers+1:end,:)))/...
|
rmeddis@0
|
48 (nHSRfibers*duration))])
|
rmeddis@0
|
49
|
rmeddis@0
|
50 nCNneurons=size(CNoutput,1);
|
rmeddis@0
|
51 nHSRCNneuronss=nCNneurons/nANfiberTypes;
|
rmeddis@0
|
52 disp(['CN: ' num2str(sum(sum(CNoutput(end-nHSRCNneuronss+1:end,:)))...
|
rmeddis@0
|
53 /(nHSRCNneuronss*duration))])
|
rmeddis@0
|
54 disp(['IC: ' num2str(sum(sum(ICoutput)))])
|
rmeddis@0
|
55 disp(['IC by type: ' num2str(mean(ICfiberTypeRates,2)')])
|
rmeddis@0
|
56 else
|
rmeddis@0
|
57 disp(['AN: ' num2str(mean(mean(ANprobRateOutput)))])
|
rmeddis@0
|
58 end
|
rmeddis@0
|
59 end
|
rmeddis@0
|
60
|
rmeddis@0
|
61
|
rmeddis@0
|
62 %% figure (99) summarises main model output
|
rmeddis@0
|
63 if options.showModelOutput
|
rmeddis@0
|
64 plotInstructions.figureNo=99;
|
rmeddis@0
|
65 signalRMS=mean(savedInputSignal.^2)^0.5;
|
rmeddis@0
|
66 signalRMSdb=20*log10(signalRMS/20e-6);
|
rmeddis@0
|
67
|
rmeddis@0
|
68 % plot signal (1)
|
rmeddis@0
|
69 plotInstructions.displaydt=dt;
|
rmeddis@0
|
70 plotInstructions.numPlots=6;
|
rmeddis@0
|
71 plotInstructions.subPlotNo=1;
|
rmeddis@0
|
72 plotInstructions.title=...
|
rmeddis@0
|
73 ['stimulus: ' num2str(signalRMSdb, '%4.0f') ' dB SPL'];
|
rmeddis@0
|
74 r=size(savedInputSignal,1);
|
rmeddis@0
|
75 if r==1, savedInputSignal=savedInputSignal'; end
|
rmeddis@0
|
76 UTIL_plotMatrix(savedInputSignal', plotInstructions);
|
rmeddis@0
|
77
|
rmeddis@0
|
78 % stapes (2)
|
rmeddis@0
|
79 plotInstructions.subPlotNo=2;
|
rmeddis@0
|
80 plotInstructions.title= ['stapes displacement'];
|
rmeddis@0
|
81 UTIL_plotMatrix(OMEoutput, plotInstructions);
|
rmeddis@0
|
82
|
rmeddis@0
|
83 % DRNL (3)
|
rmeddis@0
|
84 plotInstructions.subPlotNo=3;
|
rmeddis@0
|
85 plotInstructions.title= ['BM displacement'];
|
rmeddis@0
|
86 plotInstructions.yValues= savedBFlist;
|
rmeddis@0
|
87 UTIL_plotMatrix(DRNLoutput, plotInstructions);
|
rmeddis@0
|
88
|
rmeddis@0
|
89 switch saveAN_spikesOrProbability
|
rmeddis@0
|
90 case 'spikes'
|
rmeddis@0
|
91 % AN (4)
|
rmeddis@0
|
92 plotInstructions.displaydt=ANdt;
|
rmeddis@0
|
93 plotInstructions.title='AN';
|
rmeddis@0
|
94 plotInstructions.subPlotNo=4;
|
rmeddis@0
|
95 plotInstructions.yLabel='BF';
|
rmeddis@0
|
96 plotInstructions.yValues= savedBFlist;
|
rmeddis@0
|
97 plotInstructions.rasterDotSize=1;
|
rmeddis@0
|
98 plotInstructions.plotDivider=1;
|
rmeddis@0
|
99 if sum(sum(ANoutput))<100
|
rmeddis@0
|
100 plotInstructions.rasterDotSize=3;
|
rmeddis@0
|
101 end
|
rmeddis@0
|
102 UTIL_plotMatrix(ANoutput, plotInstructions);
|
rmeddis@0
|
103
|
rmeddis@0
|
104 % CN (5)
|
rmeddis@0
|
105 plotInstructions.displaydt=ANdt;
|
rmeddis@0
|
106 plotInstructions.subPlotNo=5;
|
rmeddis@0
|
107 plotInstructions.title='CN spikes';
|
rmeddis@0
|
108 if sum(sum(CNoutput))<100
|
rmeddis@0
|
109 plotInstructions.rasterDotSize=3;
|
rmeddis@0
|
110 end
|
rmeddis@0
|
111 UTIL_plotMatrix(CNoutput, plotInstructions);
|
rmeddis@0
|
112
|
rmeddis@0
|
113 % IC (6)
|
rmeddis@0
|
114 plotInstructions.displaydt=ANdt;
|
rmeddis@0
|
115 plotInstructions.subPlotNo=6;
|
rmeddis@0
|
116 plotInstructions.title='IC';
|
rmeddis@0
|
117 if size(ICoutput,1)>3
|
rmeddis@0
|
118 if sum(sum(ICoutput))<100
|
rmeddis@0
|
119 plotInstructions.rasterDotSize=3;
|
rmeddis@0
|
120 end
|
rmeddis@0
|
121 UTIL_plotMatrix(ICoutput, plotInstructions);
|
rmeddis@0
|
122 else
|
rmeddis@0
|
123 plotInstructions.title='IC (HSR) membrane potential';
|
rmeddis@0
|
124 plotInstructions.displaydt=dt;
|
rmeddis@0
|
125 plotInstructions.yLabel='V';
|
rmeddis@0
|
126 plotInstructions.zValuesRange= [-.1 0];
|
rmeddis@0
|
127 UTIL_plotMatrix(ICmembraneOutput, plotInstructions);
|
rmeddis@0
|
128 end
|
rmeddis@0
|
129
|
rmeddis@0
|
130 otherwise % probability (4-6)
|
rmeddis@0
|
131 plotInstructions.displaydt=dt;
|
rmeddis@0
|
132 plotInstructions.numPlots=2;
|
rmeddis@0
|
133 plotInstructions.subPlotNo=2;
|
rmeddis@0
|
134 plotInstructions.yLabel='BF';
|
rmeddis@0
|
135 if nANfiberTypes>1,
|
rmeddis@0
|
136 plotInstructions.yLabel='LSR HSR';
|
rmeddis@0
|
137 plotInstructions.plotDivider=1;
|
rmeddis@0
|
138 end
|
rmeddis@0
|
139 plotInstructions.title='AN - spike probability';
|
rmeddis@0
|
140 UTIL_plotMatrix(ANprobRateOutput, plotInstructions);
|
rmeddis@0
|
141 end
|
rmeddis@0
|
142 end
|
rmeddis@0
|
143
|
rmeddis@0
|
144 %% plot efferent control values as dB
|
rmeddis@0
|
145 if options.showEfferent
|
rmeddis@0
|
146 plotInstructions=[];
|
rmeddis@0
|
147 plotInstructions.figureNo=98;
|
rmeddis@0
|
148 figure(98), clf
|
rmeddis@0
|
149 plotInstructions.displaydt=dt;
|
rmeddis@0
|
150 plotInstructions.numPlots=2;
|
rmeddis@0
|
151 plotInstructions.subPlotNo=1;
|
rmeddis@0
|
152 plotInstructions.zValuesRange=[ -25 0];
|
rmeddis@0
|
153 plotInstructions.title= ['AR strength. Signal level= ' ...
|
rmeddis@0
|
154 num2str(signalRMSdb,'%4.0f') ' dB SPL'];
|
rmeddis@0
|
155 UTIL_plotMatrix(20*log10(ARattenuation), plotInstructions);
|
rmeddis@0
|
156
|
rmeddis@0
|
157 plotInstructions.subPlotNo=2;
|
rmeddis@0
|
158 plotInstructions.yValues= savedBFlist;
|
rmeddis@0
|
159 plotInstructions.yLabel= 'BF';
|
rmeddis@0
|
160 plotInstructions.title= ['MOC strength'];
|
rmeddis@0
|
161 plotInstructions.zValuesRange=[ -25 0];
|
rmeddis@0
|
162 subplot(2,1,2)
|
rmeddis@0
|
163 % imagesc(MOCattenuation)
|
rmeddis@0
|
164 UTIL_plotMatrix(20*log10(MOCattenuation), plotInstructions);
|
rmeddis@0
|
165 colorbar
|
rmeddis@0
|
166 end
|
rmeddis@0
|
167
|
rmeddis@0
|
168
|
rmeddis@0
|
169 %% ACF plot if required
|
rmeddis@0
|
170 if options.showACF
|
rmeddis@0
|
171 tic
|
rmeddis@0
|
172 method.dt=dt;
|
rmeddis@0
|
173 method.segmentNo=1;
|
rmeddis@0
|
174 method.nonlinCF=savedBFlist;
|
rmeddis@0
|
175
|
rmeddis@0
|
176 minPitch= 80; maxPitch= 4000; numPitches=100; % specify lags
|
rmeddis@0
|
177 pitches=10.^ linspace(log10(minPitch), log10(maxPitch),numPitches);
|
rmeddis@0
|
178 pitches=fliplr(pitches);
|
rmeddis@0
|
179 filteredSACFParams.lags=1./pitches; % autocorrelation lags vector
|
rmeddis@0
|
180 filteredSACFParams.acfTau= .003; % time constant of running ACF
|
rmeddis@0
|
181 filteredSACFParams.lambda= 0.12; % slower filter to smooth ACF
|
rmeddis@0
|
182 filteredSACFParams.lambda= 0.01; % slower filter to smooth ACF
|
rmeddis@0
|
183
|
rmeddis@0
|
184 filteredSACFParams.plotACFs=0; % special plot (see code)
|
rmeddis@0
|
185 filteredSACFParams.plotFilteredSACF=0; % 0 plots unfiltered ACFs
|
rmeddis@0
|
186 filteredSACFParams.plotMoviePauses=.3; % special plot (see code)
|
rmeddis@0
|
187
|
rmeddis@0
|
188 filteredSACFParams.usePressnitzer=0; % attenuates ACF at long lags
|
rmeddis@0
|
189 filteredSACFParams.lagsProcedure= 'useAllLags';
|
rmeddis@0
|
190 % filteredSACFParams.lagsProcedure= 'useBernsteinLagWeights';
|
rmeddis@0
|
191 % filteredSACFParams.lagsProcedure= 'omitShortLags';
|
rmeddis@0
|
192 filteredSACFParams.criterionForOmittingLags=3;
|
rmeddis@0
|
193 filteredSACFParams.plotACFsInterval=200;
|
rmeddis@0
|
194
|
rmeddis@0
|
195 if filteredSACFParams.plotACFs
|
rmeddis@0
|
196 % plot original waveform on ACF plot
|
rmeddis@0
|
197 figure(13), clf
|
rmeddis@0
|
198 subplot(4,1,1)
|
rmeddis@0
|
199 t=dt*(1:length(savedInputSignal));
|
rmeddis@0
|
200 plot(t,savedInputSignal)
|
rmeddis@0
|
201 xlim([0 t(end)])
|
rmeddis@0
|
202 title(['stimulus: ' num2str(signalRMSdb, '%4.0f') ' dB SPL']);
|
rmeddis@0
|
203 end
|
rmeddis@0
|
204
|
rmeddis@0
|
205 % plot original waveform on summary/smoothed ACF plot
|
rmeddis@0
|
206 figure(97), clf
|
rmeddis@0
|
207 subplot(2,1,1)
|
rmeddis@0
|
208 t=dt*(1:length(savedInputSignal));
|
rmeddis@0
|
209 plot(t,savedInputSignal)
|
rmeddis@0
|
210 xlim([0 t(end)])
|
rmeddis@0
|
211 title(['stimulus: ' num2str(signalRMSdb, '%4.0f') ' dB SPL']);
|
rmeddis@0
|
212
|
rmeddis@0
|
213
|
rmeddis@0
|
214 % compute ACF
|
rmeddis@0
|
215 switch saveAN_spikesOrProbability
|
rmeddis@0
|
216 case 'probability'
|
rmeddis@0
|
217 inputToACF=ANprobRateOutput.^0.5;
|
rmeddis@0
|
218 otherwise
|
rmeddis@0
|
219 inputToACF=ANoutput;
|
rmeddis@0
|
220 end
|
rmeddis@0
|
221
|
rmeddis@0
|
222 disp ('computing ACF...')
|
rmeddis@0
|
223 [P, BFlist, sacf, boundaryValue] = ...
|
rmeddis@0
|
224 filteredSACF(inputToACF, method, filteredSACFParams);
|
rmeddis@0
|
225 disp(' ACF done.')
|
rmeddis@0
|
226
|
rmeddis@0
|
227 % SACF
|
rmeddis@0
|
228 subplot(2,1,2)
|
rmeddis@0
|
229 imagesc(P)
|
rmeddis@0
|
230 ylabel('periodicities (Hz)')
|
rmeddis@0
|
231 xlabel('time (s)')
|
rmeddis@0
|
232 title(['running smoothed (root) SACF. ' saveAN_spikesOrProbability ' input'])
|
rmeddis@0
|
233 pt=[1 get(gca,'ytick')]; % force top xtick to show
|
rmeddis@0
|
234 set(gca,'ytick',pt)
|
rmeddis@0
|
235 set(gca,'ytickLabel', round(pitches(pt)))
|
rmeddis@0
|
236 tt=get(gca,'xtick');
|
rmeddis@0
|
237 set(gca,'xtickLabel', round(100*t(tt))/100)
|
rmeddis@0
|
238 end
|
rmeddis@0
|
239
|
rmeddis@0
|
240 path(restorePath) |