rmeddis@26
|
1 function UTIL_showMAP (showMapOptions, paramChanges)
|
rmeddis@24
|
2 % UTIL_showMAP produces summaries of the output from MAP's mmost recent run
|
rmeddis@24
|
3 % All MAP outputs are stored in global variables and UTIL_showMAP
|
rmeddis@24
|
4 % simply assumes that they are in place.
|
rmeddis@24
|
5 %
|
rmeddis@25
|
6 % showMapOptions
|
rmeddis@25
|
7 % showMapOptions.printModelParameters=1; % print model parameters
|
rmeddis@25
|
8 % showMapOptions.showModelOutput=1; % plot all stages output
|
rmeddis@25
|
9 % showMapOptions.printFiringRates=1; % mean activity at all stages
|
rmeddis@25
|
10 % showMapOptions.showACF=1; % SACF (probabilities only)
|
rmeddis@25
|
11 % showMapOptions.showEfferent=1; % plot of efferent activity
|
rmeddis@25
|
12 % showMapOptions.surfProbability=0; % HSR (probability) surf plot
|
rmeddis@25
|
13 % showMapOptions.fileName=[]; % parameter filename for plot title
|
rmeddis@23
|
14
|
rmeddis@23
|
15 dbstop if warning
|
rmeddis@23
|
16
|
rmeddis@23
|
17 global dt ANdt saveAN_spikesOrProbability savedBFlist saveMAPparamsName...
|
rmeddis@23
|
18 savedInputSignal TMoutput OMEoutput ARattenuation ...
|
rmeddis@23
|
19 DRNLoutput IHC_cilia_output IHCrestingCiliaCond IHCrestingV...
|
rmeddis@23
|
20 IHCoutput ANprobRateOutput ANoutput savePavailable tauCas ...
|
rmeddis@23
|
21 CNoutput ICoutput ICmembraneOutput ICfiberTypeRates MOCattenuation
|
rmeddis@23
|
22 global OMEParams DRNLParams IHC_cilia_RPParams IHCpreSynapseParams
|
rmeddis@23
|
23 global AN_IHCsynapseParams MacGregorParams MacGregorMultiParams
|
rmeddis@23
|
24
|
rmeddis@23
|
25
|
rmeddis@23
|
26 restorePath=path;
|
rmeddis@23
|
27 addpath ( ['..' filesep 'utilities'], ['..' filesep 'parameterStore'])
|
rmeddis@23
|
28
|
rmeddis@23
|
29 if nargin<1
|
rmeddis@25
|
30 showMapOptions=[];
|
rmeddis@23
|
31 end
|
rmeddis@25
|
32 % defaults (plot staged outputs and print rates only) if options omitted
|
rmeddis@25
|
33 if ~isfield(showMapOptions,'printModelParameters')
|
rmeddis@25
|
34 showMapOptions.printModelParameters=0; end
|
rmeddis@25
|
35 if ~isfield(showMapOptions,'showModelOutput'),showMapOptions.showModelOutput=1;end
|
rmeddis@25
|
36 if ~isfield(showMapOptions,'printFiringRates'),showMapOptions.printFiringRates=1;end
|
rmeddis@25
|
37 if ~isfield(showMapOptions,'showACF'),showMapOptions.showACF=0;end
|
rmeddis@25
|
38 if ~isfield(showMapOptions,'showEfferent'),showMapOptions.showEfferent=0;end
|
rmeddis@25
|
39 if ~isfield(showMapOptions,'surfProbability'),showMapOptions.surfProbability=0;end
|
rmeddis@25
|
40 if ~isfield(showMapOptions,'fileName'),showMapOptions.fileName=[];end
|
rmeddis@25
|
41 if ~isfield(showMapOptions,'surfSpikes'),showMapOptions.surfSpikes=0;end
|
rmeddis@23
|
42
|
rmeddis@26
|
43 %% send all model parameters to command window
|
rmeddis@25
|
44 if showMapOptions.printModelParameters
|
rmeddis@23
|
45 % Read parameters from MAPparams<***> file in 'parameterStore' folder
|
rmeddis@23
|
46 % and print out all parameters
|
rmeddis@26
|
47 if nargin>1
|
rmeddis@26
|
48 cmd=['MAPparams' saveMAPparamsName '(-1, 1/dt, 1, paramChanges);'];
|
rmeddis@26
|
49 eval(cmd);
|
rmeddis@26
|
50 else
|
rmeddis@26
|
51 cmd=['MAPparams' saveMAPparamsName '(-1, 1/dt, 1);'];
|
rmeddis@26
|
52 eval(cmd);
|
rmeddis@26
|
53 disp(' no parameter changes found')
|
rmeddis@26
|
54 end
|
rmeddis@23
|
55 end
|
rmeddis@23
|
56
|
rmeddis@26
|
57 %% summarise firing rates in command window
|
rmeddis@25
|
58 if showMapOptions.printFiringRates
|
rmeddis@23
|
59 %% print summary firing rates
|
rmeddis@23
|
60 fprintf('\n\n')
|
rmeddis@23
|
61 disp('summary')
|
rmeddis@23
|
62 disp(['AR: ' num2str(min(ARattenuation))])
|
rmeddis@23
|
63 disp(['MOC: ' num2str(min(min(MOCattenuation)))])
|
rmeddis@23
|
64 nANfiberTypes=length(tauCas);
|
rmeddis@23
|
65 if strcmp(saveAN_spikesOrProbability, 'spikes')
|
rmeddis@23
|
66 nANfibers=size(ANoutput,1);
|
rmeddis@23
|
67 nHSRfibers=nANfibers/nANfiberTypes;
|
rmeddis@23
|
68 duration=size(TMoutput,2)*dt;
|
rmeddis@23
|
69 disp(['AN: ' num2str(sum(sum(ANoutput(end-nHSRfibers+1:end,:)))/...
|
rmeddis@23
|
70 (nHSRfibers*duration))])
|
rmeddis@23
|
71
|
rmeddis@23
|
72 nCNneurons=size(CNoutput,1);
|
rmeddis@23
|
73 nHSRCNneuronss=nCNneurons/nANfiberTypes;
|
rmeddis@23
|
74 disp(['CN: ' num2str(sum(sum(CNoutput(end-nHSRCNneuronss+1:end,:)))...
|
rmeddis@23
|
75 /(nHSRCNneuronss*duration))])
|
rmeddis@23
|
76 disp(['IC: ' num2str(sum(sum(ICoutput))/duration)])
|
rmeddis@23
|
77 % disp(['IC by type: ' num2str(mean(ICfiberTypeRates,2)')])
|
rmeddis@23
|
78 else
|
rmeddis@27
|
79 HSRprobOutput= ANprobRateOutput(end-length(savedBFlist)+1:end,:);
|
rmeddis@27
|
80 disp(['AN(HSR): ' num2str(mean(mean(HSRprobOutput)))])
|
rmeddis@27
|
81 PSTH= UTIL_PSTHmakerb(HSRprobOutput, dt, 0.001);
|
rmeddis@27
|
82 disp(['max max AN: ' num2str(max(max(PSTH)))])
|
rmeddis@23
|
83 end
|
rmeddis@23
|
84 end
|
rmeddis@23
|
85
|
rmeddis@23
|
86
|
rmeddis@26
|
87 %% figure (99): display output from all model stages
|
rmeddis@25
|
88 if showMapOptions.showModelOutput
|
rmeddis@23
|
89 plotInstructions.figureNo=99;
|
rmeddis@23
|
90 signalRMS=mean(savedInputSignal.^2)^0.5;
|
rmeddis@23
|
91 signalRMSdb=20*log10(signalRMS/20e-6);
|
rmeddis@23
|
92
|
rmeddis@23
|
93 % plot signal (1)
|
rmeddis@23
|
94 plotInstructions.displaydt=dt;
|
rmeddis@23
|
95 plotInstructions.numPlots=6;
|
rmeddis@23
|
96 plotInstructions.subPlotNo=1;
|
rmeddis@23
|
97 plotInstructions.title=...
|
rmeddis@23
|
98 ['stimulus: ' num2str(signalRMSdb, '%4.0f') ' dB SPL'];
|
rmeddis@23
|
99 r=size(savedInputSignal,1);
|
rmeddis@23
|
100 if r==1, savedInputSignal=savedInputSignal'; end
|
rmeddis@23
|
101 UTIL_plotMatrix(savedInputSignal', plotInstructions);
|
rmeddis@23
|
102
|
rmeddis@23
|
103 % stapes (2)
|
rmeddis@23
|
104 plotInstructions.subPlotNo=2;
|
rmeddis@23
|
105 plotInstructions.title= ['stapes displacement'];
|
rmeddis@23
|
106 UTIL_plotMatrix(OMEoutput, plotInstructions);
|
rmeddis@23
|
107
|
rmeddis@23
|
108 % DRNL (3)
|
rmeddis@23
|
109 plotInstructions.subPlotNo=3;
|
rmeddis@23
|
110 plotInstructions.title= ['BM displacement'];
|
rmeddis@23
|
111 plotInstructions.yValues= savedBFlist;
|
rmeddis@23
|
112 UTIL_plotMatrix(DRNLoutput, plotInstructions);
|
rmeddis@23
|
113
|
rmeddis@23
|
114 switch saveAN_spikesOrProbability
|
rmeddis@23
|
115 case 'spikes'
|
rmeddis@23
|
116 % AN (4)
|
rmeddis@23
|
117 plotInstructions.displaydt=ANdt;
|
rmeddis@23
|
118 plotInstructions.title='AN';
|
rmeddis@23
|
119 plotInstructions.subPlotNo=4;
|
rmeddis@23
|
120 plotInstructions.yLabel='BF';
|
rmeddis@23
|
121 plotInstructions.yValues= savedBFlist;
|
rmeddis@23
|
122 plotInstructions.rasterDotSize=1;
|
rmeddis@23
|
123 if length(tauCas)==2
|
rmeddis@23
|
124 plotInstructions.plotDivider=1;
|
rmeddis@23
|
125 else
|
rmeddis@23
|
126 plotInstructions.plotDivider=0;
|
rmeddis@23
|
127 end
|
rmeddis@23
|
128 if sum(sum(ANoutput))<100
|
rmeddis@23
|
129 plotInstructions.rasterDotSize=3;
|
rmeddis@23
|
130 end
|
rmeddis@23
|
131 UTIL_plotMatrix(ANoutput, plotInstructions);
|
rmeddis@23
|
132
|
rmeddis@23
|
133 % CN (5)
|
rmeddis@23
|
134 plotInstructions.displaydt=ANdt;
|
rmeddis@23
|
135 plotInstructions.subPlotNo=5;
|
rmeddis@23
|
136 plotInstructions.title='CN spikes';
|
rmeddis@23
|
137 if sum(sum(CNoutput))<100
|
rmeddis@23
|
138 plotInstructions.rasterDotSize=3;
|
rmeddis@23
|
139 end
|
rmeddis@23
|
140 UTIL_plotMatrix(CNoutput, plotInstructions);
|
rmeddis@23
|
141
|
rmeddis@23
|
142 % IC (6)
|
rmeddis@23
|
143 plotInstructions.displaydt=ANdt;
|
rmeddis@23
|
144 plotInstructions.subPlotNo=6;
|
rmeddis@23
|
145 plotInstructions.title='IC';
|
rmeddis@23
|
146 if size(ICoutput,1)>3
|
rmeddis@23
|
147 if sum(sum(ICoutput))<100
|
rmeddis@23
|
148 plotInstructions.rasterDotSize=3;
|
rmeddis@23
|
149 end
|
rmeddis@23
|
150 UTIL_plotMatrix(ICoutput, plotInstructions);
|
rmeddis@23
|
151 else
|
rmeddis@23
|
152 plotInstructions.title='IC (HSR) membrane potential';
|
rmeddis@23
|
153 plotInstructions.displaydt=dt;
|
rmeddis@23
|
154 plotInstructions.yLabel='V';
|
rmeddis@23
|
155 plotInstructions.zValuesRange= [-.1 0];
|
rmeddis@23
|
156 UTIL_plotMatrix(ICmembraneOutput, plotInstructions);
|
rmeddis@23
|
157 end
|
rmeddis@23
|
158
|
rmeddis@26
|
159 otherwise % AN rate based on probability of firing
|
rmeddis@26
|
160 PSTHbinWidth=0.001;
|
rmeddis@26
|
161 PSTH= UTIL_PSTHmakerb(ANprobRateOutput, dt, PSTHbinWidth);
|
rmeddis@26
|
162 plotInstructions.displaydt=PSTHbinWidth;
|
rmeddis@23
|
163 plotInstructions.numPlots=2;
|
rmeddis@23
|
164 plotInstructions.subPlotNo=2;
|
rmeddis@23
|
165 plotInstructions.yLabel='BF';
|
rmeddis@23
|
166 if nANfiberTypes>1,
|
rmeddis@23
|
167 plotInstructions.yLabel='LSR HSR';
|
rmeddis@23
|
168 plotInstructions.plotDivider=1;
|
rmeddis@23
|
169 end
|
rmeddis@26
|
170 plotInstructions.title='AN - spike rate';
|
rmeddis@26
|
171 UTIL_plotMatrix(PSTH, plotInstructions);
|
rmeddis@23
|
172 end
|
rmeddis@23
|
173 end
|
rmeddis@23
|
174
|
rmeddis@25
|
175 if showMapOptions.surfProbability
|
rmeddis@23
|
176 %% surface plot of probability
|
rmeddis@26
|
177 if strcmp(saveAN_spikesOrProbability,'probability') && ...
|
rmeddis@26
|
178 length(savedBFlist)>2
|
rmeddis@23
|
179 figure(97), clf
|
rmeddis@23
|
180 % select only HSR fibers at the bottom of the matrix
|
rmeddis@27
|
181 HSRprobOutput= ANprobRateOutput(end-length(savedBFlist)+1:end,:);
|
rmeddis@23
|
182 PSTHbinWidth=0.001;
|
rmeddis@27
|
183 PSTH=UTIL_PSTHmakerb(HSRprobOutput, ANdt, PSTHbinWidth);
|
rmeddis@23
|
184 [nY nX]=size(PSTH);
|
rmeddis@23
|
185 time=PSTHbinWidth*(1:nX);
|
rmeddis@23
|
186 surf(time, savedBFlist, PSTH)
|
rmeddis@23
|
187 shading interp
|
rmeddis@23
|
188 set(gca, 'yScale','log')
|
rmeddis@23
|
189 xlim([0 max(time)])
|
rmeddis@23
|
190 ylim([0 max(savedBFlist)])
|
rmeddis@27
|
191 zlim([0 2000])
|
rmeddis@23
|
192 xlabel('time (s)')
|
rmeddis@23
|
193 ylabel('best frequency (Hz)')
|
rmeddis@23
|
194 zlabel('spike rate')
|
rmeddis@23
|
195 view([-20 60])
|
rmeddis@23
|
196 % view([0 90])
|
rmeddis@27
|
197 disp(['max max AN: ' num2str(max(max(PSTH)))])
|
rmeddis@27
|
198
|
rmeddis@25
|
199 title ([showMapOptions.fileName ': ' num2str(signalRMSdb,'% 3.0f') ' dB'])
|
rmeddis@26
|
200 end
|
rmeddis@23
|
201 end
|
rmeddis@23
|
202
|
rmeddis@25
|
203 if showMapOptions.surfSpikes
|
rmeddis@26
|
204 %% surface plot of AN spikes
|
rmeddis@25
|
205 figure(97), clf
|
rmeddis@25
|
206 % select only HSR fibers at the bottom of the matrix
|
rmeddis@25
|
207 ANoutput= ANoutput(end-length(savedBFlist)+1:end,:);
|
rmeddis@26
|
208 PSTHbinWidth=0.005; % 1 ms bins
|
rmeddis@26
|
209 PSTH=UTIL_makePSTH(ANoutput, ANdt, PSTHbinWidth);
|
rmeddis@25
|
210 [nY nX]=size(PSTH);
|
rmeddis@25
|
211 time=PSTHbinWidth*(1:nX);
|
rmeddis@25
|
212 surf(time, savedBFlist, PSTH)
|
rmeddis@25
|
213 shading interp
|
rmeddis@25
|
214 set(gca, 'yScale','log')
|
rmeddis@25
|
215 xlim([0 max(time)])
|
rmeddis@25
|
216 ylim([0 max(savedBFlist)])
|
rmeddis@25
|
217 % zlim([0 1000])
|
rmeddis@25
|
218 xlabel('time (s)')
|
rmeddis@25
|
219 ylabel('best frequency (Hz)')
|
rmeddis@25
|
220 zlabel('spike rate')
|
rmeddis@25
|
221 view([-20 60])
|
rmeddis@25
|
222 % view([0 90])
|
rmeddis@25
|
223 title ([showMapOptions.fileName ': ' num2str(signalRMSdb,'% 3.0f') ' dB'])
|
rmeddis@25
|
224 end
|
rmeddis@25
|
225
|
rmeddis@23
|
226
|
rmeddis@26
|
227 %% figure(98) plot efferent control values as dB
|
rmeddis@25
|
228 if showMapOptions.showEfferent
|
rmeddis@23
|
229 plotInstructions=[];
|
rmeddis@23
|
230 plotInstructions.figureNo=98;
|
rmeddis@23
|
231 figure(98), clf
|
rmeddis@23
|
232 plotInstructions.displaydt=dt;
|
rmeddis@23
|
233 plotInstructions.numPlots=2;
|
rmeddis@23
|
234 plotInstructions.subPlotNo=1;
|
rmeddis@23
|
235 plotInstructions.zValuesRange=[ -25 0];
|
rmeddis@23
|
236 plotInstructions.title= ['AR strength. Signal level= ' ...
|
rmeddis@23
|
237 num2str(signalRMSdb,'%4.0f') ' dB SPL'];
|
rmeddis@23
|
238 UTIL_plotMatrix(20*log10(ARattenuation), plotInstructions);
|
rmeddis@23
|
239
|
rmeddis@23
|
240 plotInstructions.subPlotNo=2;
|
rmeddis@23
|
241 plotInstructions.yValues= savedBFlist;
|
rmeddis@23
|
242 plotInstructions.yLabel= 'BF';
|
rmeddis@23
|
243 plotInstructions.title= ['MOC strength'];
|
rmeddis@23
|
244 plotInstructions.zValuesRange=[ -25 0];
|
rmeddis@23
|
245 subplot(2,1,2)
|
rmeddis@23
|
246 % imagesc(MOCattenuation)
|
rmeddis@23
|
247 UTIL_plotMatrix(20*log10(MOCattenuation), plotInstructions);
|
rmeddis@23
|
248 colorbar
|
rmeddis@23
|
249 end
|
rmeddis@23
|
250
|
rmeddis@23
|
251 %% ACF plot if required
|
rmeddis@25
|
252 if showMapOptions.showACF
|
rmeddis@23
|
253 tic
|
rmeddis@23
|
254 method.dt=dt;
|
rmeddis@23
|
255 method.segmentNo=1;
|
rmeddis@23
|
256 method.nonlinCF=savedBFlist;
|
rmeddis@23
|
257
|
rmeddis@23
|
258 minPitch= 80; maxPitch= 4000; numPitches=100; % specify lags
|
rmeddis@23
|
259 pitches=10.^ linspace(log10(minPitch), log10(maxPitch),numPitches);
|
rmeddis@23
|
260 pitches=fliplr(pitches);
|
rmeddis@23
|
261 filteredSACFParams.lags=1./pitches; % autocorrelation lags vector
|
rmeddis@23
|
262 filteredSACFParams.acfTau= .003; % time constant of running ACF
|
rmeddis@23
|
263 filteredSACFParams.lambda= 0.12; % slower filter to smooth ACF
|
rmeddis@23
|
264 filteredSACFParams.lambda= 0.01; % slower filter to smooth ACF
|
rmeddis@23
|
265
|
rmeddis@23
|
266 filteredSACFParams.plotACFs=0; % special plot (see code)
|
rmeddis@23
|
267 filteredSACFParams.plotFilteredSACF=0; % 0 plots unfiltered ACFs
|
rmeddis@23
|
268 filteredSACFParams.plotMoviePauses=.3; % special plot (see code)
|
rmeddis@23
|
269
|
rmeddis@23
|
270 filteredSACFParams.usePressnitzer=0; % attenuates ACF at long lags
|
rmeddis@23
|
271 filteredSACFParams.lagsProcedure= 'useAllLags';
|
rmeddis@23
|
272 % filteredSACFParams.lagsProcedure= 'useBernsteinLagWeights';
|
rmeddis@23
|
273 % filteredSACFParams.lagsProcedure= 'omitShortLags';
|
rmeddis@23
|
274 filteredSACFParams.criterionForOmittingLags=3;
|
rmeddis@23
|
275 filteredSACFParams.plotACFsInterval=200;
|
rmeddis@23
|
276
|
rmeddis@23
|
277 if filteredSACFParams.plotACFs
|
rmeddis@23
|
278 % plot original waveform on ACF plot
|
rmeddis@23
|
279 figure(13), clf
|
rmeddis@23
|
280 subplot(4,1,1)
|
rmeddis@23
|
281 t=dt*(1:length(savedInputSignal));
|
rmeddis@23
|
282 plot(t,savedInputSignal)
|
rmeddis@23
|
283 xlim([0 t(end)])
|
rmeddis@23
|
284 title(['stimulus: ' num2str(signalRMSdb, '%4.0f') ' dB SPL']);
|
rmeddis@23
|
285 end
|
rmeddis@23
|
286
|
rmeddis@23
|
287 % plot original waveform on summary/smoothed ACF plot
|
rmeddis@23
|
288 figure(96), clf
|
rmeddis@23
|
289 subplot(2,1,1)
|
rmeddis@23
|
290 t=dt*(1:length(savedInputSignal));
|
rmeddis@23
|
291 plot(t,savedInputSignal)
|
rmeddis@23
|
292 xlim([0 t(end)])
|
rmeddis@23
|
293 title(['stimulus: ' num2str(signalRMSdb, '%4.0f') ' dB SPL']);
|
rmeddis@23
|
294
|
rmeddis@23
|
295
|
rmeddis@23
|
296 % compute ACF
|
rmeddis@23
|
297 switch saveAN_spikesOrProbability
|
rmeddis@23
|
298 case 'probability'
|
rmeddis@23
|
299 inputToACF=ANprobRateOutput.^0.5;
|
rmeddis@23
|
300 otherwise
|
rmeddis@23
|
301 inputToACF=ANoutput;
|
rmeddis@23
|
302 end
|
rmeddis@23
|
303
|
rmeddis@23
|
304 disp ('computing ACF...')
|
rmeddis@23
|
305 [P, BFlist, sacf, boundaryValue] = ...
|
rmeddis@23
|
306 filteredSACF(inputToACF, method, filteredSACFParams);
|
rmeddis@23
|
307 disp(' ACF done.')
|
rmeddis@23
|
308
|
rmeddis@23
|
309 % SACF
|
rmeddis@23
|
310 subplot(2,1,2)
|
rmeddis@23
|
311 imagesc(P)
|
rmeddis@23
|
312 ylabel('periodicities (Hz)')
|
rmeddis@23
|
313 xlabel('time (s)')
|
rmeddis@23
|
314 title(['running smoothed (root) SACF. ' saveAN_spikesOrProbability ' input'])
|
rmeddis@23
|
315 pt=[1 get(gca,'ytick')]; % force top xtick to show
|
rmeddis@23
|
316 set(gca,'ytick',pt)
|
rmeddis@23
|
317 set(gca,'ytickLabel', round(pitches(pt)))
|
rmeddis@23
|
318 tt=get(gca,'xtick');
|
rmeddis@23
|
319 set(gca,'xtickLabel', round(100*t(tt))/100)
|
rmeddis@23
|
320 end
|
rmeddis@23
|
321
|
rmeddis@23
|
322 path(restorePath)
|