annotate testPrograms/testANprob.m @ 38:c2204b18f4a2 tip

End nov big change
author Ray Meddis <rmeddis@essex.ac.uk>
date Mon, 28 Nov 2011 13:34:28 +0000
parents 25d53244d5c8
children
rev   line source
rmeddis@34 1 function testANprob(targetFrequency,BFlist, levels, ...
rmeddis@29 2 paramsName, paramChanges)
rmeddis@38 3 % testANprob generates rate/level functions for AN and brainstem units.
rmeddis@38 4 % also other information like PSTHs, MOC efferent activity levels.
rmeddis@38 5 % A 'probability' model is used.
rmeddis@38 6 % e.g.
rmeddis@34 7 % testANprob(1000,1000, -10:10:80, 'Normal')
rmeddis@34 8
rmeddis@29 9 global IHC_VResp_VivoParams IHC_cilia_RPParams IHCpreSynapseParams
rmeddis@29 10 global AN_IHCsynapseParams
rmeddis@32 11 global ANprobRateOutput dt ANtauCas
rmeddis@29 12 global ARattenuation MOCattenuation
rmeddis@29 13
rmeddis@29 14 AN_spikesOrProbability='probability';
rmeddis@29 15
rmeddis@29 16 dbstop if error
rmeddis@29 17 addpath (['..' filesep 'MAP'], ['..' filesep 'utilities'], ...
rmeddis@29 18 ['..' filesep 'parameterStore'], ['..' filesep 'wavFileStore'],...
rmeddis@29 19 ['..' filesep 'testPrograms'])
rmeddis@29 20
rmeddis@35 21 if nargin<5, paramChanges=[]; end
rmeddis@35 22 if nargin<4, paramsName='Normal'; end
rmeddis@35 23 if nargin<3, levels=-10:10:80; end
rmeddis@35 24 if nargin==0, targetFrequency=1000; BFlist=1000; end
rmeddis@29 25
rmeddis@29 26 nLevels=length(levels);
rmeddis@29 27
rmeddis@29 28 toneDuration=.2;
rmeddis@29 29 rampDuration=0.002;
rmeddis@29 30 silenceDuration=.02;
rmeddis@29 31 localPSTHbinwidth=0.001;
rmeddis@29 32
rmeddis@29 33 % Use only the first frequency in the GUI targetFrequency box to defineBF
rmeddis@29 34 % targetFrequency=stimulusParameters.targetFrequency(1);
rmeddis@29 35 % BFlist=targetFrequency;
rmeddis@29 36
rmeddis@29 37 AN_HSRonset=zeros(nLevels,1);
rmeddis@29 38 AN_HSRsaturated=zeros(nLevels,1);
rmeddis@29 39 AN_LSRonset=zeros(nLevels,1);
rmeddis@29 40 AN_LSRsaturated=zeros(nLevels,1);
rmeddis@29 41
rmeddis@29 42 AR=zeros(nLevels,1);
rmeddis@29 43 MOC=zeros(nLevels,1);
rmeddis@29 44
rmeddis@29 45 figure(15), clf
rmeddis@34 46 set(gcf,'position',[980 356 401 321])
rmeddis@29 47 drawnow
rmeddis@29 48
rmeddis@29 49 %% guarantee that the sample rate is at least 10 times the frequency
rmeddis@29 50 sampleRate=50000;
rmeddis@29 51 while sampleRate< 10* targetFrequency
rmeddis@29 52 sampleRate=sampleRate+10000;
rmeddis@29 53 end
rmeddis@29 54
rmeddis@29 55 %% adjust sample rate so that the pure tone stimulus has an integer
rmeddis@29 56 %% numver of epochs in a period
rmeddis@29 57 dt=1/sampleRate;
rmeddis@29 58 period=1/targetFrequency;
rmeddis@29 59
rmeddis@29 60 %% main computational loop (vary level)
rmeddis@29 61 levelNo=0;
rmeddis@29 62 for leveldB=levels
rmeddis@29 63 levelNo=levelNo+1;
rmeddis@29 64
rmeddis@29 65 fprintf('%4.0f\t', leveldB)
rmeddis@29 66 amp=28e-6*10^(leveldB/20);
rmeddis@29 67
rmeddis@29 68 time=dt:dt:toneDuration;
rmeddis@29 69 rampTime=dt:dt:rampDuration;
rmeddis@29 70 ramp=[0.5*(1+cos(2*pi*rampTime/(2*rampDuration)+pi)) ...
rmeddis@29 71 ones(1,length(time)-length(rampTime))];
rmeddis@29 72 ramp=ramp.*fliplr(ramp);
rmeddis@29 73
rmeddis@29 74 silence=zeros(1,round(silenceDuration/dt));
rmeddis@29 75
rmeddis@29 76 % create signal (leveldB/ targetFrequency)
rmeddis@29 77 inputSignal=amp*sin(2*pi*targetFrequency'*time);
rmeddis@29 78 inputSignal= ramp.*inputSignal;
rmeddis@29 79 inputSignal=[silence inputSignal];
rmeddis@29 80
rmeddis@29 81 %% run the model
rmeddis@29 82 showPlotsAndDetails=0;
rmeddis@29 83
rmeddis@29 84
rmeddis@29 85 MAP1_14(inputSignal, 1/dt, BFlist, ...
rmeddis@29 86 paramsName, AN_spikesOrProbability, paramChanges);
rmeddis@29 87
rmeddis@32 88 nTaus=length(ANtauCas);
rmeddis@29 89
rmeddis@29 90 %LSR (same as HSR if no LSR fibers present)
rmeddis@29 91 [nANFibers nTimePoints]=size(ANprobRateOutput);
rmeddis@29 92
rmeddis@29 93 numLSRfibers=1;
rmeddis@29 94 numHSRfibers=numLSRfibers;
rmeddis@29 95
rmeddis@29 96 LSRspikes=ANprobRateOutput(1:numLSRfibers,:);
rmeddis@29 97 PSTH=UTIL_PSTHmaker(LSRspikes, dt, localPSTHbinwidth);
rmeddis@29 98 PSTHLSR=PSTH/(localPSTHbinwidth/dt); % across fibers rates
rmeddis@29 99 PSTHtime=localPSTHbinwidth:localPSTHbinwidth:...
rmeddis@29 100 localPSTHbinwidth*length(PSTH);
rmeddis@29 101 AN_LSRonset(levelNo)= max(PSTHLSR); % peak in 5 ms window
rmeddis@29 102 AN_LSRsaturated(levelNo)= mean(PSTHLSR(round(length(PSTH)/2):end));
rmeddis@29 103
rmeddis@29 104 % HSR
rmeddis@29 105 HSRspikes= ANprobRateOutput(end- numHSRfibers+1:end, :);
rmeddis@29 106 PSTH=UTIL_PSTHmaker(HSRspikes, dt, localPSTHbinwidth);
rmeddis@29 107 PSTH=PSTH/(localPSTHbinwidth/dt); % sum across fibers (HSR only)
rmeddis@29 108 AN_HSRonset(levelNo)= max(PSTH);
rmeddis@29 109 AN_HSRsaturated(levelNo)= mean(PSTH(round(length(PSTH)/2): end));
rmeddis@29 110
rmeddis@29 111 figure(15), subplot(2,2,4)
rmeddis@35 112 hold off, bar(PSTHtime,PSTH, 'k')
rmeddis@29 113 hold on, bar(PSTHtime,PSTHLSR,'r')
rmeddis@29 114 ylim([0 1000])
rmeddis@29 115 xlim([0 length(PSTH)*localPSTHbinwidth])
rmeddis@29 116 set(gcf,'name',[num2str(BFlist), ' Hz: ' num2str(leveldB) ' dB']);
rmeddis@29 117
rmeddis@29 118 AR(levelNo)=min(ARattenuation);
rmeddis@29 119 MOC(levelNo)=min(MOCattenuation(length(MOCattenuation)/2:end));
rmeddis@29 120
rmeddis@29 121
rmeddis@29 122 figure(15), subplot(2,2,3)
rmeddis@34 123 plot(20*log10(MOC), 'k'), hold on
rmeddis@34 124 plot(20*log10(AR), 'r'), hold off
rmeddis@34 125 title(' MOC/AR'), ylabel('dB attenuation')
rmeddis@29 126 ylim([-30 0])
rmeddis@29 127
rmeddis@34 128 end % level
rmeddis@29 129
rmeddis@29 130 figure(15), subplot(2,2,3)
rmeddis@34 131 plot(levels,20*log10(MOC), 'k'), hold on
rmeddis@34 132 plot(levels,20*log10(AR), 'r'), hold off
rmeddis@34 133 title(' MOC/AR'), ylabel('dB attenuation')
rmeddis@29 134 ylim([-30 0])
rmeddis@29 135 xlim([0 max(levels)])
rmeddis@29 136
rmeddis@29 137 fprintf('\n')
rmeddis@29 138 toneDuration=2;
rmeddis@29 139 rampDuration=0.004;
rmeddis@29 140 silenceDuration=.02;
rmeddis@29 141 nRepeats=200; % no. of AN fibers
rmeddis@29 142 fprintf('toneDuration %6.3f\n', toneDuration)
rmeddis@29 143 fprintf(' %6.0f AN fibers (repeats)\n', nRepeats)
rmeddis@29 144 fprintf('levels')
rmeddis@29 145 fprintf('%6.2f\t', levels)
rmeddis@29 146 fprintf('\n')
rmeddis@29 147
rmeddis@29 148
rmeddis@29 149 % ---------------------------------------------------- display parameters
rmeddis@29 150
rmeddis@29 151
rmeddis@29 152 nRows=2; nCols=2;
rmeddis@29 153
rmeddis@29 154 % AN rate - level ONSET functions
rmeddis@29 155 subplot(nRows,nCols,1)
rmeddis@29 156 plot(levels,AN_LSRonset,'ro'), hold on
rmeddis@38 157 plot(levels,AN_HSRonset,'ko', 'MarkerEdgeColor','k', 'markerFaceColor','k'), hold off
rmeddis@29 158 ylim([0 1000]), xlim([min(levels) max(levels)])
rmeddis@29 159 ttl=['tauCa= ' num2str(IHCpreSynapseParams.tauCa)];
rmeddis@29 160 title( ttl)
rmeddis@29 161 xlabel('level dB SPL'), ylabel('peak rate (sp/s)'), grid on
rmeddis@34 162 text(0, 800, 'AN onset', 'fontsize', 14)
rmeddis@29 163
rmeddis@29 164 % AN rate - level ADAPTED function
rmeddis@29 165 subplot(nRows,nCols,2)
rmeddis@29 166 plot(levels,AN_LSRsaturated, 'ro'), hold on
rmeddis@38 167 plot(levels,AN_HSRsaturated, 'ko', 'MarkerEdgeColor','k', 'markerFaceColor','k'), hold off
rmeddis@35 168 maxYlim=340;
rmeddis@35 169 ylim([0 maxYlim])
rmeddis@29 170 set(gca,'ytick',0:50:300)
rmeddis@29 171 xlim([min(levels) max(levels)])
rmeddis@29 172 set(gca,'xtick',[levels(1):20:levels(end)])
rmeddis@29 173 % grid on
rmeddis@29 174 ttl=[ 'spont=' num2str(mean(AN_HSRsaturated(1,:)),'%4.0f')...
rmeddis@29 175 ' sat=' num2str(mean(AN_HSRsaturated(end,1)),'%4.0f')];
rmeddis@29 176 title( ttl)
rmeddis@29 177 xlabel('level dB SPL'), ylabel ('adapted rate (sp/s)')
rmeddis@35 178 text(0, maxYlim-50, 'AN adapted', 'fontsize', 14), grid on
rmeddis@29 179
rmeddis@29 180 allData=[ levels' AN_HSRonset AN_HSRsaturated...
rmeddis@29 181 AN_LSRonset AN_LSRsaturated ];
rmeddis@29 182 fprintf('\n levels \tANHSR Onset \tANHSR adapted\tANLSR Onset \tANLSR adapted\tCNHSR\tCNLSR\tICHSR \tICLSR \n');
rmeddis@29 183 UTIL_printTabTable(round(allData))
rmeddis@29 184
rmeddis@29 185
rmeddis@29 186 UTIL_showStruct(IHC_cilia_RPParams, 'IHC_cilia_RPParams')
rmeddis@29 187 UTIL_showStruct(IHCpreSynapseParams, 'IHCpreSynapseParams')
rmeddis@29 188 UTIL_showStruct(AN_IHCsynapseParams, 'AN_IHCsynapseParams')
rmeddis@29 189
rmeddis@29 190
rmeddis@29 191 allData=[ levels' AN_HSRonset AN_HSRsaturated...
rmeddis@29 192 AN_LSRonset AN_LSRsaturated ];
rmeddis@29 193 fprintf('\n levels \tANHSR Onset \tANHSR adapted\tANLSR Onset \tANLSR adapted\tCNHSR\tCNLSR\tICHSR \tICLSR \n');
rmeddis@29 194 UTIL_printTabTable(round(allData))
rmeddis@29 195