annotate multithreshold 1.46/testRF.m @ 11:f9d6a0bcfacf

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