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