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