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)
|