diff testPrograms/testRP2.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
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testPrograms/testRP2.m	Mon Nov 28 13:34:28 2011 +0000
@@ -0,0 +1,295 @@
+function testRP2(MAPparamsName,paramChanges)
+% testIHC evaluates IHC I/O function
+% multiple BF can be used but only one is easier to interpret.
+% e.g. testRP(1000,'Normal',{});
+
+global experiment method inputStimulusParams
+global stimulusParameters IHC_VResp_VivoParams IHC_cilia_RPParams
+savePath=path;
+addpath (['..' filesep 'utilities'],['..' filesep 'MAP'])
+dbstop if error
+
+figure(4), clf,
+set (gcf, 'name', ['IHC'])
+set(gcf,'position',[613   354   360   322])
+drawColors='rgbkmcy';
+drawnow
+
+if nargin<3
+    paramChanges=[];
+end
+if nargin<2
+    MAPparamsName='Normal';
+end
+if nargin<3
+    BF=800;
+end
+
+levels=-20:10:100;
+nLevels=length(levels);
+toneDuration=.05;
+silenceDuration=.01;
+sampleRate=50000;
+dt=1/sampleRate;
+
+allIHC_RP_peak=[];
+allIHC_RP_dc=[];
+
+%% Ruggero
+%%Ruggero data
+RuggeroData=[
+    0	2.00E-10;
+    10	5.00E-10;
+    20	1.50E-09;
+    30	2.50E-09;
+    40	5.30E-09;
+    50	1.00E-08;
+    60	1.70E-08;
+    70	2.50E-08;
+    80	4.00E-08;
+    90	6.00E-08;
+    100	1.50E-07;
+    110	3.00E-07;
+    ];
+
+
+BF=10000;
+targetFrequency=BF;
+
+IHC_RP_peak=zeros(nLevels,1);
+IHC_RP_min=zeros(nLevels,1);
+IHC_RP_dc=zeros(nLevels,1);
+
+time=dt:dt:toneDuration;
+
+rampDuration=0.004;
+rampTime=dt:dt:rampDuration;
+ramp=[0.5*(1+cos(2*pi*rampTime/(2*rampDuration)+pi)) ...
+    ones(1,length(time)-length(rampTime))];
+ramp=ramp.*fliplr(ramp);
+
+silence=zeros(1,round(silenceDuration/dt));
+
+toneStartptr=length(silence)+1;
+toneMidptr=toneStartptr+round(toneDuration/(2*dt)) -1;
+toneEndptr=toneStartptr+round(toneDuration/dt) -1;
+
+levelNo=0;
+for leveldB=levels
+    levelNo=levelNo+1;
+    % replicate at all levels
+    amp=28e-6*10^(leveldB/20);
+    
+    %% create signal (leveldB/ frequency)
+    inputSignal=amp*sin(2*pi*targetFrequency'*time);
+    inputSignal= ramp.*inputSignal;
+    inputSignal=[silence inputSignal silence];
+    inputStimulusParams.sampleRate=1/dt;
+    %         global IHC_ciliaParams
+    
+    %% disable efferent for fast processing
+    
+    %% run the model
+    global  DRNLoutput IHC_cilia_output IHCrestingCiliaCond IHCrestingV...
+        IHCoutput
+    AN_spikesOrProbability='probability';
+    
+    MAP1_14(inputSignal, sampleRate, BF, ...
+        MAPparamsName, AN_spikesOrProbability, paramChanges);
+    
+    % DRNL
+    DRNLoutput=DRNLoutput;
+    DRNL_peak(levelNo,1)=max(DRNLoutput(toneMidptr:toneEndptr));
+    DRNL_min(levelNo,1)=min(DRNLoutput(toneMidptr:toneEndptr));
+    DRNL_dc(levelNo,1)=mean(DRNLoutput(toneMidptr:toneEndptr));
+    
+end
+%% plot DRNL
+subplot(2,2,1)
+referenceDisp=10e-9;
+semilogy(levels,DRNL_peak, 'linewidth',2), hold on
+semilogy(RuggeroData(:,1),RuggeroData(:,2),'o')
+title(['BM: Ruggero ' num2str(BF) ' Hz'])
+ylabel ('displacement(m)'), xlabel('dB SPL')
+xlim([min(levels) max(levels)]), ylim([1e-10 1e-7])
+grid on
+
+
+%% Dallos
+BF=800;
+targetFrequency=BF;
+
+IHC_RP_peak=zeros(nLevels,1);
+IHC_RP_min=zeros(nLevels,1);
+IHC_RP_dc=zeros(nLevels,1);
+
+time=dt:dt:toneDuration;
+
+rampDuration=0.004;
+rampTime=dt:dt:rampDuration;
+ramp=[0.5*(1+cos(2*pi*rampTime/(2*rampDuration)+pi)) ...
+    ones(1,length(time)-length(rampTime))];
+ramp=ramp.*fliplr(ramp);
+
+silence=zeros(1,round(silenceDuration/dt));
+
+toneStartptr=length(silence)+1;
+toneMidptr=toneStartptr+round(toneDuration/(2*dt)) -1;
+toneEndptr=toneStartptr+round(toneDuration/dt) -1;
+
+levelNo=0;
+for leveldB=levels
+    levelNo=levelNo+1;
+    % replicate at all levels
+    amp=28e-6*10^(leveldB/20);
+    
+    %% create signal (leveldB/ frequency)
+    inputSignal=amp*sin(2*pi*targetFrequency'*time);
+    inputSignal= ramp.*inputSignal;
+    inputSignal=[silence inputSignal silence];
+    inputStimulusParams.sampleRate=1/dt;
+    %         global IHC_ciliaParams
+    
+    %% disable efferent for fast processing
+    method.DRNLSave=1;
+    method.IHC_cilia_RPSave=1;
+    method.IHCpreSynapseSave=1;
+    method.IHC_cilia_RPSave=1;
+    method.segmentDuration=-1;
+    moduleSequence=1:4;
+    
+    %% run the model
+    global  DRNLoutput IHC_cilia_output IHCrestingCiliaCond IHCrestingV...
+        IHCoutput
+    AN_spikesOrProbability='probability';
+    
+    MAP1_14(inputSignal, sampleRate, BF, ...
+        MAPparamsName, AN_spikesOrProbability, paramChanges);
+    
+    % DRNL
+    DRNLoutput=DRNLoutput;
+    DRNL_peak(levelNo,1)=max(DRNLoutput(toneMidptr:toneEndptr));
+    DRNL_min(levelNo,1)=min(DRNLoutput(toneMidptr:toneEndptr));
+    DRNL_dc(levelNo,1)=mean(DRNLoutput(toneMidptr:toneEndptr));
+    
+    % cilia
+    IHC_ciliaData=IHC_cilia_output;
+    IHC_ciliaData=IHC_ciliaData;
+    IHC_cilia_peak(levelNo,1)=...
+        max(IHC_ciliaData(toneMidptr:toneEndptr));
+    IHC_cilia_min(levelNo,1)=...
+        min(IHC_ciliaData(toneMidptr:toneEndptr));
+    IHC_cilia_dc(levelNo,1)=...
+        mean(IHC_ciliaData(toneMidptr:toneEndptr));
+    
+    % RP
+    IHC_RPData=IHCoutput;
+    IHC_RPData=IHC_RPData;
+    IHC_RP_peak(levelNo,1)=...
+        max(IHC_RPData(toneMidptr:toneEndptr));
+    IHC_RP_min(levelNo,1)=...
+        min(IHC_RPData(toneMidptr:toneEndptr));
+    IHC_RP_dc(levelNo,1)=...
+        mean(IHC_RPData(toneMidptr:toneEndptr));
+    
+end
+
+%% Dallos and Harris data
+%% plot receptor potentials
+figure(4)
+subplot(2,2,3)
+% RP I/O function min and max
+restingRP=IHC_RP_peak(1);
+toPlot= [fliplr(IHC_RP_min(:,1)') IHC_RP_peak(:,1)'];
+microPa=   28e-6*10.^(levels/20);
+microPa=[-fliplr(microPa) microPa];
+plot(microPa,toPlot, 'linewidth',2)
+
+dallosx=[-0.9	-0.1	-0.001	0.001	0.01	0.9];
+dallosy=[-8	-7.8	-6.5	11	16.5	22]/1000 + restingRP;
+subplot(2,2,3)
+hold on, plot(dallosx,dallosy, 'o')
+plot([-1 1], [restingRP restingRP], 'r')
+title(' Dallos(86) data at 800 Hz')
+ylabel ('receptor potential(V)'), xlabel('Pa')
+ylim([-0.08 -0.02]), xlim([-1 1])
+grid on
+
+
+%% Patuzzi
+BF=7000;
+targetFrequency=BF;
+
+IHC_RP_peak=zeros(nLevels,1);
+IHC_RP_min=zeros(nLevels,1);
+IHC_RP_dc=zeros(nLevels,1);
+
+time=dt:dt:toneDuration;
+
+rampDuration=0.004;
+rampTime=dt:dt:rampDuration;
+ramp=[0.5*(1+cos(2*pi*rampTime/(2*rampDuration)+pi)) ...
+    ones(1,length(time)-length(rampTime))];
+ramp=ramp.*fliplr(ramp);
+
+silence=zeros(1,round(silenceDuration/dt));
+
+toneStartptr=length(silence)+1;
+toneMidptr=toneStartptr+round(toneDuration/(2*dt)) -1;
+toneEndptr=toneStartptr+round(toneDuration/dt) -1;
+
+levelNo=0;
+for leveldB=levels
+    levelNo=levelNo+1;
+    % replicate at all levels
+    amp=28e-6*10^(leveldB/20);
+    
+    %% create signal (leveldB/ frequency)
+    inputSignal=amp*sin(2*pi*targetFrequency'*time);
+    inputSignal= ramp.*inputSignal;
+    inputSignal=[silence inputSignal silence];
+    inputStimulusParams.sampleRate=1/dt;
+    %         global IHC_ciliaParams
+    
+    %% run the model
+    global  DRNLoutput IHC_cilia_output IHCrestingCiliaCond IHCrestingV...
+        IHCoutput
+    AN_spikesOrProbability='probability';
+    
+    MAP1_14(inputSignal, sampleRate, BF, ...
+        MAPparamsName, AN_spikesOrProbability, paramChanges);
+    
+    % RP
+    IHC_RPData=IHCoutput;
+    IHC_RP_peak(levelNo,1)=...
+        max(IHC_RPData(toneMidptr:toneEndptr));
+    IHC_RP_min(levelNo,1)=...
+        min(IHC_RPData(toneMidptr:toneEndptr));
+    IHC_RP_dc(levelNo,1)=...
+        mean(IHC_RPData(toneMidptr:toneEndptr));
+end
+
+
+%% RP I/O function min and max
+figure(4)
+subplot(2,2,4)
+restingRP=IHC_RP_peak(1);
+peakRP=max(IHC_RP_peak);
+plot(levels, IHC_RP_peak, 'linewidth',2)
+hold on
+plot(levels, IHC_RP_dc, ':', 'linewidth',2)
+plot([min(levels) max(levels)], [restingRP restingRP], 'r')
+xlim([min(levels) max(levels)])
+% animal data
+sndLevel=[5	15	25	35	45	55	65	75];
+RPanimal=restingRP+[0.5	2	4.6	5.8	6.4	7.2	8	10.2]/1000;
+% could be misleading when restingRP changes
+RPanimal=-0.060+[0.5	2	4.6	5.8	6.4	7.2	8	10.2]/1000;
+hold on, plot(sndLevel,RPanimal,'o')
+
+grid on
+title(' 7 kHz Patuzzi')
+ylabel ('RP(V) peak and DC'), xlabel('dB SPL')
+ylim([-0.07 -0.04])
+path(savePath);
+disp(paramChanges)