annotate parameterStore/MAPparamsNormal.m @ 38:c2204b18f4a2 tip

End nov big change
author Ray Meddis <rmeddis@essex.ac.uk>
date Mon, 28 Nov 2011 13:34:28 +0000
parents 25d53244d5c8
children
rev   line source
rmeddis@0 1 function method=MAPparamsNormal ...
rmeddis@26 2 (BFlist, sampleRate, showParams, paramChanges)
rmeddis@0 3 % MAPparams<> establishes a complete set of MAP parameters
rmeddis@35 4 % Parameter file names must be of the form <MAPparams><name>
rmeddis@0 5 %
rmeddis@35 6 % Input arguments
rmeddis@0 7 % BFlist (optional) specifies the desired list of channel BFs
rmeddis@0 8 % otherwise defaults set below
rmeddis@0 9 % sampleRate (optional), default is 50000.
rmeddis@0 10 % showParams (optional) =1 prints out the complete set of parameters
rmeddis@35 11 % Output argument
rmeddis@0 12 % method passes a miscelleny of values
rmeddis@35 13 % the use of 'method' is being phased out. use globals
rmeddis@0 14
rmeddis@26 15 global inputStimulusParams OMEParams DRNLParams IHC_cilia_RPParams
rmeddis@35 16 global IHCpreSynapseParams AN_IHCsynapseParams
rmeddis@0 17 global MacGregorParams MacGregorMultiParams filteredSACFParams
rmeddis@35 18 global experiment % used only by calls from multiThreshold
rmeddis@35 19 % global IHC_VResp_VivoParams
rmeddis@0 20
rmeddis@0 21 currentFile=mfilename; % i.e. the name of this mfile
rmeddis@0 22 method.parameterSource=currentFile(10:end); % for the record
rmeddis@0 23
rmeddis@0 24 efferentDelay=0.010;
rmeddis@0 25 method.segmentDuration=efferentDelay;
rmeddis@0 26
rmeddis@0 27 if nargin<3, showParams=0; end
rmeddis@38 28 if nargin<2, sampleRate=44100; end
rmeddis@0 29 if nargin<1 || BFlist(1)<0 % if BFlist= -1, set BFlist to default
rmeddis@0 30 lowestBF=250; highestBF= 8000; numChannels=21;
rmeddis@0 31 % 21 chs (250-8k)includes BFs at 250 500 1000 2000 4000 8000
rmeddis@0 32 BFlist=round(logspace(log10(lowestBF),log10(highestBF),numChannels));
rmeddis@0 33 end
rmeddis@35 34 % BFlist=1000; % single channel option
rmeddis@0 35
rmeddis@0 36 % preserve for backward campatibility
rmeddis@0 37 method.nonlinCF=BFlist;
rmeddis@0 38 method.dt=1/sampleRate;
rmeddis@0 39
rmeddis@0 40 %%%%%%%%%%%%%%%%%%%%%%%%%%%%
rmeddis@0 41 % set model parameters
rmeddis@0 42 %%%%%%%%%%%%%%%%%%%%%%%%%%%%
rmeddis@0 43
rmeddis@0 44 %% #1 inputStimulus
rmeddis@0 45 inputStimulusParams=[];
rmeddis@0 46 inputStimulusParams.sampleRate= sampleRate;
rmeddis@0 47
rmeddis@0 48 %% #2 outerMiddleEar
rmeddis@0 49 OMEParams=[]; % clear the structure first
rmeddis@0 50 % outer ear resonances band pass filter [gain lp order hp]
rmeddis@0 51 OMEParams.externalResonanceFilters= [ 10 1 1000 4000];
rmeddis@0 52
rmeddis@0 53 % highpass stapes filter
rmeddis@0 54 % Huber gives 2e-9 m at 80 dB and 1 kHz (2e-13 at 0 dB SPL)
rmeddis@38 55 OMEParams.OMEstapesHPcutoff= 1000;
rmeddis@0 56 OMEParams.stapesScalar= 45e-9;
rmeddis@0 57
rmeddis@35 58 % Acoustic reflex: maximum attenuation should be around 25 dB (Price, 1966)
rmeddis@0 59 % i.e. a minimum ratio of 0.056.
rmeddis@16 60 % 'spikes' model: AR based on brainstem spiking activity (LSR)
rmeddis@38 61 OMEParams.rateToAttenuationFactor=0.05; % * N(all ICspikes)
rmeddis@16 62 % 'probability model': Ar based on AN firing probabilities (LSR)
rmeddis@38 63 OMEParams.rateToAttenuationFactorProb=0.02; % * N(all ANrates)
rmeddis@16 64
rmeddis@0 65 % asymptote should be around 100-200 ms
rmeddis@35 66 OMEParams.ARtau=.250; % AR smoothing function 250 ms fits Hung and Dallos
rmeddis@0 67 % delay must be longer than the segment length
rmeddis@0 68 OMEParams.ARdelay=efferentDelay; %Moss gives 8.5 ms latency
rmeddis@34 69 OMEParams.ARrateThreshold=40;
rmeddis@0 70
rmeddis@0 71 %% #3 DRNL
rmeddis@0 72 DRNLParams=[]; % clear the structure first
rmeddis@35 73 % DRNLParams.BFlist=BFlist;
rmeddis@0 74
rmeddis@35 75 % *** DRNL nonlinear path
rmeddis@35 76 % broken stick compression
rmeddis@38 77 DRNLParams.a=2e4; % DRNL.a=0 means no OHCs (no nonlinear path)
rmeddis@35 78 DRNLParams.c=.2; % compression exponent
rmeddis@38 79 DRNLParams.ctBMdB = 10; %Compression threshold dB re 10e-9 m displacement
rmeddis@0 80
rmeddis@35 81 % filters
rmeddis@35 82 DRNLParams.nonlinOrder= 3; % order of nonlinear gammatone filters
rmeddis@0 83 DRNLParams.nonlinCFs=BFlist;
rmeddis@38 84 DRNLParams.p=0.2895; DRNLParams.q=250; % save p and q for printing only
rmeddis@38 85 % p=0.2895; q=250; % human (% p=0.14; q=366; % cat)
rmeddis@38 86 DRNLParams.nlBWs= DRNLParams.p * BFlist + DRNLParams.q;
rmeddis@0 87
rmeddis@35 88 % *** DRNL linear path:
rmeddis@38 89 DRNLParams.g=100; % linear path gain factor
rmeddis@35 90 DRNLParams.linOrder=3; % order of linear gammatone filters
rmeddis@0 91 % linCF is not necessarily the same as nonlinCF
rmeddis@0 92 minLinCF=153.13; coeffLinCF=0.7341; % linCF>nonlinBF for BF < 1 kHz
rmeddis@0 93 DRNLParams.linCFs=minLinCF+coeffLinCF*BFlist;
rmeddis@35 94 % bandwidths (linear)
rmeddis@0 95 minLinBW=100; coeffLinBW=0.6531;
rmeddis@0 96 DRNLParams.linBWs=minLinBW + coeffLinBW*BFlist; % bandwidths of linear filters
rmeddis@0 97
rmeddis@35 98 % *** DRNL MOC efferents
rmeddis@0 99 DRNLParams.MOCdelay = efferentDelay; % must be < segment length!
rmeddis@38 100 DRNLParams.minMOCattenuationdB=-35;
rmeddis@23 101
rmeddis@16 102 % 'spikes' model: MOC based on brainstem spiking activity (HSR)
rmeddis@38 103 DRNLParams.MOCtau =.0285; % smoothing for MOC
rmeddis@38 104 DRNLParams.rateToAttenuationFactor = .03; % strength of MOC
rmeddis@38 105 DRNLParams.rateToAttenuationFactor = .0055; % strength of MOC
rmeddis@35 106
rmeddis@38 107 % 'probability' model: MOC based on AN probability (HSR)
rmeddis@35 108 DRNLParams.MOCtauProb =.285; % smoothing for MOC
rmeddis@38 109 DRNLParams.rateToAttenuationFactorProb = 0.007; % strength of MOC
rmeddis@38 110 DRNLParams.MOCrateThresholdProb =67; % spikes/s probability only
rmeddis@0 111
rmeddis@0 112
rmeddis@0 113 %% #4 IHC_cilia_RPParams
rmeddis@38 114 IHC_cilia_RPParams.tc= 0.00012; % 0.0003 Shamma
rmeddis@38 115 IHC_cilia_RPParams.C= 0.08; % 0.1 scalar (C_cilia )
rmeddis@0 116 IHC_cilia_RPParams.u0= 5e-9;
rmeddis@0 117 IHC_cilia_RPParams.s0= 30e-9;
rmeddis@0 118 IHC_cilia_RPParams.u1= 1e-9;
rmeddis@0 119 IHC_cilia_RPParams.s1= 1e-9;
rmeddis@0 120
rmeddis@28 121 IHC_cilia_RPParams.Gmax= 6e-9; % 2.5e-9 maximum conductance (Siemens)
rmeddis@8 122 IHC_cilia_RPParams.Ga= 1e-9; % 4.3e-9 fixed apical membrane conductance
rmeddis@28 123 IHC_cilia_RPParams.Ga= .8e-9; % 4.3e-9 fixed apical membrane conductance
rmeddis@0 124
rmeddis@0 125 % #5 IHC_RP
rmeddis@0 126 IHC_cilia_RPParams.Cab= 4e-012; % IHC capacitance (F)
rmeddis@28 127 % IHC_cilia_RPParams.Cab= 1e-012; % IHC capacitance (F)
rmeddis@0 128 IHC_cilia_RPParams.Et= 0.100; % endocochlear potential (V)
rmeddis@0 129
rmeddis@0 130 IHC_cilia_RPParams.Gk= 2e-008; % 1e-8 potassium conductance (S)
rmeddis@0 131 IHC_cilia_RPParams.Ek= -0.08; % -0.084 K equilibrium potential
rmeddis@0 132 IHC_cilia_RPParams.Rpc= 0.04; % combined resistances
rmeddis@0 133
rmeddis@0 134
rmeddis@0 135 %% #5 IHCpreSynapse
rmeddis@0 136 IHCpreSynapseParams=[];
rmeddis@0 137 IHCpreSynapseParams.GmaxCa= 14e-9;% maximum calcium conductance
rmeddis@35 138 % IHCpreSynapseParams.GmaxCa= 12e-9;% maximum calcium conductance
rmeddis@0 139 IHCpreSynapseParams.ECa= 0.066; % calcium equilibrium potential
rmeddis@0 140 IHCpreSynapseParams.beta= 400; % determine Ca channel opening
rmeddis@0 141 IHCpreSynapseParams.gamma= 100; % determine Ca channel opening
rmeddis@0 142 IHCpreSynapseParams.tauM= 0.00005; % membrane time constant ?0.1ms
rmeddis@0 143 IHCpreSynapseParams.power= 3;
rmeddis@0 144 % reminder: changing z has a strong effect on HF thresholds (like Et)
rmeddis@0 145 IHCpreSynapseParams.z= 2e42; % scalar Ca -> vesicle release rate
rmeddis@0 146
rmeddis@38 147 LSRtauCa=30e-6; HSRtauCa=80e-6; % seconds
rmeddis@38 148 % LSRtauCa=40e-6; HSRtauCa=90e-6; % seconds
rmeddis@35 149 % IHCpreSynapseParams.tauCa= [15e-6 80e-6]; %LSR and HSR fiber
rmeddis@0 150 IHCpreSynapseParams.tauCa= [LSRtauCa HSRtauCa]; %LSR and HSR fiber
rmeddis@0 151
rmeddis@0 152 %% #6 AN_IHCsynapse
rmeddis@35 153 AN_IHCsynapseParams=[]; % clear the structure first
rmeddis@35 154 % number of AN fibers at each BF (used only for spike generation)
rmeddis@35 155 AN_IHCsynapseParams.numFibers= 100;
rmeddis@35 156 % absolute refractory period. Relative refractory period is the same.
rmeddis@35 157 AN_IHCsynapseParams.refractory_period= 0.00075;
rmeddis@35 158 AN_IHCsynapseParams.TWdelay=0.004; % ?delay before stimulus first spike
rmeddis@38 159 AN_IHCsynapseParams.spikesTargetSampleRate=10000;
rmeddis@38 160 % AN_IHCsynapseParams.ANspeedUpFactor=5; % longer epochs for computing spikes.
rmeddis@35 161
rmeddis@0 162 % c=kym/(y(l+r)+kl) (spontaneous rate)
rmeddis@0 163 % c=(approx) ym/l (saturated rate)
rmeddis@0 164 AN_IHCsynapseParams.M= 12; % maximum vesicles at synapse
rmeddis@0 165 AN_IHCsynapseParams.y= 4; % depleted vesicle replacement rate
rmeddis@0 166 AN_IHCsynapseParams.y= 6; % depleted vesicle replacement rate
rmeddis@0 167
rmeddis@0 168 AN_IHCsynapseParams.x= 30; % replenishment from re-uptake store
rmeddis@0 169 AN_IHCsynapseParams.x= 60; % replenishment from re-uptake store
rmeddis@0 170
rmeddis@0 171 % reduce l to increase saturated rate
rmeddis@0 172 AN_IHCsynapseParams.l= 100; % *loss rate of vesicles from the cleft
rmeddis@0 173 AN_IHCsynapseParams.l= 250; % *loss rate of vesicles from the cleft
rmeddis@0 174
rmeddis@0 175 AN_IHCsynapseParams.r= 500; % *reuptake rate from cleft into cell
rmeddis@0 176 % AN_IHCsynapseParams.r= 300; % *reuptake rate from cleft into cell
rmeddis@0 177
rmeddis@15 178
rmeddis@0 179 %% #7 MacGregorMulti (first order brainstem neurons)
rmeddis@0 180 MacGregorMultiParams=[];
rmeddis@0 181 MacGregorMultiType='chopper'; % MacGregorMultiType='primary-like'; %choose
rmeddis@0 182 switch MacGregorMultiType
rmeddis@0 183 case 'primary-like'
rmeddis@0 184 MacGregorMultiParams.nNeuronsPerBF= 10; % N neurons per BF
rmeddis@0 185 MacGregorMultiParams.type = 'primary-like cell';
rmeddis@0 186 MacGregorMultiParams.fibersPerNeuron=4; % N input fibers
rmeddis@0 187 MacGregorMultiParams.dendriteLPfreq=200; % dendritic filter
rmeddis@0 188 MacGregorMultiParams.currentPerSpike=0.11e-6; % (A) per spike
rmeddis@0 189 MacGregorMultiParams.Cap=4.55e-9; % cell capacitance (Siemens)
rmeddis@0 190 MacGregorMultiParams.tauM=5e-4; % membrane time constant (s)
rmeddis@0 191 MacGregorMultiParams.Ek=-0.01; % K+ eq. potential (V)
rmeddis@0 192 MacGregorMultiParams.dGkSpike=3.64e-5; % K+ cond.shift on spike,S
rmeddis@0 193 MacGregorMultiParams.tauGk= 0.0012; % K+ conductance tau (s)
rmeddis@0 194 MacGregorMultiParams.Th0= 0.01; % equilibrium threshold (V)
rmeddis@0 195 MacGregorMultiParams.c= 0.01; % threshold shift on spike, (V)
rmeddis@0 196 MacGregorMultiParams.tauTh= 0.015; % variable threshold tau
rmeddis@0 197 MacGregorMultiParams.Er=-0.06; % resting potential (V)
rmeddis@0 198 MacGregorMultiParams.Eb=0.06; % spike height (V)
rmeddis@0 199
rmeddis@0 200 case 'chopper'
rmeddis@0 201 MacGregorMultiParams.nNeuronsPerBF= 10; % N neurons per BF
rmeddis@0 202 MacGregorMultiParams.type = 'chopper cell';
rmeddis@0 203 MacGregorMultiParams.fibersPerNeuron=10; % N input fibers
rmeddis@0 204
rmeddis@0 205 MacGregorMultiParams.dendriteLPfreq=50; % dendritic filter
rmeddis@38 206 MacGregorMultiParams.currentPerSpike=28e-9; % *per spike
rmeddis@28 207 % MacGregorMultiParams.currentPerSpike=30e-9; % *per spike
rmeddis@0 208
rmeddis@0 209 MacGregorMultiParams.Cap=1.67e-8; % ??cell capacitance (Siemens)
rmeddis@0 210 MacGregorMultiParams.tauM=0.002; % membrane time constant (s)
rmeddis@0 211 MacGregorMultiParams.Ek=-0.01; % K+ eq. potential (V)
rmeddis@0 212 MacGregorMultiParams.dGkSpike=1.33e-4; % K+ cond.shift on spike,S
rmeddis@15 213 MacGregorMultiParams.tauGk= 0.0005;% K+ conductance tau (s)
rmeddis@0 214 MacGregorMultiParams.Th0= 0.01; % equilibrium threshold (V)
rmeddis@0 215 MacGregorMultiParams.c= 0; % threshold shift on spike, (V)
rmeddis@0 216 MacGregorMultiParams.tauTh= 0.02; % variable threshold tau
rmeddis@0 217 MacGregorMultiParams.Er=-0.06; % resting potential (V)
rmeddis@0 218 MacGregorMultiParams.Eb=0.06; % spike height (V)
rmeddis@0 219 MacGregorMultiParams.PSTHbinWidth= 1e-4;
rmeddis@0 220 end
rmeddis@0 221
rmeddis@0 222 %% #8 MacGregor (second-order neuron). Only one per channel
rmeddis@0 223 MacGregorParams=[]; % clear the structure first
rmeddis@0 224 MacGregorParams.type = 'chopper cell';
rmeddis@0 225 MacGregorParams.fibersPerNeuron=10; % N input fibers
rmeddis@0 226 MacGregorParams.dendriteLPfreq=100; % dendritic filter
rmeddis@28 227 MacGregorParams.currentPerSpike=40e-9;% *(A) per spike
rmeddis@0 228
rmeddis@0 229 MacGregorParams.Cap=16.7e-9; % cell capacitance (Siemens)
rmeddis@0 230 MacGregorParams.tauM=0.002; % membrane time constant (s)
rmeddis@0 231 MacGregorParams.Ek=-0.01; % K+ eq. potential (V)
rmeddis@0 232 MacGregorParams.dGkSpike=1.33e-4; % K+ cond.shift on spike,S
rmeddis@35 233 MacGregorParams.tauGk= 0.0012; % K+ conductance tau (s)
rmeddis@0 234 MacGregorParams.Th0= 0.01; % equilibrium threshold (V)
rmeddis@0 235 MacGregorParams.c= 0; % threshold shift on spike, (V)
rmeddis@0 236 MacGregorParams.tauTh= 0.02; % variable threshold tau
rmeddis@0 237 MacGregorParams.Er=-0.06; % resting potential (V)
rmeddis@0 238 MacGregorParams.Eb=0.06; % spike height (V)
rmeddis@0 239 MacGregorParams.debugging=0; % (special)
rmeddis@0 240 % wideband accepts input from all channels (of same fiber type)
rmeddis@0 241 % use wideband to create inhibitory units
rmeddis@0 242 MacGregorParams.wideband=0; % special for wideband units
rmeddis@0 243 % MacGregorParams.saveAllData=0;
rmeddis@0 244
rmeddis@0 245 %% #9 filteredSACF
rmeddis@38 246 % identify periodicities to be logged
rmeddis@38 247 minPitch= 80; maxPitch= 500; numPitches=50;
rmeddis@38 248 maxLag=1/minPitch; minLag=1/maxPitch;
rmeddis@38 249 lags= linspace(minLag, maxLag, numPitches);
rmeddis@38 250 pitches=10.^ linspace(log10(minPitch), log10(maxPitch),numPitches);
rmeddis@38 251 pitches=fliplr(pitches);
rmeddis@38 252 % convert to lags for ACF
rmeddis@38 253 filteredSACFParams.lags=lags; % autocorrelation lags vector
rmeddis@38 254 filteredSACFParams.acfTau= .003; % time constant of running ACF
rmeddis@38 255 filteredSACFParams.lambda= 0.12; % slower filter to smooth ACF
rmeddis@38 256 % request plot of within-channel ACFs at fixed intervals in time
rmeddis@38 257 filteredSACFParams.plotACFs=1;
rmeddis@38 258 filteredSACFParams.plotACFsInterval=0.002;
rmeddis@38 259 filteredSACFParams.plotMoviePauses=.1;
rmeddis@38 260
rmeddis@38 261 filteredSACFParams.usePressnitzer=0; % attenuates ACF at long lags
rmeddis@38 262 filteredSACFParams.lagsProcedure= 'useAllLags';
rmeddis@38 263 % 'useAllLags' or 'omitShortLags'
rmeddis@38 264 filteredSACFParams.criterionForOmittingLags=3;
rmeddis@38 265
rmeddis@0 266
rmeddis@0 267 % checks
rmeddis@0 268 if AN_IHCsynapseParams.numFibers<MacGregorMultiParams.fibersPerNeuron
rmeddis@0 269 error('MacGregorMulti: too few input fibers for input to MacG unit')
rmeddis@0 270 end
rmeddis@0 271
rmeddis@0 272
rmeddis@26 273 %% now accept last minute parameter changes required by the calling program
rmeddis@26 274 % paramChanges
rmeddis@26 275 if nargin>3 && ~isempty(paramChanges)
rmeddis@35 276 if ~iscellstr(paramChanges)
rmeddis@38 277 error('paramChanges error: paramChanges not a cell array')
rmeddis@35 278 end
rmeddis@35 279
rmeddis@26 280 nChanges=length(paramChanges);
rmeddis@26 281 for idx=1:nChanges
rmeddis@35 282 x=paramChanges{idx};
rmeddis@35 283 x=deblank(x);
rmeddis@35 284 if ~isempty(x)
rmeddis@35 285 if ~strcmp(x(end),';')
rmeddis@35 286 error(['paramChanges error (terminate with semicolon) ' x])
rmeddis@35 287 end
rmeddis@35 288 st=strtrim(x(1:strfind(x,'.')-1));
rmeddis@35 289 fld=strtrim(x(strfind(x,'.')+1:strfind(x,'=')-1));
rmeddis@35 290 value=x(strfind(x,'=')+1:end);
rmeddis@35 291 if isempty(st) || isempty(fld) || isempty(value)
rmeddis@35 292 error(['paramChanges error:' x])
rmeddis@35 293 end
rmeddis@35 294
rmeddis@35 295 x1=eval(['isstruct(' st ')']);
rmeddis@35 296 cmd=['isfield(' st ',''' fld ''')'];
rmeddis@35 297 x2=eval(cmd);
rmeddis@35 298 if ~(x1*x2)
rmeddis@35 299 error(['paramChanges error:' x])
rmeddis@35 300 end
rmeddis@35 301 end
rmeddis@35 302
rmeddis@35 303 % no problems so go ahead
rmeddis@26 304 eval(paramChanges{idx})
rmeddis@26 305 end
rmeddis@26 306 end
rmeddis@26 307
rmeddis@26 308
rmeddis@0 309 %% write all parameters to the command window
rmeddis@0 310 % showParams is currently set at the top of htis function
rmeddis@0 311 if showParams
rmeddis@0 312 fprintf('\n %%%%%%%%\n')
rmeddis@0 313 fprintf('\n%s\n', method.parameterSource)
rmeddis@0 314 fprintf('\n')
rmeddis@0 315 nm=UTIL_paramsList(whos);
rmeddis@0 316 for i=1:length(nm)
rmeddis@0 317 % eval(['UTIL_showStruct(' nm{i} ', ''' nm{i} ''')'])
rmeddis@0 318 if ~strcmp(nm(i), 'method')
rmeddis@0 319 eval(['UTIL_showStructureSummary(' nm{i} ', ''' nm{i} ''', 10)'])
rmeddis@0 320 end
rmeddis@0 321 end
rmeddis@0 322
rmeddis@26 323 % highlight parameter changes made locally
rmeddis@26 324 if nargin>3 && ~isempty(paramChanges)
rmeddis@26 325 fprintf('\n Local parameter changes:\n')
rmeddis@26 326 for i=1:length(paramChanges)
rmeddis@26 327 disp(paramChanges{i})
rmeddis@26 328 end
rmeddis@0 329 end
rmeddis@0 330 end
rmeddis@0 331
rmeddis@26 332 % for backward compatibility
rmeddis@26 333 experiment.comparisonData=[];