To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.

The primary repository for this project is hosted at git://github.com/rmeddis/MAP.git .
This repository is a read-only copy which is updated automatically every hour.

Statistics Download as Zip
| Branch: | Revision:

root / testPrograms / testAN.m @ 38:c2204b18f4a2

History | View | Annotate | Download (11.1 KB)

1 35:25d53244d5c8 rmeddis
function vectorStrength=testAN(probeFrequency,BFlist, levels, ...
2 29:b51bf546ca3f rmeddis
    paramsName,paramChanges)
3 38:c2204b18f4a2 rmeddis
% testAN generates rate/level functions for AN and brainstem units.
4 32:82fb37eb430e rmeddis
%  also other information like PSTHs, MOC efferent activity levels.
5 38:c2204b18f4a2 rmeddis
% Vector strength calculations require the computation of period
6
% histograms. for this reason the sample rate must always be an integer
7
% multiple of the tone frequency. This applies to both the sampleRate and
8
% the spikes sampling rate.
9
% A full 'spikes' model is used.
10
% paramChanges is a cell array of strings containing MATLAB statements that
11
% change model parameters. See MAPparamsNormal for examples.
12 35:25d53244d5c8 rmeddis
% e.g.
13 38:c2204b18f4a2 rmeddis
% testAN(1000,1000, -10:10:80,'Normal',{});
14
15 29:b51bf546ca3f rmeddis
16
global IHC_VResp_VivoParams  IHC_cilia_RPParams IHCpreSynapseParams
17
global AN_IHCsynapseParams
18 38:c2204b18f4a2 rmeddis
global ANoutput dtSpikes CNoutput ICoutput ICmembraneOutput ANtauCas
19 32:82fb37eb430e rmeddis
global ARattenuation MOCattenuation
20 35:25d53244d5c8 rmeddis
tic
21 29:b51bf546ca3f rmeddis
dbstop if error
22
restorePath=path;
23
addpath (['..' filesep 'MAP'], ['..' filesep 'utilities'], ...
24
    ['..' filesep 'parameterStore'],  ['..' filesep 'wavFileStore'],...
25
    ['..' filesep 'testPrograms'])
26
27 34:e097e9044ef6 rmeddis
if nargin<5, paramChanges=[]; end
28
if nargin<4, paramsName='Normal'; end
29 35:25d53244d5c8 rmeddis
if nargin<3, levels=-10:10:80; end
30
if nargin==0, probeFrequency=1000; BFlist=1000; end
31 29:b51bf546ca3f rmeddis
nLevels=length(levels);
32
33 34:e097e9044ef6 rmeddis
toneDuration=.2;   rampDuration=0.002;   silenceDuration=.02;
34 38:c2204b18f4a2 rmeddis
localPSTHbinwidth=0.0005;
35 29:b51bf546ca3f rmeddis
36 38:c2204b18f4a2 rmeddis
%% guarantee that the sample rate is an interger multiple
37
%   of the probe frequency
38
% we want 5 bins per period for spikes
39
spikesSampleRate=5*probeFrequency;
40
% model sample rate must be an integer multiple of this and in the region
41
% of 50000
42
sampleRate=spikesSampleRate*round(50000/spikesSampleRate);
43 29:b51bf546ca3f rmeddis
dt=1/sampleRate;
44 38:c2204b18f4a2 rmeddis
% avoid very slow spikes sampling rate
45
spikesSampleRate=spikesSampleRate*ceil(10000/spikesSampleRate);
46 34:e097e9044ef6 rmeddis
47
%% pre-allocate storage
48
AN_HSRonset=zeros(nLevels,1);
49
AN_HSRsaturated=zeros(nLevels,1);
50
AN_LSRonset=zeros(nLevels,1);
51
AN_LSRsaturated=zeros(nLevels,1);
52
CNLSRrate=zeros(nLevels,1);
53
CNHSRsaturated=zeros(nLevels,1);
54
ICHSRsaturated=zeros(nLevels,1);
55
ICLSRsaturated=zeros(nLevels,1);
56
vectorStrength=zeros(nLevels,1);
57
58
AR=zeros(nLevels,1);
59
MOC=zeros(nLevels,1);
60
61
figure(15), clf
62
set(gcf,'position',[980   356   401   321])
63
figure(5), clf
64
set(gcf,'position', [980 34 400 295])
65
drawnow
66
67 29:b51bf546ca3f rmeddis
68 32:82fb37eb430e rmeddis
%% main computational loop (vary level)
69 29:b51bf546ca3f rmeddis
levelNo=0;
70
for leveldB=levels
71
    levelNo=levelNo+1;
72 34:e097e9044ef6 rmeddis
    amp=28e-6*10^(leveldB/20);
73 29:b51bf546ca3f rmeddis
    fprintf('%4.0f\t', leveldB)
74 34:e097e9044ef6 rmeddis
75
    %% generate tone and silences
76 29:b51bf546ca3f rmeddis
    time=dt:dt:toneDuration;
77
    rampTime=dt:dt:rampDuration;
78
    ramp=[0.5*(1+cos(2*pi*rampTime/(2*rampDuration)+pi)) ...
79
        ones(1,length(time)-length(rampTime))];
80
    ramp=ramp.*fliplr(ramp);
81 32:82fb37eb430e rmeddis
82 29:b51bf546ca3f rmeddis
    silence=zeros(1,round(silenceDuration/dt));
83 32:82fb37eb430e rmeddis
84 35:25d53244d5c8 rmeddis
    inputSignal=amp*sin(2*pi*probeFrequency'*time);
85 29:b51bf546ca3f rmeddis
    inputSignal= ramp.*inputSignal;
86
    inputSignal=[silence inputSignal];
87 32:82fb37eb430e rmeddis
88 29:b51bf546ca3f rmeddis
    %% run the model
89 38:c2204b18f4a2 rmeddis
    AN_spikesOrProbability='spikes';
90
    nExistingParamChanges=length(paramChanges);
91
    paramChanges{nExistingParamChanges+1}=...
92
        ['AN_IHCsynapseParams.spikesTargetSampleRate=' ...
93
        num2str(spikesSampleRate) ';'];
94
95 29:b51bf546ca3f rmeddis
    MAP1_14(inputSignal, 1/dt, BFlist, ...
96
        paramsName, AN_spikesOrProbability, paramChanges);
97 32:82fb37eb430e rmeddis
98
    nTaus=length(ANtauCas);
99
100 34:e097e9044ef6 rmeddis
    %% Auditory nerve evaluate and display (Fig. 5)
101 29:b51bf546ca3f rmeddis
    %LSR (same as HSR if no LSR fibers present)
102
    [nANFibers nTimePoints]=size(ANoutput);
103
    numLSRfibers=nANFibers/nTaus;
104
    numHSRfibers=numLSRfibers;
105 32:82fb37eb430e rmeddis
106 29:b51bf546ca3f rmeddis
    LSRspikes=ANoutput(1:numLSRfibers,:);
107 38:c2204b18f4a2 rmeddis
    PSTH=UTIL_PSTHmaker(LSRspikes, dtSpikes, localPSTHbinwidth);
108 29:b51bf546ca3f rmeddis
    PSTHLSR=mean(PSTH,1)/localPSTHbinwidth;  % across fibers rates
109
    PSTHtime=localPSTHbinwidth:localPSTHbinwidth:...
110
        localPSTHbinwidth*length(PSTH);
111
    AN_LSRonset(levelNo)= max(PSTHLSR); % peak in 5 ms window
112
    AN_LSRsaturated(levelNo)= mean(PSTHLSR(round(length(PSTH)/2):end));
113 32:82fb37eb430e rmeddis
114 38:c2204b18f4a2 rmeddis
    % AN HSR
115 29:b51bf546ca3f rmeddis
    HSRspikes= ANoutput(end- numHSRfibers+1:end, :);
116 38:c2204b18f4a2 rmeddis
    PSTH=UTIL_PSTHmaker(HSRspikes, dtSpikes, localPSTHbinwidth);
117 29:b51bf546ca3f rmeddis
    PSTH=mean(PSTH,1)/localPSTHbinwidth; % sum across fibers (HSR only)
118
    AN_HSRonset(levelNo)= max(PSTH);
119
    AN_HSRsaturated(levelNo)= mean(PSTH(round(length(PSTH)/2): end));
120 32:82fb37eb430e rmeddis
121 29:b51bf546ca3f rmeddis
    figure(5), subplot(2,2,2)
122
    hold off, bar(PSTHtime,PSTH, 'b')
123
    hold on,  bar(PSTHtime,PSTHLSR,'r')
124
    ylim([0 1000])
125
    xlim([0 length(PSTH)*localPSTHbinwidth])
126 34:e097e9044ef6 rmeddis
    grid on
127 33:161913b595ae rmeddis
    set(gcf,'name',['PSTH: ' num2str(BFlist), ' Hz: ' num2str(leveldB) ' dB']);
128 32:82fb37eb430e rmeddis
129 29:b51bf546ca3f rmeddis
    % AN - CV
130
    %  CV is computed 5 times. Use the middle one (3) as most typical
131 38:c2204b18f4a2 rmeddis
    cvANHSR=  UTIL_CV(HSRspikes, dtSpikes);
132 32:82fb37eb430e rmeddis
133 29:b51bf546ca3f rmeddis
    % AN - vector strength
134
    PSTH=sum(HSRspikes);
135
    [PH, binTimes]=UTIL_periodHistogram...
136 38:c2204b18f4a2 rmeddis
        (PSTH, dtSpikes, probeFrequency);
137 29:b51bf546ca3f rmeddis
    VS=UTIL_vectorStrength(PH);
138
    vectorStrength(levelNo)=VS;
139
    disp(['sat rate= ' num2str(AN_HSRsaturated(levelNo)) ...
140
        ';   phase-locking VS = ' num2str(VS)])
141
    title(['AN HSR: CV=' num2str(cvANHSR(3),'%5.2f') ...
142
        'VS=' num2str(VS,'%5.2f')])
143 32:82fb37eb430e rmeddis
144 34:e097e9044ef6 rmeddis
    %% CN - first-order neurons
145 32:82fb37eb430e rmeddis
146 34:e097e9044ef6 rmeddis
    % CN driven by LSR fibers
147 29:b51bf546ca3f rmeddis
    [nCNneurons c]=size(CNoutput);
148
    nLSRneurons=round(nCNneurons/nTaus);
149
    CNLSRspikes=CNoutput(1:nLSRneurons,:);
150 38:c2204b18f4a2 rmeddis
    PSTH=UTIL_PSTHmaker(CNLSRspikes, dtSpikes, localPSTHbinwidth);
151 29:b51bf546ca3f rmeddis
    PSTH=sum(PSTH)/nLSRneurons;
152 38:c2204b18f4a2 rmeddis
%     CNLSRrate(levelNo)=mean(PSTH(round(length(PSTH)/2):end))/localPSTHbinwidth;
153
    CNLSRrate(levelNo)=mean(PSTH)/localPSTHbinwidth;
154 32:82fb37eb430e rmeddis
155 29:b51bf546ca3f rmeddis
    %CN HSR
156
    MacGregorMultiHSRspikes=...
157 36:3ea506487b3b rmeddis
        CNoutput(end-nLSRneurons+1:end,:);
158 38:c2204b18f4a2 rmeddis
    PSTH=UTIL_PSTHmaker(MacGregorMultiHSRspikes, dtSpikes, localPSTHbinwidth);
159 29:b51bf546ca3f rmeddis
    PSTH=sum(PSTH)/nLSRneurons;
160
    PSTH=mean(PSTH,1)/localPSTHbinwidth; % sum across fibers (HSR only)
161 32:82fb37eb430e rmeddis
162 38:c2204b18f4a2 rmeddis
%     CNHSRsaturated(levelNo)=mean(PSTH(length(PSTH)/2:end));
163
    CNHSRsaturated(levelNo)=mean(PSTH);
164 32:82fb37eb430e rmeddis
165 29:b51bf546ca3f rmeddis
    figure(5), subplot(2,2,3)
166
    bar(PSTHtime,PSTH)
167
    ylim([0 1000])
168
    xlim([0 length(PSTH)*localPSTHbinwidth])
169 38:c2204b18f4a2 rmeddis
    cvMMHSR= UTIL_CV(MacGregorMultiHSRspikes, dtSpikes);
170 29:b51bf546ca3f rmeddis
    title(['CN    CV= ' num2str(cvMMHSR(3),'%5.2f')])
171 32:82fb37eb430e rmeddis
172 34:e097e9044ef6 rmeddis
    %% IC LSR
173 29:b51bf546ca3f rmeddis
    [nICneurons c]=size(ICoutput);
174
    nLSRneurons=round(nICneurons/nTaus);
175
    ICLSRspikes=ICoutput(1:nLSRneurons,:);
176 38:c2204b18f4a2 rmeddis
    PSTH=UTIL_PSTHmaker(ICLSRspikes, dtSpikes, localPSTHbinwidth);
177
%     ICLSRsaturated(levelNo)=mean(PSTH(round(length(PSTH)/2):end))/localPSTHbinwidth;
178
    ICLSRsaturated(levelNo)=mean(PSTH)/localPSTHbinwidth;
179 32:82fb37eb430e rmeddis
180 29:b51bf546ca3f rmeddis
    %IC HSR
181
    MacGregorMultiHSRspikes=...
182 34:e097e9044ef6 rmeddis
        ICoutput(end-nLSRneurons+1:end,:);
183 38:c2204b18f4a2 rmeddis
    PSTH=UTIL_PSTHmaker(MacGregorMultiHSRspikes, dtSpikes, localPSTHbinwidth);
184 34:e097e9044ef6 rmeddis
    ICHSRsaturated(levelNo)= (sum(PSTH)/nLSRneurons)/toneDuration;
185
186 29:b51bf546ca3f rmeddis
    AR(levelNo)=min(ARattenuation);
187
    MOC(levelNo)=min(MOCattenuation(length(MOCattenuation)/2:end));
188 32:82fb37eb430e rmeddis
189 29:b51bf546ca3f rmeddis
    time=dt:dt:dt*size(ICmembraneOutput,2);
190
    figure(5), subplot(2,2,4)
191 34:e097e9044ef6 rmeddis
    % plot HSR (last of two)
192 36:3ea506487b3b rmeddis
    plot(time,ICmembraneOutput(end-nLSRneurons+1, 1:end),'k')
193 29:b51bf546ca3f rmeddis
    ylim([-0.07 0])
194
    xlim([0 max(time)])
195
    title(['IC  ' num2str(leveldB,'%4.0f') 'dB'])
196
    drawnow
197 32:82fb37eb430e rmeddis
198 29:b51bf546ca3f rmeddis
    figure(5), subplot(2,2,1)
199 34:e097e9044ef6 rmeddis
    plot(20*log10(MOC), 'k'), hold on
200
    plot(20*log10(AR), 'r'), hold off
201 29:b51bf546ca3f rmeddis
    title(' MOC'), ylabel('dB attenuation')
202
    ylim([-30 0])
203 32:82fb37eb430e rmeddis
204 38:c2204b18f4a2 rmeddis
%     x=input('prompt')
205 29:b51bf546ca3f rmeddis
end % level
206 34:e097e9044ef6 rmeddis
207
%% plot with levels on x-axis
208 29:b51bf546ca3f rmeddis
figure(5), subplot(2,2,1)
209 34:e097e9044ef6 rmeddis
plot(levels,20*log10(MOC), 'k'),hold on
210
plot(levels,20*log10(AR), 'r'), hold off
211 29:b51bf546ca3f rmeddis
title(' MOC'), ylabel('dB attenuation')
212
ylim([-30 0])
213
xlim([0 max(levels)])
214
215
fprintf('\n')
216
toneDuration=2;
217
rampDuration=0.004;
218
silenceDuration=.02;
219
nRepeats=200;   % no. of AN fibers
220
fprintf('toneDuration  %6.3f\n', toneDuration)
221
fprintf(' %6.0f  AN fibers (repeats)\n', nRepeats)
222
fprintf('levels')
223
fprintf('%6.2f\t', levels)
224
fprintf('\n')
225
226 34:e097e9044ef6 rmeddis
%% ---------------------- display summary results (Fig 15)
227 29:b51bf546ca3f rmeddis
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 38:c2204b18f4a2 rmeddis
plot(levels,AN_HSRonset,'ko', 'MarkerEdgeColor','k', 'markerFaceColor','k'), hold off
234
ylim([0 1000])
235
if length(levels)>1
236
    xlim([min(levels) max(levels)])
237
end
238
239 29:b51bf546ca3f rmeddis
ttl=['tauCa= ' num2str(IHCpreSynapseParams.tauCa)];
240
title( ttl)
241
xlabel('level dB SPL'), ylabel('peak rate (sp/s)'), grid on
242 34:e097e9044ef6 rmeddis
text(0, 800, 'AN onset', 'fontsize', 14)
243 29:b51bf546ca3f rmeddis
244
% AN rate - level ADAPTED function
245
subplot(nRows,nCols,2)
246
plot(levels,AN_LSRsaturated, 'ro'), hold on
247 38:c2204b18f4a2 rmeddis
plot(levels,AN_HSRsaturated, 'ko', 'MarkerEdgeColor','k', 'markerFaceColor','k'), hold off
248 29:b51bf546ca3f rmeddis
ylim([0 400])
249
set(gca,'ytick',0:50:300)
250 38:c2204b18f4a2 rmeddis
if length(levels)>1
251 29:b51bf546ca3f rmeddis
xlim([min(levels) max(levels)])
252 38:c2204b18f4a2 rmeddis
end
253 29:b51bf546ca3f rmeddis
set(gca,'xtick',[levels(1):20:levels(end)])
254
%     grid on
255
ttl=[   'spont=' num2str(mean(AN_HSRsaturated(1,:)),'%4.0f')...
256
    '  sat=' num2str(mean(AN_HSRsaturated(end,1)),'%4.0f')];
257
title( ttl)
258
xlabel('level dB SPL'), ylabel ('adapted rate (sp/s)')
259 34:e097e9044ef6 rmeddis
text(0, 340, 'AN adapted', 'fontsize', 14), grid on
260 29:b51bf546ca3f rmeddis
261 38:c2204b18f4a2 rmeddis
% CN rate - level function
262 29:b51bf546ca3f rmeddis
subplot(nRows,nCols,3)
263
plot(levels,CNLSRrate, 'ro'), hold on
264 38:c2204b18f4a2 rmeddis
plot(levels,CNHSRsaturated, 'ko', 'MarkerEdgeColor','k', 'markerFaceColor','k'), hold off
265 29:b51bf546ca3f rmeddis
ylim([0 400])
266
set(gca,'ytick',0:50:300)
267 38:c2204b18f4a2 rmeddis
if length(levels)>1
268 29:b51bf546ca3f rmeddis
xlim([min(levels) max(levels)])
269 38:c2204b18f4a2 rmeddis
end
270 29:b51bf546ca3f rmeddis
set(gca,'xtick',[levels(1):20:levels(end)])
271
%     grid on
272
ttl=[   'spont=' num2str(mean(CNHSRsaturated(1,:)),'%4.0f') '  sat=' ...
273
    num2str(mean(CNHSRsaturated(end,1)),'%4.0f')];
274
title( ttl)
275
xlabel('level dB SPL'), ylabel ('adapted rate (sp/s)')
276 34:e097e9044ef6 rmeddis
text(0, 350, 'CN', 'fontsize', 14), grid on
277 29:b51bf546ca3f rmeddis
278 38:c2204b18f4a2 rmeddis
% IC rate - level function
279 29:b51bf546ca3f rmeddis
subplot(nRows,nCols,4)
280
plot(levels,ICLSRsaturated, 'ro'), hold on
281 38:c2204b18f4a2 rmeddis
plot(levels,ICHSRsaturated, 'ko', 'MarkerEdgeColor','k', 'markerFaceColor','k'), hold off
282 29:b51bf546ca3f rmeddis
ylim([0 400])
283
set(gca,'ytick',0:50:300)
284 38:c2204b18f4a2 rmeddis
if length(levels)>1
285 29:b51bf546ca3f rmeddis
xlim([min(levels) max(levels)])
286 38:c2204b18f4a2 rmeddis
end
287 29:b51bf546ca3f rmeddis
set(gca,'xtick',[levels(1):20:levels(end)]), grid on
288
ttl=['spont=' num2str(mean(ICHSRsaturated(1,:)),'%4.0f') ...
289
    '  sat=' num2str(mean(ICHSRsaturated(end,1)),'%4.0f')];
290
title( ttl)
291
xlabel('level dB SPL'), ylabel ('adapted rate (sp/s)')
292 34:e097e9044ef6 rmeddis
text(0, 350, 'IC', 'fontsize', 14)
293 29:b51bf546ca3f rmeddis
set(gcf,'name',' AN CN IC rate/level')
294
295
fprintf('\n')
296
disp('levels vectorStrength')
297
fprintf('%3.0f \t %6.4f \n', [levels; vectorStrength'])
298
fprintf('\n')
299
fprintf('Phase locking, max vector strength=\t %6.4f\n\n',...
300
    max(vectorStrength))
301
302
allData=[ levels'  AN_HSRonset AN_HSRsaturated...
303
    AN_LSRonset AN_LSRsaturated ...
304
    CNHSRsaturated CNLSRrate...
305
    ICHSRsaturated ICLSRsaturated];
306
fprintf('\n levels \tANHSR Onset \tANHSR adapted\tANLSR Onset \tANLSR adapted\tCNHSR\tCNLSR\tICHSR  \tICLSR \n');
307
UTIL_printTabTable(round(allData))
308
fprintf('VS (phase locking)= \t%6.4f\n\n',...
309
    max(vectorStrength))
310
311
UTIL_showStruct(IHC_cilia_RPParams, 'IHC_cilia_RPParams')
312
UTIL_showStruct(IHCpreSynapseParams, 'IHCpreSynapseParams')
313
UTIL_showStruct(AN_IHCsynapseParams, 'AN_IHCsynapseParams')
314
315
fprintf('\n')
316
disp('levels vectorStrength')
317
fprintf('%3.0f \t %6.4f \n', [levels; vectorStrength'])
318
fprintf('\n')
319
fprintf('Phase locking, max vector strength= \t%6.4f\n\n',...
320
    max(vectorStrength))
321
322
allData=[ levels'  AN_HSRonset AN_HSRsaturated...
323
    AN_LSRonset AN_LSRsaturated ...
324
    CNHSRsaturated CNLSRrate...
325
    ICHSRsaturated ICLSRsaturated];
326
fprintf('\n levels \tANHSR Onset \tANHSR adapted\tANLSR Onset \tANLSR adapted\tCNHSR\tCNLSR\tICHSR  \tICLSR \n');
327
UTIL_printTabTable(round(allData))
328
fprintf('VS (phase locking)= \t%6.4f\n\n',...
329
    max(vectorStrength))
330
331 32:82fb37eb430e rmeddis
path(restorePath)
332 35:25d53244d5c8 rmeddis
toc