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