Mercurial > hg > map
comparison Copy_of_multithreshold 1.46/testRF.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 testRF | |
2 % testIHC used either for IHC I/O function or receptive field (doReceptiveFields=1) | |
3 | |
4 global experiment method stimulusParameters expGUIhandles | |
5 global inputStimulusParams IHC_ciliaParams | |
6 global IHC_VResp_VivoParams IHCpreSynapseParams AN_IHCsynapseParams | |
7 dbstop if error | |
8 % set(expGUIhandles.pushbuttonStop, 'backgroundColor', [.941 .941 .941]) | |
9 | |
10 addpath (['..' filesep 'MAP'], ['..' filesep 'utilities'], ... | |
11 ['..' filesep 'parameterStore'], ['..' filesep 'wavFileStore'],... | |
12 ['..' filesep 'testPrograms']) | |
13 | |
14 targetFrequency=stimulusParameters.targetFrequency(1); | |
15 | |
16 sampleRate=50000; | |
17 doReceptiveFields=1; | |
18 | |
19 toneDuration=.05; | |
20 rampDuration=0.004; | |
21 silenceDuration=.02; | |
22 | |
23 nRepeats=100; % no. of AN fibers | |
24 | |
25 plotGraphsForIHC=1; | |
26 % number of MacGregor units is set in the parameter file. | |
27 | |
28 if doReceptiveFields | |
29 % show all receptive field | |
30 frequencies=targetFrequency* [ 0.5 0.7 0.9 1 1.1 1.3 1.6]; | |
31 levels=0:20:80; nLevels=length(levels); | |
32 figure(14), clf | |
33 figure(15), clf | |
34 else | |
35 % show only I/O function at BF | |
36 frequencies=targetFrequency; | |
37 levels=-20:10:90; | |
38 % levels=10:.25:13; | |
39 % levels=-20:1:-15 | |
40 nLevels=length(levels); | |
41 % figure(13), clf, | |
42 % set (gcf, 'name', ['IHC/AN input/output' num2str(AN_IHCsynapseParams.numFibers) ' repeats']) | |
43 % drawnow | |
44 end | |
45 nFrequencies=length(frequencies); | |
46 | |
47 IHC_RP_peak=zeros(nLevels,nFrequencies); | |
48 IHC_RP_min=zeros(nLevels,nFrequencies); | |
49 IHC_RP_dc=zeros(nLevels,nFrequencies); | |
50 AN_HSRonset=zeros(nLevels,nFrequencies); | |
51 AN_HSRsaturated=zeros(nLevels,nFrequencies); | |
52 AN_LSRonset=zeros(nLevels,nFrequencies); | |
53 AN_LSRsaturated=zeros(nLevels,nFrequencies); | |
54 CNLSRsaturated=zeros(nLevels,nFrequencies); | |
55 CNHSRsaturated=zeros(nLevels,nFrequencies); | |
56 ICHSRsaturated=zeros(nLevels,nFrequencies); | |
57 ICLSRsaturated=zeros(nLevels,nFrequencies); | |
58 | |
59 | |
60 levelNo=0; PSTHplotCount=0; | |
61 for leveldB=levels | |
62 fprintf('%4.0f\t', leveldB) | |
63 levelNo=levelNo+1; | |
64 amp=28e-6*10^(leveldB/20); | |
65 | |
66 freqNo=0; | |
67 for frequency=frequencies | |
68 | |
69 paramFunctionName=['method=MAPparams' experiment.name ... | |
70 '(' num2str(targetFrequency) ');' ]; | |
71 eval(paramFunctionName); % read parameters afresh each pass | |
72 | |
73 dt=method.dt; | |
74 time=dt:dt:toneDuration; | |
75 rampTime=dt:dt:rampDuration; | |
76 ramp=[0.5*(1+cos(2*pi*rampTime/(2*rampDuration)+pi)) ones(1,length(time)-length(rampTime))]; | |
77 ramp=ramp.*fliplr(ramp); | |
78 | |
79 silence=zeros(1,round(silenceDuration/dt)); | |
80 | |
81 toneStartptr=length(silence)+1; | |
82 toneMidptr=toneStartptr+round(toneDuration/(2*dt)) -1; | |
83 toneEndptr=toneStartptr+round(toneDuration/dt) -1; | |
84 | |
85 % create signal (leveldB/ frequency) | |
86 freqNo=freqNo+1; | |
87 inputSignal=amp*sin(2*pi*frequency'*time); | |
88 inputSignal= ramp.*inputSignal; | |
89 inputSignal=[silence inputSignal silence]; | |
90 | |
91 if doReceptiveFields % receptive field | |
92 method.plotGraphs= 0; % plot only PSTHs | |
93 else | |
94 method.plotGraphs= plotGraphsForIHC; % show progress | |
95 end | |
96 | |
97 targetChannelNo=1; | |
98 | |
99 % force parameters | |
100 % the number of AN fibers at each BF | |
101 AN_IHCsynapseParams.numFibers= nRepeats; | |
102 AN_IHCsynapseParams. mode= 'spikes'; | |
103 AN_IHCsynapseParams.plotSynapseContents=0; | |
104 AN_IHCsynapseParams.PSTHbinWidth=.001; | |
105 | |
106 method.DRNLSave=1; | |
107 method.IHC_cilia_RPSave=1; | |
108 method.PSTHbinWidth=1e-3; % useful 1-ms default for all PSTHs | |
109 method.AN_IHCsynapseSave=1; | |
110 method.MacGregorMultiSave=1; | |
111 method.MacGregorSave=1; | |
112 method.dt=dt; | |
113 | |
114 moduleSequence=[1:8]; | |
115 | |
116 global ANdt ARAttenuation TMoutput OMEoutput ... | |
117 DRNLoutput IHC_cilia_output IHCrestingCiliaCond IHCrestingV... | |
118 IHCoutput ANprobRateOutput ANoutput savePavailable tauCas ... | |
119 CNoutput ICoutput ICmembraneOutput ICfiberTypeRates MOCattenuation | |
120 | |
121 AN_spikesOrProbability='spikes'; | |
122 AN_spikesOrProbability='probability'; | |
123 MAPparamsName='Normal'; | |
124 | |
125 MAP1_14(inputSignal, 1/dt, targetFrequency, ... | |
126 MAPparamsName, AN_spikesOrProbability); | |
127 | |
128 % RP | |
129 IHC_RPData=IHC_cilia_output; | |
130 IHC_RPData=IHCoutput(targetChannelNo,:); | |
131 IHC_RP_peak(levelNo,freqNo)=max(IHC_RPData(toneStartptr:toneEndptr)); | |
132 IHC_RP_min(levelNo,freqNo)=min(IHC_RPData(toneStartptr:toneEndptr)); | |
133 IHC_RP_dc(levelNo,freqNo)=mean(IHC_RPData(toneStartptr:toneEndptr)); | |
134 | |
135 % AN next | |
136 AN_IHCsynapseAllData=ANoutput; | |
137 method.PSTHbinWidth=0.001; | |
138 | |
139 nTaus=length(tauCas); | |
140 numANfibers=size(ANoutput,1); | |
141 numLSRfibers=numANfibers/nTaus; | |
142 | |
143 %LSR (same as HSR if no LSR fibers present) | |
144 channelPtr1=(targetChannelNo-1)*numANfibers+1; | |
145 channelPtr2=channelPtr1+numANfibers-1; | |
146 LSRspikes=AN_IHCsynapseAllData(channelPtr1:channelPtr2,:); | |
147 method.dt=method.AN_IHCsynapsedt; | |
148 PSTH=UTIL_PSTHmaker(LSRspikes, method); | |
149 PSTH=sum(PSTH,1); % sum across fibers (HSR only) | |
150 PSTHStartptr=round(silenceDuration/method.PSTHbinWidth)+1; | |
151 PSTHMidptr=PSTHStartptr+round(toneDuration/(2*method.PSTHbinWidth)) -1; | |
152 PSTHEndptr=PSTHStartptr+round(toneDuration/method.PSTHbinWidth) -1; | |
153 AN_LSRonset(levelNo,freqNo)=max(max(PSTH))/(method.PSTHbinWidth*method.numANfibers); | |
154 AN_LSRsaturated(levelNo,freqNo)=sum(PSTH(PSTHMidptr:PSTHEndptr))/(method.numANfibers*toneDuration/2); | |
155 | |
156 % HSR | |
157 channelPtr1=numLSRfibers+(targetChannelNo-1)*method.numANfibers+1; | |
158 channelPtr2=channelPtr1+method.numANfibers-1; | |
159 HSRspikes=AN_IHCsynapseAllData(channelPtr1:channelPtr2,:); | |
160 method.dt=method.AN_IHCsynapsedt; | |
161 PSTH=UTIL_PSTHmaker(HSRspikes, method); | |
162 PSTH=sum(PSTH,1); % sum across fibers (HSR only) | |
163 PSTHStartptr=round(silenceDuration/method.PSTHbinWidth)+1; | |
164 PSTHMidptr=PSTHStartptr+round(toneDuration/(2*method.PSTHbinWidth)) -1; | |
165 PSTHEndptr=PSTHStartptr+round(toneDuration/method.PSTHbinWidth) -1; | |
166 AN_HSRonset(levelNo,freqNo)=max(max(PSTH))/(method.PSTHbinWidth*method.numANfibers); | |
167 AN_HSRsaturated(levelNo,freqNo)=sum(PSTH(PSTHMidptr:PSTHEndptr))/(method.numANfibers*toneDuration/2); | |
168 [cvANHSR, cvTimes, allTimeStamps, allISIs]= UTIL_CV(HSRspikes, method.AN_IHCsynapsedt); | |
169 | |
170 PSTHplotCount=PSTHplotCount+1; | |
171 if doReceptiveFields % receptive field for HSR only | |
172 figure(14), set(gcf,'name','AN') | |
173 plotReceptiveFields(method, PSTH, PSTHplotCount, levels, frequencies) | |
174 ylim([0 method.numANfibers]) | |
175 xlabel(['CV= ' num2str(max(cvANHSR),'%4.2f')],'fontsize',8) | |
176 end % doReceptiveFields | |
177 | |
178 % CN | |
179 MacGregorMultiAllData=method.MacGregorMultiData; | |
180 numLSRfibers=method.McGMultinNeuronsPerBF*length(method.nonlinCF)* (nTaus-1); | |
181 | |
182 %LSR (same as HSR if no LSR fibers present) | |
183 channelPtr1=(targetChannelNo-1)*method.McGMultinNeuronsPerBF+1; | |
184 channelPtr2=channelPtr1+method.McGMultinNeuronsPerBF-1; | |
185 MacGregorMultiLSRspikes=MacGregorMultiAllData(channelPtr1:channelPtr2,:); | |
186 method.dt=method.MacGregorMultidt; | |
187 PSTH=UTIL_PSTHmaker(MacGregorMultiLSRspikes, method); | |
188 PSTH=sum(PSTH,1); % sum across fibers (HSR only) | |
189 PSTHStartptr=round(silenceDuration/method.PSTHbinWidth)+1; | |
190 PSTHMidptr=PSTHStartptr+round(toneDuration/(2*method.PSTHbinWidth)) -1; | |
191 PSTHEndptr=PSTHStartptr+round(toneDuration/method.PSTHbinWidth) -1; | |
192 CNLSRsaturated(levelNo,freqNo)=sum(PSTH(PSTHMidptr:PSTHEndptr)); | |
193 CNLSRsaturated(levelNo,freqNo)=CNLSRsaturated(levelNo,freqNo)... | |
194 /((toneDuration/2)*method.McGMultinNeuronsPerBF); | |
195 | |
196 %HSR | |
197 channelPtr1=numLSRfibers+(targetChannelNo-1)*method.McGMultinNeuronsPerBF+1; | |
198 channelPtr2=channelPtr1+method.McGMultinNeuronsPerBF-1; | |
199 MacGregorMultiHSRspikes=MacGregorMultiAllData(channelPtr1:channelPtr2,:); | |
200 method.dt=method.MacGregorMultidt; | |
201 PSTH=UTIL_PSTHmaker(MacGregorMultiHSRspikes, method); | |
202 PSTH=sum(PSTH,1); % sum across fibers (HSR only) | |
203 PSTHStartptr=round(silenceDuration/method.PSTHbinWidth)+1; | |
204 PSTHMidptr=PSTHStartptr+round(toneDuration/(2*method.PSTHbinWidth)) -1; | |
205 PSTHEndptr=PSTHStartptr+round(toneDuration/method.PSTHbinWidth) -1; | |
206 CNHSRsaturated(levelNo,freqNo)=sum(PSTH(PSTHMidptr:PSTHEndptr)); | |
207 CNHSRsaturated(levelNo,freqNo)=CNHSRsaturated(levelNo,freqNo)... | |
208 /((toneDuration/2)*method.McGMultinNeuronsPerBF); | |
209 [cvMMHSR, cvTimes, allTimeStamps, allISIs]= UTIL_CV(MacGregorMultiHSRspikes, method.MacGregorMultidt); | |
210 | |
211 if doReceptiveFields % receptive field | |
212 figure(15), set(gcf,'name','CN HSR input') | |
213 plotReceptiveFields(method, PSTH, PSTHplotCount, levels, frequencies) | |
214 ylim([0 method.McGMultinNeuronsPerBF]) | |
215 xlabel(['CV= ' num2str(max(cvMMHSR),'%4.2f')],'fontsize',8) | |
216 end | |
217 | |
218 MacGregorAllData=method.MacGregorData; | |
219 numLSRfibers=length(method.nonlinCF)* (nTaus-1); | |
220 | |
221 %LSR (same as HSR if no LSR fibers present) | |
222 channelPtr1=targetChannelNo; | |
223 MacGregorLSR=MacGregorAllData(channelPtr1,:); | |
224 method.dt=method.MacGregordt; | |
225 PSTH=UTIL_PSTHmaker(MacGregorLSR, method); | |
226 PSTHStartptr=round(silenceDuration/method.PSTHbinWidth)+1; | |
227 PSTHMidptr=PSTHStartptr+round(toneDuration/(2*method.PSTHbinWidth)) -1; | |
228 PSTHEndptr=PSTHStartptr+round(toneDuration/method.PSTHbinWidth) -1; | |
229 ICLSRsaturated(levelNo,freqNo)=sum(PSTH(PSTHMidptr:PSTHEndptr)); | |
230 ICLSRsaturated(levelNo,freqNo)=ICLSRsaturated(levelNo,freqNo)/(toneDuration/2); | |
231 | |
232 %LSR (same as HSR if no LSR fibers present) | |
233 channelPtr1=numLSRfibers+targetChannelNo; | |
234 MacGregorHSR=MacGregorAllData(channelPtr1,:); | |
235 method.dt=method.MacGregordt; | |
236 PSTH=UTIL_PSTHmaker(MacGregorHSR, method); | |
237 PSTHStartptr=round(silenceDuration/method.PSTHbinWidth)+1; | |
238 PSTHMidptr=PSTHStartptr+round(toneDuration/(2*method.PSTHbinWidth)) -1; | |
239 PSTHEndptr=PSTHStartptr+round(toneDuration/method.PSTHbinWidth) -1; | |
240 ICHSRsaturated(levelNo,freqNo)=sum(PSTH(PSTHMidptr:PSTHEndptr)); | |
241 ICHSRsaturated(levelNo,freqNo)=ICHSRsaturated(levelNo,freqNo)/(toneDuration/2); | |
242 [cvICHSR, cvTimes, allTimeStamps, allISIs]= UTIL_CV(MacGregorHSR, method.MacGregordt); | |
243 | |
244 % if doReceptiveFields % receptive field | |
245 % figure(16), set(gcf,'name','IC HSR input') | |
246 % plotReceptiveFields(method, PSTH, PSTHplotCount, levels, frequencies) | |
247 % ylim([0 method.McGMultinNeuronsPerBF]) | |
248 % xlabel(['CV= ' num2str(max(cvICHSR),'%4.2f')],'fontsize',8) | |
249 % end | |
250 end % frequency | |
251 end % level | |
252 fprintf('\n') | |
253 toneDuration=2; | |
254 rampDuration=0.004; | |
255 silenceDuration=.02; | |
256 nRepeats=200; % no. of AN fibers | |
257 fprintf('toneDuration %6.3f\n', toneDuration) | |
258 fprintf(' %6.0f AN fibers (repeats)\n', nRepeats) | |
259 fprintf('levels') | |
260 fprintf('%6.2f\t', levels) | |
261 fprintf('\n') | |
262 | |
263 | |
264 % ---------------------------------------------------------- display parameters | |
265 disp(['parameter file was: ' experiment.name]) | |
266 fprintf('\n') | |
267 UTIL_showStruct(IHC_VResp_VivoParams, 'IHC_cilia_RPParams') | |
268 UTIL_showStruct(IHCpreSynapseParams, 'IHCpreSynapseParams') | |
269 UTIL_showStruct(AN_IHCsynapseParams, 'AN_IHCsynapseParams') | |
270 | |
271 | |
272 | |
273 function plotReceptiveFields(method, PSTH, PSTHplotCount, levels, frequencies) | |
274 | |
275 % show PSTH for each level/frequency combination | |
276 nLevels=length(levels); | |
277 nFrequencies=length(frequencies); | |
278 | |
279 PSTHtime=method.PSTHbinWidth:method.PSTHbinWidth:method.PSTHbinWidth*length(PSTH); | |
280 subplot(nLevels,nFrequencies,PSTHplotCount) | |
281 bar(PSTHtime, PSTH) | |
282 xlim([0 max(PSTHtime)]) | |
283 % write axis labels only at left and bottom | |
284 if PSTHplotCount< (nLevels-1) * nFrequencies+1 | |
285 set(gca,'xticklabel',[]) | |
286 end | |
287 if ~isequal(mod(PSTHplotCount,nFrequencies),1) | |
288 set(gca,'yticklabel',[]) | |
289 else | |
290 ylabel([num2str(levels(round(PSTHplotCount/nFrequencies) +1)) ' dB']) | |
291 end | |
292 % add titles only on top row | |
293 if PSTHplotCount<=nFrequencies | |
294 title([num2str(frequencies(PSTHplotCount)) ' Hz']) | |
295 end |