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