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@32
|
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@35
|
15 % dbstop if warning
|
rmeddis@23
|
16
|
rmeddis@32
|
17 global dt ANdt savedBFlist saveAN_spikesOrProbability saveMAPparamsName...
|
rmeddis@32
|
18 savedInputSignal OMEextEarPressure TMoutput OMEoutput ARattenuation ...
|
rmeddis@23
|
19 DRNLoutput IHC_cilia_output IHCrestingCiliaCond IHCrestingV...
|
rmeddis@32
|
20 IHCoutput ANprobRateOutput ANoutput savePavailable ANtauCas ...
|
rmeddis@32
|
21 CNtauGk CNoutput ICoutput ICmembraneOutput ICfiberTypeRates ...
|
rmeddis@32
|
22 MOCattenuation
|
rmeddis@23
|
23 global OMEParams DRNLParams IHC_cilia_RPParams IHCpreSynapseParams
|
rmeddis@23
|
24 global AN_IHCsynapseParams MacGregorParams MacGregorMultiParams
|
rmeddis@32
|
25 global ICrate
|
rmeddis@23
|
26
|
rmeddis@23
|
27
|
rmeddis@23
|
28 restorePath=path;
|
rmeddis@23
|
29 addpath ( ['..' filesep 'utilities'], ['..' filesep 'parameterStore'])
|
rmeddis@23
|
30
|
rmeddis@23
|
31 if nargin<1
|
rmeddis@25
|
32 showMapOptions=[];
|
rmeddis@23
|
33 end
|
rmeddis@25
|
34 % defaults (plot staged outputs and print rates only) if options omitted
|
rmeddis@25
|
35 if ~isfield(showMapOptions,'printModelParameters')
|
rmeddis@32
|
36 showMapOptions.printModelParameters=0; end
|
rmeddis@25
|
37 if ~isfield(showMapOptions,'showModelOutput'),showMapOptions.showModelOutput=1;end
|
rmeddis@25
|
38 if ~isfield(showMapOptions,'printFiringRates'),showMapOptions.printFiringRates=1;end
|
rmeddis@25
|
39 if ~isfield(showMapOptions,'showACF'),showMapOptions.showACF=0;end
|
rmeddis@25
|
40 if ~isfield(showMapOptions,'showEfferent'),showMapOptions.showEfferent=0;end
|
rmeddis@25
|
41 if ~isfield(showMapOptions,'surfProbability'),showMapOptions.surfProbability=0;end
|
rmeddis@25
|
42 if ~isfield(showMapOptions,'fileName'),showMapOptions.fileName=[];end
|
rmeddis@25
|
43 if ~isfield(showMapOptions,'surfSpikes'),showMapOptions.surfSpikes=0;end
|
rmeddis@32
|
44 if ~isfield(showMapOptions,'ICrates'),showMapOptions.ICrates=0;end
|
rmeddis@23
|
45
|
rmeddis@26
|
46 %% send all model parameters to command window
|
rmeddis@25
|
47 if showMapOptions.printModelParameters
|
rmeddis@23
|
48 % Read parameters from MAPparams<***> file in 'parameterStore' folder
|
rmeddis@23
|
49 % and print out all parameters
|
rmeddis@26
|
50 if nargin>1
|
rmeddis@26
|
51 cmd=['MAPparams' saveMAPparamsName '(-1, 1/dt, 1, paramChanges);'];
|
rmeddis@26
|
52 eval(cmd);
|
rmeddis@26
|
53 else
|
rmeddis@26
|
54 cmd=['MAPparams' saveMAPparamsName '(-1, 1/dt, 1);'];
|
rmeddis@26
|
55 eval(cmd);
|
rmeddis@26
|
56 disp(' no parameter changes found')
|
rmeddis@26
|
57 end
|
rmeddis@23
|
58 end
|
rmeddis@23
|
59
|
rmeddis@26
|
60 %% summarise firing rates in command window
|
rmeddis@25
|
61 if showMapOptions.printFiringRates
|
rmeddis@23
|
62 %% print summary firing rates
|
rmeddis@35
|
63 fprintf('\n')
|
rmeddis@23
|
64 disp('summary')
|
rmeddis@23
|
65 disp(['AR: ' num2str(min(ARattenuation))])
|
rmeddis@23
|
66 disp(['MOC: ' num2str(min(min(MOCattenuation)))])
|
rmeddis@32
|
67 nANfiberTypes=length(ANtauCas);
|
rmeddis@23
|
68 if strcmp(saveAN_spikesOrProbability, 'spikes')
|
rmeddis@23
|
69 nANfibers=size(ANoutput,1);
|
rmeddis@23
|
70 nHSRfibers=nANfibers/nANfiberTypes;
|
rmeddis@23
|
71 duration=size(TMoutput,2)*dt;
|
rmeddis@32
|
72 disp(['AN(HSR): ' num2str(sum(sum(ANoutput(end-nHSRfibers+1:end,:)))/...
|
rmeddis@23
|
73 (nHSRfibers*duration))])
|
rmeddis@23
|
74
|
rmeddis@23
|
75 nCNneurons=size(CNoutput,1);
|
rmeddis@23
|
76 nHSRCNneuronss=nCNneurons/nANfiberTypes;
|
rmeddis@32
|
77 disp(['CN(HSR): ' num2str(sum(sum(CNoutput(end-nHSRCNneuronss+1:end,:)))...
|
rmeddis@23
|
78 /(nHSRCNneuronss*duration))])
|
rmeddis@32
|
79 nICneurons=size(ICoutput,1);
|
rmeddis@32
|
80 nHSRICneurons= round(nICneurons/nANfiberTypes);
|
rmeddis@35
|
81 ICrate=sum(sum(ICoutput(end-nHSRICneurons+1:end,:)))/duration/nHSRICneurons;
|
rmeddis@32
|
82 disp(['IC(HSR): ' num2str(ICrate)])
|
rmeddis@23
|
83 % disp(['IC by type: ' num2str(mean(ICfiberTypeRates,2)')])
|
rmeddis@23
|
84 else
|
rmeddis@32
|
85 HSRprobOutput= ANprobRateOutput(end-length(savedBFlist)+1:end,:);
|
rmeddis@27
|
86 disp(['AN(HSR): ' num2str(mean(mean(HSRprobOutput)))])
|
rmeddis@27
|
87 PSTH= UTIL_PSTHmakerb(HSRprobOutput, dt, 0.001);
|
rmeddis@27
|
88 disp(['max max AN: ' num2str(max(max(PSTH)))])
|
rmeddis@23
|
89 end
|
rmeddis@23
|
90 end
|
rmeddis@23
|
91
|
rmeddis@23
|
92
|
rmeddis@26
|
93 %% figure (99): display output from all model stages
|
rmeddis@25
|
94 if showMapOptions.showModelOutput
|
rmeddis@23
|
95 plotInstructions.figureNo=99;
|
rmeddis@35
|
96
|
rmeddis@35
|
97 % ignore zero elements in signal
|
rmeddis@35
|
98 signalRMS=mean(savedInputSignal(find(savedInputSignal)).^2)^0.5;
|
rmeddis@23
|
99 signalRMSdb=20*log10(signalRMS/20e-6);
|
rmeddis@23
|
100
|
rmeddis@23
|
101 % plot signal (1)
|
rmeddis@23
|
102 plotInstructions.displaydt=dt;
|
rmeddis@23
|
103 plotInstructions.numPlots=6;
|
rmeddis@23
|
104 plotInstructions.subPlotNo=1;
|
rmeddis@23
|
105 plotInstructions.title=...
|
rmeddis@35
|
106 ['stimulus (Pa). ' num2str(signalRMSdb, '%4.0f') ' dB SPL'];
|
rmeddis@23
|
107 r=size(savedInputSignal,1);
|
rmeddis@23
|
108 if r==1, savedInputSignal=savedInputSignal'; end
|
rmeddis@23
|
109 UTIL_plotMatrix(savedInputSignal', plotInstructions);
|
rmeddis@23
|
110
|
rmeddis@23
|
111 % stapes (2)
|
rmeddis@23
|
112 plotInstructions.subPlotNo=2;
|
rmeddis@35
|
113 plotInstructions.title= ['stapes displacement (m)'];
|
rmeddis@23
|
114 UTIL_plotMatrix(OMEoutput, plotInstructions);
|
rmeddis@23
|
115
|
rmeddis@23
|
116 % DRNL (3)
|
rmeddis@23
|
117 plotInstructions.subPlotNo=3;
|
rmeddis@23
|
118 plotInstructions.yValues= savedBFlist;
|
rmeddis@35
|
119 [r c]=size(DRNLoutput);
|
rmeddis@35
|
120 if r>1
|
rmeddis@35
|
121 plotInstructions.title= ['BM displacement'];
|
rmeddis@35
|
122 UTIL_plotMatrix(abs(DRNLoutput), plotInstructions);
|
rmeddis@35
|
123 else
|
rmeddis@35
|
124 plotInstructions.title= ['BM displacement. BF=' ...
|
rmeddis@35
|
125 num2str(savedBFlist) ' Hz'];
|
rmeddis@23
|
126 UTIL_plotMatrix(DRNLoutput, plotInstructions);
|
rmeddis@35
|
127 end
|
rmeddis@23
|
128
|
rmeddis@23
|
129 switch saveAN_spikesOrProbability
|
rmeddis@23
|
130 case 'spikes'
|
rmeddis@23
|
131 % AN (4)
|
rmeddis@23
|
132 plotInstructions.displaydt=ANdt;
|
rmeddis@23
|
133 plotInstructions.title='AN';
|
rmeddis@23
|
134 plotInstructions.subPlotNo=4;
|
rmeddis@23
|
135 plotInstructions.yLabel='BF';
|
rmeddis@23
|
136 plotInstructions.yValues= savedBFlist;
|
rmeddis@23
|
137 plotInstructions.rasterDotSize=1;
|
rmeddis@32
|
138 if length(ANtauCas)==2
|
rmeddis@23
|
139 plotInstructions.plotDivider=1;
|
rmeddis@23
|
140 else
|
rmeddis@23
|
141 plotInstructions.plotDivider=0;
|
rmeddis@23
|
142 end
|
rmeddis@23
|
143 if sum(sum(ANoutput))<100
|
rmeddis@23
|
144 plotInstructions.rasterDotSize=3;
|
rmeddis@23
|
145 end
|
rmeddis@23
|
146 UTIL_plotMatrix(ANoutput, plotInstructions);
|
rmeddis@23
|
147
|
rmeddis@23
|
148 % CN (5)
|
rmeddis@23
|
149 plotInstructions.displaydt=ANdt;
|
rmeddis@23
|
150 plotInstructions.subPlotNo=5;
|
rmeddis@23
|
151 plotInstructions.title='CN spikes';
|
rmeddis@23
|
152 if sum(sum(CNoutput))<100
|
rmeddis@23
|
153 plotInstructions.rasterDotSize=3;
|
rmeddis@23
|
154 end
|
rmeddis@23
|
155 UTIL_plotMatrix(CNoutput, plotInstructions);
|
rmeddis@23
|
156
|
rmeddis@23
|
157 % IC (6)
|
rmeddis@23
|
158 plotInstructions.displaydt=ANdt;
|
rmeddis@23
|
159 plotInstructions.subPlotNo=6;
|
rmeddis@35
|
160 plotInstructions.title='Brainstem 2nd level';
|
rmeddis@32
|
161 if size(ICoutput,1)>1
|
rmeddis@23
|
162 if sum(sum(ICoutput))<100
|
rmeddis@23
|
163 plotInstructions.rasterDotSize=3;
|
rmeddis@23
|
164 end
|
rmeddis@23
|
165 UTIL_plotMatrix(ICoutput, plotInstructions);
|
rmeddis@23
|
166 else
|
rmeddis@23
|
167 plotInstructions.title='IC (HSR) membrane potential';
|
rmeddis@23
|
168 plotInstructions.displaydt=dt;
|
rmeddis@23
|
169 plotInstructions.yLabel='V';
|
rmeddis@23
|
170 plotInstructions.zValuesRange= [-.1 0];
|
rmeddis@23
|
171 UTIL_plotMatrix(ICmembraneOutput, plotInstructions);
|
rmeddis@23
|
172 end
|
rmeddis@23
|
173
|
rmeddis@26
|
174 otherwise % AN rate based on probability of firing
|
rmeddis@26
|
175 PSTHbinWidth=0.001;
|
rmeddis@32
|
176 PSTH= UTIL_PSTHmakerb(ANprobRateOutput, dt, PSTHbinWidth);
|
rmeddis@35
|
177 % PSTH = makeANsmooth(PSTH, 1/PSTHbinWidth);
|
rmeddis@26
|
178 plotInstructions.displaydt=PSTHbinWidth;
|
rmeddis@23
|
179 plotInstructions.numPlots=2;
|
rmeddis@23
|
180 plotInstructions.subPlotNo=2;
|
rmeddis@23
|
181 plotInstructions.yLabel='BF';
|
rmeddis@35
|
182 plotInstructions.xLabel='time';
|
rmeddis@35
|
183 plotInstructions.zValuesRange= [0 300];
|
rmeddis@23
|
184 if nANfiberTypes>1,
|
rmeddis@23
|
185 plotInstructions.yLabel='LSR HSR';
|
rmeddis@23
|
186 plotInstructions.plotDivider=1;
|
rmeddis@23
|
187 end
|
rmeddis@26
|
188 plotInstructions.title='AN - spike rate';
|
rmeddis@26
|
189 UTIL_plotMatrix(PSTH, plotInstructions);
|
rmeddis@35
|
190 shading interp
|
rmeddis@35
|
191 colorbar('southOutside')
|
rmeddis@23
|
192 end
|
rmeddis@35
|
193 set(gcf,'name','MAP output')
|
rmeddis@23
|
194 end
|
rmeddis@23
|
195
|
rmeddis@32
|
196 if showMapOptions.surfProbability &&...
|
rmeddis@32
|
197 strcmp(saveAN_spikesOrProbability,'probability') && ...
|
rmeddis@32
|
198 length(savedBFlist)>2
|
rmeddis@23
|
199 %% surface plot of probability
|
rmeddis@32
|
200 % select only HSR fibers
|
rmeddis@32
|
201 figure(97), clf
|
rmeddis@32
|
202 HSRprobOutput= ANprobRateOutput(end-length(savedBFlist)+1:end,:);
|
rmeddis@32
|
203 PSTHbinWidth=0.001;
|
rmeddis@32
|
204 PSTH=UTIL_PSTHmakerb(HSRprobOutput, ANdt, PSTHbinWidth);
|
rmeddis@32
|
205 [nY nX]=size(PSTH);
|
rmeddis@32
|
206 time=PSTHbinWidth*(1:nX);
|
rmeddis@32
|
207 surf(time, savedBFlist, PSTH)
|
rmeddis@32
|
208 shading interp
|
rmeddis@32
|
209 set(gca, 'yScale','log')
|
rmeddis@32
|
210 xlim([0 max(time)])
|
rmeddis@32
|
211 ylim([0 max(savedBFlist)])
|
rmeddis@32
|
212 zlim([0 1000])
|
rmeddis@32
|
213 xlabel('time (s)')
|
rmeddis@32
|
214 ylabel('best frequency (Hz)')
|
rmeddis@32
|
215 zlabel('spike rate')
|
rmeddis@32
|
216 view([-20 60])
|
rmeddis@32
|
217 % view([0 90])
|
rmeddis@32
|
218 disp(['max max AN: ' num2str(max(max(PSTH)))])
|
rmeddis@27
|
219
|
rmeddis@32
|
220 title (['firing probability of HSR fibers only. Level= ' ...
|
rmeddis@32
|
221 num2str(signalRMSdb,'% 3.0f') ' dB'])
|
rmeddis@35
|
222 colorbar('southOutside')
|
rmeddis@23
|
223 end
|
rmeddis@23
|
224
|
rmeddis@35
|
225 %% surface plot of AN spikes
|
rmeddis@35
|
226 if showMapOptions.surfSpikes ...
|
rmeddis@35
|
227 && strcmp(saveAN_spikesOrProbability, 'spikes')
|
rmeddis@25
|
228 figure(97), clf
|
rmeddis@25
|
229 % select only HSR fibers at the bottom of the matrix
|
rmeddis@25
|
230 ANoutput= ANoutput(end-length(savedBFlist)+1:end,:);
|
rmeddis@26
|
231 PSTHbinWidth=0.005; % 1 ms bins
|
rmeddis@26
|
232 PSTH=UTIL_makePSTH(ANoutput, ANdt, PSTHbinWidth);
|
rmeddis@25
|
233 [nY nX]=size(PSTH);
|
rmeddis@25
|
234 time=PSTHbinWidth*(1:nX);
|
rmeddis@25
|
235 surf(time, savedBFlist, PSTH)
|
rmeddis@25
|
236 shading interp
|
rmeddis@25
|
237 set(gca, 'yScale','log')
|
rmeddis@25
|
238 xlim([0 max(time)])
|
rmeddis@25
|
239 ylim([0 max(savedBFlist)])
|
rmeddis@32
|
240 % zlim([0 1000])
|
rmeddis@25
|
241 xlabel('time (s)')
|
rmeddis@25
|
242 ylabel('best frequency (Hz)')
|
rmeddis@25
|
243 zlabel('spike rate')
|
rmeddis@25
|
244 view([-20 60])
|
rmeddis@25
|
245 % view([0 90])
|
rmeddis@25
|
246 title ([showMapOptions.fileName ': ' num2str(signalRMSdb,'% 3.0f') ' dB'])
|
rmeddis@35
|
247 set(97,'name', 'spikes surface plot')
|
rmeddis@25
|
248 end
|
rmeddis@25
|
249
|
rmeddis@23
|
250
|
rmeddis@26
|
251 %% figure(98) plot efferent control values as dB
|
rmeddis@25
|
252 if showMapOptions.showEfferent
|
rmeddis@23
|
253 plotInstructions=[];
|
rmeddis@23
|
254 plotInstructions.figureNo=98;
|
rmeddis@23
|
255 figure(98), clf
|
rmeddis@23
|
256 plotInstructions.displaydt=dt;
|
rmeddis@35
|
257 plotInstructions.numPlots=4;
|
rmeddis@23
|
258 plotInstructions.subPlotNo=1;
|
rmeddis@35
|
259 plotInstructions.zValuesRange= [-1 1];
|
rmeddis@35
|
260 plotInstructions.title= ['RMS level='...
|
rmeddis@35
|
261 num2str(signalRMSdb, '%4.0f') ' dB SPL'];
|
rmeddis@35
|
262 UTIL_plotMatrix(savedInputSignal', plotInstructions);
|
rmeddis@35
|
263
|
rmeddis@35
|
264
|
rmeddis@35
|
265 plotInstructions.subPlotNo=2;
|
rmeddis@23
|
266 plotInstructions.zValuesRange=[ -25 0];
|
rmeddis@35
|
267 plotInstructions.title= ['AR stapes attenuation (dB); tau='...
|
rmeddis@35
|
268 num2str(OMEParams.ARtau, '%4.3f') ' s'];
|
rmeddis@23
|
269 UTIL_plotMatrix(20*log10(ARattenuation), plotInstructions);
|
rmeddis@23
|
270
|
rmeddis@35
|
271 % MOCattenuation
|
rmeddis@35
|
272 plotInstructions.numPlots=2;
|
rmeddis@23
|
273 plotInstructions.subPlotNo=2;
|
rmeddis@23
|
274 plotInstructions.yValues= savedBFlist;
|
rmeddis@35
|
275 plotInstructions.yLabel= 'dB';
|
rmeddis@35
|
276 if strcmp(saveAN_spikesOrProbability,'spikes')
|
rmeddis@35
|
277 rate2atten=DRNLParams.rateToAttenuationFactor;
|
rmeddis@35
|
278 plotInstructions.title= ['MOC atten; tau=' ...
|
rmeddis@35
|
279 num2str(DRNLParams.MOCtau) '; factor='...
|
rmeddis@35
|
280 num2str(rate2atten, '%6.4f')];
|
rmeddis@35
|
281 else
|
rmeddis@35
|
282 rate2atten=DRNLParams.rateToAttenuationFactorProb;
|
rmeddis@35
|
283 plotInstructions.title= ['MOC atten; tauProb=' ...
|
rmeddis@35
|
284 num2str(DRNLParams.MOCtauProb) '; factor='...
|
rmeddis@35
|
285 num2str(rate2atten, '%6.4f')];
|
rmeddis@35
|
286 end
|
rmeddis@35
|
287 plotInstructions.zValuesRange=[0 -DRNLParams.minMOCattenuationdB+5];
|
rmeddis@35
|
288 UTIL_plotMatrix(-20*log10(MOCattenuation), plotInstructions);
|
rmeddis@35
|
289 hold on
|
rmeddis@35
|
290 [r c]=size(MOCattenuation);
|
rmeddis@35
|
291 if r>2
|
rmeddis@35
|
292 colorbar('southOutside')
|
rmeddis@35
|
293 end
|
rmeddis@35
|
294 set(plotInstructions.figureNo, 'name', 'AR/ MOC')
|
rmeddis@35
|
295
|
rmeddis@35
|
296 binwidth=0.1;
|
rmeddis@35
|
297 [PSTH ]=UTIL_PSTHmaker(20*log10(MOCattenuation), dt, binwidth);
|
rmeddis@35
|
298 PSTH=PSTH*length(PSTH)/length(MOCattenuation);
|
rmeddis@35
|
299 t=binwidth:binwidth:binwidth*length(PSTH);
|
rmeddis@35
|
300 fprintf('\n\n')
|
rmeddis@35
|
301 % UTIL_printTabTable([t' PSTH'])
|
rmeddis@35
|
302 % fprintf('\n\n')
|
rmeddis@35
|
303
|
rmeddis@23
|
304 end
|
rmeddis@23
|
305
|
rmeddis@23
|
306 %% ACF plot if required
|
rmeddis@25
|
307 if showMapOptions.showACF
|
rmeddis@23
|
308 tic
|
rmeddis@23
|
309 method.dt=dt;
|
rmeddis@23
|
310 method.segmentNo=1;
|
rmeddis@23
|
311 method.nonlinCF=savedBFlist;
|
rmeddis@23
|
312
|
rmeddis@23
|
313 minPitch= 80; maxPitch= 4000; numPitches=100; % specify lags
|
rmeddis@23
|
314 pitches=10.^ linspace(log10(minPitch), log10(maxPitch),numPitches);
|
rmeddis@23
|
315 pitches=fliplr(pitches);
|
rmeddis@23
|
316 filteredSACFParams.lags=1./pitches; % autocorrelation lags vector
|
rmeddis@23
|
317 filteredSACFParams.acfTau= .003; % time constant of running ACF
|
rmeddis@23
|
318 filteredSACFParams.lambda= 0.12; % slower filter to smooth ACF
|
rmeddis@23
|
319 filteredSACFParams.lambda= 0.01; % slower filter to smooth ACF
|
rmeddis@23
|
320
|
rmeddis@23
|
321 filteredSACFParams.plotACFs=0; % special plot (see code)
|
rmeddis@23
|
322 filteredSACFParams.plotFilteredSACF=0; % 0 plots unfiltered ACFs
|
rmeddis@23
|
323 filteredSACFParams.plotMoviePauses=.3; % special plot (see code)
|
rmeddis@23
|
324
|
rmeddis@23
|
325 filteredSACFParams.usePressnitzer=0; % attenuates ACF at long lags
|
rmeddis@23
|
326 filteredSACFParams.lagsProcedure= 'useAllLags';
|
rmeddis@23
|
327 % filteredSACFParams.lagsProcedure= 'useBernsteinLagWeights';
|
rmeddis@23
|
328 % filteredSACFParams.lagsProcedure= 'omitShortLags';
|
rmeddis@23
|
329 filteredSACFParams.criterionForOmittingLags=3;
|
rmeddis@23
|
330 filteredSACFParams.plotACFsInterval=200;
|
rmeddis@23
|
331
|
rmeddis@23
|
332 if filteredSACFParams.plotACFs
|
rmeddis@23
|
333 % plot original waveform on ACF plot
|
rmeddis@23
|
334 figure(13), clf
|
rmeddis@23
|
335 subplot(4,1,1)
|
rmeddis@23
|
336 t=dt*(1:length(savedInputSignal));
|
rmeddis@23
|
337 plot(t,savedInputSignal)
|
rmeddis@23
|
338 xlim([0 t(end)])
|
rmeddis@23
|
339 title(['stimulus: ' num2str(signalRMSdb, '%4.0f') ' dB SPL']);
|
rmeddis@23
|
340 end
|
rmeddis@23
|
341
|
rmeddis@23
|
342 % plot original waveform on summary/smoothed ACF plot
|
rmeddis@23
|
343 figure(96), clf
|
rmeddis@23
|
344 subplot(2,1,1)
|
rmeddis@23
|
345 t=dt*(1:length(savedInputSignal));
|
rmeddis@23
|
346 plot(t,savedInputSignal)
|
rmeddis@23
|
347 xlim([0 t(end)])
|
rmeddis@23
|
348 title(['stimulus: ' num2str(signalRMSdb, '%4.0f') ' dB SPL']);
|
rmeddis@23
|
349
|
rmeddis@23
|
350
|
rmeddis@23
|
351 % compute ACF
|
rmeddis@23
|
352 switch saveAN_spikesOrProbability
|
rmeddis@23
|
353 case 'probability'
|
rmeddis@23
|
354 inputToACF=ANprobRateOutput.^0.5;
|
rmeddis@23
|
355 otherwise
|
rmeddis@23
|
356 inputToACF=ANoutput;
|
rmeddis@23
|
357 end
|
rmeddis@23
|
358
|
rmeddis@23
|
359 disp ('computing ACF...')
|
rmeddis@23
|
360 [P, BFlist, sacf, boundaryValue] = ...
|
rmeddis@23
|
361 filteredSACF(inputToACF, method, filteredSACFParams);
|
rmeddis@23
|
362 disp(' ACF done.')
|
rmeddis@23
|
363
|
rmeddis@23
|
364 % SACF
|
rmeddis@23
|
365 subplot(2,1,2)
|
rmeddis@23
|
366 imagesc(P)
|
rmeddis@23
|
367 ylabel('periodicities (Hz)')
|
rmeddis@23
|
368 xlabel('time (s)')
|
rmeddis@23
|
369 title(['running smoothed (root) SACF. ' saveAN_spikesOrProbability ' input'])
|
rmeddis@23
|
370 pt=[1 get(gca,'ytick')]; % force top xtick to show
|
rmeddis@23
|
371 set(gca,'ytick',pt)
|
rmeddis@23
|
372 set(gca,'ytickLabel', round(pitches(pt)))
|
rmeddis@23
|
373 tt=get(gca,'xtick');
|
rmeddis@23
|
374 set(gca,'xtickLabel', round(100*t(tt))/100)
|
rmeddis@23
|
375 end
|
rmeddis@23
|
376
|
rmeddis@23
|
377 path(restorePath)
|
rmeddis@32
|
378
|
rmeddis@35
|
379
|
rmeddis@32
|
380 %% IC chopper analysis
|
rmeddis@35
|
381 % global ICrate
|
rmeddis@35
|
382 % if showMapOptions.ICrates
|
rmeddis@35
|
383 % [r nEpochs]=size(ICoutput);
|
rmeddis@35
|
384 % ICrate=zeros(1,length(CNtauGk));
|
rmeddis@35
|
385 % % convert ICoutput to a 4-D matrix (time, CNtau, BF, fiberType)
|
rmeddis@35
|
386 % % NB only one IC unit for any combination.
|
rmeddis@35
|
387 % y=reshape(ICoutput', ...
|
rmeddis@35
|
388 % nEpochs, length(CNtauGk),length(savedBFlist),length(ANtauCas));
|
rmeddis@35
|
389 % for i=1:length(CNtauGk)
|
rmeddis@35
|
390 % ICrate(i)=sum(sum(sum(y(:,i,:,:))))/duration;
|
rmeddis@35
|
391 % fprintf('%10.5f\t%6.0f\n', CNtauGk(i), ICrate(i))
|
rmeddis@35
|
392 % end
|
rmeddis@35
|
393 % figure(95), plot(CNtauGk,ICrate)
|
rmeddis@35
|
394 % title ('ICrate'), xlabel('CNtauGk'), ylabel('ICrate')
|
rmeddis@35
|
395 % end
|
rmeddis@35
|
396
|
rmeddis@35
|
397 function ANsmooth = makeANsmooth(ANresponse, sampleRate, winSize, hopSize)
|
rmeddis@35
|
398 if nargin < 3
|
rmeddis@35
|
399 winSize = 25; %default 25 ms window
|
rmeddis@35
|
400 end
|
rmeddis@35
|
401 if nargin < 4
|
rmeddis@35
|
402 hopSize = 10; %default 10 ms jump between windows
|
rmeddis@35
|
403 end
|
rmeddis@35
|
404
|
rmeddis@35
|
405 winSizeSamples = round(winSize*sampleRate/1000);
|
rmeddis@35
|
406 hopSizeSamples = round(hopSize*sampleRate/1000);
|
rmeddis@35
|
407
|
rmeddis@35
|
408 % smooth
|
rmeddis@35
|
409 hann = hanning(winSizeSamples);
|
rmeddis@35
|
410
|
rmeddis@35
|
411 ANsmooth = [];%Cannot pre-allocate a size as it is unknown until the enframing
|
rmeddis@35
|
412 for chan = 1:size(ANresponse,1)
|
rmeddis@35
|
413 f = enframe(ANresponse(chan,:), hann, hopSizeSamples);
|
rmeddis@35
|
414 ANsmooth(chan,:) = mean(f,2)'; %#ok<AGROW> see above comment
|
rmeddis@35
|
415 end
|
rmeddis@35
|
416 % end% ------ OF makeANsmooth
|