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=[];
|