Ejemplo n.º 1
0
def loadKeysConfig(path=None):
	"""Load keys config file.

	If path is ``None``, a file named :any:`DEFAULT_KEYS_FILE` will be looked for in the config
	directory.

	:param path: path of the keyboard configuration file
	"""

	if path is None:
		path = getConfigFilePath(DEFAULT_KEYS_FILE)

	cfg = ConfigParser()
	cfg.optionxform = str
	cfg.read([path])

	for category in cfg.sections():
		for actionName in cfg.options(category):
			keystr = cfg.get(category, actionName)

			context = Qt.WidgetShortcut
			if keystr.startswith('widget:'):
				keystr = keystr.split(':', 1)[1]
			elif keystr.startswith('window:'):
				keystr = keystr.split(':', 1)[1]
				context = Qt.WindowShortcut
			elif keystr.startswith('children:'):
				keystr = keystr.split(':', 1)[1]
				context = Qt.WidgetWithChildrenShortcut
			elif keystr.startswith('application:'):
				keystr = keystr.split(':', 1)[1]
				context = Qt.ApplicationShortcut
			qks = QKeySequence(keystr)

			registerActionShortcut(category, actionName, qks, context)
Ejemplo n.º 2
0
Archivo: config.py Proyecto: clld/clld
def get_config(p):
    """Read a config file.

    :return: dict of ('section.option', value) pairs.
    """
    cfg = {}
    parser = ConfigParser()
    if hasattr(parser, 'read_file'):
        parser.read_file(Path(p).open(encoding='utf8'))
    else:  # pragma: no cover
        assert PY2
        # The `read_file` method is not available on ConfigParser in py2.7!
        parser.readfp(Path(p).open(encoding='utf8'))

    for section in parser.sections():
        getters = {
            'int': partial(parser.getint, section),
            'boolean': partial(parser.getboolean, section),
            'float': partial(parser.getfloat, section),
            'list': lambda option: parser.get(section, option).split(),
        }
        default = partial(parser.get, section)
        for option in parser.options(section):
            type_ = option.rpartition('_')[2] if '_' in option else None
            value = getters.get(type_, default)(option)
            cfg['{0}.{1}'.format(section, option)] = value

    return cfg
Ejemplo n.º 3
0
def get_config(p):
    """Read a config file.

    :return: dict of ('section.option', value) pairs.
    """
    if not isinstance(p, Path):
        p = Path(p)
    cfg = {}

    parser = ConfigParser()
    parser.readfp(p.open(encoding='utf8'))

    for section in parser.sections():
        getters = {
            'int': partial(parser.getint, section),
            'boolean': partial(parser.getboolean, section),
            'float': partial(parser.getfloat, section),
            'list': lambda option: parser.get(section, option).split(),
        }
        default = partial(parser.get, section)
        for option in parser.options(section):
            type_ = option.rpartition('_')[2] if '_' in option else None
            value = getters.get(type_, default)(option)
            cfg['{0}.{1}'.format(section, option)] = value

    return cfg
Ejemplo n.º 4
0
    def restore_rois(self, roifile):
        """restore ROI setting from ROI.dat file"""
        cp =  ConfigParser()
        cp.read(roifile)
        rois = []
        self.mcas[0].clear_rois()
        prefix = self.mcas[0]._prefix
        if prefix.endswith('.'):
            prefix = prefix[:-1]
        iroi = 0
        for a in cp.options('rois'):
            if a.lower().startswith('roi'):
                name, dat = cp.get('rois', a).split('|')
                lims = [int(i) for i in dat.split()]
                lo, hi = lims[0], lims[1]
                # print('ROI ', name, lo, hi)
                roi = ROI(prefix=prefix, roi=iroi)
                roi.LO = lo
                roi.HI = hi
                roi.NM = name.strip()
                rois.append(roi)
                iroi += 1

        poll(0.050, 1.0)
        self.mcas[0].set_rois(rois)
        cal0 = self.mcas[0].get_calib()
        for mca in self.mcas[1:]:
            mca.set_rois(rois, calib=cal0)
Ejemplo n.º 5
0
 def _get_names_from_config(self, cp, section):
     config = ConfigParser()
     config.read(cp)
     if config.has_section(section):
         return [
             config.get(section, option)
             for option in config.options(section)
         ]
Ejemplo n.º 6
0
    def read_systemini(self):
        """read group info from system.ini
        this is part of the connection process
        """
        self.ftpconn.connect(**self.ftpargs)
        self.ftpconn.cwd(posixpath.join(self.ftphome, 'Config'))
        lines = self.ftpconn.getlines('system.ini')
        self.ftpconn.close()

        pvtgroups = []
        self.stages = OrderedDict()
        self.groups = OrderedDict()
        sconf = ConfigParser()
        sconf.readfp(StringIO('\n'.join(lines)))

        # read and populate lists of groups first
        for gtype, glist in sconf.items('GROUPS'):  # ].items():
            if len(glist) > 0:
                for gname in glist.split(','):
                    gname = gname.strip()
                    self.groups[gname] = OrderedDict()
                    self.groups[gname]['category'] = gtype.strip()
                    self.groups[gname]['positioners'] = []
                    if gtype.lower().startswith('multiple'):
                        pvtgroups.append(gname)

        for section in sconf.sections():
            if section in ('DEFAULT', 'GENERAL', 'GROUPS'):
                continue
            items = sconf.options(section)
            if section in self.groups:  # this is a Group Section!
                poslist = sconf.get(section, 'positionerinuse')
                posnames = [a.strip() for a in poslist.split(',')]
                self.groups[section]['positioners'] = posnames
            elif 'plugnumber' in items:  # this is a stage
                self.stages[section] = {
                    'stagetype': sconf.get(section, 'stagename')
                }

        if len(pvtgroups) == 1:
            self.set_trajectory_group(pvtgroups[0])

        for sname in self.stages:
            ret = self._xps.PositionerMaximumVelocityAndAccelerationGet(
                self._sid, sname)
            try:
                self.stages[sname]['max_velo'] = ret[1]
                self.stages[sname]['max_accel'] = ret[2] / 3.0
            except:
                print("could not set max velo/accel for %s" % sname)
            ret = self._xps.PositionerUserTravelLimitsGet(self._sid, sname)
            try:
                self.stages[sname]['low_limit'] = ret[1]
                self.stages[sname]['high_limit'] = ret[2]
            except:
                print("could not set limits for %s" % sname)

        return self.groups
Ejemplo n.º 7
0
    def test_empty_dict(self):
        name = self.make_empty_temp_file()
        to_config_file(name, "section.name", {})

        self.assertTrue(os.path.isfile(name))

        config = ConfigParser()
        config.read(name)
        self.assertTrue(config.has_section("section.name"))
        self.assertSetEqual(_VALID_KEYS, set(config.options("section.name")))
    def test_empty_dict(self):
        name = self.make_empty_temp_file()
        to_config_file(name, "section.name", {})

        self.assertTrue(os.path.isfile(name))

        config = ConfigParser()
        config.read(name)
        self.assertTrue(config.has_section("section.name"))
        self.assertSetEqual(_VALID_KEYS, set(config.options("section.name")))
Ejemplo n.º 9
0
    def test_partial_dict(self):
        name = self.make_empty_temp_file()
        to_config_file(name, "section.name", {"port_queue_dt": 1.})

        self.assertTrue(os.path.isfile(name))

        config = ConfigParser()
        config.read(name)
        self.assertTrue(config.has_section("section.name"))
        self.assertSetEqual(_VALID_KEYS, set(config.options("section.name")))
        self.assertEqual(1., config.getfloat("section.name", "port_queue_dt"))
    def test_partial_dict(self):
        name = self.make_empty_temp_file()
        to_config_file(name, "section.name", {"port_queue_dt": 1.})

        self.assertTrue(os.path.isfile(name))

        config = ConfigParser()
        config.read(name)
        self.assertTrue(config.has_section("section.name"))
        self.assertSetEqual(_VALID_KEYS, set(config.options("section.name")))
        self.assertEqual(1., config.getfloat("section.name", "port_queue_dt"))
Ejemplo n.º 11
0
 def _read(self):
     parser = ConfigParser()
     parser.read(self.path)
     self._globals = parser.defaults()
     data = {}
     for section in parser.sections():
         section_data = data.setdefault(section, {})
         for option in parser.options(section):
             if option in self._globals:
                 continue
             section_data[option] = parser.get(section, option)
     return data
Ejemplo n.º 12
0
    def _load(self):
        self.files = self.options

        config = ConfigParser()

        for filepath in self.files:
            with codecs.open(filepath, 'r', encoding='utf-8') as stream:
                fakefile = StringIO("[top]\n" + stream.read())
                config.readfp(fakefile)

        return [self._l10n2rec(key, config.get('top', key))
                for key in config.options('top')]
Ejemplo n.º 13
0
def config_section_to_dict(config_file, section):
    """
    Read a config file's section as a dict

    :param str config_file: filename of config file
    :param str section: section to pull data from
    :return: dict of key value pairs
    :rtype: dict
    """
    config = ConfigParser()
    config.read(config_file)
    result = {key: config.get(section, key) for key in config.options(section)}
    return result
Ejemplo n.º 14
0
    def test_ignore_extra_params(self):
        name = self.make_empty_temp_file()
        to_config_file(
            name, "section.name", {"invalid_parameter": "empty", "port_queue_dt": 1.2}
        )

        self.assertTrue(os.path.isfile(name))

        config = ConfigParser()
        config.read(name)
        self.assertTrue(config.has_section("section.name"))
        self.assertSetEqual(_VALID_KEYS, set(config.options("section.name")))
        self.assertEqual(1.2, config.getfloat("section.name", "port_queue_dt"))
        self.assertFalse(config.has_option("section.name", "invalid_parameter"))
    def _load(self):
        self.files = self.options

        config = ConfigParser()

        for filepath in self.files:
            with codecs.open(filepath, 'r', encoding='utf-8') as stream:
                fakefile = StringIO("[top]\n" + stream.read())
                config.readfp(fakefile)

        return [
            self._l10n2rec(key, config.get('top', key))
            for key in config.options('top')
        ]
Ejemplo n.º 16
0
    def restore_rois(self, roifile):
        """restore ROI setting from ROI.dat file"""
        cp = ConfigParser()
        cp.read(roifile)
        roidat = []
        for a in cp.options('rois'):
            if a.lower().startswith('roi'):
                name, dat = cp.get('rois', a).split('|')
                lims = [int(i) for i in dat.split()]
                lo, hi = lims[0], lims[1]
                roidat.append((name.strip(), lo, hi))

        for mca in self.mcas:
            mca.set_rois(roidat)
Ejemplo n.º 17
0
    def restore_rois(self, roifile):
        """restore ROI setting from ROI.dat file"""
        cp = ConfigParser()
        cp.read(roifile)
        roidat = []
        for a in cp.options('rois'):
            if a.lower().startswith('roi'):
                name, dat = cp.get('rois', a).split('|')
                lims = [int(i) for i in dat.split()]
                lo, hi = lims[0], lims[1]
                roidat.append((name.strip(), lo, hi))

        for mca in self.mcas:
            mca.set_rois(roidat)
Ejemplo n.º 18
0
def read_test_ini(file_dir=FILE_DIR, section="FacebookAuth"):
    ini_file_path = os.path.join(file_dir, "test.ini")
    ret = {}
    if os.path.isfile(ini_file_path):
        cp = ConfigParser()
        cp.read(ini_file_path)
        if section not in cp.sections():
            raise EnvironmentError(
                "Section '{0}' not in test.ini".format(section))
        for arg in cp.options(section):
            ret[arg] = cp.get(section, arg)
    else:
        raise EnvironmentError(
            "File test.ini not existing in path '{0}'".format(FILE_DIR))
    return ret
    def test_ignore_extra_params(self):
        name = self.make_empty_temp_file()
        to_config_file(name, "section.name", {
            "invalid_parameter": "empty",
            "port_queue_dt": 1.2
        })

        self.assertTrue(os.path.isfile(name))

        config = ConfigParser()
        config.read(name)
        self.assertTrue(config.has_section("section.name"))
        self.assertSetEqual(_VALID_KEYS, set(config.options("section.name")))
        self.assertEqual(1.2, config.getfloat("section.name", "port_queue_dt"))
        self.assertFalse(config.has_option("section.name",
                                           "invalid_parameter"))
Ejemplo n.º 20
0
Archivo: config.py Proyecto: riga/law
 def options(self, section, prefix=None, expand_vars=True, expand_user=True):
     """
     Returns all options of a *section* in a list. When *prefix* is set, only options starting
     with that prefix are considered. Environment variable expansion is performed on every
     returned option name, depending on whether *expand_vars* and *expand_user* are *True*.
     """
     options = []
     for option in ConfigParser.options(self, section):
         if prefix and not option.startswith(prefix):
             continue
         if expand_vars:
             option = os.path.expandvars(option)
         if expand_user:
             option = os.path.expanduser(option)
         options.append(option)
     return options
Ejemplo n.º 21
0
    def load(self):
        cfp = ConfigParser()
        # p = os.path.join(paths.spectrometer_dir, 'config.cfg')
        p = get_spectrometer_config_path()
        cfp.read(p)
        gs = []
        for section in cfp.sections():
            g = SpectrometerParametersGroup(name=section)
            ps = []
            for pp in cfp.options(section):
                v = cfp.getfloat(section, pp)
                ps.append(Parameter(name=pp, value=v))

            g.parameters = ps
            gs.append(g)

        self.groups = gs
Ejemplo n.º 22
0
class CKANConfigLoader(object):
    def __init__(self, filename):
        self.config_file = filename.strip()
        self.config = dict()
        self.parser = ConfigParser()
        self.section = u'app:main'
        defaults = {u'__file__': os.path.abspath(self.config_file)}
        self._update_defaults(defaults)
        self._create_config_object()

    def _update_defaults(self, new_defaults):
        for key, value in new_defaults.items():
            self.parser._defaults[key] = value

    def _read_config_file(self, filename):
        defaults = {u'here': os.path.dirname(os.path.abspath(filename))}
        self._update_defaults(defaults)
        self.parser.read(filename)

    def _update_config(self):
        options = self.parser.options(self.section)
        for option in options:
            if option not in self.config or option in self.parser.defaults():
                value = self.parser.get(self.section, option)
                self.config[option] = value
                if option in self.parser.defaults():
                    self.config[u'global_conf'][option] = value

    def _create_config_object(self):
        self._read_config_file(self.config_file)

        # # The global_config key is to keep compatibility with Pylons.
        # # It can be safely removed when the Flask migration is completed.
        self.config[u'global_conf'] = self.parser.defaults().copy()

        self._update_config()

        schema, path = self.parser.get(self.section, u'use').split(u':')
        if schema == u'config':
            use_config_path = os.path.join(
                os.path.dirname(os.path.abspath(self.config_file)), path)
            self._read_config_file(use_config_path)
            self._update_config()

    def get_config(self):
        return self.config.copy()
Ejemplo n.º 23
0
    def load(self):
        cfp = ConfigParser()
        # p = os.path.join(paths.spectrometer_dir, 'config.cfg')
        p = get_spectrometer_config_path()
        cfp.read(p)
        gs = []
        for section in cfp.sections():
            g = SpectrometerParametersGroup(name=section)
            ps = []
            for pp in cfp.options(section):
                v = cfp.getfloat(section, pp)
                ps.append(Parameter(name=pp, value=v))

            g.parameters = ps
            gs.append(g)

        self.groups = gs
Ejemplo n.º 24
0
    def parse_config_files(self, filenames=None):
        from six.moves.configparser import ConfigParser

        if filenames is None:
            filenames = self.find_config_files()

        if DEBUG:
            self.announce("Distribution.parse_config_files():")

        parser = ConfigParser()
        for filename in filenames:
            if DEBUG:
                self.announce("  reading %s" % filename)
            parser.read(filename)
            for section in parser.sections():
                options = parser.options(section)
                opt_dict = self.get_option_dict(section)

                for opt in options:
                    if opt != '__name__':
                        val = parser.get(section, opt)
                        opt = opt.replace('-', '_')
                        opt_dict[opt] = (filename, val)

            # Make the ConfigParser forget everything (so we retain
            # the original filenames that options come from)
            parser.__init__()

        # If there was a "global" section in the config file, use it
        # to set Distribution options.

        if 'global' in self.command_options:
            for (opt, (src,
                       val)) in list(self.command_options['global'].items()):
                alias = self.negative_opt.get(opt)
                try:
                    if alias:
                        setattr(self, alias, not strtobool(val))
                    elif opt in ('verbose', 'dry_run'):  # ugh!
                        setattr(self, opt, strtobool(val))
                    else:
                        setattr(self, opt, val)
                except ValueError as msg:
                    raise DistutilsOptionError(msg)
Ejemplo n.º 25
0
def readconfigfile(fname):
    """
        This funciton will read in the pickle files that are used for configuration.

        Args:
            fname - A string containing the file name and location.

        Returns:
            sensdict - A dictionary that holds the sensor parameters.
            simparams - A dictionary that holds the simulation parameters.
    """

    fname = Path(fname).expanduser()
    if not fname.is_file():
        raise IOError('{} not found'.format(fname))

    ftype = fname.suffix
    curpath = fname.parent

    if ftype=='.yml':
        with fname.open('r') as f:
            dictlist = yaml.load(f)

        angles = sensconst.getangles(dictlist[0]['beamlist'], dictlist[0]['radarname'])
        beamlist = [float(i) for i in dictlist[0]['beamlist']]
        ang_data = sp.array([[iout[0],iout[1]] for iout in angles])
        sensdict = sensconst.getConst(dictlist[0]['radarname'],ang_data)

        simparams = dictlist[1]
    elif ftype=='.ini':

        config = ConfigParser()
        config.read(str(fname))
        beamlist = config.get('section 1','beamlist').split()
        beamlist = [float(i) for i in beamlist]
        radarname = config.get('section 1','radarname').split()[0]
        angles = sensconst.getangles(beamlist, radarname)
        ang_data = sp.array([[iout[0],iout[1]] for iout in angles])

        sensdict = sensconst.getConst(config.get('section 1','radarname'),ang_data)

        simparams = {}
        for param in config.options('simparams'):
            rname  = config.get('simparamsnames',param)
            simparams[rname] = config.get('simparams',param)

        for param in simparams:
            if simparams[param] == "<type 'numpy.complex128'>":
                simparams[param] = sp.complex128
            elif simparams[param] == "<type 'numpy.complex64'>":
                simparams[param] = sp.complex64
            elif param == 'outangles':
                outlist1 = simparams[param].split(',')
                simparams[param] = [[float(j) for j in  i.lstrip().rstrip().split(' ')]
                                    for i in outlist1]
            else:
                simparams[param] = simparams[param].split(" ")
                if len(simparams[param]) == 1:
                    simparams[param] = simparams[param][0]
                    try:
                        simparams[param] = float(simparams[param])
                    except:
                        pass
                else:
                    for a in range(len(simparams[param])):
                        try:
                            simparams[param][a] = float(simparams[param][a])
                        except:
                            pass
    if 't_s' in simparams.keys():
        sensdict['t_s'] = simparams['t_s']
        sensdict['fs'] = 1.0/simparams['t_s']
        sensdict['BandWidth'] = sensdict['fs']*0.5 #used for the noise bandwidth

    for ikey in sensdict.keys():
        if ikey  in simparams.keys():
            sensdict[ikey] = simparams[ikey]
#            del simparams[ikey]

    simparams['Beamlist'] = beamlist
    time_lim = simparams['TimeLim']
    (pulse, _) = makepulse(simparams['Pulsetype'], simparams['Pulselength'], sensdict['t_s'])
    simparams['Pulse'] = pulse
    psamps = len(pulse)
    simparams['amb_dict'] = make_amb(sensdict['fs'], int(simparams['ambupsamp']),
                                     sensdict['t_s']*len(pulse), pulse, simparams['numpoints'])
    simparams['angles'] = angles

    simparams['Timevec'] = sp.arange(0, time_lim, simparams['Fitinter'])

    rng_samp = simparams['t_s']*v_C_0*1e-3/2.
    ipp_samps = sp.floor(simparams['IPP']*sensdict['fs'])
    ipp_rng = sp.arange(0, ipp_samps, dtype=float)*rng_samp
    rng_lims = simparams['RangeLims']

    # XXX Set up range gates differently
    min_rng = sp.where(ipp_rng >= rng_lims[0])[0][0]
    max_rng = sp.where(ipp_rng <= rng_lims[1])[0][-1]
    rng_all = sp.arange(min_rng-(psamps-1), max_rng+(psamps-1), dtype=float)*rng_samp
    rng_all[rng_all <= 0] = rng_samp


    simparams['Rangegates'] = rng_all
    simparams['Rangegatesfinal'] = sp.arange(min_rng,max_rng,dtype=float)*rng_samp
    if not 'lagtype' in simparams.keys():
        simparams['lagtype'] = 'centered'
    sumrule = makesumrule(simparams['Pulsetype'], simparams['Pulselength'],
                          sensdict['t_s'], simparams['lagtype'])
    simparams['SUMRULE'] = sumrule
    # minrg = -sumrule[0].min()
    # maxrg = len(rng_gates)-sumrule[1].max()-1
    # n_pulse = len(pulse)
    # arback = -sp.floor(sp.arange(0, n_pulse/2.0, 0.5)).astype(int)
    # arfor = sp.ceil(sp.arange(0, n_pulse/2.0, 0.5)).astype(int)
    # rnglist = [sp.mean(rng_gates[irng+arback]**2+ rng_gates[irng+arfor]**2)
    #            for irng in range(minrg, maxrg)]



    if ('startfile' in simparams.keys() and len(simparams['startfile']) > 0 ) and simparams['Pulsetype'].lower() !=' barker':
        relpath = Path(simparams['startfile'])
        if not relpath.is_absolute():
            # Some times the ini files may split the strings of the start file
            # because of white space in file names.
            if type(simparams['startfile']) is list:
                startfile = " ".join(simparams['startfile'])
            else:
                startfile = simparams['startfile']

            fullfilepath = curpath.joinpath(startfile)
            simparams['startfile'] = str(fullfilepath)

        else:
            fullfilepath = simparams['startfile']
        stext = Path(fullfilepath).is_file()
        if not stext:
            warnings.warn('The given start file does not exist', UserWarning)

    elif simparams['Pulsetype'].lower() != 'barker':
        warnings.warn('No start file given', UserWarning)

    return(sensdict, simparams)
Ejemplo n.º 26
0
class StageConfig(object):
    def __init__(self, filename=None, text=None):
        self.config = {}
        self.cp = ConfigParser()
        self.nstages = 0
        fname = None
        if filename is not None and os.path.exists(filename):
            fname = filename
        if fname is None:
            for filename in conf_files:
                if os.path.exists(filename) and os.path.isfile(filename):
                    fname = filename
                    break

        if fname is not None:
            self.Read(fname=fname)
        else:
            self.cp.readfp(StringIO(DEFAULT_CONF))
            self._process_data()

    def Read(self,fname=None):
        if fname is not None:
            ret = self.cp.read(fname)
            if len(ret)==0:
                time.sleep(0.5)
                ret = self.cp.read(fname)
            self.filename = fname
            self._process_data()

            stage_names = self.config['stages']
            image_folder = self.config['camera']['image_folder']
            pos = OrderedDict()
            if 'positions' not in self.config:
                self.config['positions'] = {}
            for key, dat in self.config['positions'].items():
                img_fname = dat['image']
                image = {'type': 'filename',
                         'data': os.path.join(image_folder, img_fname)}

                poslist = dat['position']
                posdict = {}
                for name, val in zip(stage_names, poslist):
                    posdict[name] = val
                pos[key] = dict(image=image, position=posdict)
            self.config['positions'] = pos

    def _process_data(self):
        for sect, opts in conf_sects.items():
            if not self.cp.has_section(sect):
                # print 'skipping section ' ,sect
                continue
            bools = opts.get('bools',[])
            floats= opts.get('floats',[])
            ints  = opts.get('ints',[])
            thissect = {}
            is_ordered = False
            if 'ordered' in opts:
                is_ordered = True

            for opt in self.cp.options(sect):
                get = self.cp.get
                if opt in bools:
                    get = self.cp.getboolean
                elif opt in floats:
                    get = self.cp.getfloat
                elif opt in ints:
                    get = self.cp.getint
                try:
                    val = get(sect, opt)
                except ValueError:
                    val = ''
                if is_ordered and '||' in val:
                    nam, val = val.split('||', 1)
                    opt = opt.strip()
                    val = nam, val.strip()
                thissect[opt] = val
            self.config[sect] = thissect

        if 'positions' in self.config:
            out = OrderedDict()
            poskeys = list(self.config['positions'].keys())
            poskeys.sort()
            for key in poskeys:
                name, val = self.config['positions'][key]
                name = name.strip()
                img, posval = val.strip().split('||')
                pos = [float(i) for i in posval.split(',')]
                out[name] = dict(image=img.strip(), position= pos)
            self.config['positions'] = out

        if 'stages' in self.config:
            out = OrderedDict()
            groups = []

            skeys = list(self.config['stages'].keys())
            skeys.sort()
            for key in skeys:
                name, val = self.config['stages'][key]
                name = normalize_pvname(name.strip())
                val = val.replace('||', ' | ')
                words = [w.strip() for w in val.split('|')]
                group = words[0]
                desc  = words[1]
                if len(desc) == 0:
                    desc = None

                scale = 1.0
                if len(words) > 1 and len(words[2]) > 0:
                    scale = float(words[2])

                prec = None
                if len(words) > 2 and len(words[3]) > 0:
                    prec = int(words[3])

                maxstep = None
                if len(words) > 4 and len(words[4]) > 0:
                    maxstep = float(words[4])

                show = 1
                if len(words) > 5 and len(words[5]) > 0:
                    show = int(words[5])

                out[name] = dict(label=name, group=group, desc=desc, scale=scale,
                                 prec=prec, maxstep=maxstep, show=show)
                if group not in groups:
                    groups.append(group)
            self.config['stages'] = out
            self.config['stage_groups'] = groups
            self.nstages = len(out)

    def Save(self, fname=None, positions=None):
        o = []
        # print 'Save CONFIG FILE:', fname, os.getcwd()
        # print positions.keys()
        cnf = self.config

        if fname is not None:
            self.filename = fname
        o.append('## Sample Stage Configuration (saved: %s)'  % (time.ctime()))

        if positions is None:
            positions = cnf['positions']
        for sect, optlist in conf_objs.items():
            o.append('#--------------------------#\n[%s]'%sect)
            if sect == 'positions' and positions is not None:
                o.append(POS_LEGEND)
                fmt =  "%3.3i = %s || %s || %s "
                pfmt =  ', '.join(['%f' for i in range(self.nstages)])
                idx = 1
                for name, val in positions.items():
                    pos = []
                    for pvname in cnf['stages']:
                        try:
                            pos.append(float(val['position'][pvname]))
                        except:
                            pass
                    pfmt =  ', '.join(['%f' for i in range(len(pos))])
                    pos = pfmt % tuple(pos)
                    try:
                        tmpdir, imgfile = os.path.split(val['image'])
                    except:
                        tmpdir, imgfile = '', ''

                    o.append(fmt % (idx, name, imgfile, pos))
                    idx = idx + 1
            elif sect == 'stages':
                o.append(STAGE_LEGEND)
                fmt =  "%i = %s || %s || %s || %s || %s || %s || %s"
                idx = 1
                for name, dat in cnf['stages'].items():
                    # print 'Save STAGE ', name, dat
                    # index =  motor || group   ||desc || scale || prec || maxstep || show
                    group = dat['group']
                    desc  = dat['desc']
                    show  = str(dat['show'])
                    scale  = str(dat['scale'])
                    prec   = str(dat['prec'])
                    maxstep  = "%.3f" % (dat['maxstep'])
                    o.append(fmt % (idx, name, group, desc, scale, prec, maxstep, show))
                    idx = idx + 1
            if optlist is not None:
                for opt in optlist:
                    try:
                        val = cnf[sect].get(opt,' ')
                        if not isinstance(val,(str,unicode)): val = str(val)
                        o.append("%s = %s" % (opt,val))
                    except:
                        pass
        o.append('#------------------#\n')
        # print 'Conf autosave ', fname
        # print os.path.abspath(fname)
        f = open(fname,'w')
        f.write('\n'.join(o))
        f.close()

    def sections(self):
        return self.config.keys()

    def section(self,section):
        return self.config[section]

    def get(self,section,value=None):
        if value is None:
            return self.config[section]
        else:
            return self.config[section][value]
Ejemplo n.º 27
0
class StageConfig(object):
    def __init__(self, filename=None, text=None):
        self.config = {}
        self.cp = ConfigParser()
        self.nstages = 0
        fname = None
        if filename is not None and os.path.exists(filename):
            fname = filename
        if fname is None:
            for filename in conf_files:
                if os.path.exists(filename) and os.path.isfile(filename):
                    fname = filename
                    break

        if fname is not None:
            self.Read(fname=fname)
        else:
            self.cp.readfp(StringIO(DEFAULT_CONF))
            self._process_data()

    def Read(self, fname=None):
        if fname is not None:
            ret = self.cp.read(fname)
            if len(ret) == 0:
                time.sleep(0.5)
                ret = self.cp.read(fname)
            self.filename = fname
            self._process_data()

            stage_names = self.config['stages']
            image_folder = self.config['camera']['image_folder']
            pos = OrderedDict()
            if 'positions' not in self.config:
                self.config['positions'] = {}
            for key, dat in self.config['positions'].items():
                img_fname = dat['image']
                image = {
                    'type': 'filename',
                    'data': os.path.join(image_folder, img_fname)
                }

                poslist = dat['position']
                posdict = {}
                for name, val in zip(stage_names, poslist):
                    posdict[name] = val
                pos[key] = dict(image=image, position=posdict)
            self.config['positions'] = pos

    def _process_data(self):
        for sect, opts in conf_sects.items():
            if not self.cp.has_section(sect):
                # print 'skipping section ' ,sect
                continue
            bools = opts.get('bools', [])
            floats = opts.get('floats', [])
            ints = opts.get('ints', [])
            thissect = {}
            is_ordered = False
            if 'ordered' in opts:
                is_ordered = True

            for opt in self.cp.options(sect):
                get = self.cp.get
                if opt in bools:
                    get = self.cp.getboolean
                elif opt in floats:
                    get = self.cp.getfloat
                elif opt in ints:
                    get = self.cp.getint
                try:
                    val = get(sect, opt)
                except ValueError:
                    val = ''
                if is_ordered and '||' in val:
                    nam, val = val.split('||', 1)
                    opt = opt.strip()
                    val = nam, val.strip()
                thissect[opt] = val
            self.config[sect] = thissect

        if 'positions' in self.config:
            out = OrderedDict()
            poskeys = list(self.config['positions'].keys())
            poskeys.sort()
            for key in poskeys:
                name, val = self.config['positions'][key]
                name = name.strip()
                img, posval = val.strip().split('||')
                pos = [float(i) for i in posval.split(',')]
                out[name] = dict(image=img.strip(), position=pos)
            self.config['positions'] = out

        if 'stages' in self.config:
            out = OrderedDict()
            groups = []

            skeys = list(self.config['stages'].keys())
            skeys.sort()
            for key in skeys:
                name, val = self.config['stages'][key]
                name = normalize_pvname(name.strip())
                val = val.replace('||', ' | ')
                words = [w.strip() for w in val.split('|')]
                group = words[0]
                desc = words[1]
                if len(desc) == 0:
                    desc = None

                scale = 1.0
                if len(words) > 1 and len(words[2]) > 0:
                    scale = float(words[2])

                prec = None
                if len(words) > 2 and len(words[3]) > 0:
                    prec = int(words[3])

                maxstep = None
                if len(words) > 4 and len(words[4]) > 0:
                    maxstep = float(words[4])

                show = 1
                if len(words) > 5 and len(words[5]) > 0:
                    show = int(words[5])

                out[name] = dict(label=name,
                                 group=group,
                                 desc=desc,
                                 scale=scale,
                                 prec=prec,
                                 maxstep=maxstep,
                                 show=show)
                if group not in groups:
                    groups.append(group)
            self.config['stages'] = out
            self.config['stage_groups'] = groups
            self.nstages = len(out)

    def Save(self, fname=None, positions=None):
        o = []
        # print 'Save CONFIG FILE:', fname, os.getcwd()
        # print positions.keys()
        cnf = self.config

        if fname is not None:
            self.filename = fname
        o.append('## Sample Stage Configuration (saved: %s)' % (time.ctime()))

        if positions is None:
            positions = cnf['positions']
        for sect, optlist in conf_objs.items():
            o.append('#--------------------------#\n[%s]' % sect)
            if sect == 'positions' and positions is not None:
                o.append(POS_LEGEND)
                fmt = "%3.3i = %s || %s || %s "
                pfmt = ', '.join(['%f' for i in range(self.nstages)])
                idx = 1
                for name, val in positions.items():
                    pos = []
                    for pvname in cnf['stages']:
                        try:
                            pos.append(float(val['position'][pvname]))
                        except:
                            pass
                    pfmt = ', '.join(['%f' for i in range(len(pos))])
                    pos = pfmt % tuple(pos)
                    try:
                        tmpdir, imgfile = os.path.split(val['image'])
                    except:
                        tmpdir, imgfile = '', ''

                    o.append(fmt % (idx, name, imgfile, pos))
                    idx = idx + 1
            elif sect == 'stages':
                o.append(STAGE_LEGEND)
                fmt = "%i = %s || %s || %s || %s || %s || %s || %s"
                idx = 1
                for name, dat in cnf['stages'].items():
                    # print 'Save STAGE ', name, dat
                    # index =  motor || group   ||desc || scale || prec || maxstep || show
                    group = dat['group']
                    desc = dat['desc']
                    show = str(dat['show'])
                    scale = str(dat['scale'])
                    prec = str(dat['prec'])
                    maxstep = "%.3f" % (dat['maxstep'])
                    o.append(
                        fmt %
                        (idx, name, group, desc, scale, prec, maxstep, show))
                    idx = idx + 1
            if optlist is not None:
                for opt in optlist:
                    try:
                        val = cnf[sect].get(opt, ' ')
                        if not isinstance(val, (str, unicode)): val = str(val)
                        o.append("%s = %s" % (opt, val))
                    except:
                        pass
        o.append('#------------------#\n')
        # print 'Conf autosave ', fname
        # print os.path.abspath(fname)
        f = open(fname, 'w')
        f.write('\n'.join(o))
        f.close()

    def sections(self):
        return self.config.keys()

    def section(self, section):
        return self.config[section]

    def get(self, section, value=None):
        if value is None:
            return self.config[section]
        else:
            return self.config[section][value]
Ejemplo n.º 28
0
 def _get_names_from_config(self, cp, section):
     config = ConfigParser()
     config.read(cp)
     if config.has_section(section):
         return [config.get(section, option) for option in config.options(section)]
Ejemplo n.º 29
0
class SpecConfig(object):
    #  sections            name      ordered?
    __sects = OrderedDict((('setup',     False),
                           ('motors',    True),
                           ('detectors', True),
                           ('extra_pvs', True),
                           ('counters',  True)))

    def __init__(self, filename=None, text=None):
        for s in self.__sects:
            setattr(self, s, {})

        self._cp = ConfigParser()
        if filename is None:
            if (os.path.exists(DEF_CONFFILE) and
                os.path.isfile(DEF_CONFFILE)):
                filename = DEF_CONFFILE

        self.filename = filename
        if filename is not None:
            self.Read(filename)

    def Read(self, fname):
        "read config"
        if fname is None:
            return
        ret = self._cp.read(fname)
        if len(ret) == 0:
            time.sleep(0.25)
            ret = self._cp.read(fname)
        self.filename = fname
        # process sections
        for sect, ordered in self.__sects.items():
            if not self._cp.has_section(sect):
                continue
            thissect = {}
            if ordered:
                thissect = OrderedDict()
            for opt in self._cp.options(sect):
                val = self._cp.get(sect, opt)
                if '||' in val:
                    words = [i.strip() for i in val.split('||')]
                    label = words.pop(0)
                    if len(words) == 1:
                        words = words[0]
                    else:
                        words = tuple(words)
                    thissect[label] = words
                else:
                    thissect[opt] = val
                setattr(self, sect, thissect)

    def Save(self, fname=None):
        "save config file"
        if fname is not None:
            self.filename = fname
        if fname is None:
            fname = self.filename = DEF_CONFFILE
            path, fn = os.path.split(fname)
            if not os.path.exists(path):
                os.makedirs(path, mode=0o755)

        out = ['###PyScan Spec Configuration: %s'  % (get_timestamp())]
        for sect, ordered in self.__sects.items():
            out.append('#-----------------------#\n[%s]' % sect)
            if sect == 'setup':
                for name, val in self.setup.items():
                    out.append("%s = %s" % (name, val))
            elif sect == 'detectors':
                out.append(DET_LEGEND)
                print( 'sect = det')
                idx = 0
                for key, val in getattr(self, sect).items():
                    idx = idx + 1
                    if isinstance(val, (list, tuple)):
                        val = ' || '.join(val)
                    out.append("%i = %s || %s"  % (idx, key, val))

            else:
                leg = LEGEND
                out.append(LEGEND)
                idx = 0
                for key, val in getattr(self, sect).items():
                    idx = idx + 1
                    if isinstance(val, (list, tuple)):
                        val = ' || '.join(val)
                    out.append("%i = %s || %s"  % (idx, key, val))
        out.append('#-----------------------#')
        f = open(fname, 'w')
        f.write('\n'.join(out))
        f.close()

    def sections(self):
        return self.__sects.keys()
Ejemplo n.º 30
0
class StationConfig(object):
    #  sections            name      ordered?
    __sects = OrderedDict((('setup',       False),
                           ('server',   False),
                           ('positioners', True),
                           ('detectors',   True),
                           ('counters',    True),
                           ('xafs',        False),
                           ('slewscan',    False),
                           ('slewscan_positioners',  True),
                           ('extrapvs',   True),
                           ))

    def __init__(self, filename=None, text=None):
        for s in self.__sects:
           setattr(self, s, {})

        self._cp = ConfigParser()
        if filename is None:
            filename = DEF_CONFFILE
        self.filename = filename
        # print 'StationConfig ', filename, os.path.abspath(filename)
        # print os.path.exists(filename),   os.path.isfile(filename)
        if (os.path.exists(filename) and
            os.path.isfile(filename)):
            ret = self._cp.read(filename)
            if len(ret) == 0:
                time.sleep(0.1)
                self._cp.read(filename)
        else:
            self._cp.readfp(StringIO(DEFAULT_CONF))
        self.Read()

    def Read(self, filename=None):
        "read config"
        if (filename is not None and
            (os.path.exists(filename) and
             os.path.isfile(filename))):
            ret = self._cp.read(filename)
            if len(ret) == 0:
                time.sleep(0.1)
                self._cp.read(filename)
            self.filename = filename

        # process sections
        for sect, ordered in self.__sects.items():
            if not self._cp.has_section(sect):
                continue
            thissect = {}
            opt_keys = self._cp.options(sect)
            if ordered:
                thissect = OrderedDict()
                opt_keys.sort()
            for opt in opt_keys:
                val = self._cp.get(sect, opt)
                if '||' in val:
                    words = [i.strip() for i in val.split('||')]
                    label = words.pop(0)
                    if len(words) == 1:
                        words = words[0]
                    else:
                        tmp = []
                        for w in words:
                            if ',' in w and '=' in w:
                                tmp.append(opts2dict(w))
                            else:
                                tmp.append(w)
                        words = tuple(tmp)
                    thissect[label] = words
                else:
                    thissect[opt] = val
                setattr(self, sect, thissect)
        for key, val in self.positioners.items():
            fi = []
            if isinstance(val, (list, tuple)):
                for v in val:
                    if '.' not in v: v = '%s.VAL' % v
                    fi.append(v)
            else:
                if '.' not in val:
                    val = '%s.VAL' % val
                fi = [val, val]
            self.positioners[key] = tuple(fi)

    def Save(self, fname=None):
        "save config file"
        if fname is not None:
            self.filename = fname
        if fname is None:
            fname = self.filename = DEF_CONFFILE
            path, fn = os.path.split(fname)
            if not os.path.exists(path):
                os.makedirs(path, mode=0o755)

        out = ['### %s: %s' % (TITLE, get_timestamp())]
        for sect, ordered in self.__sects.items():
            out.append('#------------------------------#\n[%s]' % sect)
            if sect in ('setup', 'server', 'slewscan', 'xafs'):
                for name, val in self.setup.items():
                    out.append("%s = %s" % (name, val))
            elif sect == 'detectors':
                out.append(DET_LEGEND)
                idx = 0
                for key, val in getattr(self, sect).items():
                    idx = idx + 1
                    if isinstance(val, (list, tuple)):
                        wout = []
                        for w in val:
                            if isinstance(w, dict):
                                wout.append(dict2opts(w))
                            elif isinstance(w, (str, unicode)):
                                wout.append(w)
                            else:
                                wout.append(repr(w))
                        val = ' || '.join(wout)
                    out.append("%i = %s || %s"  % (idx, key, val))

            else:
                leg = LEGEND
                out.append(LEGEND)
                idx = 0
                for key, val in getattr(self, sect).items():
                    idx = idx + 1
                    if isinstance(val, (list, tuple)):
                        val = ' || '.join(val)
                    out.append("%i = %s || %s"  % (idx, key, val))
        out.append('#-----------------------#')
        f = open(fname, 'w')
        f.write('\n'.join(out))
        f.close()

    def sections(self):
        return self.__sects.keys()
Ejemplo n.º 31
0
def readconfigfile(fname):
    """This funciton will read in the pickle files that are used for configuration.
    Inputs
        fname - A string containing the file name and location.
    Outputs
        sensdict - A dictionary that holds the sensor parameters.
        simparams - A dictionary that holds the simulation parameters."""

    fname = Path(fname).expanduser()
    if not fname.is_file():
        raise IOError('{0} not found'.format(str(fname)))
    
    ftype = fname.suffix
    curpath = fname.parent
    if ftype=='.pickle':
        pickleFile = file(str(fname),'r')
        dictlist = pickle.load(pickleFile)
        pickleFile.close()
        angles = getangles(dictlist[0]['beamlist'],dictlist[0]['radarname'])
        beamlist = [float(i) for i in dictlist[0]['beamlist']]
        ang_data = sp.array([[iout[0],iout[1]] for iout in angles])
        sensdict = sensconst.getConst(dictlist[0]['radarname'],ang_data)

        simparams = dictlist[1]
    elif ftype=='.yml':
        yamlFile = file(str(fname),'r')
        dictlist = yaml.load(yamlFile)
        yamlFile.close()
        angles = getangles(dictlist[0]['beamlist'],dictlist[0]['radarname'])
        beamlist = [float(i) for i in dictlist[0]['beamlist']]
        ang_data = sp.array([[iout[0],iout[1]] for iout in angles])
        sensdict = sensconst.getConst(dictlist[0]['radarname'],ang_data)

        simparams = dictlist[1]
    if ftype=='.ini':

        config = ConfigParser()
        config.read(str(fname))
        beamlist = config.get('section 1','beamlist').split()
        beamlist = [float(i) for i in beamlist]
        angles = getangles(beamlist,config.get('section 1','radarname'))
        ang_data = sp.array([[iout[0],iout[1]] for iout in angles])

        sensdict = sensconst.getConst(config.get('section 1','radarname'),ang_data)

        simparams = {}
        for param in config.options('simparams'):
            rname  = config.get('simparamsnames',param)
            simparams[rname] = config.get('simparams',param)

        for param in simparams:
            if simparams[param]=="<type 'numpy.complex128'>":
                simparams[param]=sp.complex128
            elif simparams[param]=="<type 'numpy.complex64'>":
                simparams[param]=sp.complex64
            elif param=='outangles':
                outlist1 = simparams[param].split(',')
                simparams[param]=[[ float(j) for j in  i.lstrip().rstrip().split(' ')] for i in outlist1]
            else:
                simparams[param]=simparams[param].split(" ")
                if len(simparams[param])==1:
                    simparams[param]=simparams[param][0]
                    try:
                        simparams[param]=float(simparams[param])
                    except:
                        pass
                else:
                    for a in range(len(simparams[param])):
                        try:
                            simparams[param][a]=float(simparams[param][a])
                        except:
                            pass

    if 't_s' in simparams.keys():
        sensdict['t_s'] = simparams['t_s']
        sensdict['fs'] =1.0/simparams['t_s']
        sensdict['BandWidth'] = sensdict['fs']*0.5 #used for the noise bandwidth

    for ikey in sensdict.keys():
        if ikey  in simparams.keys():
            sensdict[ikey]=simparams[ikey]
#            del simparams[ikey]
    simparams['Beamlist']=beamlist
    time_lim = simparams['TimeLim']
    (pulse,simparams['Pulselength'])  = makepulse(simparams['Pulsetype'],simparams['Pulselength'],sensdict['t_s'])
    simparams['Pulse'] = pulse
    simparams['amb_dict'] = make_amb(sensdict['fs'],int(simparams['ambupsamp']),
        sensdict['t_s']*len(pulse),pulse,simparams['numpoints'])
    simparams['angles']=angles
    rng_lims = simparams['RangeLims']
    rng_gates = sp.arange(rng_lims[0],rng_lims[1],sensdict['t_s']*v_C_0*1e-3/2.)
    simparams['Timevec']=sp.arange(0,time_lim,simparams['Fitinter'])
    simparams['Rangegates']=rng_gates
    if not 'lagtype' in simparams.keys():
        simparams['lagtype']='centered'
    sumrule = makesumrule(simparams['Pulsetype'],simparams['Pulselength'],sensdict['t_s'],simparams['lagtype'])
    simparams['SUMRULE'] = sumrule
    minrg = -sumrule[0].min()
    maxrg = len(rng_gates)-sumrule[1].max()

    simparams['Rangegatesfinal'] = sp.array([ sp.mean(rng_gates[irng+sumrule[0,0]:irng+sumrule[1,0]+1]) for irng in range(minrg,maxrg)])


    if ('startfile' in simparams.keys() and len(simparams['startfile']) >0 )and simparams['Pulsetype'].lower()!='barker':
        relpath = Path(simparams['startfile'])
        if not relpath.is_absolute():
            fullfilepath = curpath.joinpath(simparams['startfile'])
            simparams['startfile'] = str(fullfilepath)
            
        else:
            fullfilepath=simparams['startfile']
        stext = Path(fullfilepath).is_file()
        if not stext:
            warnings.warn('The given start file does not exist',UserWarning)

    elif simparams['Pulsetype'].lower()!='barker':
        warnings.warn('No start file given',UserWarning)
    return(sensdict,simparams)
Ejemplo n.º 32
0
def readconfigfile(fname):
    """
        This funciton will read in the pickle files that are used for configuration.

        Args:
            fname - A string containing the file name and location.

        Returns:
            sensdict - A dictionary that holds the sensor parameters.
            simparams - A dictionary that holds the simulation parameters.
    """

    fname = Path(fname).expanduser()
    if not fname.is_file():
        raise IOError('{} not found'.format(fname))

    ftype = fname.suffix
    curpath = fname.parent
    if ftype == '.pickle':
        with fname.open('r') as f:
            dictlist = pickle.load(f)

        angles = getangles(dictlist[0]['beamlist'], dictlist[0]['radarname'])
        beamlist = [float(i) for i in dictlist[0]['beamlist']]
        ang_data = sp.array([[iout[0], iout[1]] for iout in angles])
        sensdict = sensconst.getConst(dictlist[0]['radarname'], ang_data)

        simparams = dictlist[1]
    elif ftype == '.yml':
        with fname.open('r') as f:
            dictlist = yaml.load(f)

        angles = getangles(dictlist[0]['beamlist'], dictlist[0]['radarname'])
        beamlist = [float(i) for i in dictlist[0]['beamlist']]
        ang_data = sp.array([[iout[0], iout[1]] for iout in angles])
        sensdict = sensconst.getConst(dictlist[0]['radarname'], ang_data)

        simparams = dictlist[1]
    if ftype == '.ini':

        config = ConfigParser()
        config.read(str(fname))
        beamlist = config.get('section 1', 'beamlist').split()
        beamlist = [float(i) for i in beamlist]
        angles = getangles(beamlist, config.get('section 1', 'radarname'))
        ang_data = sp.array([[iout[0], iout[1]] for iout in angles])

        sensdict = sensconst.getConst(config.get('section 1', 'radarname'),
                                      ang_data)

        simparams = {}
        for param in config.options('simparams'):
            rname = config.get('simparamsnames', param)
            simparams[rname] = config.get('simparams', param)

        for param in simparams:
            if simparams[param] == "<type 'numpy.complex128'>":
                simparams[param] = sp.complex128
            elif simparams[param] == "<type 'numpy.complex64'>":
                simparams[param] = sp.complex64
            elif param == 'outangles':
                outlist1 = simparams[param].split(',')
                simparams[param] = [[
                    float(j) for j in i.lstrip().rstrip().split(' ')
                ] for i in outlist1]
            else:
                simparams[param] = simparams[param].split(" ")
                if len(simparams[param]) == 1:
                    simparams[param] = simparams[param][0]
                    try:
                        simparams[param] = float(simparams[param])
                    except:
                        pass
                else:
                    for a in range(len(simparams[param])):
                        try:
                            simparams[param][a] = float(simparams[param][a])
                        except:
                            pass
    if 't_s' in simparams.keys():
        sensdict['t_s'] = simparams['t_s']
        sensdict['fs'] = 1.0 / simparams['t_s']
        sensdict[
            'BandWidth'] = sensdict['fs'] * 0.5  #used for the noise bandwidth

    for ikey in sensdict.keys():
        if ikey in simparams.keys():
            sensdict[ikey] = simparams[ikey]
#            del simparams[ikey]
    simparams['Beamlist'] = beamlist
    time_lim = simparams['TimeLim']
    (pulse, simparams['Pulselength']) = makepulse(simparams['Pulsetype'],
                                                  simparams['Pulselength'],
                                                  sensdict['t_s'])
    simparams['Pulse'] = pulse
    simparams['amb_dict'] = make_amb(sensdict['fs'],
                                     int(simparams['ambupsamp']),
                                     sensdict['t_s'] * len(pulse), pulse,
                                     simparams['numpoints'])
    simparams['angles'] = angles
    rng_lims = simparams['RangeLims']
    rng_gates = sp.arange(rng_lims[0], rng_lims[1],
                          sensdict['t_s'] * v_C_0 * 1e-3 / 2.)
    simparams['Timevec'] = sp.arange(0, time_lim, simparams['Fitinter'])
    simparams['Rangegates'] = rng_gates
    if not 'lagtype' in simparams.keys():
        simparams['lagtype'] = 'centered'
    sumrule = makesumrule(simparams['Pulsetype'], simparams['Pulselength'],
                          sensdict['t_s'], simparams['lagtype'])
    simparams['SUMRULE'] = sumrule
    minrg = -sumrule[0].min()
    maxrg = len(rng_gates) - sumrule[1].max()

    simparams['Rangegatesfinal'] = sp.array([
        sp.mean(rng_gates[irng + sumrule[0, 0]:irng + sumrule[1, 0] + 1])
        for irng in range(minrg, maxrg)
    ])

    if ('startfile' in simparams.keys() and len(simparams['startfile']) > 0
        ) and simparams['Pulsetype'].lower() != 'barker':
        relpath = Path(simparams['startfile'])
        if not relpath.is_absolute():
            # Some times the ini files may split the strings of the start file because of white space in file names.
            if type(simparams['startfile']) is list:
                startfile = " ".join(simparams['startfile'])
            else:
                startfile = simparams['startfile']

            fullfilepath = curpath.joinpath(startfile)
            simparams['startfile'] = str(fullfilepath)

        else:
            fullfilepath = simparams['startfile']
        stext = Path(fullfilepath).is_file()
        if not stext:
            warnings.warn('The given start file does not exist', UserWarning)

    elif simparams['Pulsetype'].lower() != 'barker':
        warnings.warn('No start file given', UserWarning)

    return (sensdict, simparams)
Ejemplo n.º 33
0
class CKANConfigLoader(object):
    def __init__(self, filename):
        self.config_file = filename.strip()
        self.config = dict()
        self.parser = ConfigParser()
        self.section = u'app:main'
        defaults = {u'__file__': os.path.abspath(self.config_file)}
        self._update_defaults(defaults)
        self._create_config_object()

    def _update_defaults(self, new_defaults):
        for key, value in new_defaults.items():
            self.parser._defaults[key] = value

    def _read_config_file(self, filename):
        defaults = {u'here': os.path.dirname(os.path.abspath(filename))}
        self._update_defaults(defaults)
        self.parser.read(filename)

    def _update_config(self):
        options = self.parser.options(self.section)
        for option in options:
            if option not in self.config or option in self.parser.defaults():
                value = self.parser.get(self.section, option)
                self.config[option] = value
                if option in self.parser.defaults():
                    self.config[u'global_conf'][option] = value

    def _create_config_object(self):
        use_config_path = self.config_file
        self._read_config_file(use_config_path)

        # # The global_config key is to keep compatibility with Pylons.
        # # It can be safely removed when the Flask migration is completed.
        self.config[u'global_conf'] = self.parser.defaults().copy()

        self._update_config()

        loaded_files = [use_config_path]

        while True:
            schema, path = self.parser.get(self.section, u'use').split(u':')
            if schema == u'config':
                use_config_path = os.path.join(
                    os.path.dirname(os.path.abspath(use_config_path)), path)
                # Avoid circular references
                if use_config_path in loaded_files:
                    chain = ' -> '.join(loaded_files + [use_config_path])
                    raise CkanConfigurationException(
                        'Circular dependency located in '
                        f'the configuration chain: {chain}'
                    )
                loaded_files.append(use_config_path)

                self._read_config_file(use_config_path)
                self._update_config()
            else:
                break
        log.debug(
            u'Loaded configuration from the following files: %s',
            loaded_files
        )

    def get_config(self):
        return self.config.copy()
Ejemplo n.º 34
0
class InstrumentConfig(object):
    basename = 'epics_insts'
    sections = ('dbs',)

    def __init__(self, name=None):
        self.conffile = name
        if name is None:
            self.conffile = os.path.join(get_appdir(self.basename),
                                         'config.ini')
        self.conf = {}
        self.cp =  ConfigParser()
        self.read()

    def read(self):
        for s in self.sections:
            self.conf[s] = {}
        if not os.path.exists(self.conffile):
            self.cp.readfp(StringIO(default_config))
        self.cp.read(self.conffile)

        for sect in self.sections:
            if self.cp.has_section(sect):
                for opt in self.cp.options(sect):
                    if opt is None:
                        continue
                    self.conf[sect][opt] = self.cp.get(sect, opt)

    def write(self, fname=None):
        if fname is None:
            fname = self.conffile
        out = []
        for sect in self.sections:
            out.append('[%s]\n' % sect)
            if sect == 'dbs':
                maxcount = 10
            if sect in self.conf:
                count = 0
                for key in sorted(self.conf[sect]):
                    val = self.conf[sect][key]
                    if count < maxcount:
                        out.append('%s = %s\n' % (key, val))
                        count += 1

        fout = open(fname, 'w')
        fout.writelines(out)
        fout.close()

    def get_dblist(self):
        dblist = [self.conf['dbs'].get('most_recent', '')]
        for key in sorted(self.conf['dbs'].keys()):
            val = self.conf['dbs'][key]
            if val is None: continue
            val = val.strip()
            if (key != 'most_recent' and len(val) > 0):
                dblist.append(val)
        return dblist

    def set_current_db(self, dbname):
        dblist = self.get_dblist()
        idx = 1
        newlist = [dbname]
        for name in dblist:
            if len(name.strip()) > 0 and name not in newlist:
                key = 'v%2.2i' % idx
                self.conf['dbs'][key] = name
                idx += 1

        self.conf['dbs']['most_recent'] = dbname
Ejemplo n.º 35
0
class InstrumentConfig(object):
    basename = 'epics_insts'
    sections = ('dbs', )

    def __init__(self, name=None):
        self.conffile = name
        if name is None:
            self.conffile = os.path.join(get_appdir(self.basename),
                                         'config.ini')
        self.conf = {}
        self.cp = ConfigParser()
        self.read()

    def read(self):
        for s in self.sections:
            self.conf[s] = {}
        if not os.path.exists(self.conffile):
            self.cp.readfp(StringIO(default_config))
        self.cp.read(self.conffile)

        for sect in self.sections:
            if self.cp.has_section(sect):
                for opt in self.cp.options(sect):
                    if opt is None:
                        continue
                    self.conf[sect][opt] = self.cp.get(sect, opt)

    def write(self, fname=None):
        if fname is None:
            fname = self.conffile
        out = []
        for sect in self.sections:
            out.append('[%s]\n' % sect)
            if sect == 'dbs':
                maxcount = 10
            if sect in self.conf:
                count = 0
                for key in sorted(self.conf[sect]):
                    val = self.conf[sect][key]
                    if count < maxcount:
                        out.append('%s = %s\n' % (key, val))
                        count += 1

        fout = open(fname, 'w')
        fout.writelines(out)
        fout.close()

    def get_dblist(self):
        dblist = [self.conf['dbs'].get('most_recent', '')]
        for key in sorted(self.conf['dbs'].keys()):
            val = self.conf['dbs'][key]
            if val is None: continue
            val = val.strip()
            if (key != 'most_recent' and len(val) > 0):
                dblist.append(val)
        return dblist

    def set_current_db(self, dbname):
        dblist = self.get_dblist()
        idx = 1
        newlist = [dbname]
        for name in dblist:
            if len(name.strip()) > 0 and name not in newlist:
                key = 'v%2.2i' % idx
                self.conf['dbs'][key] = name
                idx += 1

        self.conf['dbs']['most_recent'] = dbname
Ejemplo n.º 36
0
class StationConfig(object):
    #  sections            name      ordered?
    __sects = OrderedDict((
        ('setup', False),
        ('server', False),
        ('positioners', True),
        ('detectors', True),
        ('counters', True),
        ('xafs', False),
        ('slewscan', False),
        ('slewscan_positioners', True),
        ('extrapvs', True),
    ))

    def __init__(self, filename=None, text=None):
        for s in self.__sects:
            setattr(self, s, {})

        self._cp = ConfigParser()
        if filename is None:
            filename = DEF_CONFFILE
        self.filename = filename
        # print 'StationConfig ', filename, os.path.abspath(filename)
        # print os.path.exists(filename),   os.path.isfile(filename)
        if (os.path.exists(filename) and os.path.isfile(filename)):
            ret = self._cp.read(filename)
            if len(ret) == 0:
                time.sleep(0.1)
                self._cp.read(filename)
        else:
            self._cp.readfp(StringIO(DEFAULT_CONF))
        self.Read()

    def Read(self, filename=None):
        "read config"
        if (filename is not None
                and (os.path.exists(filename) and os.path.isfile(filename))):
            ret = self._cp.read(filename)
            if len(ret) == 0:
                time.sleep(0.1)
                self._cp.read(filename)
            self.filename = filename

        # process sections
        for sect, ordered in self.__sects.items():
            if not self._cp.has_section(sect):
                continue
            thissect = {}
            opt_keys = self._cp.options(sect)
            if ordered:
                thissect = OrderedDict()
                opt_keys.sort()
            for opt in opt_keys:
                val = self._cp.get(sect, opt)
                if '||' in val:
                    words = [i.strip() for i in val.split('||')]
                    label = words.pop(0)
                    if len(words) == 1:
                        words = words[0]
                    else:
                        tmp = []
                        for w in words:
                            if ',' in w and '=' in w:
                                tmp.append(opts2dict(w))
                            else:
                                tmp.append(w)
                        words = tuple(tmp)
                    thissect[label] = words
                else:
                    thissect[opt] = val
                setattr(self, sect, thissect)
        for key, val in self.positioners.items():
            fi = []
            if isinstance(val, (list, tuple)):
                for v in val:
                    if '.' not in v: v = '%s.VAL' % v
                    fi.append(v)
            else:
                if '.' not in val:
                    val = '%s.VAL' % val
                fi = [val, val]
            self.positioners[key] = tuple(fi)

    def Save(self, fname=None):
        "save config file"
        if fname is not None:
            self.filename = fname
        if fname is None:
            fname = self.filename = DEF_CONFFILE
            path, fn = os.path.split(fname)
            if not os.path.exists(path):
                os.makedirs(path, mode=0o755)

        out = ['### %s: %s' % (TITLE, get_timestamp())]
        for sect, ordered in self.__sects.items():
            out.append('#------------------------------#\n[%s]' % sect)
            if sect in ('setup', 'server', 'slewscan', 'xafs'):
                for name, val in self.setup.items():
                    out.append("%s = %s" % (name, val))
            elif sect == 'detectors':
                out.append(DET_LEGEND)
                idx = 0
                for key, val in getattr(self, sect).items():
                    idx = idx + 1
                    if isinstance(val, (list, tuple)):
                        wout = []
                        for w in val:
                            if isinstance(w, dict):
                                wout.append(dict2opts(w))
                            elif isinstance(w, (str, unicode)):
                                wout.append(w)
                            else:
                                wout.append(repr(w))
                        val = ' || '.join(wout)
                    out.append("%i = %s || %s" % (idx, key, val))

            else:
                leg = LEGEND
                out.append(LEGEND)
                idx = 0
                for key, val in getattr(self, sect).items():
                    idx = idx + 1
                    if isinstance(val, (list, tuple)):
                        val = ' || '.join(val)
                    out.append("%i = %s || %s" % (idx, key, val))
        out.append('#-----------------------#')
        f = open(fname, 'w')
        f.write('\n'.join(out))
        f.close()

    def sections(self):
        return self.__sects.keys()