annotate utilities/UTIL_showMAP.m @ 27:d4a7675b0413

fixed MOC attenuation
author Ray Meddis <rmeddis@essex.ac.uk>
date Wed, 22 Jun 2011 12:02:45 +0100
parents b03ef38fe497
children 82fb37eb430e
rev   line source
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)