rmeddis@0: function method=MAPparamsNormal ... rmeddis@26: (BFlist, sampleRate, showParams, paramChanges) rmeddis@0: % MAPparams<> establishes a complete set of MAP parameters rmeddis@35: % Parameter file names must be of the form rmeddis@0: % rmeddis@35: % Input arguments rmeddis@0: % BFlist (optional) specifies the desired list of channel BFs rmeddis@0: % otherwise defaults set below rmeddis@0: % sampleRate (optional), default is 50000. rmeddis@0: % showParams (optional) =1 prints out the complete set of parameters rmeddis@35: % Output argument rmeddis@0: % method passes a miscelleny of values rmeddis@35: % the use of 'method' is being phased out. use globals rmeddis@0: rmeddis@26: global inputStimulusParams OMEParams DRNLParams IHC_cilia_RPParams rmeddis@35: global IHCpreSynapseParams AN_IHCsynapseParams rmeddis@0: global MacGregorParams MacGregorMultiParams filteredSACFParams rmeddis@35: global experiment % used only by calls from multiThreshold rmeddis@35: % global IHC_VResp_VivoParams rmeddis@0: rmeddis@0: currentFile=mfilename; % i.e. the name of this mfile rmeddis@0: method.parameterSource=currentFile(10:end); % for the record rmeddis@0: rmeddis@0: efferentDelay=0.010; rmeddis@0: method.segmentDuration=efferentDelay; rmeddis@0: rmeddis@0: if nargin<3, showParams=0; end rmeddis@38: if nargin<2, sampleRate=44100; end rmeddis@0: if nargin<1 || BFlist(1)<0 % if BFlist= -1, set BFlist to default rmeddis@0: lowestBF=250; highestBF= 8000; numChannels=21; rmeddis@0: % 21 chs (250-8k)includes BFs at 250 500 1000 2000 4000 8000 rmeddis@0: BFlist=round(logspace(log10(lowestBF),log10(highestBF),numChannels)); rmeddis@0: end rmeddis@35: % BFlist=1000; % single channel option rmeddis@0: rmeddis@0: % preserve for backward campatibility rmeddis@0: method.nonlinCF=BFlist; rmeddis@0: method.dt=1/sampleRate; rmeddis@0: rmeddis@0: %%%%%%%%%%%%%%%%%%%%%%%%%%%% rmeddis@0: % set model parameters rmeddis@0: %%%%%%%%%%%%%%%%%%%%%%%%%%%% rmeddis@0: rmeddis@0: %% #1 inputStimulus rmeddis@0: inputStimulusParams=[]; rmeddis@0: inputStimulusParams.sampleRate= sampleRate; rmeddis@0: rmeddis@0: %% #2 outerMiddleEar rmeddis@0: OMEParams=[]; % clear the structure first rmeddis@0: % outer ear resonances band pass filter [gain lp order hp] rmeddis@0: OMEParams.externalResonanceFilters= [ 10 1 1000 4000]; rmeddis@0: rmeddis@0: % highpass stapes filter rmeddis@0: % Huber gives 2e-9 m at 80 dB and 1 kHz (2e-13 at 0 dB SPL) rmeddis@38: OMEParams.OMEstapesHPcutoff= 1000; rmeddis@0: OMEParams.stapesScalar= 45e-9; rmeddis@0: rmeddis@35: % Acoustic reflex: maximum attenuation should be around 25 dB (Price, 1966) rmeddis@0: % i.e. a minimum ratio of 0.056. rmeddis@16: % 'spikes' model: AR based on brainstem spiking activity (LSR) rmeddis@38: OMEParams.rateToAttenuationFactor=0.05; % * N(all ICspikes) rmeddis@16: % 'probability model': Ar based on AN firing probabilities (LSR) rmeddis@38: OMEParams.rateToAttenuationFactorProb=0.02; % * N(all ANrates) rmeddis@16: rmeddis@0: % asymptote should be around 100-200 ms rmeddis@35: OMEParams.ARtau=.250; % AR smoothing function 250 ms fits Hung and Dallos rmeddis@0: % delay must be longer than the segment length rmeddis@0: OMEParams.ARdelay=efferentDelay; %Moss gives 8.5 ms latency rmeddis@34: OMEParams.ARrateThreshold=40; rmeddis@0: rmeddis@0: %% #3 DRNL rmeddis@0: DRNLParams=[]; % clear the structure first rmeddis@35: % DRNLParams.BFlist=BFlist; rmeddis@0: rmeddis@35: % *** DRNL nonlinear path rmeddis@35: % broken stick compression rmeddis@38: DRNLParams.a=2e4; % DRNL.a=0 means no OHCs (no nonlinear path) rmeddis@35: DRNLParams.c=.2; % compression exponent rmeddis@38: DRNLParams.ctBMdB = 10; %Compression threshold dB re 10e-9 m displacement rmeddis@0: rmeddis@35: % filters rmeddis@35: DRNLParams.nonlinOrder= 3; % order of nonlinear gammatone filters rmeddis@0: DRNLParams.nonlinCFs=BFlist; rmeddis@38: DRNLParams.p=0.2895; DRNLParams.q=250; % save p and q for printing only rmeddis@38: % p=0.2895; q=250; % human (% p=0.14; q=366; % cat) rmeddis@38: DRNLParams.nlBWs= DRNLParams.p * BFlist + DRNLParams.q; rmeddis@0: rmeddis@35: % *** DRNL linear path: rmeddis@38: DRNLParams.g=100; % linear path gain factor rmeddis@35: DRNLParams.linOrder=3; % order of linear gammatone filters rmeddis@0: % linCF is not necessarily the same as nonlinCF rmeddis@0: minLinCF=153.13; coeffLinCF=0.7341; % linCF>nonlinBF for BF < 1 kHz rmeddis@0: DRNLParams.linCFs=minLinCF+coeffLinCF*BFlist; rmeddis@35: % bandwidths (linear) rmeddis@0: minLinBW=100; coeffLinBW=0.6531; rmeddis@0: DRNLParams.linBWs=minLinBW + coeffLinBW*BFlist; % bandwidths of linear filters rmeddis@0: rmeddis@35: % *** DRNL MOC efferents rmeddis@0: DRNLParams.MOCdelay = efferentDelay; % must be < segment length! rmeddis@38: DRNLParams.minMOCattenuationdB=-35; rmeddis@23: rmeddis@16: % 'spikes' model: MOC based on brainstem spiking activity (HSR) rmeddis@38: DRNLParams.MOCtau =.0285; % smoothing for MOC rmeddis@38: DRNLParams.rateToAttenuationFactor = .03; % strength of MOC rmeddis@38: DRNLParams.rateToAttenuationFactor = .0055; % strength of MOC rmeddis@35: rmeddis@38: % 'probability' model: MOC based on AN probability (HSR) rmeddis@35: DRNLParams.MOCtauProb =.285; % smoothing for MOC rmeddis@38: DRNLParams.rateToAttenuationFactorProb = 0.007; % strength of MOC rmeddis@38: DRNLParams.MOCrateThresholdProb =67; % spikes/s probability only rmeddis@0: rmeddis@0: rmeddis@0: %% #4 IHC_cilia_RPParams rmeddis@38: IHC_cilia_RPParams.tc= 0.00012; % 0.0003 Shamma rmeddis@38: IHC_cilia_RPParams.C= 0.08; % 0.1 scalar (C_cilia ) rmeddis@0: IHC_cilia_RPParams.u0= 5e-9; rmeddis@0: IHC_cilia_RPParams.s0= 30e-9; rmeddis@0: IHC_cilia_RPParams.u1= 1e-9; rmeddis@0: IHC_cilia_RPParams.s1= 1e-9; rmeddis@0: rmeddis@28: IHC_cilia_RPParams.Gmax= 6e-9; % 2.5e-9 maximum conductance (Siemens) rmeddis@8: IHC_cilia_RPParams.Ga= 1e-9; % 4.3e-9 fixed apical membrane conductance rmeddis@28: IHC_cilia_RPParams.Ga= .8e-9; % 4.3e-9 fixed apical membrane conductance rmeddis@0: rmeddis@0: % #5 IHC_RP rmeddis@0: IHC_cilia_RPParams.Cab= 4e-012; % IHC capacitance (F) rmeddis@28: % IHC_cilia_RPParams.Cab= 1e-012; % IHC capacitance (F) rmeddis@0: IHC_cilia_RPParams.Et= 0.100; % endocochlear potential (V) rmeddis@0: rmeddis@0: IHC_cilia_RPParams.Gk= 2e-008; % 1e-8 potassium conductance (S) rmeddis@0: IHC_cilia_RPParams.Ek= -0.08; % -0.084 K equilibrium potential rmeddis@0: IHC_cilia_RPParams.Rpc= 0.04; % combined resistances rmeddis@0: rmeddis@0: rmeddis@0: %% #5 IHCpreSynapse rmeddis@0: IHCpreSynapseParams=[]; rmeddis@0: IHCpreSynapseParams.GmaxCa= 14e-9;% maximum calcium conductance rmeddis@35: % IHCpreSynapseParams.GmaxCa= 12e-9;% maximum calcium conductance rmeddis@0: IHCpreSynapseParams.ECa= 0.066; % calcium equilibrium potential rmeddis@0: IHCpreSynapseParams.beta= 400; % determine Ca channel opening rmeddis@0: IHCpreSynapseParams.gamma= 100; % determine Ca channel opening rmeddis@0: IHCpreSynapseParams.tauM= 0.00005; % membrane time constant ?0.1ms rmeddis@0: IHCpreSynapseParams.power= 3; rmeddis@0: % reminder: changing z has a strong effect on HF thresholds (like Et) rmeddis@0: IHCpreSynapseParams.z= 2e42; % scalar Ca -> vesicle release rate rmeddis@0: rmeddis@38: LSRtauCa=30e-6; HSRtauCa=80e-6; % seconds rmeddis@38: % LSRtauCa=40e-6; HSRtauCa=90e-6; % seconds rmeddis@35: % IHCpreSynapseParams.tauCa= [15e-6 80e-6]; %LSR and HSR fiber rmeddis@0: IHCpreSynapseParams.tauCa= [LSRtauCa HSRtauCa]; %LSR and HSR fiber rmeddis@0: rmeddis@0: %% #6 AN_IHCsynapse rmeddis@35: AN_IHCsynapseParams=[]; % clear the structure first rmeddis@35: % number of AN fibers at each BF (used only for spike generation) rmeddis@35: AN_IHCsynapseParams.numFibers= 100; rmeddis@35: % absolute refractory period. Relative refractory period is the same. rmeddis@35: AN_IHCsynapseParams.refractory_period= 0.00075; rmeddis@35: AN_IHCsynapseParams.TWdelay=0.004; % ?delay before stimulus first spike rmeddis@38: AN_IHCsynapseParams.spikesTargetSampleRate=10000; rmeddis@38: % AN_IHCsynapseParams.ANspeedUpFactor=5; % longer epochs for computing spikes. rmeddis@35: rmeddis@0: % c=kym/(y(l+r)+kl) (spontaneous rate) rmeddis@0: % c=(approx) ym/l (saturated rate) rmeddis@0: AN_IHCsynapseParams.M= 12; % maximum vesicles at synapse rmeddis@0: AN_IHCsynapseParams.y= 4; % depleted vesicle replacement rate rmeddis@0: AN_IHCsynapseParams.y= 6; % depleted vesicle replacement rate rmeddis@0: rmeddis@0: AN_IHCsynapseParams.x= 30; % replenishment from re-uptake store rmeddis@0: AN_IHCsynapseParams.x= 60; % replenishment from re-uptake store rmeddis@0: rmeddis@0: % reduce l to increase saturated rate rmeddis@0: AN_IHCsynapseParams.l= 100; % *loss rate of vesicles from the cleft rmeddis@0: AN_IHCsynapseParams.l= 250; % *loss rate of vesicles from the cleft rmeddis@0: rmeddis@0: AN_IHCsynapseParams.r= 500; % *reuptake rate from cleft into cell rmeddis@0: % AN_IHCsynapseParams.r= 300; % *reuptake rate from cleft into cell rmeddis@0: rmeddis@15: rmeddis@0: %% #7 MacGregorMulti (first order brainstem neurons) rmeddis@0: MacGregorMultiParams=[]; rmeddis@0: MacGregorMultiType='chopper'; % MacGregorMultiType='primary-like'; %choose rmeddis@0: switch MacGregorMultiType rmeddis@0: case 'primary-like' rmeddis@0: MacGregorMultiParams.nNeuronsPerBF= 10; % N neurons per BF rmeddis@0: MacGregorMultiParams.type = 'primary-like cell'; rmeddis@0: MacGregorMultiParams.fibersPerNeuron=4; % N input fibers rmeddis@0: MacGregorMultiParams.dendriteLPfreq=200; % dendritic filter rmeddis@0: MacGregorMultiParams.currentPerSpike=0.11e-6; % (A) per spike rmeddis@0: MacGregorMultiParams.Cap=4.55e-9; % cell capacitance (Siemens) rmeddis@0: MacGregorMultiParams.tauM=5e-4; % membrane time constant (s) rmeddis@0: MacGregorMultiParams.Ek=-0.01; % K+ eq. potential (V) rmeddis@0: MacGregorMultiParams.dGkSpike=3.64e-5; % K+ cond.shift on spike,S rmeddis@0: MacGregorMultiParams.tauGk= 0.0012; % K+ conductance tau (s) rmeddis@0: MacGregorMultiParams.Th0= 0.01; % equilibrium threshold (V) rmeddis@0: MacGregorMultiParams.c= 0.01; % threshold shift on spike, (V) rmeddis@0: MacGregorMultiParams.tauTh= 0.015; % variable threshold tau rmeddis@0: MacGregorMultiParams.Er=-0.06; % resting potential (V) rmeddis@0: MacGregorMultiParams.Eb=0.06; % spike height (V) rmeddis@0: rmeddis@0: case 'chopper' rmeddis@0: MacGregorMultiParams.nNeuronsPerBF= 10; % N neurons per BF rmeddis@0: MacGregorMultiParams.type = 'chopper cell'; rmeddis@0: MacGregorMultiParams.fibersPerNeuron=10; % N input fibers rmeddis@0: rmeddis@0: MacGregorMultiParams.dendriteLPfreq=50; % dendritic filter rmeddis@38: MacGregorMultiParams.currentPerSpike=28e-9; % *per spike rmeddis@28: % MacGregorMultiParams.currentPerSpike=30e-9; % *per spike rmeddis@0: rmeddis@0: MacGregorMultiParams.Cap=1.67e-8; % ??cell capacitance (Siemens) rmeddis@0: MacGregorMultiParams.tauM=0.002; % membrane time constant (s) rmeddis@0: MacGregorMultiParams.Ek=-0.01; % K+ eq. potential (V) rmeddis@0: MacGregorMultiParams.dGkSpike=1.33e-4; % K+ cond.shift on spike,S rmeddis@15: MacGregorMultiParams.tauGk= 0.0005;% K+ conductance tau (s) rmeddis@0: MacGregorMultiParams.Th0= 0.01; % equilibrium threshold (V) rmeddis@0: MacGregorMultiParams.c= 0; % threshold shift on spike, (V) rmeddis@0: MacGregorMultiParams.tauTh= 0.02; % variable threshold tau rmeddis@0: MacGregorMultiParams.Er=-0.06; % resting potential (V) rmeddis@0: MacGregorMultiParams.Eb=0.06; % spike height (V) rmeddis@0: MacGregorMultiParams.PSTHbinWidth= 1e-4; rmeddis@0: end rmeddis@0: rmeddis@0: %% #8 MacGregor (second-order neuron). Only one per channel rmeddis@0: MacGregorParams=[]; % clear the structure first rmeddis@0: MacGregorParams.type = 'chopper cell'; rmeddis@0: MacGregorParams.fibersPerNeuron=10; % N input fibers rmeddis@0: MacGregorParams.dendriteLPfreq=100; % dendritic filter rmeddis@28: MacGregorParams.currentPerSpike=40e-9;% *(A) per spike rmeddis@0: rmeddis@0: MacGregorParams.Cap=16.7e-9; % cell capacitance (Siemens) rmeddis@0: MacGregorParams.tauM=0.002; % membrane time constant (s) rmeddis@0: MacGregorParams.Ek=-0.01; % K+ eq. potential (V) rmeddis@0: MacGregorParams.dGkSpike=1.33e-4; % K+ cond.shift on spike,S rmeddis@35: MacGregorParams.tauGk= 0.0012; % K+ conductance tau (s) rmeddis@0: MacGregorParams.Th0= 0.01; % equilibrium threshold (V) rmeddis@0: MacGregorParams.c= 0; % threshold shift on spike, (V) rmeddis@0: MacGregorParams.tauTh= 0.02; % variable threshold tau rmeddis@0: MacGregorParams.Er=-0.06; % resting potential (V) rmeddis@0: MacGregorParams.Eb=0.06; % spike height (V) rmeddis@0: MacGregorParams.debugging=0; % (special) rmeddis@0: % wideband accepts input from all channels (of same fiber type) rmeddis@0: % use wideband to create inhibitory units rmeddis@0: MacGregorParams.wideband=0; % special for wideband units rmeddis@0: % MacGregorParams.saveAllData=0; rmeddis@0: rmeddis@0: %% #9 filteredSACF rmeddis@38: % identify periodicities to be logged rmeddis@38: minPitch= 80; maxPitch= 500; numPitches=50; rmeddis@38: maxLag=1/minPitch; minLag=1/maxPitch; rmeddis@38: lags= linspace(minLag, maxLag, numPitches); rmeddis@38: pitches=10.^ linspace(log10(minPitch), log10(maxPitch),numPitches); rmeddis@38: pitches=fliplr(pitches); rmeddis@38: % convert to lags for ACF rmeddis@38: filteredSACFParams.lags=lags; % autocorrelation lags vector rmeddis@38: filteredSACFParams.acfTau= .003; % time constant of running ACF rmeddis@38: filteredSACFParams.lambda= 0.12; % slower filter to smooth ACF rmeddis@38: % request plot of within-channel ACFs at fixed intervals in time rmeddis@38: filteredSACFParams.plotACFs=1; rmeddis@38: filteredSACFParams.plotACFsInterval=0.002; rmeddis@38: filteredSACFParams.plotMoviePauses=.1; rmeddis@38: rmeddis@38: filteredSACFParams.usePressnitzer=0; % attenuates ACF at long lags rmeddis@38: filteredSACFParams.lagsProcedure= 'useAllLags'; rmeddis@38: % 'useAllLags' or 'omitShortLags' rmeddis@38: filteredSACFParams.criterionForOmittingLags=3; rmeddis@38: rmeddis@0: rmeddis@0: % checks rmeddis@0: if AN_IHCsynapseParams.numFibers3 && ~isempty(paramChanges) rmeddis@35: if ~iscellstr(paramChanges) rmeddis@38: error('paramChanges error: paramChanges not a cell array') rmeddis@35: end rmeddis@35: rmeddis@26: nChanges=length(paramChanges); rmeddis@26: for idx=1:nChanges rmeddis@35: x=paramChanges{idx}; rmeddis@35: x=deblank(x); rmeddis@35: if ~isempty(x) rmeddis@35: if ~strcmp(x(end),';') rmeddis@35: error(['paramChanges error (terminate with semicolon) ' x]) rmeddis@35: end rmeddis@35: st=strtrim(x(1:strfind(x,'.')-1)); rmeddis@35: fld=strtrim(x(strfind(x,'.')+1:strfind(x,'=')-1)); rmeddis@35: value=x(strfind(x,'=')+1:end); rmeddis@35: if isempty(st) || isempty(fld) || isempty(value) rmeddis@35: error(['paramChanges error:' x]) rmeddis@35: end rmeddis@35: rmeddis@35: x1=eval(['isstruct(' st ')']); rmeddis@35: cmd=['isfield(' st ',''' fld ''')']; rmeddis@35: x2=eval(cmd); rmeddis@35: if ~(x1*x2) rmeddis@35: error(['paramChanges error:' x]) rmeddis@35: end rmeddis@35: end rmeddis@35: rmeddis@35: % no problems so go ahead rmeddis@26: eval(paramChanges{idx}) rmeddis@26: end rmeddis@26: end rmeddis@26: rmeddis@26: rmeddis@0: %% write all parameters to the command window rmeddis@0: % showParams is currently set at the top of htis function rmeddis@0: if showParams rmeddis@0: fprintf('\n %%%%%%%%\n') rmeddis@0: fprintf('\n%s\n', method.parameterSource) rmeddis@0: fprintf('\n') rmeddis@0: nm=UTIL_paramsList(whos); rmeddis@0: for i=1:length(nm) rmeddis@0: % eval(['UTIL_showStruct(' nm{i} ', ''' nm{i} ''')']) rmeddis@0: if ~strcmp(nm(i), 'method') rmeddis@0: eval(['UTIL_showStructureSummary(' nm{i} ', ''' nm{i} ''', 10)']) rmeddis@0: end rmeddis@0: end rmeddis@0: rmeddis@26: % highlight parameter changes made locally rmeddis@26: if nargin>3 && ~isempty(paramChanges) rmeddis@26: fprintf('\n Local parameter changes:\n') rmeddis@26: for i=1:length(paramChanges) rmeddis@26: disp(paramChanges{i}) rmeddis@26: end rmeddis@0: end rmeddis@0: end rmeddis@0: rmeddis@26: % for backward compatibility rmeddis@26: experiment.comparisonData=[];