Beispiel #1
0
    def init_hierarchicals(self, problem_config):
        """
        Initialize hierarchical parameters.
        Ramp estimation in azimuth and range direction of a radar scene.
        """
        hierarchicals = problem_config.hierarchicals
        if self.config.fit_plane:
            logger.info('Estimating ramp for each dataset...')
            for data in self.datasets:
                if isinstance(data, heart.DiffIFG):
                    for hierarchical_name in data.plane_names():

                        hierarchical_keys = utility.list2string(
                            hierarchicals.keys())
                        if not self.config.fit_plane and \
                                hierarchical_name in hierarchicals:
                            raise ConfigInconsistentError(
                                'Plane removal disabled, but they are defined'
                                ' in the problem configuration'
                                ' (hierarchicals)! \n'
                                ' Got: %s' % hierarchical_keys)

                        if self.config.fit_plane and \
                                hierarchical_name not in hierarchicals:
                            raise ConfigInconsistentError(
                                'Plane corrections enabled, but they are'
                                ' not defined in the problem configuration!'
                                ' (hierarchicals). Looking for: %s \n'
                                ' Got: %s' %
                                (hierarchical_name, hierarchical_keys))

                        param = hierarchicals[hierarchical_name]
                        if not num.array_equal(param.lower, param.upper):
                            kwargs = dict(name=param.name,
                                          shape=param.dimension,
                                          lower=param.lower,
                                          upper=param.upper,
                                          testval=param.testvalue,
                                          transform=None,
                                          dtype=tconfig.floatX)
                            try:
                                self.hierarchicals[
                                    hierarchical_name] = Uniform(**kwargs)
                            except TypeError:
                                kwargs.pop('name')
                                self.hierarchicals[hierarchical_name] = \
                                    Uniform.dist(**kwargs)
                        else:
                            logger.info(
                                'not solving for %s, got fixed at %s' %
                                (param.name,
                                 utility.list2string(param.lower.flatten())))
                            self.hierarchicals[hierarchical_name] = param.lower
                else:
                    logger.info('No plane for GNSS data.')

        logger.info('Initialized %i hierarchical parameters '
                    '(ramps).' % len(self.hierarchicals))
Beispiel #2
0
    def get_random_variables(self):
        """
        Evaluate problem setup and return random variables dictionary.
        Has to be executed in a "with model context"!

        Returns
        -------
        rvs : dict
            variable random variables
        fixed_params : dict
            fixed random parameters
        """
        pc = self.config.problem_config

        logger.debug('Optimization for %i sources', pc.n_sources)

        rvs = dict()
        fixed_params = dict()
        for param in pc.priors.values():
            if not num.array_equal(param.lower, param.upper):

                shape = bconfig.get_parameter_shape(param, pc)

                kwargs = dict(
                    name=param.name,
                    shape=shape,
                    lower=param.lower,
                    upper=param.upper,
                    testval=param.testvalue,
                    transform=None,
                    dtype=tconfig.floatX)

                try:
                    rvs[param.name] = Uniform(**kwargs)

                except TypeError:
                    kwargs.pop('name')
                    rvs[param.name] = Uniform.dist(**kwargs)

            else:
                logger.info(
                    'not solving for %s, got fixed at %s' % (
                        param.name,
                        list2string(param.lower.flatten())))
                fixed_params[param.name] = param.lower

        return rvs, fixed_params
Beispiel #3
0
    def init_hierarchicals(self, problem_config):
        """
        Initialize hierarchical parameters.
        Ramp estimation in azimuth and range direction of a radar scene.
        """
        hierarchicals = problem_config.hierarchicals
        if self.config.fit_plane:
            logger.info('Estimating ramp for each dataset...')
            for data in self.datasets:
                hierarchical_name = data.name + '_ramp'
                if not self.config.fit_plane and \
                        hierarchical_name in hierarchicals:
                    raise ConfigInconsistentError(
                        'Plane removal disabled, but they are defined'
                        ' in the problem configuration (hierarchicals)!')

                if isinstance(data, heart.DiffIFG):

                    if self.config.fit_plane and \
                            hierarchical_name not in hierarchicals:
                        raise ConfigInconsistentError(
                            'Plane corrections enabled, but they are'
                            ' not defined in the problem configuration!'
                            ' (hierarchicals)')

                    param = hierarchicals[hierarchical_name]
                    kwargs = dict(name=param.name,
                                  shape=param.dimension,
                                  lower=param.lower,
                                  upper=param.upper,
                                  testval=param.testvalue,
                                  transform=None,
                                  dtype=tconfig.floatX)
                    try:
                        self.hierarchicals[data.name] = Uniform(**kwargs)

                    except TypeError:
                        kwargs.pop('name')
                        self.hierarchicals[data.name] = \
                            Uniform.dist(**kwargs)

        logger.info('Initialized %i hierarchical parameters '
                    '(ramps).' % len(self.hierarchicals.keys()))
Beispiel #4
0
    def init_hierarchicals(self, problem_config):
        """
        Initialise random variables for temporal station corrections.
        """
        if not self.config.station_corrections and \
                self.correction_name in problem_config.hierarchicals:
            raise ConfigInconsistentError(
                'Station corrections disabled, but they are defined'
                ' in the problem configuration!')

        if self.config.station_corrections and \
                self.correction_name not in problem_config.hierarchicals:
            raise ConfigInconsistentError(
                'Station corrections enabled, but they are not defined'
                ' in the problem configuration!')

        if self.correction_name in problem_config.hierarchicals:
            logger.info(
                'Estimating time shift for each station and waveform map...')
            for wmap in self.wavemaps:
                nhierarchs = len(wmap.get_station_names())

                logger.info('For %s with %i shifts' %
                            (wmap.time_shifts_id, nhierarchs))
                param = problem_config.hierarchicals[self.correction_name]
                kwargs = dict(name=wmap.time_shifts_id,
                              shape=nhierarchs,
                              lower=num.repeat(param.lower, nhierarchs),
                              upper=num.repeat(param.upper, nhierarchs),
                              testval=num.repeat(param.testvalue, nhierarchs),
                              transform=None,
                              dtype=tconfig.floatX)

                try:
                    station_corrs_rv = Uniform(**kwargs)

                except TypeError:
                    kwargs.pop('name')
                    station_corrs_rv = Uniform.dist(**kwargs)

                self.hierarchicals[wmap.time_shifts_id] = station_corrs_rv
        else:
            nhierarchs = 0
Beispiel #5
0
    def init_hyperparams(self):
        """
        Evaluate problem setup and return hyperparameter dictionary.
        """
        pc = self.config.problem_config
        hyperparameters = copy.deepcopy(pc.hyperparameters)

        hyperparams = {}
        n_hyp = 0
        modelinit = True
        self._hypernames = []
        for datatype, composite in self.composites.items():
            hypernames = composite.get_hypernames()

            for hp_name in hypernames:
                if hp_name in hyperparameters.keys():
                    hyperpar = hyperparameters.pop(hp_name)
                    if composite.config:  # only data composites
                        if composite.config.dataset_specific_residual_noise_estimation:
                            if datatype == 'seismic':
                                wmap = composite.hyper2wavemap(hp_name)
                                ndata = wmap.hypersize
                            else:
                                ndata = len(composite.get_all_station_names())
                        else:
                            ndata = 1
                    else:
                        ndata = 1
                else:
                    raise InconsistentNumberHyperparametersError(
                        'Datasets and -types require additional '
                        ' hyperparameter(s): %s!' % hp_name)

                if not num.array_equal(hyperpar.lower, hyperpar.upper):
                    dimension = hyperpar.dimension * ndata

                    kwargs = dict(name=hyperpar.name,
                                  shape=dimension,
                                  lower=num.repeat(hyperpar.lower, ndata),
                                  upper=num.repeat(hyperpar.upper, ndata),
                                  testval=num.repeat(hyperpar.testvalue,
                                                     ndata),
                                  dtype=tconfig.floatX,
                                  transform=None)

                    try:
                        hyperparams[hp_name] = Uniform(**kwargs)

                    except TypeError:
                        kwargs.pop('name')
                        hyperparams[hp_name] = Uniform.dist(**kwargs)
                        modelinit = False

                    n_hyp += dimension
                    self._hypernames.append(hyperpar.name)
                else:
                    logger.info(
                        'not solving for %s, got fixed at %s' %
                        (hyperpar.name, list2string(hyperpar.lower.flatten())))
                    hyperparams[hyperpar.name] = hyperpar.lower

        if len(hyperparameters) > 0:
            raise InconsistentNumberHyperparametersError(
                'There are hyperparameters in config file, which are not'
                ' covered by datasets/datatypes.')

        if modelinit:
            logger.info('Optimization for %i hyperparameters in total!', n_hyp)

        self.hyperparams = hyperparams
Beispiel #6
0
    def init_hierarchicals(self, problem_config):
        """
        Initialise random variables for temporal station corrections.
        """
        hierarchicals = problem_config.hierarchicals
        self._hierarchicalnames = []
        if not self.config.station_corrections and \
                self.correction_name in hierarchicals:
            raise ConfigInconsistentError(
                'Station corrections disabled, but they are defined'
                ' in the problem configuration!')

        if self.config.station_corrections and \
                self.correction_name not in hierarchicals:
            raise ConfigInconsistentError(
                'Station corrections enabled, but they are not defined'
                ' in the problem configuration!')

        if self.correction_name in hierarchicals:
            logger.info(
                'Estimating time shift for each station and waveform map...')
            for wmap in self.wavemaps:
                hierarchical_name = wmap.time_shifts_id
                nhierarchs = len(wmap.get_station_names())

                logger.info('For %s with %i shifts' %
                            (hierarchical_name, nhierarchs))

                if hierarchical_name in hierarchicals:
                    logger.info('Using wavemap specific imported:'
                                ' %s ' % hierarchical_name)
                    param = hierarchicals[hierarchical_name]
                else:
                    logger.info('Using global %s' % self.correction_name)
                    param = copy.deepcopy(
                        problem_config.hierarchicals[self.correction_name])
                    param.lower = num.repeat(param.lower, nhierarchs)
                    param.upper = num.repeat(param.upper, nhierarchs)
                    param.testvalue = num.repeat(param.testvalue, nhierarchs)

                if hierarchical_name not in self.hierarchicals:
                    if not num.array_equal(param.lower, param.upper):
                        kwargs = dict(name=hierarchical_name,
                                      shape=param.dimension,
                                      lower=param.lower,
                                      upper=param.upper,
                                      testval=param.testvalue,
                                      transform=None,
                                      dtype=tconfig.floatX)

                        try:
                            self.hierarchicals[hierarchical_name] = Uniform(
                                **kwargs)
                        except TypeError:
                            kwargs.pop('name')
                            self.hierarchicals[hierarchical_name] = \
                                Uniform.dist(**kwargs)

                        self._hierarchicalnames.append(hierarchical_name)
                    else:
                        logger.info(
                            'not solving for %s, got fixed at %s' %
                            (param.name,
                             utility.list2string(param.lower.flatten())))
                        self.hierarchicals[hierarchical_name] = param.lower
Beispiel #7
0
    def init_hierarchicals(self, problem_config):
        """
        Initialize hierarchical parameters.
        Ramp estimation in azimuth and range direction of a radar scene and/or
        Rotation of GNSS stations around an Euler pole
        """
        hierarchicals = problem_config.hierarchicals
        self._hierarchicalnames = []
        for number, corr in enumerate(
                self.config.corrections_config.iter_corrections()):
            logger.info('Evaluating config for %s corrections '
                        'for datasets...' % corr.feature)
            if corr.enabled:
                for data in self.datasets:
                    if data.name in corr.dataset_names:
                        hierarchical_names = corr.get_hierarchical_names(
                            name=data.name, number=number)
                    else:
                        hierarchical_names = []

                    for hierarchical_name in hierarchical_names:
                        if not corr.enabled and hierarchical_name in hierarchicals:

                            raise ConfigInconsistentError(
                                '%s %s disabled, but they are defined'
                                ' in the problem configuration'
                                ' (hierarchicals)!' %
                                (corr.feature, data.name))

                        if corr.enabled and hierarchical_name not in hierarchicals \
                                and data.name in corr.dataset_names:
                            raise ConfigInconsistentError(
                                '%s %s corrections enabled, but they are'
                                ' not defined in the problem configuration!'
                                ' (hierarchicals)' % (corr.feature, data.name))

                        param = hierarchicals[hierarchical_name]
                        if hierarchical_name not in self.hierarchicals:
                            if not num.array_equal(param.lower, param.upper):
                                kwargs = dict(name=param.name,
                                              shape=param.dimension,
                                              lower=param.lower,
                                              upper=param.upper,
                                              testval=param.testvalue,
                                              transform=None,
                                              dtype=tconfig.floatX)

                                try:
                                    self.hierarchicals[
                                        hierarchical_name] = Uniform(**kwargs)
                                except TypeError:
                                    kwargs.pop('name')
                                    self.hierarchicals[hierarchical_name] = \
                                        Uniform.dist(**kwargs)

                                self._hierarchicalnames.append(
                                    hierarchical_name)
                            else:
                                logger.info(
                                    'not solving for %s, got fixed at %s' %
                                    (param.name,
                                     utility.list2string(
                                         param.lower.flatten())))
                                self.hierarchicals[
                                    hierarchical_name] = param.lower
            else:
                logger.info('No %s correction!' % corr.feature)

        logger.info('Initialized %i hierarchical parameters.' %
                    len(self.hierarchicals))