annotate multithreshold 1.46/testAN.m @ 13:9fd4960e743a

bug in testAN sorted
author Ray Meddis <rmeddis@essex.ac.uk>
date Wed, 01 Jun 2011 12:19:48 +0100
parents ecad0ea62b43
children 35af36fe0a35
rev   line source
rmeddis@9 1 function vectorStrength=testAN(targetFrequency,BFlist, levels)
rmeddis@0 2 % testIHC used either for IHC I/O function ...
rmeddis@0 3 % or receptive field (doReceptiveFields=1)
rmeddis@0 4
rmeddis@0 5 global experiment method stimulusParameters
rmeddis@9 6 global IHC_VResp_VivoParams IHC_cilia_RPParams IHCpreSynapseParams
rmeddis@0 7 global AN_IHCsynapseParams
rmeddis@13 8
rmeddis@0 9 dbstop if error
rmeddis@0 10
rmeddis@0 11 addpath (['..' filesep 'MAP'], ['..' filesep 'utilities'], ...
rmeddis@0 12 ['..' filesep 'parameterStore'], ['..' filesep 'wavFileStore'],...
rmeddis@0 13 ['..' filesep 'testPrograms'])
rmeddis@0 14
rmeddis@9 15 if nargin<3
rmeddis@9 16 levels=-10:10:80;
rmeddis@9 17 % levels=80:10:90;
rmeddis@9 18 end
rmeddis@9 19
rmeddis@0 20 nLevels=length(levels);
rmeddis@0 21
rmeddis@0 22 toneDuration=.2;
rmeddis@0 23 rampDuration=0.002;
rmeddis@0 24 silenceDuration=.02;
rmeddis@0 25 localPSTHbinwidth=0.001;
rmeddis@0 26
rmeddis@0 27 % Use only the first frequency in the GUI targetFrequency box to defineBF
rmeddis@9 28 % targetFrequency=stimulusParameters.targetFrequency(1);
rmeddis@9 29 % BFlist=targetFrequency;
rmeddis@0 30
rmeddis@0 31 AN_HSRonset=zeros(nLevels,1);
rmeddis@0 32 AN_HSRsaturated=zeros(nLevels,1);
rmeddis@0 33 AN_LSRonset=zeros(nLevels,1);
rmeddis@0 34 AN_LSRsaturated=zeros(nLevels,1);
rmeddis@0 35 CNLSRrate=zeros(nLevels,1);
rmeddis@0 36 CNHSRsaturated=zeros(nLevels,1);
rmeddis@0 37 ICHSRsaturated=zeros(nLevels,1);
rmeddis@0 38 ICLSRsaturated=zeros(nLevels,1);
rmeddis@0 39 vectorStrength=zeros(nLevels,1);
rmeddis@0 40
rmeddis@0 41 AR=zeros(nLevels,1);
rmeddis@0 42 MOC=zeros(nLevels,1);
rmeddis@0 43
rmeddis@0 44 % ANoutput=zeros(200,200);
rmeddis@0 45
rmeddis@0 46 figure(15), clf
rmeddis@0 47 set(gcf,'position',[980 356 401 321])
rmeddis@0 48 figure(5), clf
rmeddis@9 49 set(gcf,'position', [980 34 400 295])
rmeddis@9 50 set(gcf,'name',[num2str(BFlist), ' Hz']);
rmeddis@0 51 drawnow
rmeddis@0 52
rmeddis@13 53 %% guarantee that the sample rate is at least 10 times the frequency
rmeddis@13 54 sampleRate=50000;
rmeddis@13 55 while sampleRate< 10* targetFrequency
rmeddis@13 56 sampleRate=sampleRate+10000;
rmeddis@13 57 end
rmeddis@13 58
rmeddis@13 59 %% adjust sample rate so that the pure tone stimulus has an integer
rmeddis@13 60 %% numver of epochs in a period
rmeddis@13 61 dt=1/sampleRate;
rmeddis@13 62 period=1/targetFrequency;
rmeddis@13 63 ANspeedUpFactor=5; %anticipating MAP (needs clearing up)
rmeddis@13 64 ANdt=dt*ANspeedUpFactor;
rmeddis@13 65 ANdt=period/round(period/ANdt);
rmeddis@13 66 dt=ANdt/ANspeedUpFactor;
rmeddis@13 67 sampleRate=1/dt;
rmeddis@13 68 epochsPerPeriod=sampleRate*period;
rmeddis@13 69
rmeddis@13 70 %% main computational loop (vary level)
rmeddis@0 71 levelNo=0;
rmeddis@0 72 for leveldB=levels
rmeddis@0 73 levelNo=levelNo+1;
rmeddis@0 74
rmeddis@0 75 fprintf('%4.0f\t', leveldB)
rmeddis@0 76 amp=28e-6*10^(leveldB/20);
rmeddis@0 77
rmeddis@0 78 time=dt:dt:toneDuration;
rmeddis@0 79 rampTime=dt:dt:rampDuration;
rmeddis@0 80 ramp=[0.5*(1+cos(2*pi*rampTime/(2*rampDuration)+pi)) ...
rmeddis@0 81 ones(1,length(time)-length(rampTime))];
rmeddis@0 82 ramp=ramp.*fliplr(ramp);
rmeddis@0 83
rmeddis@0 84 silence=zeros(1,round(silenceDuration/dt));
rmeddis@0 85
rmeddis@0 86 % create signal (leveldB/ targetFrequency)
rmeddis@0 87 inputSignal=amp*sin(2*pi*targetFrequency'*time);
rmeddis@0 88 inputSignal= ramp.*inputSignal;
rmeddis@0 89 inputSignal=[silence inputSignal];
rmeddis@0 90
rmeddis@0 91 %% run the model
rmeddis@0 92 AN_spikesOrProbability='spikes';
rmeddis@0 93 MAPparamsName=experiment.name;
rmeddis@0 94 showPlotsAndDetails=0;
rmeddis@0 95
rmeddis@13 96 global ANoutput ANdt CNoutput ICoutput ICmembraneOutput tauCas
rmeddis@0 97 global ARattenuation MOCattenuation
rmeddis@9 98
rmeddis@9 99 MAP1_14(inputSignal, 1/dt, BFlist, ...
rmeddis@0 100 MAPparamsName, AN_spikesOrProbability);
rmeddis@0 101
rmeddis@0 102 nTaus=length(tauCas);
rmeddis@0 103
rmeddis@0 104 %LSR (same as HSR if no LSR fibers present)
rmeddis@0 105 [nANFibers nTimePoints]=size(ANoutput);
rmeddis@0 106
rmeddis@0 107 numLSRfibers=nANFibers/nTaus;
rmeddis@0 108 numHSRfibers=numLSRfibers;
rmeddis@0 109
rmeddis@0 110 LSRspikes=ANoutput(1:numLSRfibers,:);
rmeddis@13 111 PSTH=UTIL_makePSTH(LSRspikes, ANdt, localPSTHbinwidth);
rmeddis@0 112 PSTHLSR=mean(PSTH,1)/localPSTHbinwidth; % across fibers rates
rmeddis@0 113 PSTHtime=localPSTHbinwidth:localPSTHbinwidth:...
rmeddis@0 114 localPSTHbinwidth*length(PSTH);
rmeddis@0 115 AN_LSRonset(levelNo)= max(PSTHLSR); % peak in 5 ms window
rmeddis@0 116 AN_LSRsaturated(levelNo)= mean(PSTHLSR(round(length(PSTH)/2):end));
rmeddis@0 117
rmeddis@0 118 % HSR
rmeddis@0 119 HSRspikes= ANoutput(end- numHSRfibers+1:end, :);
rmeddis@13 120 PSTH=UTIL_makePSTH(HSRspikes, ANdt, localPSTHbinwidth);
rmeddis@0 121 PSTH=mean(PSTH,1)/localPSTHbinwidth; % sum across fibers (HSR only)
rmeddis@0 122 AN_HSRonset(levelNo)= max(PSTH);
rmeddis@0 123 AN_HSRsaturated(levelNo)= mean(PSTH(round(length(PSTH)/2): end));
rmeddis@0 124
rmeddis@0 125 figure(5), subplot(2,2,2)
rmeddis@0 126 hold off, bar(PSTHtime,PSTH, 'b')
rmeddis@0 127 hold on, bar(PSTHtime,PSTHLSR,'r')
rmeddis@0 128 ylim([0 1000])
rmeddis@9 129 xlim([0 length(PSTH)*localPSTHbinwidth])
rmeddis@9 130
rmeddis@0 131 % AN - CV
rmeddis@0 132 % CV is computed 5 times. Use the middle one (3) as most typical
rmeddis@13 133 cvANHSR= UTIL_CV(HSRspikes, ANdt);
rmeddis@0 134
rmeddis@0 135 % AN - vector strength
rmeddis@0 136 PSTH=sum(HSRspikes);
rmeddis@0 137 [PH, binTimes]=UTIL_periodHistogram...
rmeddis@13 138 (PSTH, ANdt, targetFrequency);
rmeddis@0 139 VS=UTIL_vectorStrength(PH);
rmeddis@0 140 vectorStrength(levelNo)=VS;
rmeddis@0 141 disp(['sat rate= ' num2str(AN_HSRsaturated(levelNo)) ...
rmeddis@0 142 '; phase-locking VS = ' num2str(VS)])
rmeddis@0 143 title(['AN HSR: CV=' num2str(cvANHSR(3),'%5.2f') ...
rmeddis@0 144 'VS=' num2str(VS,'%5.2f')])
rmeddis@0 145
rmeddis@0 146 % CN - first-order neurons
rmeddis@0 147
rmeddis@0 148 % CN LSR
rmeddis@0 149 [nCNneurons c]=size(CNoutput);
rmeddis@0 150 nLSRneurons=round(nCNneurons/nTaus);
rmeddis@0 151 CNLSRspikes=CNoutput(1:nLSRneurons,:);
rmeddis@13 152 PSTH=UTIL_makePSTH(CNLSRspikes, ANdt, localPSTHbinwidth);
rmeddis@0 153 PSTH=sum(PSTH)/nLSRneurons;
rmeddis@0 154 CNLSRrate(levelNo)=mean(PSTH(round(length(PSTH)/2):end))/localPSTHbinwidth;
rmeddis@0 155
rmeddis@0 156 %CN HSR
rmeddis@0 157 MacGregorMultiHSRspikes=...
rmeddis@0 158 CNoutput(end-nLSRneurons:end,:);
rmeddis@13 159 PSTH=UTIL_makePSTH(MacGregorMultiHSRspikes, ANdt, localPSTHbinwidth);
rmeddis@0 160 PSTH=sum(PSTH)/nLSRneurons;
rmeddis@0 161 PSTH=mean(PSTH,1)/localPSTHbinwidth; % sum across fibers (HSR only)
rmeddis@0 162
rmeddis@0 163 CNHSRsaturated(levelNo)=mean(PSTH(length(PSTH)/2:end));
rmeddis@0 164
rmeddis@0 165 figure(5), subplot(2,2,3)
rmeddis@0 166 bar(PSTHtime,PSTH)
rmeddis@0 167 ylim([0 1000])
rmeddis@0 168 xlim([0 length(PSTH)*localPSTHbinwidth])
rmeddis@13 169 cvMMHSR= UTIL_CV(MacGregorMultiHSRspikes, ANdt);
rmeddis@0 170 title(['CN CV= ' num2str(cvMMHSR(3),'%5.2f')])
rmeddis@0 171
rmeddis@0 172 % IC LSR
rmeddis@0 173 [nICneurons c]=size(ICoutput);
rmeddis@0 174 nLSRneurons=round(nICneurons/nTaus);
rmeddis@0 175 ICLSRspikes=ICoutput(1:nLSRneurons,:);
rmeddis@13 176 PSTH=UTIL_makePSTH(ICLSRspikes, ANdt, localPSTHbinwidth);
rmeddis@0 177 ICLSRsaturated(levelNo)=mean(PSTH(round(length(PSTH)/2):end))/localPSTHbinwidth;
rmeddis@0 178
rmeddis@0 179 %IC HSR
rmeddis@0 180 MacGregorMultiHSRspikes=...
rmeddis@0 181 ICoutput(end-nLSRneurons:end,:);
rmeddis@13 182 PSTH=UTIL_makePSTH(MacGregorMultiHSRspikes, ANdt, localPSTHbinwidth);
rmeddis@0 183 PSTH=sum(PSTH)/nLSRneurons;
rmeddis@0 184 PSTH=mean(PSTH,1)/localPSTHbinwidth; % sum across fibers (HSR only)
rmeddis@0 185
rmeddis@0 186 ICHSRsaturated(levelNo)=mean(PSTH(length(PSTH)/2:end));
rmeddis@0 187
rmeddis@0 188 AR(levelNo)=min(ARattenuation);
rmeddis@0 189 MOC(levelNo)=min(MOCattenuation(length(MOCattenuation)/2:end));
rmeddis@0 190
rmeddis@13 191 time=ANdt:ANdt:ANdt*size(ICmembraneOutput,2);
rmeddis@0 192 figure(5), subplot(2,2,4)
rmeddis@0 193 plot(time,ICmembraneOutput(2, 1:end),'k')
rmeddis@0 194 ylim([-0.07 0])
rmeddis@0 195 xlim([0 max(time)])
rmeddis@0 196 title(['IC ' num2str(leveldB,'%4.0f') 'dB'])
rmeddis@0 197 drawnow
rmeddis@9 198
rmeddis@0 199 figure(5), subplot(2,2,1)
rmeddis@0 200 plot(20*log10(MOC), 'k'),
rmeddis@0 201 title(' MOC'), ylabel('dB attenuation')
rmeddis@0 202 ylim([-30 0])
rmeddis@0 203
rmeddis@0 204
rmeddis@0 205 end % level
rmeddis@0 206 figure(5), subplot(2,2,1)
rmeddis@9 207 plot(levels,20*log10(MOC), 'k'),
rmeddis@9 208 title(' MOC'), ylabel('dB attenuation')
rmeddis@9 209 ylim([-30 0])
rmeddis@0 210 xlim([0 max(levels)])
rmeddis@0 211
rmeddis@0 212 fprintf('\n')
rmeddis@0 213 toneDuration=2;
rmeddis@0 214 rampDuration=0.004;
rmeddis@0 215 silenceDuration=.02;
rmeddis@0 216 nRepeats=200; % no. of AN fibers
rmeddis@0 217 fprintf('toneDuration %6.3f\n', toneDuration)
rmeddis@0 218 fprintf(' %6.0f AN fibers (repeats)\n', nRepeats)
rmeddis@0 219 fprintf('levels')
rmeddis@0 220 fprintf('%6.2f\t', levels)
rmeddis@0 221 fprintf('\n')
rmeddis@0 222
rmeddis@0 223
rmeddis@0 224 % ---------------------------------------------------- display parameters
rmeddis@0 225
rmeddis@0 226 figure(15), clf
rmeddis@0 227 nRows=2; nCols=2;
rmeddis@0 228
rmeddis@0 229 % AN rate - level ONSET functions
rmeddis@0 230 subplot(nRows,nCols,1)
rmeddis@0 231 plot(levels,AN_LSRonset,'ro'), hold on
rmeddis@0 232 plot(levels,AN_HSRonset,'ko'), hold off
rmeddis@0 233 ylim([0 1000]), xlim([min(levels) max(levels)])
rmeddis@0 234 ttl=['tauCa= ' num2str(IHCpreSynapseParams.tauCa)];
rmeddis@0 235 title( ttl)
rmeddis@0 236 xlabel('level dB SPL'), ylabel('peak rate (sp/s)'), grid on
rmeddis@0 237 text(0, 800, 'AN onset', 'fontsize', 16)
rmeddis@0 238
rmeddis@0 239 % AN rate - level ADAPTED function
rmeddis@0 240 subplot(nRows,nCols,2)
rmeddis@0 241 plot(levels,AN_LSRsaturated, 'ro'), hold on
rmeddis@0 242 plot(levels,AN_HSRsaturated, 'ko'), hold off
rmeddis@0 243 ylim([0 400])
rmeddis@0 244 set(gca,'ytick',0:50:300)
rmeddis@0 245 xlim([min(levels) max(levels)])
rmeddis@0 246 set(gca,'xtick',[levels(1):20:levels(end)])
rmeddis@0 247 % grid on
rmeddis@0 248 ttl=[ 'spont=' num2str(mean(AN_HSRsaturated(1,:)),'%4.0f')...
rmeddis@0 249 ' sat=' num2str(mean(AN_HSRsaturated(end,1)),'%4.0f')];
rmeddis@0 250 title( ttl)
rmeddis@0 251 xlabel('level dB SPL'), ylabel ('adapted rate (sp/s)')
rmeddis@0 252 text(0, 340, 'AN adapted', 'fontsize', 16), grid on
rmeddis@0 253
rmeddis@0 254 % CN rate - level ADAPTED function
rmeddis@0 255 subplot(nRows,nCols,3)
rmeddis@0 256 plot(levels,CNLSRrate, 'ro'), hold on
rmeddis@0 257 plot(levels,CNHSRsaturated, 'ko'), hold off
rmeddis@0 258 ylim([0 400])
rmeddis@0 259 set(gca,'ytick',0:50:300)
rmeddis@0 260 xlim([min(levels) max(levels)])
rmeddis@0 261 set(gca,'xtick',[levels(1):20:levels(end)])
rmeddis@0 262 % grid on
rmeddis@0 263 ttl=[ 'spont=' num2str(mean(CNHSRsaturated(1,:)),'%4.0f') ' sat=' ...
rmeddis@0 264 num2str(mean(CNHSRsaturated(end,1)),'%4.0f')];
rmeddis@0 265 title( ttl)
rmeddis@0 266 xlabel('level dB SPL'), ylabel ('adapted rate (sp/s)')
rmeddis@0 267 text(0, 350, 'CN', 'fontsize', 16), grid on
rmeddis@0 268
rmeddis@0 269 % IC rate - level ADAPTED function
rmeddis@0 270 subplot(nRows,nCols,4)
rmeddis@0 271 plot(levels,ICLSRsaturated, 'ro'), hold on
rmeddis@0 272 plot(levels,ICHSRsaturated, 'ko'), hold off
rmeddis@0 273 ylim([0 400])
rmeddis@0 274 set(gca,'ytick',0:50:300)
rmeddis@0 275 xlim([min(levels) max(levels)])
rmeddis@0 276 set(gca,'xtick',[levels(1):20:levels(end)]), grid on
rmeddis@0 277
rmeddis@9 278
rmeddis@0 279 ttl=['spont=' num2str(mean(ICHSRsaturated(1,:)),'%4.0f') ...
rmeddis@0 280 ' sat=' num2str(mean(ICHSRsaturated(end,1)),'%4.0f')];
rmeddis@0 281 title( ttl)
rmeddis@0 282 xlabel('level dB SPL'), ylabel ('adapted rate (sp/s)')
rmeddis@0 283 text(0, 350, 'IC', 'fontsize', 16)
rmeddis@0 284 set(gcf,'name',' AN CN IC rate/level')
rmeddis@0 285
rmeddis@9 286 peakVectorStrength=max(vectorStrength);
rmeddis@0 287
rmeddis@0 288 fprintf('\n')
rmeddis@0 289 disp('levels vectorStrength')
rmeddis@0 290 fprintf('%3.0f \t %6.4f \n', [levels; vectorStrength'])
rmeddis@0 291 fprintf('\n')
rmeddis@9 292 fprintf('Phase locking, max vector strength=\t %6.4f\n\n',...
rmeddis@0 293 max(vectorStrength))
rmeddis@0 294
rmeddis@0 295 allData=[ levels' AN_HSRonset AN_HSRsaturated...
rmeddis@0 296 AN_LSRonset AN_LSRsaturated ...
rmeddis@0 297 CNHSRsaturated CNLSRrate...
rmeddis@0 298 ICHSRsaturated ICLSRsaturated];
rmeddis@0 299 fprintf('\n levels \tANHSR Onset \tANHSR adapted\tANLSR Onset \tANLSR adapted\tCNHSR\tCNLSR\tICHSR \tICLSR \n');
rmeddis@0 300 UTIL_printTabTable(round(allData))
rmeddis@0 301 fprintf('VS (phase locking)= \t%6.4f\n\n',...
rmeddis@0 302 max(vectorStrength))
rmeddis@0 303
rmeddis@9 304 UTIL_showStruct(IHC_cilia_RPParams, 'IHC_cilia_RPParams')
rmeddis@9 305 UTIL_showStruct(IHCpreSynapseParams, 'IHCpreSynapseParams')
rmeddis@9 306 UTIL_showStruct(AN_IHCsynapseParams, 'AN_IHCsynapseParams')
rmeddis@9 307
rmeddis@9 308 fprintf('\n')
rmeddis@9 309 disp('levels vectorStrength')
rmeddis@9 310 fprintf('%3.0f \t %6.4f \n', [levels; vectorStrength'])
rmeddis@9 311 fprintf('\n')
rmeddis@9 312 fprintf('Phase locking, max vector strength= \t%6.4f\n\n',...
rmeddis@9 313 max(vectorStrength))
rmeddis@9 314
rmeddis@9 315 allData=[ levels' AN_HSRonset AN_HSRsaturated...
rmeddis@9 316 AN_LSRonset AN_LSRsaturated ...
rmeddis@9 317 CNHSRsaturated CNLSRrate...
rmeddis@9 318 ICHSRsaturated ICLSRsaturated];
rmeddis@9 319 fprintf('\n levels \tANHSR Onset \tANHSR adapted\tANLSR Onset \tANLSR adapted\tCNHSR\tCNLSR\tICHSR \tICLSR \n');
rmeddis@9 320 UTIL_printTabTable(round(allData))
rmeddis@9 321 fprintf('VS (phase locking)= \t%6.4f\n\n',...
rmeddis@9 322 max(vectorStrength))
rmeddis@9 323