rmeddis@0: function testAN rmeddis@0: % testIHC used either for IHC I/O function ... rmeddis@0: % or receptive field (doReceptiveFields=1) rmeddis@0: rmeddis@0: global experiment method stimulusParameters rmeddis@0: global IHC_VResp_VivoParams IHCpreSynapseParams rmeddis@0: global AN_IHCsynapseParams rmeddis@0: % global saveMembranePotential MacGregorMultiParams rmeddis@0: dbstop if error rmeddis@0: rmeddis@0: addpath (['..' filesep 'MAP'], ['..' filesep 'utilities'], ... rmeddis@0: ['..' filesep 'parameterStore'], ['..' filesep 'wavFileStore'],... rmeddis@0: ['..' filesep 'testPrograms']) rmeddis@0: rmeddis@0: levels=-10:10:80; rmeddis@0: % levels=80:10:90; rmeddis@0: nLevels=length(levels); rmeddis@0: rmeddis@0: toneDuration=.2; rmeddis@0: rampDuration=0.002; rmeddis@0: silenceDuration=.02; rmeddis@0: localPSTHbinwidth=0.001; rmeddis@0: rmeddis@0: % Use only the first frequency in the GUI targetFrequency box to defineBF rmeddis@0: targetFrequency=stimulusParameters.targetFrequency(1); rmeddis@0: BFlist=targetFrequency; rmeddis@0: rmeddis@0: AN_HSRonset=zeros(nLevels,1); rmeddis@0: AN_HSRsaturated=zeros(nLevels,1); rmeddis@0: AN_LSRonset=zeros(nLevels,1); rmeddis@0: AN_LSRsaturated=zeros(nLevels,1); rmeddis@0: CNLSRrate=zeros(nLevels,1); rmeddis@0: CNHSRsaturated=zeros(nLevels,1); rmeddis@0: ICHSRsaturated=zeros(nLevels,1); rmeddis@0: ICLSRsaturated=zeros(nLevels,1); rmeddis@0: vectorStrength=zeros(nLevels,1); rmeddis@0: rmeddis@0: AR=zeros(nLevels,1); rmeddis@0: MOC=zeros(nLevels,1); rmeddis@0: rmeddis@0: % ANoutput=zeros(200,200); rmeddis@0: rmeddis@0: figure(15), clf rmeddis@0: set(gcf,'position',[980 356 401 321]) rmeddis@0: figure(5), clf rmeddis@0: set(gcf,'position', [980 34 400 295]) rmeddis@0: drawnow rmeddis@0: rmeddis@0: levelNo=0; rmeddis@0: for leveldB=levels rmeddis@0: levelNo=levelNo+1; rmeddis@0: rmeddis@0: % sample rate should be amultiple of the targetFrequency for PSTH below rmeddis@0: sampleRate=50000; rmeddis@0: dt=1/sampleRate; rmeddis@0: period=1/targetFrequency; rmeddis@0: dt=dt*(dt/period)*round(period/dt); rmeddis@0: rmeddis@0: fprintf('%4.0f\t', leveldB) rmeddis@0: amp=28e-6*10^(leveldB/20); rmeddis@0: rmeddis@0: time=dt:dt:toneDuration; rmeddis@0: rampTime=dt:dt:rampDuration; rmeddis@0: ramp=[0.5*(1+cos(2*pi*rampTime/(2*rampDuration)+pi)) ... rmeddis@0: ones(1,length(time)-length(rampTime))]; rmeddis@0: ramp=ramp.*fliplr(ramp); rmeddis@0: rmeddis@0: silence=zeros(1,round(silenceDuration/dt)); rmeddis@0: rmeddis@0: % create signal (leveldB/ targetFrequency) rmeddis@0: inputSignal=amp*sin(2*pi*targetFrequency'*time); rmeddis@0: inputSignal= ramp.*inputSignal; rmeddis@0: inputSignal=[silence inputSignal]; rmeddis@0: rmeddis@0: %% run the model rmeddis@0: AN_spikesOrProbability='spikes'; rmeddis@0: MAPparamsName=experiment.name; rmeddis@0: showPlotsAndDetails=0; rmeddis@0: rmeddis@0: global ANoutput CNoutput ICoutput ICmembraneOutput tauCas rmeddis@0: global ARattenuation MOCattenuation rmeddis@0: rmeddis@0: MAP1_14(inputSignal, 1/dt, targetFrequency, ... rmeddis@0: MAPparamsName, AN_spikesOrProbability); rmeddis@0: rmeddis@0: nTaus=length(tauCas); rmeddis@0: rmeddis@0: %LSR (same as HSR if no LSR fibers present) rmeddis@0: [nANFibers nTimePoints]=size(ANoutput); rmeddis@0: dt=dt* length(inputSignal)/nTimePoints; rmeddis@0: rmeddis@0: numLSRfibers=nANFibers/nTaus; rmeddis@0: numHSRfibers=numLSRfibers; rmeddis@0: rmeddis@0: LSRspikes=ANoutput(1:numLSRfibers,:); rmeddis@0: PSTH=UTIL_makePSTH(LSRspikes, dt, localPSTHbinwidth); rmeddis@0: PSTHLSR=mean(PSTH,1)/localPSTHbinwidth; % across fibers rates rmeddis@0: PSTHtime=localPSTHbinwidth:localPSTHbinwidth:... rmeddis@0: localPSTHbinwidth*length(PSTH); rmeddis@0: AN_LSRonset(levelNo)= max(PSTHLSR); % peak in 5 ms window rmeddis@0: AN_LSRsaturated(levelNo)= mean(PSTHLSR(round(length(PSTH)/2):end)); rmeddis@0: rmeddis@0: % HSR rmeddis@0: HSRspikes= ANoutput(end- numHSRfibers+1:end, :); rmeddis@0: PSTH=UTIL_makePSTH(HSRspikes, dt, localPSTHbinwidth); rmeddis@0: PSTH=mean(PSTH,1)/localPSTHbinwidth; % sum across fibers (HSR only) rmeddis@0: AN_HSRonset(levelNo)= max(PSTH); rmeddis@0: AN_HSRsaturated(levelNo)= mean(PSTH(round(length(PSTH)/2): end)); rmeddis@0: rmeddis@0: figure(5), subplot(2,2,2) rmeddis@0: hold off, bar(PSTHtime,PSTH, 'b') rmeddis@0: hold on, bar(PSTHtime,PSTHLSR,'r') rmeddis@0: ylim([0 1000]) rmeddis@0: xlim([0 length(PSTH)*localPSTHbinwidth]) rmeddis@0: rmeddis@0: % AN - CV rmeddis@0: % CV is computed 5 times. Use the middle one (3) as most typical rmeddis@0: cvANHSR= UTIL_CV(HSRspikes, dt); rmeddis@0: rmeddis@0: % AN - vector strength rmeddis@0: PSTH=sum(HSRspikes); rmeddis@0: [PH, binTimes]=UTIL_periodHistogram... rmeddis@0: (PSTH, dt, targetFrequency); rmeddis@0: VS=UTIL_vectorStrength(PH); rmeddis@0: vectorStrength(levelNo)=VS; rmeddis@0: disp(['sat rate= ' num2str(AN_HSRsaturated(levelNo)) ... rmeddis@0: '; phase-locking VS = ' num2str(VS)]) rmeddis@0: title(['AN HSR: CV=' num2str(cvANHSR(3),'%5.2f') ... rmeddis@0: 'VS=' num2str(VS,'%5.2f')]) rmeddis@0: rmeddis@0: % CN - first-order neurons rmeddis@0: rmeddis@0: % CN LSR rmeddis@0: [nCNneurons c]=size(CNoutput); rmeddis@0: nLSRneurons=round(nCNneurons/nTaus); rmeddis@0: CNLSRspikes=CNoutput(1:nLSRneurons,:); rmeddis@0: PSTH=UTIL_makePSTH(CNLSRspikes, dt, localPSTHbinwidth); rmeddis@0: PSTH=sum(PSTH)/nLSRneurons; rmeddis@0: CNLSRrate(levelNo)=mean(PSTH(round(length(PSTH)/2):end))/localPSTHbinwidth; rmeddis@0: rmeddis@0: %CN HSR rmeddis@0: MacGregorMultiHSRspikes=... rmeddis@0: CNoutput(end-nLSRneurons:end,:); rmeddis@0: PSTH=UTIL_makePSTH(MacGregorMultiHSRspikes, dt, localPSTHbinwidth); rmeddis@0: PSTH=sum(PSTH)/nLSRneurons; rmeddis@0: PSTH=mean(PSTH,1)/localPSTHbinwidth; % sum across fibers (HSR only) rmeddis@0: rmeddis@0: CNHSRsaturated(levelNo)=mean(PSTH(length(PSTH)/2:end)); rmeddis@0: rmeddis@0: figure(5), subplot(2,2,3) rmeddis@0: bar(PSTHtime,PSTH) rmeddis@0: ylim([0 1000]) rmeddis@0: xlim([0 length(PSTH)*localPSTHbinwidth]) rmeddis@0: cvMMHSR= UTIL_CV(MacGregorMultiHSRspikes, dt); rmeddis@0: title(['CN CV= ' num2str(cvMMHSR(3),'%5.2f')]) rmeddis@0: rmeddis@0: % IC LSR rmeddis@0: [nICneurons c]=size(ICoutput); rmeddis@0: nLSRneurons=round(nICneurons/nTaus); rmeddis@0: ICLSRspikes=ICoutput(1:nLSRneurons,:); rmeddis@0: PSTH=UTIL_makePSTH(ICLSRspikes, dt, localPSTHbinwidth); rmeddis@0: ICLSRsaturated(levelNo)=mean(PSTH(round(length(PSTH)/2):end))/localPSTHbinwidth; rmeddis@0: rmeddis@0: %IC HSR rmeddis@0: MacGregorMultiHSRspikes=... rmeddis@0: ICoutput(end-nLSRneurons:end,:); rmeddis@0: PSTH=UTIL_makePSTH(MacGregorMultiHSRspikes, dt, localPSTHbinwidth); rmeddis@0: PSTH=sum(PSTH)/nLSRneurons; rmeddis@0: PSTH=mean(PSTH,1)/localPSTHbinwidth; % sum across fibers (HSR only) rmeddis@0: rmeddis@0: ICHSRsaturated(levelNo)=mean(PSTH(length(PSTH)/2:end)); rmeddis@0: rmeddis@0: AR(levelNo)=min(ARattenuation); rmeddis@0: MOC(levelNo)=min(MOCattenuation(length(MOCattenuation)/2:end)); rmeddis@0: rmeddis@0: time=dt:dt:dt*size(ICmembraneOutput,2); rmeddis@0: figure(5), subplot(2,2,4) rmeddis@0: plot(time,ICmembraneOutput(2, 1:end),'k') rmeddis@0: ylim([-0.07 0]) rmeddis@0: xlim([0 max(time)]) rmeddis@0: title(['IC ' num2str(leveldB,'%4.0f') 'dB']) rmeddis@0: drawnow rmeddis@0: rmeddis@0: figure(5), subplot(2,2,1) rmeddis@0: plot(20*log10(MOC), 'k'), rmeddis@0: title(' MOC'), ylabel('dB attenuation') rmeddis@0: ylim([-30 0]) rmeddis@0: rmeddis@0: rmeddis@0: end % level rmeddis@0: figure(5), subplot(2,2,1) rmeddis@0: plot(levels,20*log10(MOC), 'k'), rmeddis@0: title(' MOC'), ylabel('dB attenuation') rmeddis@0: ylim([-30 0]) rmeddis@0: xlim([0 max(levels)]) rmeddis@0: rmeddis@0: fprintf('\n') rmeddis@0: toneDuration=2; rmeddis@0: rampDuration=0.004; rmeddis@0: silenceDuration=.02; rmeddis@0: nRepeats=200; % no. of AN fibers rmeddis@0: fprintf('toneDuration %6.3f\n', toneDuration) rmeddis@0: fprintf(' %6.0f AN fibers (repeats)\n', nRepeats) rmeddis@0: fprintf('levels') rmeddis@0: fprintf('%6.2f\t', levels) rmeddis@0: fprintf('\n') rmeddis@0: rmeddis@0: rmeddis@0: % ---------------------------------------------------- display parameters rmeddis@0: rmeddis@0: figure(15), clf rmeddis@0: set(gcf,'position',[1000 356 381 321]) rmeddis@0: nRows=2; nCols=2; rmeddis@0: rmeddis@0: % AN rate - level ONSET functions rmeddis@0: subplot(nRows,nCols,1) rmeddis@0: plot(levels,AN_LSRonset,'ro'), hold on rmeddis@0: plot(levels,AN_HSRonset,'ko'), hold off rmeddis@0: ylim([0 1000]), xlim([min(levels) max(levels)]) rmeddis@0: ttl=['tauCa= ' num2str(IHCpreSynapseParams.tauCa)]; rmeddis@0: title( ttl) rmeddis@0: xlabel('level dB SPL'), ylabel('peak rate (sp/s)'), grid on rmeddis@0: text(0, 800, 'AN onset', 'fontsize', 16) rmeddis@0: rmeddis@0: % AN rate - level ADAPTED function rmeddis@0: subplot(nRows,nCols,2) rmeddis@0: plot(levels,AN_LSRsaturated, 'ro'), hold on rmeddis@0: plot(levels,AN_HSRsaturated, 'ko'), hold off rmeddis@0: ylim([0 400]) rmeddis@0: set(gca,'ytick',0:50:300) rmeddis@0: xlim([min(levels) max(levels)]) rmeddis@0: set(gca,'xtick',[levels(1):20:levels(end)]) rmeddis@0: % grid on rmeddis@0: ttl=[ 'spont=' num2str(mean(AN_HSRsaturated(1,:)),'%4.0f')... rmeddis@0: ' sat=' num2str(mean(AN_HSRsaturated(end,1)),'%4.0f')]; rmeddis@0: title( ttl) rmeddis@0: xlabel('level dB SPL'), ylabel ('adapted rate (sp/s)') rmeddis@0: text(0, 340, 'AN adapted', 'fontsize', 16), grid on rmeddis@0: rmeddis@0: % CN rate - level ADAPTED function rmeddis@0: subplot(nRows,nCols,3) rmeddis@0: plot(levels,CNLSRrate, 'ro'), hold on rmeddis@0: plot(levels,CNHSRsaturated, 'ko'), hold off rmeddis@0: ylim([0 400]) rmeddis@0: set(gca,'ytick',0:50:300) rmeddis@0: xlim([min(levels) max(levels)]) rmeddis@0: set(gca,'xtick',[levels(1):20:levels(end)]) rmeddis@0: % grid on rmeddis@0: ttl=[ 'spont=' num2str(mean(CNHSRsaturated(1,:)),'%4.0f') ' sat=' ... rmeddis@0: num2str(mean(CNHSRsaturated(end,1)),'%4.0f')]; rmeddis@0: title( ttl) rmeddis@0: xlabel('level dB SPL'), ylabel ('adapted rate (sp/s)') rmeddis@0: text(0, 350, 'CN', 'fontsize', 16), grid on rmeddis@0: rmeddis@0: % IC rate - level ADAPTED function rmeddis@0: subplot(nRows,nCols,4) rmeddis@0: plot(levels,ICLSRsaturated, 'ro'), hold on rmeddis@0: plot(levels,ICHSRsaturated, 'ko'), hold off rmeddis@0: ylim([0 400]) rmeddis@0: set(gca,'ytick',0:50:300) rmeddis@0: xlim([min(levels) max(levels)]) rmeddis@0: set(gca,'xtick',[levels(1):20:levels(end)]), grid on rmeddis@0: rmeddis@0: ttl=['spont=' num2str(mean(ICHSRsaturated(1,:)),'%4.0f') ... rmeddis@0: ' sat=' num2str(mean(ICHSRsaturated(end,1)),'%4.0f')]; rmeddis@0: title( ttl) rmeddis@0: xlabel('level dB SPL'), ylabel ('adapted rate (sp/s)') rmeddis@0: text(0, 350, 'IC', 'fontsize', 16) rmeddis@0: set(gcf,'name',' AN CN IC rate/level') rmeddis@0: rmeddis@0: UTIL_showStruct(IHCpreSynapseParams, 'IHCpreSynapseParams') rmeddis@0: UTIL_showStruct(AN_IHCsynapseParams, 'AN_IHCsynapseParams') rmeddis@0: rmeddis@0: fprintf('\n') rmeddis@0: disp('levels vectorStrength') rmeddis@0: fprintf('%3.0f \t %6.4f \n', [levels; vectorStrength']) rmeddis@0: fprintf('\n') rmeddis@0: fprintf('Phase locking, max vector strength= %6.4f\n\n',... rmeddis@0: max(vectorStrength)) rmeddis@0: rmeddis@0: allData=[ levels' AN_HSRonset AN_HSRsaturated... rmeddis@0: AN_LSRonset AN_LSRsaturated ... rmeddis@0: CNHSRsaturated CNLSRrate... rmeddis@0: ICHSRsaturated ICLSRsaturated]; rmeddis@0: fprintf('\n levels \tANHSR Onset \tANHSR adapted\tANLSR Onset \tANLSR adapted\tCNHSR\tCNLSR\tICHSR \tICLSR \n'); rmeddis@0: UTIL_printTabTable(round(allData)) rmeddis@0: fprintf('VS (phase locking)= \t%6.4f\n\n',... rmeddis@0: max(vectorStrength)) rmeddis@0: