rmeddis@29: function testRP(BFs,MAPparamsName,paramChanges) rmeddis@38: % testIHC evaluates IHC I/O function rmeddis@35: % multiple BFs can be used but only one is easier to interpret. rmeddis@35: % e.g. testRP(1000,'Normal',{}); rmeddis@29: rmeddis@29: global experiment method inputStimulusParams rmeddis@29: global stimulusParameters IHC_VResp_VivoParams IHC_cilia_RPParams rmeddis@29: savePath=path; rmeddis@29: addpath (['..' filesep 'utilities'],['..' filesep 'MAP']) rmeddis@29: dbstop if error rmeddis@29: rmeddis@29: figure(4), clf, rmeddis@29: set (gcf, 'name', ['IHC']) rmeddis@29: set(gcf,'position',[613 354 360 322]) rmeddis@29: drawColors='rgbkmcy'; rmeddis@29: drawnow rmeddis@29: rmeddis@29: if nargin<3 rmeddis@29: paramChanges=[]; rmeddis@29: end rmeddis@38: if nargin<2 rmeddis@38: MAPparamsName='Normal'; rmeddis@38: end rmeddis@38: if nargin<3 rmeddis@38: BFs=800; rmeddis@38: end rmeddis@29: rmeddis@29: levels=-20:10:100; rmeddis@29: nLevels=length(levels); rmeddis@29: toneDuration=.05; rmeddis@29: silenceDuration=.01; rmeddis@29: sampleRate=50000; rmeddis@29: dt=1/sampleRate; rmeddis@29: rmeddis@29: allIHC_RP_peak=[]; rmeddis@29: allIHC_RP_dc=[]; rmeddis@29: rmeddis@29: for BFno=1:length(BFs) rmeddis@29: BF=BFs(BFno); rmeddis@29: targetFrequency=BF; rmeddis@29: % OR rmeddis@29: %Patuzzi and Sellick test (see ELP & AEM, 2006) rmeddis@29: % targetFrequency=100; rmeddis@29: rmeddis@29: IHC_RP_peak=zeros(nLevels,1); rmeddis@29: IHC_RP_min=zeros(nLevels,1); rmeddis@29: IHC_RP_dc=zeros(nLevels,1); rmeddis@29: rmeddis@29: time=dt:dt:toneDuration; rmeddis@29: rmeddis@29: rampDuration=0.004; rmeddis@29: rampTime=dt:dt:rampDuration; rmeddis@29: ramp=[0.5*(1+cos(2*pi*rampTime/(2*rampDuration)+pi)) ... rmeddis@29: ones(1,length(time)-length(rampTime))]; rmeddis@29: ramp=ramp.*fliplr(ramp); rmeddis@29: rmeddis@29: silence=zeros(1,round(silenceDuration/dt)); rmeddis@29: rmeddis@29: toneStartptr=length(silence)+1; rmeddis@29: toneMidptr=toneStartptr+round(toneDuration/(2*dt)) -1; rmeddis@29: toneEndptr=toneStartptr+round(toneDuration/dt) -1; rmeddis@29: rmeddis@29: levelNo=0; rmeddis@29: for leveldB=levels rmeddis@29: levelNo=levelNo+1; rmeddis@29: % replicate at all levels rmeddis@29: amp=28e-6*10^(leveldB/20); rmeddis@29: rmeddis@29: %% create signal (leveldB/ frequency) rmeddis@29: inputSignal=amp*sin(2*pi*targetFrequency'*time); rmeddis@29: inputSignal= ramp.*inputSignal; rmeddis@29: inputSignal=[silence inputSignal silence]; rmeddis@29: inputStimulusParams.sampleRate=1/dt; rmeddis@29: % global IHC_ciliaParams rmeddis@29: rmeddis@29: %% disable efferent for fast processing rmeddis@29: method.DRNLSave=1; rmeddis@29: method.IHC_cilia_RPSave=1; rmeddis@29: method.IHCpreSynapseSave=1; rmeddis@29: method.IHC_cilia_RPSave=1; rmeddis@29: method.segmentDuration=-1; rmeddis@29: moduleSequence=1:4; rmeddis@29: rmeddis@29: %% run the model rmeddis@29: global DRNLoutput IHC_cilia_output IHCrestingCiliaCond IHCrestingV... rmeddis@29: IHCoutput rmeddis@29: AN_spikesOrProbability='probability'; rmeddis@29: rmeddis@29: MAP1_14(inputSignal, sampleRate, BF, ... rmeddis@29: MAPparamsName, AN_spikesOrProbability, paramChanges); rmeddis@29: rmeddis@29: % DRNL rmeddis@29: DRNLoutput=DRNLoutput; rmeddis@29: DRNL_peak(levelNo,1)=max(DRNLoutput(toneMidptr:toneEndptr)); rmeddis@29: DRNL_min(levelNo,1)=min(DRNLoutput(toneMidptr:toneEndptr)); rmeddis@29: DRNL_dc(levelNo,1)=mean(DRNLoutput(toneMidptr:toneEndptr)); rmeddis@29: rmeddis@29: % cilia rmeddis@29: IHC_ciliaData=IHC_cilia_output; rmeddis@29: IHC_ciliaData=IHC_ciliaData; rmeddis@29: IHC_cilia_peak(levelNo,1)=... rmeddis@29: max(IHC_ciliaData(toneMidptr:toneEndptr)); rmeddis@29: IHC_cilia_min(levelNo,1)=... rmeddis@29: min(IHC_ciliaData(toneMidptr:toneEndptr)); rmeddis@29: IHC_cilia_dc(levelNo,1)=... rmeddis@29: mean(IHC_ciliaData(toneMidptr:toneEndptr)); rmeddis@29: rmeddis@29: % RP rmeddis@29: IHC_RPData=IHCoutput; rmeddis@29: IHC_RPData=IHC_RPData; rmeddis@29: IHC_RP_peak(levelNo,1)=... rmeddis@29: max(IHC_RPData(toneMidptr:toneEndptr)); rmeddis@29: IHC_RP_min(levelNo,1)=... rmeddis@29: min(IHC_RPData(toneMidptr:toneEndptr)); rmeddis@29: IHC_RP_dc(levelNo,1)=... rmeddis@29: mean(IHC_RPData(toneMidptr:toneEndptr)); rmeddis@29: rmeddis@29: end % level rmeddis@29: rmeddis@29: rmeddis@29: disp(['parameter file was: ' MAPparamsName]) rmeddis@29: fprintf('\n') rmeddis@29: rmeddis@29: %% plot DRNL rmeddis@29: subplot(2,2,1) rmeddis@29: % referenceDisp= 9e-9*1000/targetFrequency; rmeddis@29: % plot(levels,20*log10(DRNL_peak/referenceDisp), drawColors(BFno), ... rmeddis@29: % 'linewidth',2), hold on rmeddis@29: referenceDisp=10e-9; rmeddis@29: plot(levels,20*log10(DRNL_peak/referenceDisp), drawColors(BFno), ... rmeddis@29: 'linewidth',2), hold on rmeddis@29: title([' DRNL peak: ' num2str(BFs) ' Hz']) rmeddis@29: ylabel ('log10DRNL(m)'), xlabel('dB SPL') rmeddis@29: xlim([min(levels) max(levels)]), ylim([-10 50]) rmeddis@29: grid on rmeddis@29: rmeddis@29: %% plot cilia displacement rmeddis@29: figure(4) rmeddis@29: subplot(2,2,2) rmeddis@29: restingIHC_cilia=IHCrestingCiliaCond; rmeddis@29: plot(levels, IHC_cilia_peak,'k', 'linewidth',2), hold on rmeddis@38: % plot(levels, IHC_cilia_min,'r', 'linewidth',2) rmeddis@38: % hold on, rmeddis@38: % plot([min(levels) max(levels)], ... rmeddis@38: % [restingIHC_cilia restingIHC_cilia], 'g') rmeddis@29: title(' IHC apical cond.') rmeddis@29: ylabel ('IHCcilia(conductance)'), xlabel('dB SPL') rmeddis@29: xlim([min(levels) max(levels)]) rmeddis@29: grid on rmeddis@29: rmeddis@29: %% plot receptor potentials rmeddis@29: figure(4) rmeddis@29: subplot(2,2,3) rmeddis@29: % RP I/O function min and max rmeddis@29: restingRP=IHC_RP_peak(1); rmeddis@29: toPlot= [fliplr(IHC_RP_min(:,1)') IHC_RP_peak(:,1)']; rmeddis@29: microPa= 28e-6*10.^(levels/20); rmeddis@29: microPa=[-fliplr(microPa) microPa]; rmeddis@29: plot(microPa,toPlot, drawColors(BFno), 'linewidth',2) rmeddis@29: % ylim([0 300]) rmeddis@29: rmeddis@29: %% Dallos and Harris data rmeddis@29: dallosx=[-0.9 -0.1 -0.001 0.001 0.01 0.9]; rmeddis@29: dallosy=[-8 -7.8 -6.5 11 16.5 22]/1000 + restingRP; rmeddis@29: hold on, plot(dallosx,dallosy, 'o') rmeddis@29: plot([-1 1], [restingRP restingRP], 'r') rmeddis@29: title(' Dallos(86) data at 800 Hz') rmeddis@29: ylabel ('receptor potential(V)'), xlabel('Pa') rmeddis@29: ylim([-0.08 -0.02]), xlim([-1 1]) rmeddis@29: grid on rmeddis@29: rmeddis@29: %% RP I/O function min and max rmeddis@29: figure(4) rmeddis@29: subplot(2,2,4) rmeddis@29: restingRP=IHC_RP_peak(1); rmeddis@29: peakRP=max(IHC_RP_peak); rmeddis@29: plot(levels, IHC_RP_peak,drawColors(BFno), 'linewidth',2) rmeddis@29: hold on rmeddis@29: plot(levels, IHC_RP_dc, [drawColors(BFno) ':'], 'linewidth',2) rmeddis@29: hold on, rmeddis@29: plot([min(levels) max(levels)], [restingRP restingRP], 'r') rmeddis@29: xlim([min(levels) max(levels)]) rmeddis@29: % animal data rmeddis@29: sndLevel=[5 15 25 35 45 55 65 75]; rmeddis@29: RPanimal=restingRP+[0.5 2 4.6 5.8 6.4 7.2 8 10.2]/1000; rmeddis@29: % could be misleading when restingRP changes rmeddis@29: RPanimal=-0.060+[0.5 2 4.6 5.8 6.4 7.2 8 10.2]/1000; rmeddis@29: hold on, plot(sndLevel,RPanimal,'o') rmeddis@29: rmeddis@29: grid on rmeddis@29: title(['Et= ' num2str(IHC_cilia_RPParams.Et) ': RP data 7 kHz Patuzzi']) rmeddis@36: ylabel ('RP(V) peak and DC'), xlabel('dB SPL') rmeddis@29: ylim([-0.08 -0.04]) rmeddis@29: allIHC_RP_peak=[allIHC_RP_peak IHC_RP_peak]; rmeddis@29: allIHC_RP_dc=[allIHC_RP_dc IHC_RP_dc]; rmeddis@29: rmeddis@29: fprintf('level\t peak\t DC\n') rmeddis@29: UTIL_printTabTable([levels' IHC_RP_peak IHC_RP_dc]) rmeddis@29: % disp(['restingIHC_cilia= ' num2str(restingIHC_cilia)]) rmeddis@29: fprintf('peakRP= \t%6.3f', peakRP) rmeddis@29: fprintf('\nrestingRP= \t%6.3f', restingRP) rmeddis@29: fprintf('\ndifference= \t%6.3f\n', (peakRP-restingRP)) rmeddis@29: drawnow rmeddis@29: end rmeddis@29: % UTIL_showStruct(IHC_VResp_VivoParams, 'IHC_VResp_VivoParams') rmeddis@29: UTIL_showStruct(IHC_cilia_RPParams, 'IHC_cilia_RPParams') rmeddis@29: fprintf('level\t peak\n') rmeddis@29: UTIL_printTabTable([levels' allIHC_RP_peak]) rmeddis@29: fprintf('level\t DC\n') rmeddis@29: UTIL_printTabTable([levels' allIHC_RP_dc]) rmeddis@29: rmeddis@29: path(savePath); rmeddis@29: disp(paramChanges)