annotate 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
rev   line source
rmeddis@38 1 function testRP2(MAPparamsName,paramChanges)
rmeddis@38 2 % testIHC evaluates IHC I/O function
rmeddis@38 3 % multiple BF can be used but only one is easier to interpret.
rmeddis@38 4 % e.g. testRP(1000,'Normal',{});
rmeddis@38 5
rmeddis@38 6 global experiment method inputStimulusParams
rmeddis@38 7 global stimulusParameters IHC_VResp_VivoParams IHC_cilia_RPParams
rmeddis@38 8 savePath=path;
rmeddis@38 9 addpath (['..' filesep 'utilities'],['..' filesep 'MAP'])
rmeddis@38 10 dbstop if error
rmeddis@38 11
rmeddis@38 12 figure(4), clf,
rmeddis@38 13 set (gcf, 'name', ['IHC'])
rmeddis@38 14 set(gcf,'position',[613 354 360 322])
rmeddis@38 15 drawColors='rgbkmcy';
rmeddis@38 16 drawnow
rmeddis@38 17
rmeddis@38 18 if nargin<3
rmeddis@38 19 paramChanges=[];
rmeddis@38 20 end
rmeddis@38 21 if nargin<2
rmeddis@38 22 MAPparamsName='Normal';
rmeddis@38 23 end
rmeddis@38 24 if nargin<3
rmeddis@38 25 BF=800;
rmeddis@38 26 end
rmeddis@38 27
rmeddis@38 28 levels=-20:10:100;
rmeddis@38 29 nLevels=length(levels);
rmeddis@38 30 toneDuration=.05;
rmeddis@38 31 silenceDuration=.01;
rmeddis@38 32 sampleRate=50000;
rmeddis@38 33 dt=1/sampleRate;
rmeddis@38 34
rmeddis@38 35 allIHC_RP_peak=[];
rmeddis@38 36 allIHC_RP_dc=[];
rmeddis@38 37
rmeddis@38 38 %% Ruggero
rmeddis@38 39 %%Ruggero data
rmeddis@38 40 RuggeroData=[
rmeddis@38 41 0 2.00E-10;
rmeddis@38 42 10 5.00E-10;
rmeddis@38 43 20 1.50E-09;
rmeddis@38 44 30 2.50E-09;
rmeddis@38 45 40 5.30E-09;
rmeddis@38 46 50 1.00E-08;
rmeddis@38 47 60 1.70E-08;
rmeddis@38 48 70 2.50E-08;
rmeddis@38 49 80 4.00E-08;
rmeddis@38 50 90 6.00E-08;
rmeddis@38 51 100 1.50E-07;
rmeddis@38 52 110 3.00E-07;
rmeddis@38 53 ];
rmeddis@38 54
rmeddis@38 55
rmeddis@38 56 BF=10000;
rmeddis@38 57 targetFrequency=BF;
rmeddis@38 58
rmeddis@38 59 IHC_RP_peak=zeros(nLevels,1);
rmeddis@38 60 IHC_RP_min=zeros(nLevels,1);
rmeddis@38 61 IHC_RP_dc=zeros(nLevels,1);
rmeddis@38 62
rmeddis@38 63 time=dt:dt:toneDuration;
rmeddis@38 64
rmeddis@38 65 rampDuration=0.004;
rmeddis@38 66 rampTime=dt:dt:rampDuration;
rmeddis@38 67 ramp=[0.5*(1+cos(2*pi*rampTime/(2*rampDuration)+pi)) ...
rmeddis@38 68 ones(1,length(time)-length(rampTime))];
rmeddis@38 69 ramp=ramp.*fliplr(ramp);
rmeddis@38 70
rmeddis@38 71 silence=zeros(1,round(silenceDuration/dt));
rmeddis@38 72
rmeddis@38 73 toneStartptr=length(silence)+1;
rmeddis@38 74 toneMidptr=toneStartptr+round(toneDuration/(2*dt)) -1;
rmeddis@38 75 toneEndptr=toneStartptr+round(toneDuration/dt) -1;
rmeddis@38 76
rmeddis@38 77 levelNo=0;
rmeddis@38 78 for leveldB=levels
rmeddis@38 79 levelNo=levelNo+1;
rmeddis@38 80 % replicate at all levels
rmeddis@38 81 amp=28e-6*10^(leveldB/20);
rmeddis@38 82
rmeddis@38 83 %% create signal (leveldB/ frequency)
rmeddis@38 84 inputSignal=amp*sin(2*pi*targetFrequency'*time);
rmeddis@38 85 inputSignal= ramp.*inputSignal;
rmeddis@38 86 inputSignal=[silence inputSignal silence];
rmeddis@38 87 inputStimulusParams.sampleRate=1/dt;
rmeddis@38 88 % global IHC_ciliaParams
rmeddis@38 89
rmeddis@38 90 %% disable efferent for fast processing
rmeddis@38 91
rmeddis@38 92 %% run the model
rmeddis@38 93 global DRNLoutput IHC_cilia_output IHCrestingCiliaCond IHCrestingV...
rmeddis@38 94 IHCoutput
rmeddis@38 95 AN_spikesOrProbability='probability';
rmeddis@38 96
rmeddis@38 97 MAP1_14(inputSignal, sampleRate, BF, ...
rmeddis@38 98 MAPparamsName, AN_spikesOrProbability, paramChanges);
rmeddis@38 99
rmeddis@38 100 % DRNL
rmeddis@38 101 DRNLoutput=DRNLoutput;
rmeddis@38 102 DRNL_peak(levelNo,1)=max(DRNLoutput(toneMidptr:toneEndptr));
rmeddis@38 103 DRNL_min(levelNo,1)=min(DRNLoutput(toneMidptr:toneEndptr));
rmeddis@38 104 DRNL_dc(levelNo,1)=mean(DRNLoutput(toneMidptr:toneEndptr));
rmeddis@38 105
rmeddis@38 106 end
rmeddis@38 107 %% plot DRNL
rmeddis@38 108 subplot(2,2,1)
rmeddis@38 109 referenceDisp=10e-9;
rmeddis@38 110 semilogy(levels,DRNL_peak, 'linewidth',2), hold on
rmeddis@38 111 semilogy(RuggeroData(:,1),RuggeroData(:,2),'o')
rmeddis@38 112 title(['BM: Ruggero ' num2str(BF) ' Hz'])
rmeddis@38 113 ylabel ('displacement(m)'), xlabel('dB SPL')
rmeddis@38 114 xlim([min(levels) max(levels)]), ylim([1e-10 1e-7])
rmeddis@38 115 grid on
rmeddis@38 116
rmeddis@38 117
rmeddis@38 118 %% Dallos
rmeddis@38 119 BF=800;
rmeddis@38 120 targetFrequency=BF;
rmeddis@38 121
rmeddis@38 122 IHC_RP_peak=zeros(nLevels,1);
rmeddis@38 123 IHC_RP_min=zeros(nLevels,1);
rmeddis@38 124 IHC_RP_dc=zeros(nLevels,1);
rmeddis@38 125
rmeddis@38 126 time=dt:dt:toneDuration;
rmeddis@38 127
rmeddis@38 128 rampDuration=0.004;
rmeddis@38 129 rampTime=dt:dt:rampDuration;
rmeddis@38 130 ramp=[0.5*(1+cos(2*pi*rampTime/(2*rampDuration)+pi)) ...
rmeddis@38 131 ones(1,length(time)-length(rampTime))];
rmeddis@38 132 ramp=ramp.*fliplr(ramp);
rmeddis@38 133
rmeddis@38 134 silence=zeros(1,round(silenceDuration/dt));
rmeddis@38 135
rmeddis@38 136 toneStartptr=length(silence)+1;
rmeddis@38 137 toneMidptr=toneStartptr+round(toneDuration/(2*dt)) -1;
rmeddis@38 138 toneEndptr=toneStartptr+round(toneDuration/dt) -1;
rmeddis@38 139
rmeddis@38 140 levelNo=0;
rmeddis@38 141 for leveldB=levels
rmeddis@38 142 levelNo=levelNo+1;
rmeddis@38 143 % replicate at all levels
rmeddis@38 144 amp=28e-6*10^(leveldB/20);
rmeddis@38 145
rmeddis@38 146 %% create signal (leveldB/ frequency)
rmeddis@38 147 inputSignal=amp*sin(2*pi*targetFrequency'*time);
rmeddis@38 148 inputSignal= ramp.*inputSignal;
rmeddis@38 149 inputSignal=[silence inputSignal silence];
rmeddis@38 150 inputStimulusParams.sampleRate=1/dt;
rmeddis@38 151 % global IHC_ciliaParams
rmeddis@38 152
rmeddis@38 153 %% disable efferent for fast processing
rmeddis@38 154 method.DRNLSave=1;
rmeddis@38 155 method.IHC_cilia_RPSave=1;
rmeddis@38 156 method.IHCpreSynapseSave=1;
rmeddis@38 157 method.IHC_cilia_RPSave=1;
rmeddis@38 158 method.segmentDuration=-1;
rmeddis@38 159 moduleSequence=1:4;
rmeddis@38 160
rmeddis@38 161 %% run the model
rmeddis@38 162 global DRNLoutput IHC_cilia_output IHCrestingCiliaCond IHCrestingV...
rmeddis@38 163 IHCoutput
rmeddis@38 164 AN_spikesOrProbability='probability';
rmeddis@38 165
rmeddis@38 166 MAP1_14(inputSignal, sampleRate, BF, ...
rmeddis@38 167 MAPparamsName, AN_spikesOrProbability, paramChanges);
rmeddis@38 168
rmeddis@38 169 % DRNL
rmeddis@38 170 DRNLoutput=DRNLoutput;
rmeddis@38 171 DRNL_peak(levelNo,1)=max(DRNLoutput(toneMidptr:toneEndptr));
rmeddis@38 172 DRNL_min(levelNo,1)=min(DRNLoutput(toneMidptr:toneEndptr));
rmeddis@38 173 DRNL_dc(levelNo,1)=mean(DRNLoutput(toneMidptr:toneEndptr));
rmeddis@38 174
rmeddis@38 175 % cilia
rmeddis@38 176 IHC_ciliaData=IHC_cilia_output;
rmeddis@38 177 IHC_ciliaData=IHC_ciliaData;
rmeddis@38 178 IHC_cilia_peak(levelNo,1)=...
rmeddis@38 179 max(IHC_ciliaData(toneMidptr:toneEndptr));
rmeddis@38 180 IHC_cilia_min(levelNo,1)=...
rmeddis@38 181 min(IHC_ciliaData(toneMidptr:toneEndptr));
rmeddis@38 182 IHC_cilia_dc(levelNo,1)=...
rmeddis@38 183 mean(IHC_ciliaData(toneMidptr:toneEndptr));
rmeddis@38 184
rmeddis@38 185 % RP
rmeddis@38 186 IHC_RPData=IHCoutput;
rmeddis@38 187 IHC_RPData=IHC_RPData;
rmeddis@38 188 IHC_RP_peak(levelNo,1)=...
rmeddis@38 189 max(IHC_RPData(toneMidptr:toneEndptr));
rmeddis@38 190 IHC_RP_min(levelNo,1)=...
rmeddis@38 191 min(IHC_RPData(toneMidptr:toneEndptr));
rmeddis@38 192 IHC_RP_dc(levelNo,1)=...
rmeddis@38 193 mean(IHC_RPData(toneMidptr:toneEndptr));
rmeddis@38 194
rmeddis@38 195 end
rmeddis@38 196
rmeddis@38 197 %% Dallos and Harris data
rmeddis@38 198 %% plot receptor potentials
rmeddis@38 199 figure(4)
rmeddis@38 200 subplot(2,2,3)
rmeddis@38 201 % RP I/O function min and max
rmeddis@38 202 restingRP=IHC_RP_peak(1);
rmeddis@38 203 toPlot= [fliplr(IHC_RP_min(:,1)') IHC_RP_peak(:,1)'];
rmeddis@38 204 microPa= 28e-6*10.^(levels/20);
rmeddis@38 205 microPa=[-fliplr(microPa) microPa];
rmeddis@38 206 plot(microPa,toPlot, 'linewidth',2)
rmeddis@38 207
rmeddis@38 208 dallosx=[-0.9 -0.1 -0.001 0.001 0.01 0.9];
rmeddis@38 209 dallosy=[-8 -7.8 -6.5 11 16.5 22]/1000 + restingRP;
rmeddis@38 210 subplot(2,2,3)
rmeddis@38 211 hold on, plot(dallosx,dallosy, 'o')
rmeddis@38 212 plot([-1 1], [restingRP restingRP], 'r')
rmeddis@38 213 title(' Dallos(86) data at 800 Hz')
rmeddis@38 214 ylabel ('receptor potential(V)'), xlabel('Pa')
rmeddis@38 215 ylim([-0.08 -0.02]), xlim([-1 1])
rmeddis@38 216 grid on
rmeddis@38 217
rmeddis@38 218
rmeddis@38 219 %% Patuzzi
rmeddis@38 220 BF=7000;
rmeddis@38 221 targetFrequency=BF;
rmeddis@38 222
rmeddis@38 223 IHC_RP_peak=zeros(nLevels,1);
rmeddis@38 224 IHC_RP_min=zeros(nLevels,1);
rmeddis@38 225 IHC_RP_dc=zeros(nLevels,1);
rmeddis@38 226
rmeddis@38 227 time=dt:dt:toneDuration;
rmeddis@38 228
rmeddis@38 229 rampDuration=0.004;
rmeddis@38 230 rampTime=dt:dt:rampDuration;
rmeddis@38 231 ramp=[0.5*(1+cos(2*pi*rampTime/(2*rampDuration)+pi)) ...
rmeddis@38 232 ones(1,length(time)-length(rampTime))];
rmeddis@38 233 ramp=ramp.*fliplr(ramp);
rmeddis@38 234
rmeddis@38 235 silence=zeros(1,round(silenceDuration/dt));
rmeddis@38 236
rmeddis@38 237 toneStartptr=length(silence)+1;
rmeddis@38 238 toneMidptr=toneStartptr+round(toneDuration/(2*dt)) -1;
rmeddis@38 239 toneEndptr=toneStartptr+round(toneDuration/dt) -1;
rmeddis@38 240
rmeddis@38 241 levelNo=0;
rmeddis@38 242 for leveldB=levels
rmeddis@38 243 levelNo=levelNo+1;
rmeddis@38 244 % replicate at all levels
rmeddis@38 245 amp=28e-6*10^(leveldB/20);
rmeddis@38 246
rmeddis@38 247 %% create signal (leveldB/ frequency)
rmeddis@38 248 inputSignal=amp*sin(2*pi*targetFrequency'*time);
rmeddis@38 249 inputSignal= ramp.*inputSignal;
rmeddis@38 250 inputSignal=[silence inputSignal silence];
rmeddis@38 251 inputStimulusParams.sampleRate=1/dt;
rmeddis@38 252 % global IHC_ciliaParams
rmeddis@38 253
rmeddis@38 254 %% run the model
rmeddis@38 255 global DRNLoutput IHC_cilia_output IHCrestingCiliaCond IHCrestingV...
rmeddis@38 256 IHCoutput
rmeddis@38 257 AN_spikesOrProbability='probability';
rmeddis@38 258
rmeddis@38 259 MAP1_14(inputSignal, sampleRate, BF, ...
rmeddis@38 260 MAPparamsName, AN_spikesOrProbability, paramChanges);
rmeddis@38 261
rmeddis@38 262 % RP
rmeddis@38 263 IHC_RPData=IHCoutput;
rmeddis@38 264 IHC_RP_peak(levelNo,1)=...
rmeddis@38 265 max(IHC_RPData(toneMidptr:toneEndptr));
rmeddis@38 266 IHC_RP_min(levelNo,1)=...
rmeddis@38 267 min(IHC_RPData(toneMidptr:toneEndptr));
rmeddis@38 268 IHC_RP_dc(levelNo,1)=...
rmeddis@38 269 mean(IHC_RPData(toneMidptr:toneEndptr));
rmeddis@38 270 end
rmeddis@38 271
rmeddis@38 272
rmeddis@38 273 %% RP I/O function min and max
rmeddis@38 274 figure(4)
rmeddis@38 275 subplot(2,2,4)
rmeddis@38 276 restingRP=IHC_RP_peak(1);
rmeddis@38 277 peakRP=max(IHC_RP_peak);
rmeddis@38 278 plot(levels, IHC_RP_peak, 'linewidth',2)
rmeddis@38 279 hold on
rmeddis@38 280 plot(levels, IHC_RP_dc, ':', 'linewidth',2)
rmeddis@38 281 plot([min(levels) max(levels)], [restingRP restingRP], 'r')
rmeddis@38 282 xlim([min(levels) max(levels)])
rmeddis@38 283 % animal data
rmeddis@38 284 sndLevel=[5 15 25 35 45 55 65 75];
rmeddis@38 285 RPanimal=restingRP+[0.5 2 4.6 5.8 6.4 7.2 8 10.2]/1000;
rmeddis@38 286 % could be misleading when restingRP changes
rmeddis@38 287 RPanimal=-0.060+[0.5 2 4.6 5.8 6.4 7.2 8 10.2]/1000;
rmeddis@38 288 hold on, plot(sndLevel,RPanimal,'o')
rmeddis@38 289
rmeddis@38 290 grid on
rmeddis@38 291 title(' 7 kHz Patuzzi')
rmeddis@38 292 ylabel ('RP(V) peak and DC'), xlabel('dB SPL')
rmeddis@38 293 ylim([-0.07 -0.04])
rmeddis@38 294 path(savePath);
rmeddis@38 295 disp(paramChanges)