rmeddis@29
|
1 function testRP(BFs,MAPparamsName,paramChanges)
|
rmeddis@38
|
2 % testIHC evaluates IHC I/O function
|
rmeddis@35
|
3 % multiple BFs can be used but only one is easier to interpret.
|
rmeddis@35
|
4 % e.g. testRP(1000,'Normal',{});
|
rmeddis@29
|
5
|
rmeddis@29
|
6 global experiment method inputStimulusParams
|
rmeddis@29
|
7 global stimulusParameters IHC_VResp_VivoParams IHC_cilia_RPParams
|
rmeddis@29
|
8 savePath=path;
|
rmeddis@29
|
9 addpath (['..' filesep 'utilities'],['..' filesep 'MAP'])
|
rmeddis@29
|
10 dbstop if error
|
rmeddis@29
|
11
|
rmeddis@29
|
12 figure(4), clf,
|
rmeddis@29
|
13 set (gcf, 'name', ['IHC'])
|
rmeddis@29
|
14 set(gcf,'position',[613 354 360 322])
|
rmeddis@29
|
15 drawColors='rgbkmcy';
|
rmeddis@29
|
16 drawnow
|
rmeddis@29
|
17
|
rmeddis@29
|
18 if nargin<3
|
rmeddis@29
|
19 paramChanges=[];
|
rmeddis@29
|
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 BFs=800;
|
rmeddis@38
|
26 end
|
rmeddis@29
|
27
|
rmeddis@29
|
28 levels=-20:10:100;
|
rmeddis@29
|
29 nLevels=length(levels);
|
rmeddis@29
|
30 toneDuration=.05;
|
rmeddis@29
|
31 silenceDuration=.01;
|
rmeddis@29
|
32 sampleRate=50000;
|
rmeddis@29
|
33 dt=1/sampleRate;
|
rmeddis@29
|
34
|
rmeddis@29
|
35 allIHC_RP_peak=[];
|
rmeddis@29
|
36 allIHC_RP_dc=[];
|
rmeddis@29
|
37
|
rmeddis@29
|
38 for BFno=1:length(BFs)
|
rmeddis@29
|
39 BF=BFs(BFno);
|
rmeddis@29
|
40 targetFrequency=BF;
|
rmeddis@29
|
41 % OR
|
rmeddis@29
|
42 %Patuzzi and Sellick test (see ELP & AEM, 2006)
|
rmeddis@29
|
43 % targetFrequency=100;
|
rmeddis@29
|
44
|
rmeddis@29
|
45 IHC_RP_peak=zeros(nLevels,1);
|
rmeddis@29
|
46 IHC_RP_min=zeros(nLevels,1);
|
rmeddis@29
|
47 IHC_RP_dc=zeros(nLevels,1);
|
rmeddis@29
|
48
|
rmeddis@29
|
49 time=dt:dt:toneDuration;
|
rmeddis@29
|
50
|
rmeddis@29
|
51 rampDuration=0.004;
|
rmeddis@29
|
52 rampTime=dt:dt:rampDuration;
|
rmeddis@29
|
53 ramp=[0.5*(1+cos(2*pi*rampTime/(2*rampDuration)+pi)) ...
|
rmeddis@29
|
54 ones(1,length(time)-length(rampTime))];
|
rmeddis@29
|
55 ramp=ramp.*fliplr(ramp);
|
rmeddis@29
|
56
|
rmeddis@29
|
57 silence=zeros(1,round(silenceDuration/dt));
|
rmeddis@29
|
58
|
rmeddis@29
|
59 toneStartptr=length(silence)+1;
|
rmeddis@29
|
60 toneMidptr=toneStartptr+round(toneDuration/(2*dt)) -1;
|
rmeddis@29
|
61 toneEndptr=toneStartptr+round(toneDuration/dt) -1;
|
rmeddis@29
|
62
|
rmeddis@29
|
63 levelNo=0;
|
rmeddis@29
|
64 for leveldB=levels
|
rmeddis@29
|
65 levelNo=levelNo+1;
|
rmeddis@29
|
66 % replicate at all levels
|
rmeddis@29
|
67 amp=28e-6*10^(leveldB/20);
|
rmeddis@29
|
68
|
rmeddis@29
|
69 %% create signal (leveldB/ frequency)
|
rmeddis@29
|
70 inputSignal=amp*sin(2*pi*targetFrequency'*time);
|
rmeddis@29
|
71 inputSignal= ramp.*inputSignal;
|
rmeddis@29
|
72 inputSignal=[silence inputSignal silence];
|
rmeddis@29
|
73 inputStimulusParams.sampleRate=1/dt;
|
rmeddis@29
|
74 % global IHC_ciliaParams
|
rmeddis@29
|
75
|
rmeddis@29
|
76 %% disable efferent for fast processing
|
rmeddis@29
|
77 method.DRNLSave=1;
|
rmeddis@29
|
78 method.IHC_cilia_RPSave=1;
|
rmeddis@29
|
79 method.IHCpreSynapseSave=1;
|
rmeddis@29
|
80 method.IHC_cilia_RPSave=1;
|
rmeddis@29
|
81 method.segmentDuration=-1;
|
rmeddis@29
|
82 moduleSequence=1:4;
|
rmeddis@29
|
83
|
rmeddis@29
|
84 %% run the model
|
rmeddis@29
|
85 global DRNLoutput IHC_cilia_output IHCrestingCiliaCond IHCrestingV...
|
rmeddis@29
|
86 IHCoutput
|
rmeddis@29
|
87 AN_spikesOrProbability='probability';
|
rmeddis@29
|
88
|
rmeddis@29
|
89 MAP1_14(inputSignal, sampleRate, BF, ...
|
rmeddis@29
|
90 MAPparamsName, AN_spikesOrProbability, paramChanges);
|
rmeddis@29
|
91
|
rmeddis@29
|
92 % DRNL
|
rmeddis@29
|
93 DRNLoutput=DRNLoutput;
|
rmeddis@29
|
94 DRNL_peak(levelNo,1)=max(DRNLoutput(toneMidptr:toneEndptr));
|
rmeddis@29
|
95 DRNL_min(levelNo,1)=min(DRNLoutput(toneMidptr:toneEndptr));
|
rmeddis@29
|
96 DRNL_dc(levelNo,1)=mean(DRNLoutput(toneMidptr:toneEndptr));
|
rmeddis@29
|
97
|
rmeddis@29
|
98 % cilia
|
rmeddis@29
|
99 IHC_ciliaData=IHC_cilia_output;
|
rmeddis@29
|
100 IHC_ciliaData=IHC_ciliaData;
|
rmeddis@29
|
101 IHC_cilia_peak(levelNo,1)=...
|
rmeddis@29
|
102 max(IHC_ciliaData(toneMidptr:toneEndptr));
|
rmeddis@29
|
103 IHC_cilia_min(levelNo,1)=...
|
rmeddis@29
|
104 min(IHC_ciliaData(toneMidptr:toneEndptr));
|
rmeddis@29
|
105 IHC_cilia_dc(levelNo,1)=...
|
rmeddis@29
|
106 mean(IHC_ciliaData(toneMidptr:toneEndptr));
|
rmeddis@29
|
107
|
rmeddis@29
|
108 % RP
|
rmeddis@29
|
109 IHC_RPData=IHCoutput;
|
rmeddis@29
|
110 IHC_RPData=IHC_RPData;
|
rmeddis@29
|
111 IHC_RP_peak(levelNo,1)=...
|
rmeddis@29
|
112 max(IHC_RPData(toneMidptr:toneEndptr));
|
rmeddis@29
|
113 IHC_RP_min(levelNo,1)=...
|
rmeddis@29
|
114 min(IHC_RPData(toneMidptr:toneEndptr));
|
rmeddis@29
|
115 IHC_RP_dc(levelNo,1)=...
|
rmeddis@29
|
116 mean(IHC_RPData(toneMidptr:toneEndptr));
|
rmeddis@29
|
117
|
rmeddis@29
|
118 end % level
|
rmeddis@29
|
119
|
rmeddis@29
|
120
|
rmeddis@29
|
121 disp(['parameter file was: ' MAPparamsName])
|
rmeddis@29
|
122 fprintf('\n')
|
rmeddis@29
|
123
|
rmeddis@29
|
124 %% plot DRNL
|
rmeddis@29
|
125 subplot(2,2,1)
|
rmeddis@29
|
126 % referenceDisp= 9e-9*1000/targetFrequency;
|
rmeddis@29
|
127 % plot(levels,20*log10(DRNL_peak/referenceDisp), drawColors(BFno), ...
|
rmeddis@29
|
128 % 'linewidth',2), hold on
|
rmeddis@29
|
129 referenceDisp=10e-9;
|
rmeddis@29
|
130 plot(levels,20*log10(DRNL_peak/referenceDisp), drawColors(BFno), ...
|
rmeddis@29
|
131 'linewidth',2), hold on
|
rmeddis@29
|
132 title([' DRNL peak: ' num2str(BFs) ' Hz'])
|
rmeddis@29
|
133 ylabel ('log10DRNL(m)'), xlabel('dB SPL')
|
rmeddis@29
|
134 xlim([min(levels) max(levels)]), ylim([-10 50])
|
rmeddis@29
|
135 grid on
|
rmeddis@29
|
136
|
rmeddis@29
|
137 %% plot cilia displacement
|
rmeddis@29
|
138 figure(4)
|
rmeddis@29
|
139 subplot(2,2,2)
|
rmeddis@29
|
140 restingIHC_cilia=IHCrestingCiliaCond;
|
rmeddis@29
|
141 plot(levels, IHC_cilia_peak,'k', 'linewidth',2), hold on
|
rmeddis@38
|
142 % plot(levels, IHC_cilia_min,'r', 'linewidth',2)
|
rmeddis@38
|
143 % hold on,
|
rmeddis@38
|
144 % plot([min(levels) max(levels)], ...
|
rmeddis@38
|
145 % [restingIHC_cilia restingIHC_cilia], 'g')
|
rmeddis@29
|
146 title(' IHC apical cond.')
|
rmeddis@29
|
147 ylabel ('IHCcilia(conductance)'), xlabel('dB SPL')
|
rmeddis@29
|
148 xlim([min(levels) max(levels)])
|
rmeddis@29
|
149 grid on
|
rmeddis@29
|
150
|
rmeddis@29
|
151 %% plot receptor potentials
|
rmeddis@29
|
152 figure(4)
|
rmeddis@29
|
153 subplot(2,2,3)
|
rmeddis@29
|
154 % RP I/O function min and max
|
rmeddis@29
|
155 restingRP=IHC_RP_peak(1);
|
rmeddis@29
|
156 toPlot= [fliplr(IHC_RP_min(:,1)') IHC_RP_peak(:,1)'];
|
rmeddis@29
|
157 microPa= 28e-6*10.^(levels/20);
|
rmeddis@29
|
158 microPa=[-fliplr(microPa) microPa];
|
rmeddis@29
|
159 plot(microPa,toPlot, drawColors(BFno), 'linewidth',2)
|
rmeddis@29
|
160 % ylim([0 300])
|
rmeddis@29
|
161
|
rmeddis@29
|
162 %% Dallos and Harris data
|
rmeddis@29
|
163 dallosx=[-0.9 -0.1 -0.001 0.001 0.01 0.9];
|
rmeddis@29
|
164 dallosy=[-8 -7.8 -6.5 11 16.5 22]/1000 + restingRP;
|
rmeddis@29
|
165 hold on, plot(dallosx,dallosy, 'o')
|
rmeddis@29
|
166 plot([-1 1], [restingRP restingRP], 'r')
|
rmeddis@29
|
167 title(' Dallos(86) data at 800 Hz')
|
rmeddis@29
|
168 ylabel ('receptor potential(V)'), xlabel('Pa')
|
rmeddis@29
|
169 ylim([-0.08 -0.02]), xlim([-1 1])
|
rmeddis@29
|
170 grid on
|
rmeddis@29
|
171
|
rmeddis@29
|
172 %% RP I/O function min and max
|
rmeddis@29
|
173 figure(4)
|
rmeddis@29
|
174 subplot(2,2,4)
|
rmeddis@29
|
175 restingRP=IHC_RP_peak(1);
|
rmeddis@29
|
176 peakRP=max(IHC_RP_peak);
|
rmeddis@29
|
177 plot(levels, IHC_RP_peak,drawColors(BFno), 'linewidth',2)
|
rmeddis@29
|
178 hold on
|
rmeddis@29
|
179 plot(levels, IHC_RP_dc, [drawColors(BFno) ':'], 'linewidth',2)
|
rmeddis@29
|
180 hold on,
|
rmeddis@29
|
181 plot([min(levels) max(levels)], [restingRP restingRP], 'r')
|
rmeddis@29
|
182 xlim([min(levels) max(levels)])
|
rmeddis@29
|
183 % animal data
|
rmeddis@29
|
184 sndLevel=[5 15 25 35 45 55 65 75];
|
rmeddis@29
|
185 RPanimal=restingRP+[0.5 2 4.6 5.8 6.4 7.2 8 10.2]/1000;
|
rmeddis@29
|
186 % could be misleading when restingRP changes
|
rmeddis@29
|
187 RPanimal=-0.060+[0.5 2 4.6 5.8 6.4 7.2 8 10.2]/1000;
|
rmeddis@29
|
188 hold on, plot(sndLevel,RPanimal,'o')
|
rmeddis@29
|
189
|
rmeddis@29
|
190 grid on
|
rmeddis@29
|
191 title(['Et= ' num2str(IHC_cilia_RPParams.Et) ': RP data 7 kHz Patuzzi'])
|
rmeddis@36
|
192 ylabel ('RP(V) peak and DC'), xlabel('dB SPL')
|
rmeddis@29
|
193 ylim([-0.08 -0.04])
|
rmeddis@29
|
194 allIHC_RP_peak=[allIHC_RP_peak IHC_RP_peak];
|
rmeddis@29
|
195 allIHC_RP_dc=[allIHC_RP_dc IHC_RP_dc];
|
rmeddis@29
|
196
|
rmeddis@29
|
197 fprintf('level\t peak\t DC\n')
|
rmeddis@29
|
198 UTIL_printTabTable([levels' IHC_RP_peak IHC_RP_dc])
|
rmeddis@29
|
199 % disp(['restingIHC_cilia= ' num2str(restingIHC_cilia)])
|
rmeddis@29
|
200 fprintf('peakRP= \t%6.3f', peakRP)
|
rmeddis@29
|
201 fprintf('\nrestingRP= \t%6.3f', restingRP)
|
rmeddis@29
|
202 fprintf('\ndifference= \t%6.3f\n', (peakRP-restingRP))
|
rmeddis@29
|
203 drawnow
|
rmeddis@29
|
204 end
|
rmeddis@29
|
205 % UTIL_showStruct(IHC_VResp_VivoParams, 'IHC_VResp_VivoParams')
|
rmeddis@29
|
206 UTIL_showStruct(IHC_cilia_RPParams, 'IHC_cilia_RPParams')
|
rmeddis@29
|
207 fprintf('level\t peak\n')
|
rmeddis@29
|
208 UTIL_printTabTable([levels' allIHC_RP_peak])
|
rmeddis@29
|
209 fprintf('level\t DC\n')
|
rmeddis@29
|
210 UTIL_printTabTable([levels' allIHC_RP_dc])
|
rmeddis@29
|
211
|
rmeddis@29
|
212 path(savePath);
|
rmeddis@29
|
213 disp(paramChanges)
|