rmeddis@0: function testPeriphery (BMlocations, paramsName) rmeddis@0: % testBM generates input output functions for DRNL model for any number rmeddis@0: % of locations. rmeddis@0: % Computations are bast on a single channel model (channelBFs=BF) rmeddis@0: % peak displacement (peakAmp) is measured. rmeddis@0: % if DRNLParams.useMOC is chosen, the full model is run (slow) rmeddis@0: % otherwise only DRNL is computed. rmeddis@0: % Tuning curves are generated based on a range of frequencies reletove to rmeddis@0: % the BF of the location. rmeddis@0: % rmeddis@0: rmeddis@0: global DRNLParams rmeddis@0: rmeddis@0: savePath=path; rmeddis@0: rmeddis@0: addpath (['..' filesep 'utilities'],['..' filesep 'MAP']) rmeddis@0: rmeddis@0: levels=-10:10:90; nLevels=length(levels); rmeddis@0: % levels= 50; nLevels=length(levels); rmeddis@0: rmeddis@0: % relativeFrequencies=[0.25 .5 .75 1 1.25 1.5 2]; rmeddis@0: relativeFrequencies=1; rmeddis@0: rmeddis@0: % refBMdisplacement is the displacement of the BM at threshold rmeddis@0: % 1 nm disp at threshold (9 kHz, Ruggero) rmeddis@0: refBMdisplacement= 1e-8; % adjusted for 10 nm at 1 kHz rmeddis@0: rmeddis@0: toneDuration=.200; rmeddis@0: rampDuration=0.01; rmeddis@0: silenceDuration=0.01; rmeddis@0: rmeddis@0: sampleRate=30000; rmeddis@0: rmeddis@0: dbstop if error rmeddis@0: figure(3), clf rmeddis@0: % set(gcf,'position',[276 33 331 645]) rmeddis@0: set(gcf,'name','DRNL - BM') rmeddis@0: rmeddis@0: finalSummary=[]; rmeddis@0: nBFs=length(BMlocations); rmeddis@0: BFno=0; plotCount=0; rmeddis@0: for BF=BMlocations rmeddis@0: BFno=BFno+1; rmeddis@0: plotCount=plotCount+nBFs; rmeddis@0: stimulusFrequencies=BF* relativeFrequencies; rmeddis@0: nFrequencies=length(stimulusFrequencies); rmeddis@0: rmeddis@0: peakAmpBM=zeros(nLevels,nFrequencies); rmeddis@0: peakAmpBMdB=NaN(nLevels,nFrequencies); rmeddis@0: peakEfferent=NaN(nLevels,nFrequencies); rmeddis@0: peakAREfferent=NaN(nLevels,nFrequencies); rmeddis@0: rmeddis@0: rmeddis@0: levelNo=0; rmeddis@0: for leveldB=levels rmeddis@0: disp(['level= ' num2str(leveldB)]) rmeddis@0: levelNo=levelNo+1; rmeddis@0: rmeddis@0: freqNo=0; rmeddis@0: for frequency=stimulusFrequencies rmeddis@0: freqNo=freqNo+1; rmeddis@0: rmeddis@0: % Generate stimuli rmeddis@0: globalStimParams.FS=sampleRate; rmeddis@0: globalStimParams.overallDuration=... rmeddis@0: toneDuration+silenceDuration; % s rmeddis@0: stim.type='tone'; rmeddis@0: stim.phases='sin'; rmeddis@0: stim.toneDuration=toneDuration; rmeddis@0: stim.frequencies=frequency; rmeddis@0: stim.amplitudesdB=leveldB; rmeddis@0: stim.beginSilence=silenceDuration; rmeddis@0: stim.rampOnDur=rampDuration; rmeddis@0: stim.rampOffDur=rampDuration; rmeddis@0: doPlot=0; rmeddis@0: inputSignal=stimulusCreate(globalStimParams, stim, doPlot); rmeddis@0: inputSignal=inputSignal(:,1)'; rmeddis@0: rmeddis@0: %% run the model rmeddis@0: MAPparamsName=paramsName; rmeddis@0: AN_spikesOrProbability='probability'; rmeddis@0: % spikes are slow but can be used to study MOC using IC units rmeddis@0: % AN_spikesOrProbability='spikes'; rmeddis@0: rmeddis@0: global DRNLoutput MOCattenuation ARattenuation IHCoutput rmeddis@0: MAP1_14(inputSignal, sampleRate, BF, ... rmeddis@0: MAPparamsName, AN_spikesOrProbability); rmeddis@0: rmeddis@0: DRNLresponse=IHCoutput; rmeddis@0: peakAmp=max(max(... rmeddis@0: DRNLresponse(:, end-round(length(DRNLresponse)/2):end))); rmeddis@0: peakAmpBM(levelNo,freqNo)=peakAmp; rmeddis@0: if peakAmp>0 rmeddis@0: peakAmpBMdB(levelNo,freqNo)=... rmeddis@0: 20*log10(peakAmp/refBMdisplacement); rmeddis@0: else rmeddis@0: peakAmpBMdB(levelNo,freqNo)=peakAmp; rmeddis@0: end rmeddis@0: peakEfferent(levelNo,freqNo)=min(min(MOCattenuation)); rmeddis@0: peakAREfferent(levelNo,freqNo)=min(min(ARattenuation)); rmeddis@0: rmeddis@0: end % tone frequency rmeddis@0: end % level rmeddis@0: rmeddis@0: %% analyses results and plot rmeddis@0: rmeddis@0: % BM I/O plot (top panel) rmeddis@0: figure(3) rmeddis@0: subplot(3,nBFs,BFno), cla rmeddis@0: plot(levels,peakAmpBMdB, 'linewidth',2) rmeddis@0: hold on, plot(levels, repmat(refBMdisplacement,1,length(levels))) rmeddis@0: hold off rmeddis@0: title(['BF=' num2str(BF,'%5.0f') ' - ' paramsName]) rmeddis@0: xlabel('level') rmeddis@0: % set(gca,'xtick',levels), grid on rmeddis@0: if length(levels)>1,xlim([min(levels) max(levels)]), end rmeddis@0: ylabel(['dB re:' num2str(refBMdisplacement,'%6.1e') 'm']) rmeddis@0: ylim([-20 50]) rmeddis@0: set(gca,'ytick',[-10 0 10 20 40]) rmeddis@0: % legend({num2str(stimulusFrequencies')}, 'location', 'EastOutside') rmeddis@0: UTIL_printTabTable([levels' peakAmpBMdB], ... rmeddis@0: num2str([0 stimulusFrequencies]','%5.0f'), '%5.0f') rmeddis@0: finalSummary=[finalSummary peakAmpBMdB]; rmeddis@0: rmeddis@0: % Tuning curve rmeddis@0: if length(relativeFrequencies)>2 rmeddis@0: figure(3), subplot(3,nBFs, nBFs+BFno) rmeddis@0: % contour(stimulusFrequencies,levels,peakAmpBM,... rmeddis@0: % [refBMdisplacement refBMdisplacement],'r') rmeddis@0: contour(stimulusFrequencies,levels,peakAmpBM,... rmeddis@0: refBMdisplacement.*[1 5 10 50 100]) rmeddis@0: title(['tuning curve at ' num2str(refBMdisplacement) 'm']); rmeddis@0: ylabel('level (dB) at reference') rmeddis@0: xlim([100 10000]) rmeddis@0: hold on rmeddis@0: set(gca,'xscale','log') rmeddis@0: end rmeddis@0: rmeddis@0: rmeddis@0: % MOC contribution rmeddis@0: figure(3) rmeddis@0: subplot(3,nBFs,2*nBFs+BFno), cla rmeddis@0: plot(levels,20*log10(peakEfferent), 'linewidth',2) rmeddis@0: ylabel('MOC (dB attenuation)'), xlabel('level') rmeddis@0: title(['peak MOC: model= ' AN_spikesOrProbability]) rmeddis@0: grid on rmeddis@0: if length(levels)>1, xlim([min(levels) max(levels)]), end rmeddis@0: rmeddis@0: % AR contribution rmeddis@0: hold on rmeddis@0: plot(levels,20*log10(peakAREfferent), 'r') rmeddis@0: hold off rmeddis@0: rmeddis@0: end % best frequency rmeddis@0: rmeddis@0: UTIL_showStructureSummary(DRNLParams, 'DRNLParams', 10) rmeddis@0: rmeddis@0: UTIL_printTabTable([levels' finalSummary], ... rmeddis@0: num2str([0 stimulusFrequencies]','%5.0f'), '%5.0f') rmeddis@0: rmeddis@0: path(savePath);