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