def readconf(fn="hnn.cfg", nohomeout=False): config = ConfigParser() config.optionxform = str with open(fn, 'r') as cfg_file: cfg_txt = os.path.expandvars(cfg_file.read()) config.readfp(StringIO(cfg_txt)) def conffloat(base, var, defa): # defa is default value val = defa try: val = config.getfloat(base, var) except: pass return val def confint(base, var, defa): val = defa try: val = config.getint(base, var) except: pass return val def confstr(base, var, defa): val = defa try: val = config.get(base, var) except: pass return val def confbool(base, var, defa): return str2bool(confstr(base, var, defa)) def readtips(d): if not config.has_section('tips'): return None ltips = config.options('tips') for i, prm in enumerate(ltips): d[prm] = config.get('tips', prm).strip() def readoptprm(d): dparams = OrderedDict() d['params'] = dparams if not config.has_section('params'): return False lprm = config.options('params') #print 'params:', lprm for i, prm in enumerate(lprm): #print prm s = config.get('params', prm) sp = s.split() if len(sp) > 4: minval, maxval, origval, bounded, bestval = float( sp[0]), float(sp[1]), float(sp[2]), str2bool(sp[3]), float( sp[4]) p = param(origval, minval, maxval, bounded, prm, bestval) else: minval, maxval, origval, bounded = float(sp[0]), float( sp[1]), float(sp[2]), str2bool(sp[3]) p = param(origval, minval, maxval, bounded, prm) dparams[prm] = p d = {} d['homeout'] = confint("paths", "homeout", 1) # whether user home directory for output if nohomeout: d['homeout'] = 0 # override config file with commandline d['simf'] = confstr('sim', 'simf', 'run.py') d['paramf'] = confstr('sim', 'paramf', os.path.join('param', 'default.param')) if d['homeout']: # user home directory for output dbase = os.path.join(os.path.expanduser('~'), 'hnn') # user home directory if not safemkdir(dbase): sys.exit(1) # check existence of base hnn output dir else: # cwd for output dbase = os.getcwd( ) # use os.getcwd instead for better compatability with NSG d['datdir'] = os.path.join(dbase, 'data') # data output directory d['paramoutdir'] = os.path.join(dbase, 'param') d['paramindir'] = confstr('paths', 'paramindir', 'param') # this depends on hnn install location d['dataf'] = confstr('paths', 'dataf', '') for k in ['datdir', 'paramindir', 'paramoutdir']: # need these directories if not safemkdir(d[k]): sys.exit(1) d['dorun'] = confint("run", "dorun", 1) d['doquit'] = confint("run", "doquit", 1) d['debug'] = confint("run", "debug", 0) d['testlfp'] = confint("run", "testlfp", 0) d['testlaminarlfp'] = confint("run", "testlaminarlfp", 0) d['optrun'] = confint("run", "optrun", 0) d['nsgrun'] = confint("run", "nsgrun", 0) d['drawindivdpl'] = confint("draw", "drawindivdpl", 1) d['drawavgdpl'] = confint("draw", "drawavgdpl", 0) d['drawindivrast'] = confint("draw", "drawindivrast", 1) d['fontsize'] = confint("draw", "fontsize", 0) readtips(d) # read tooltips for parameters if d['optrun']: readoptprm(d) return d
def readconf(fn="hnn.cfg", nohomeout=False): config = ConfigParser() config.optionxform = str with open(fn, 'r') as cfg_file: cfg_txt = os.path.expandvars(cfg_file.read()) config.readfp(StringIO(cfg_txt)) def conffloat(base, var, defa): # defa is default value val = defa try: val = config.getfloat(base, var) except: pass return val def confint(base, var, defa): val = defa try: val = config.getint(base, var) except: pass return val def confstr(base, var, defa): val = defa try: val = config.get(base, var) except: pass return val def confbool(base, var, defa): return str2bool(confstr(base, var, defa)) def readtips(d): if not config.has_section('tips'): return None ltips = config.options('tips') for i, prm in enumerate(ltips): d[prm] = config.get('tips', prm).strip() d = {} d['homeout'] = confint("paths", "homeout", 1) # whether user home directory for output if nohomeout: d['homeout'] = 0 # override config file with commandline d['simf'] = confstr('sim', 'simf', 'run.py') d['paramf'] = confstr('sim', 'paramf', os.path.join('param', 'default.param')) # dbase - optional config setting to change base output directory if config.has_option('paths', 'dbase'): dbase = config.get('paths', 'dbase').strip() if not safemkdir(dbase): sys.exit(1) # check existence of base hnn output dir else: if d['homeout']: # user home directory for output dbase = os.path.join(os.path.expanduser('~'), 'hnn_out') # user home directory if not safemkdir(dbase): sys.exit(1) # check existence of base hnn output dir else: # cwd for output dbase = os.getcwd( ) # use os.getcwd instead for better compatability with NSG d['dbase'] = dbase d['datdir'] = os.path.join(dbase, 'data') # data output directory d['paramoutdir'] = os.path.join(dbase, 'param') d['paramindir'] = confstr('paths', 'paramindir', 'param') # this depends on hnn install location d['dataf'] = confstr('paths', 'dataf', '') for k in ['datdir', 'paramindir', 'paramoutdir']: # need these directories if not safemkdir(d[k]): sys.exit(1) d['dorun'] = confint("run", "dorun", 1) d['doquit'] = confint("run", "doquit", 1) d['debug'] = confint("run", "debug", 0) d['testlfp'] = confint("run", "testlfp", 0) d['testlaminarlfp'] = confint("run", "testlaminarlfp", 0) d['nsgrun'] = confint("run", "nsgrun", 0) d['drawindivdpl'] = confint("draw", "drawindivdpl", 1) d['drawavgdpl'] = confint("draw", "drawavgdpl", 0) d['drawindivrast'] = confint("draw", "drawindivrast", 1) d['fontsize'] = confint("draw", "fontsize", 0) d['decay_multiplier'] = conffloat('opt', 'decay_multiplier', 1.6) readtips(d) # read tooltips for parameters return d