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