highSpikes = 1; lowspikes = 0; direction = -1; sysName = 'equalspiralband500'; paramType = 'value'; simTime = 4000; maxLoops = 30; %blockName = gcb %blockName = 'equalspiralband500/I_Na/gbarLeakNa microS' blockName = 'equalspiralband500/I_A/gbarI_A' %blockName = 'equalspiralband500/I_T/P_I_T' blockValue = str2double(get_param(blockName, paramType)); highRange = 3; lowRange = 0; loopCount = 1; while ((loopCount <= maxLoops) & (ceil(log10(highRange - lowRange)) > -16)), blockValue = lowRange + (highRange - lowRange) / 2; set_param(blockName, paramType, num2str(blockValue, 16)); sim(sysName, simTime); if (size(spikes,1) < highSpikes) & (direction == -1), highRange = blockValue; end; if (size(spikes,1) >= highSpikes) & (direction == -1), lowRange = blockValue; end; if (size(spikes,1) >= highSpikes) & (direction == 1), highRange = blockValue; end; if (size(spikes,1) < highSpikes) & (direction == 1), lowRange = blockValue; end; loopCount = loopCount + 1; end; loopCount [lowRange highRange] precision = 10^(ceil(log10(highRange - lowRange)))