annotate Copy_of_multithreshold 1.46/testAN.m @ 30:1a502830d462

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