rmeddis@35: function testBM (BFlist, paramsName,... rmeddis@29: relativeFrequencies, AN_spikesOrProbability, paramChanges) rmeddis@29: % testBM generates input output functions for DRNL model for any number rmeddis@38: % of locations (BFlist). rmeddis@38: % Each BF is evaluated using a single channel model rmeddis@38: % rmeddis@38: % Peak displacement as a function of pure tone level(peakAmp) is displayed rmeddis@38: % rmeddis@38: % If relative Frequencies is set to a range of values, tuning curves will rmeddis@38: % be computed using these stimulus frequencie. rmeddis@38: % rmeddis@38: % If AN_spikesOrProbability is set to 'spikes' the full model is run (slow) rmeddis@38: % otherwise efferent activity is based on AN pspiking probabilities. rmeddis@29: % rmeddis@34: % testBM (1000, 'Normal', 1, 'probability', []) rmeddis@38: % for tuning curves at 6 locations: rmeddis@38: % testBM ([250 500 1000 2000 4000 8000], 'Normal', [.5 .75 .9 1 1.1 1.25 1.5], 'probability', []) rmeddis@29: rmeddis@29: global DRNLParams rmeddis@29: rmeddis@35: if nargin<5, paramChanges=[]; end rmeddis@35: if nargin<4, AN_spikesOrProbability='spikes'; end rmeddis@35: if nargin==0, BFlist=1000; paramsName='Normal'; rmeddis@35: relativeFrequencies=1; end rmeddis@29: rmeddis@29: savePath=path; rmeddis@29: addpath (['..' filesep 'utilities'],['..' filesep 'MAP']) rmeddis@38: tic rmeddis@29: rmeddis@38: levels=-10:10:100; nLevels=length(levels); rmeddis@29: % levels= 50; nLevels=length(levels); rmeddis@29: rmeddis@29: % refBMdisplacement is the displacement of the BM at threshold rmeddis@29: % 1 nm disp at threshold (9 kHz, Ruggero) rmeddis@29: % ? adjust for frequency rmeddis@29: refBMdisplacement= 1e-8; % adjusted for 10 nm at 1 kHz rmeddis@29: rmeddis@35: toneDuration=.5; rmeddis@35: % toneDuration=.050; rmeddis@29: rampDuration=0.01; rmeddis@29: silenceDuration=0.01; rmeddis@29: rmeddis@29: sampleRate=30000; rmeddis@29: rmeddis@29: dbstop if error rmeddis@29: figure(3), clf rmeddis@29: set(gcf,'position',[280 350 327 326]) rmeddis@29: set(gcf,'name','DRNL - BM') rmeddis@29: pause(0.1) rmeddis@29: rmeddis@29: finalSummary=[]; rmeddis@35: nBFs=length(BFlist); rmeddis@29: BFno=0; plotCount=0; rmeddis@35: for BF=BFlist rmeddis@29: BFno=BFno+1; rmeddis@29: plotCount=plotCount+nBFs; rmeddis@29: stimulusFrequencies=BF* relativeFrequencies; rmeddis@29: nFrequencies=length(stimulusFrequencies); rmeddis@29: rmeddis@29: peakAmpBM=zeros(nLevels,nFrequencies); rmeddis@29: peakAmpBMdB=NaN(nLevels,nFrequencies); rmeddis@29: peakEfferent=NaN(nLevels,nFrequencies); rmeddis@29: peakAREfferent=NaN(nLevels,nFrequencies); rmeddis@29: rmeddis@29: rmeddis@29: levelNo=0; rmeddis@29: for leveldB=levels rmeddis@29: disp(['level= ' num2str(leveldB)]) rmeddis@29: levelNo=levelNo+1; rmeddis@29: rmeddis@29: freqNo=0; rmeddis@29: for frequency=stimulusFrequencies rmeddis@29: freqNo=freqNo+1; rmeddis@29: rmeddis@29: % Generate stimuli rmeddis@29: globalStimParams.FS=sampleRate; rmeddis@29: globalStimParams.overallDuration=... rmeddis@29: toneDuration+silenceDuration; % s rmeddis@29: stim.phases='sin'; rmeddis@29: stim.type='tone'; rmeddis@29: stim.toneDuration=toneDuration; rmeddis@29: stim.frequencies=frequency; rmeddis@29: stim.amplitudesdB=leveldB; rmeddis@29: stim.beginSilence=silenceDuration; rmeddis@29: stim.rampOnDur=rampDuration; rmeddis@29: % no offset ramp rmeddis@29: stim.rampOffDur=rampDuration; rmeddis@29: doPlot=0; rmeddis@29: inputSignal=stimulusCreate(globalStimParams, stim, doPlot); rmeddis@29: inputSignal=inputSignal(:,1)'; rmeddis@29: rmeddis@29: %% run the model rmeddis@29: MAPparamsName=paramsName; rmeddis@29: rmeddis@29: global DRNLoutput MOCattenuation ARattenuation rmeddis@29: MAP1_14(inputSignal, sampleRate, BF, ... rmeddis@29: MAPparamsName, AN_spikesOrProbability, paramChanges); rmeddis@29: rmeddis@29: DRNLresponse=DRNLoutput; rmeddis@29: peakAmp=max(max(... rmeddis@29: DRNLresponse(:, end-round(length(DRNLresponse)/2):end))); rmeddis@29: peakAmpBM(levelNo,freqNo)=peakAmp; rmeddis@29: peakAmpBMdB(levelNo,freqNo)=... rmeddis@29: 20*log10(peakAmp/refBMdisplacement); rmeddis@29: peakEfferent(levelNo,freqNo)=min(min(MOCattenuation)); rmeddis@29: peakAREfferent(levelNo,freqNo)=min(min(ARattenuation)); rmeddis@29: rmeddis@29: end % tone frequency rmeddis@29: end % level rmeddis@29: rmeddis@29: %% analyses results and plot rmeddis@33: if length(relativeFrequencies)>2 rmeddis@33: maxRows=3; rmeddis@33: else rmeddis@33: maxRows=2; rmeddis@33: end rmeddis@29: rmeddis@29: % BM I/O plot (top panel) rmeddis@29: figure(3) rmeddis@33: subplot(maxRows,nBFs,BFno), cla rmeddis@29: plot(levels,peakAmpBMdB, 'linewidth',2) rmeddis@29: hold on, plot(levels, repmat(refBMdisplacement,1,length(levels))) rmeddis@29: hold off rmeddis@29: title(['BF=' num2str(BF,'%5.0f') ' - ' paramsName]) rmeddis@29: xlabel('level') rmeddis@29: % set(gca,'xtick',levels), grid on rmeddis@29: if length(levels)>1,xlim([min(levels) max(levels)]), end rmeddis@29: ylabel(['dB re:' num2str(refBMdisplacement,'%6.1e') 'm']) rmeddis@29: ylim([-20 50]) rmeddis@29: set(gca,'ytick',[-10 0 10 20 40]) rmeddis@29: grid on rmeddis@29: % legend({num2str(stimulusFrequencies')}, 'location', 'EastOutside') rmeddis@38: UTIL_printTabTable([levels' peakAmpBMdB peakAmpBM*1e9], ... rmeddis@29: num2str([0 stimulusFrequencies]','%5.0f'), '%5.0f') rmeddis@29: finalSummary=[finalSummary peakAmpBMdB]; rmeddis@29: rmeddis@29: % Tuning curve rmeddis@29: if length(relativeFrequencies)>2 rmeddis@33: figure(3), subplot(maxRows,nBFs, 2*nBFs+BFno) rmeddis@38: contour(stimulusFrequencies,levels,peakAmpBM,... rmeddis@38: [refBMdisplacement refBMdisplacement],'r','linewidth',4) rmeddis@38: ylim([-10 40]) rmeddis@38: rmeddis@38: % contour(stimulusFrequencies,levels,peakAmpBM,... rmeddis@38: % refBMdisplacement.*[1 5 10 50 100]) rmeddis@38: % ylim([-10 90]) rmeddis@38: rmeddis@29: title(['tuning curve at ' num2str(refBMdisplacement) 'm']); rmeddis@29: ylabel('level (dB) at reference') rmeddis@29: xlim([100 10000]) rmeddis@29: grid on rmeddis@29: hold on rmeddis@29: set(gca,'xscale','log') rmeddis@29: end rmeddis@29: rmeddis@29: rmeddis@29: % MOC contribution rmeddis@29: figure(3) rmeddis@33: subplot(maxRows,nBFs,nBFs+BFno), cla rmeddis@29: plot(levels,20*log10(peakEfferent), 'linewidth',2) rmeddis@38: ylabel('MOC (dB attenuation)'), xlabel('level (dB SPL)') rmeddis@35: title(['MOC: (' AN_spikesOrProbability ') duration= ' ... rmeddis@35: num2str(1000*toneDuration,'%5.0f') ' ms']) rmeddis@29: grid on rmeddis@29: if length(levels)>1, xlim([min(levels) max(levels)]), end rmeddis@29: rmeddis@29: % AR contribution rmeddis@29: hold on rmeddis@29: plot(levels,20*log10(peakAREfferent), 'r') rmeddis@29: hold off rmeddis@29: rmeddis@29: end % best frequency rmeddis@29: rmeddis@38: rmeddis@29: UTIL_showStructureSummary(DRNLParams, 'DRNLParams', 10) rmeddis@29: rmeddis@29: UTIL_printTabTable([levels' finalSummary], ... rmeddis@29: num2str([0 stimulusFrequencies]','%5.0f'), '%5.0f') rmeddis@34: diff(finalSummary) rmeddis@34: if ~isempty(paramChanges) rmeddis@34: disp(paramChanges) rmeddis@34: end rmeddis@34: rmeddis@38: toc rmeddis@29: path(savePath);