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