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