comparison Copy_of_multithreshold 1.46/testAN.m @ 28:02aa9826efe0

mainly multiThreshold
author Ray Meddis <rmeddis@essex.ac.uk>
date Fri, 01 Jul 2011 12:59:47 +0100
parents
children
comparison
equal deleted inserted replaced
27:d4a7675b0413 28:02aa9826efe0
1 function vectorStrength=testAN(targetFrequency,BFlist, levels)
2 % testIHC used either for IHC I/O function ...
3 % or receptive field (doReceptiveFields=1)
4
5 global experiment method stimulusParameters
6 global IHC_VResp_VivoParams IHC_cilia_RPParams IHCpreSynapseParams
7 global AN_IHCsynapseParams
8
9 global ANoutput ANdt CNoutput ICoutput ICmembraneOutput tauCas
10 global ARattenuation MOCattenuation
11
12 dbstop if error
13
14 addpath (['..' filesep 'MAP'], ['..' filesep 'utilities'], ...
15 ['..' filesep 'parameterStore'], ['..' filesep 'wavFileStore'],...
16 ['..' filesep 'testPrograms'])
17
18 if nargin<3
19 levels=-10:10:80;
20 % levels=80:10:90;
21 end
22
23 nLevels=length(levels);
24
25 toneDuration=.2;
26 rampDuration=0.002;
27 silenceDuration=.02;
28 localPSTHbinwidth=0.001;
29
30 % Use only the first frequency in the GUI targetFrequency box to defineBF
31 % targetFrequency=stimulusParameters.targetFrequency(1);
32 % BFlist=targetFrequency;
33
34 AN_HSRonset=zeros(nLevels,1);
35 AN_HSRsaturated=zeros(nLevels,1);
36 AN_LSRonset=zeros(nLevels,1);
37 AN_LSRsaturated=zeros(nLevels,1);
38 CNLSRrate=zeros(nLevels,1);
39 CNHSRsaturated=zeros(nLevels,1);
40 ICHSRsaturated=zeros(nLevels,1);
41 ICLSRsaturated=zeros(nLevels,1);
42 vectorStrength=zeros(nLevels,1);
43
44 AR=zeros(nLevels,1);
45 MOC=zeros(nLevels,1);
46
47 % ANoutput=zeros(200,200);
48
49 figure(15), clf
50 set(gcf,'position',[980 356 401 321])
51 figure(5), clf
52 set(gcf,'position', [980 34 400 295])
53 drawnow
54
55 %% guarantee that the sample rate is at least 10 times the frequency
56 sampleRate=50000;
57 while sampleRate< 10* targetFrequency
58 sampleRate=sampleRate+10000;
59 end
60
61 %% adjust sample rate so that the pure tone stimulus has an integer
62 %% numver of epochs in a period
63 dt=1/sampleRate;
64 period=1/targetFrequency;
65 ANspeedUpFactor=5; %anticipating MAP (needs clearing up)
66 ANdt=dt*ANspeedUpFactor;
67 ANdt=period/round(period/ANdt);
68 dt=ANdt/ANspeedUpFactor;
69 sampleRate=1/dt;
70 epochsPerPeriod=sampleRate*period;
71
72 %% main computational loop (vary level)
73 levelNo=0;
74 for leveldB=levels
75 levelNo=levelNo+1;
76
77 fprintf('%4.0f\t', leveldB)
78 amp=28e-6*10^(leveldB/20);
79
80 time=dt:dt:toneDuration;
81 rampTime=dt:dt:rampDuration;
82 ramp=[0.5*(1+cos(2*pi*rampTime/(2*rampDuration)+pi)) ...
83 ones(1,length(time)-length(rampTime))];
84 ramp=ramp.*fliplr(ramp);
85
86 silence=zeros(1,round(silenceDuration/dt));
87
88 % create signal (leveldB/ targetFrequency)
89 inputSignal=amp*sin(2*pi*targetFrequency'*time);
90 inputSignal= ramp.*inputSignal;
91 inputSignal=[silence inputSignal];
92
93 %% run the model
94 AN_spikesOrProbability='spikes';
95 MAPparamsName=experiment.name;
96 showPlotsAndDetails=0;
97
98
99 MAP1_14(inputSignal, 1/dt, BFlist, ...
100 MAPparamsName, AN_spikesOrProbability);
101
102 nTaus=length(tauCas);
103
104 %LSR (same as HSR if no LSR fibers present)
105 [nANFibers nTimePoints]=size(ANoutput);
106
107 numLSRfibers=nANFibers/nTaus;
108 numHSRfibers=numLSRfibers;
109
110 LSRspikes=ANoutput(1:numLSRfibers,:);
111 PSTH=UTIL_PSTHmaker(LSRspikes, ANdt, localPSTHbinwidth);
112 PSTHLSR=mean(PSTH,1)/localPSTHbinwidth; % across fibers rates
113 PSTHtime=localPSTHbinwidth:localPSTHbinwidth:...
114 localPSTHbinwidth*length(PSTH);
115 AN_LSRonset(levelNo)= max(PSTHLSR); % peak in 5 ms window
116 AN_LSRsaturated(levelNo)= mean(PSTHLSR(round(length(PSTH)/2):end));
117
118 % HSR
119 HSRspikes= ANoutput(end- numHSRfibers+1:end, :);
120 PSTH=UTIL_PSTHmaker(HSRspikes, ANdt, localPSTHbinwidth);
121 PSTH=mean(PSTH,1)/localPSTHbinwidth; % sum across fibers (HSR only)
122 AN_HSRonset(levelNo)= max(PSTH);
123 AN_HSRsaturated(levelNo)= mean(PSTH(round(length(PSTH)/2): end));
124
125 figure(5), subplot(2,2,2)
126 hold off, bar(PSTHtime,PSTH, 'b')
127 hold on, bar(PSTHtime,PSTHLSR,'r')
128 ylim([0 1000])
129 xlim([0 length(PSTH)*localPSTHbinwidth])
130 set(gcf,'name',[num2str(BFlist), ' Hz: ' num2str(leveldB) ' dB']);
131
132 % AN - CV
133 % CV is computed 5 times. Use the middle one (3) as most typical
134 cvANHSR= UTIL_CV(HSRspikes, ANdt);
135
136 % AN - vector strength
137 PSTH=sum(HSRspikes);
138 [PH, binTimes]=UTIL_periodHistogram...
139 (PSTH, ANdt, targetFrequency);
140 VS=UTIL_vectorStrength(PH);
141 vectorStrength(levelNo)=VS;
142 disp(['sat rate= ' num2str(AN_HSRsaturated(levelNo)) ...
143 '; phase-locking VS = ' num2str(VS)])
144 title(['AN HSR: CV=' num2str(cvANHSR(3),'%5.2f') ...
145 'VS=' num2str(VS,'%5.2f')])
146
147 % CN - first-order neurons
148
149 % CN LSR
150 [nCNneurons c]=size(CNoutput);
151 nLSRneurons=round(nCNneurons/nTaus);
152 CNLSRspikes=CNoutput(1:nLSRneurons,:);
153 PSTH=UTIL_PSTHmaker(CNLSRspikes, ANdt, localPSTHbinwidth);
154 PSTH=sum(PSTH)/nLSRneurons;
155 CNLSRrate(levelNo)=mean(PSTH(round(length(PSTH)/2):end))/localPSTHbinwidth;
156
157 %CN HSR
158 MacGregorMultiHSRspikes=...
159 CNoutput(end-nLSRneurons:end,:);
160 PSTH=UTIL_PSTHmaker(MacGregorMultiHSRspikes, ANdt, localPSTHbinwidth);
161 PSTH=sum(PSTH)/nLSRneurons;
162 PSTH=mean(PSTH,1)/localPSTHbinwidth; % sum across fibers (HSR only)
163
164 CNHSRsaturated(levelNo)=mean(PSTH(length(PSTH)/2:end));
165
166 figure(5), subplot(2,2,3)
167 bar(PSTHtime,PSTH)
168 ylim([0 1000])
169 xlim([0 length(PSTH)*localPSTHbinwidth])
170 cvMMHSR= UTIL_CV(MacGregorMultiHSRspikes, ANdt);
171 title(['CN CV= ' num2str(cvMMHSR(3),'%5.2f')])
172
173 % IC LSR
174 [nICneurons c]=size(ICoutput);
175 nLSRneurons=round(nICneurons/nTaus);
176 ICLSRspikes=ICoutput(1:nLSRneurons,:);
177 PSTH=UTIL_PSTHmaker(ICLSRspikes, ANdt, localPSTHbinwidth);
178 ICLSRsaturated(levelNo)=mean(PSTH(round(length(PSTH)/2):end))/localPSTHbinwidth;
179
180 %IC HSR
181 MacGregorMultiHSRspikes=...
182 ICoutput(end-nLSRneurons:end,:);
183 PSTH=UTIL_PSTHmaker(MacGregorMultiHSRspikes, ANdt, localPSTHbinwidth);
184 PSTH=sum(PSTH)/nLSRneurons;
185 PSTH=mean(PSTH,1)/localPSTHbinwidth; % sum across fibers (HSR only)
186
187 ICHSRsaturated(levelNo)=mean(PSTH(length(PSTH)/2:end));
188
189 AR(levelNo)=min(ARattenuation);
190 MOC(levelNo)=min(MOCattenuation(length(MOCattenuation)/2:end));
191
192 time=dt:dt:dt*size(ICmembraneOutput,2);
193 figure(5), subplot(2,2,4)
194 plot(time,ICmembraneOutput(2, 1:end),'k')
195 ylim([-0.07 0])
196 xlim([0 max(time)])
197 title(['IC ' num2str(leveldB,'%4.0f') 'dB'])
198 drawnow
199
200 figure(5), subplot(2,2,1)
201 plot(20*log10(MOC), 'k'),
202 title(' MOC'), ylabel('dB attenuation')
203 ylim([-30 0])
204
205
206 end % level
207 figure(5), subplot(2,2,1)
208 plot(levels,20*log10(MOC), 'k'),
209 title(' MOC'), ylabel('dB attenuation')
210 ylim([-30 0])
211 xlim([0 max(levels)])
212
213 fprintf('\n')
214 toneDuration=2;
215 rampDuration=0.004;
216 silenceDuration=.02;
217 nRepeats=200; % no. of AN fibers
218 fprintf('toneDuration %6.3f\n', toneDuration)
219 fprintf(' %6.0f AN fibers (repeats)\n', nRepeats)
220 fprintf('levels')
221 fprintf('%6.2f\t', levels)
222 fprintf('\n')
223
224
225 % ---------------------------------------------------- display parameters
226
227 figure(15), clf
228 nRows=2; nCols=2;
229
230 % AN rate - level ONSET functions
231 subplot(nRows,nCols,1)
232 plot(levels,AN_LSRonset,'ro'), hold on
233 plot(levels,AN_HSRonset,'ko'), hold off
234 ylim([0 1000]), xlim([min(levels) max(levels)])
235 ttl=['tauCa= ' num2str(IHCpreSynapseParams.tauCa)];
236 title( ttl)
237 xlabel('level dB SPL'), ylabel('peak rate (sp/s)'), grid on
238 text(0, 800, 'AN onset', 'fontsize', 16)
239
240 % AN rate - level ADAPTED function
241 subplot(nRows,nCols,2)
242 plot(levels,AN_LSRsaturated, 'ro'), hold on
243 plot(levels,AN_HSRsaturated, 'ko'), hold off
244 ylim([0 400])
245 set(gca,'ytick',0:50:300)
246 xlim([min(levels) max(levels)])
247 set(gca,'xtick',[levels(1):20:levels(end)])
248 % grid on
249 ttl=[ 'spont=' num2str(mean(AN_HSRsaturated(1,:)),'%4.0f')...
250 ' sat=' num2str(mean(AN_HSRsaturated(end,1)),'%4.0f')];
251 title( ttl)
252 xlabel('level dB SPL'), ylabel ('adapted rate (sp/s)')
253 text(0, 340, 'AN adapted', 'fontsize', 16), grid on
254
255 % CN rate - level ADAPTED function
256 subplot(nRows,nCols,3)
257 plot(levels,CNLSRrate, 'ro'), hold on
258 plot(levels,CNHSRsaturated, 'ko'), hold off
259 ylim([0 400])
260 set(gca,'ytick',0:50:300)
261 xlim([min(levels) max(levels)])
262 set(gca,'xtick',[levels(1):20:levels(end)])
263 % grid on
264 ttl=[ 'spont=' num2str(mean(CNHSRsaturated(1,:)),'%4.0f') ' sat=' ...
265 num2str(mean(CNHSRsaturated(end,1)),'%4.0f')];
266 title( ttl)
267 xlabel('level dB SPL'), ylabel ('adapted rate (sp/s)')
268 text(0, 350, 'CN', 'fontsize', 16), grid on
269
270 % IC rate - level ADAPTED function
271 subplot(nRows,nCols,4)
272 plot(levels,ICLSRsaturated, 'ro'), hold on
273 plot(levels,ICHSRsaturated, 'ko'), hold off
274 ylim([0 400])
275 set(gca,'ytick',0:50:300)
276 xlim([min(levels) max(levels)])
277 set(gca,'xtick',[levels(1):20:levels(end)]), grid on
278
279
280 ttl=['spont=' num2str(mean(ICHSRsaturated(1,:)),'%4.0f') ...
281 ' sat=' num2str(mean(ICHSRsaturated(end,1)),'%4.0f')];
282 title( ttl)
283 xlabel('level dB SPL'), ylabel ('adapted rate (sp/s)')
284 text(0, 350, 'IC', 'fontsize', 16)
285 set(gcf,'name',' AN CN IC rate/level')
286
287 peakVectorStrength=max(vectorStrength);
288
289 fprintf('\n')
290 disp('levels vectorStrength')
291 fprintf('%3.0f \t %6.4f \n', [levels; vectorStrength'])
292 fprintf('\n')
293 fprintf('Phase locking, max vector strength=\t %6.4f\n\n',...
294 max(vectorStrength))
295
296 allData=[ levels' AN_HSRonset AN_HSRsaturated...
297 AN_LSRonset AN_LSRsaturated ...
298 CNHSRsaturated CNLSRrate...
299 ICHSRsaturated ICLSRsaturated];
300 fprintf('\n levels \tANHSR Onset \tANHSR adapted\tANLSR Onset \tANLSR adapted\tCNHSR\tCNLSR\tICHSR \tICLSR \n');
301 UTIL_printTabTable(round(allData))
302 fprintf('VS (phase locking)= \t%6.4f\n\n',...
303 max(vectorStrength))
304
305 UTIL_showStruct(IHC_cilia_RPParams, 'IHC_cilia_RPParams')
306 UTIL_showStruct(IHCpreSynapseParams, 'IHCpreSynapseParams')
307 UTIL_showStruct(AN_IHCsynapseParams, 'AN_IHCsynapseParams')
308
309 fprintf('\n')
310 disp('levels vectorStrength')
311 fprintf('%3.0f \t %6.4f \n', [levels; vectorStrength'])
312 fprintf('\n')
313 fprintf('Phase locking, max vector strength= \t%6.4f\n\n',...
314 max(vectorStrength))
315
316 allData=[ levels' AN_HSRonset AN_HSRsaturated...
317 AN_LSRonset AN_LSRsaturated ...
318 CNHSRsaturated CNLSRrate...
319 ICHSRsaturated ICLSRsaturated];
320 fprintf('\n levels \tANHSR Onset \tANHSR adapted\tANLSR Onset \tANLSR adapted\tCNHSR\tCNLSR\tICHSR \tICLSR \n');
321 UTIL_printTabTable(round(allData))
322 fprintf('VS (phase locking)= \t%6.4f\n\n',...
323 max(vectorStrength))
324