annotate Copy_of_multithreshold 1.46/testRF.m @ 30:1a502830d462

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