Esempio n. 1
0
def driver(request):

    from pyRSD.rsd import GalaxySpectrum

    # add the PYRSD_DATA env var
    os.environ['PYRSD_DATA'] = data_dir

    # inititalize the model
    config                   = {}
    config['z']              = 0.55
    config['cosmo_filename'] = 'runPB.ini'
    config['kmin']           = 1e-3
    config['kmax']           = 0.6
    config['interpolate']    = True
    m = GalaxySpectrum(**config)

    # load the model
    with cache_manager(m, "runPB_galaxy.npy") as model:
        pass

    # initialize the driver
    path = os.path.join(data_dir, 'examples', 'params.dat')
    driver = FittingDriver(path, init_model=False)
    driver.model = model

    # set fiducial
    driver.set_fiducial()

    return driver
Esempio n. 2
0
def driver(request):

    from pyRSD.rsd import QuasarSpectrum

    # add the PYRSD_DATA env var
    os.environ['PYRSD_DATA'] = data_dir

    # inititalize the model
    config = {}
    config['z'] = 0.55
    config['cosmo_filename'] = 'runPB.ini'
    config['kmin'] = 1e-3
    config['kmax'] = 0.6
    m = QuasarSpectrum(**config)

    # initialize the driver
    path = os.path.join(data_dir, 'examples', 'params_qso.dat')
    driver = FittingDriver(path, init_model=False)
    driver.model = m

    # set fiducial
    driver.set_fiducial()

    return driver
Esempio n. 3
0
    def initialize_algorithm(self):
        """
        Initialize the driver that runs the desired algorithm.
        """
        # ``analysis`` mode
        if self.mode == 'analyze':
            from pyRSD.rsdfit import analysis
            kws = {k: getattr(self, k) for k in self._config}
            driver = analysis.AnalysisDriver(**kws)

        # ``mcmc`` or ``nlopt`` mode
        elif self.mode in ['mcmc', 'nlopt']:
            params_file = os.path.join(self.folder, params_filename)

            # initialize from an existing directory, with existing parameter file
            if os.path.isdir(
                    self.folder
            ) and self.params == params_file and os.path.exists(params_file):
                driver = FittingDriver.from_directory(self.folder,
                                                      model_file=self.model)

            # initalize a new object from scratch
            else:
                init_model = self.model is None
                driver = FittingDriver(self.params, init_model=init_model)

                # initialize and save a model, if we need to
                if not init_model:
                    driver.model = self.model
                else:
                    if self.comm.rank == 0 and not self.no_save_model:
                        model_dir = driver.params.get('model_dir', self.folder)
                        driver.theory.model.to_npy(
                            os.path.join(model_dir, model_filename))

            # only one rank needs to write out
            if self.comm.rank == 0:
                driver.to_file(os.path.join(self.folder, params_filename))

            # have everyone wait
            self.comm.barrier()

            # store the command line arguments
            driver.params.add('solver_type',
                              value=self.mode)  # either nlopt or mcmc
            driver.params.add('iterations', value=self.iterations)
            if self.mode == 'mcmc':
                driver.params.add('walkers', value=self.walkers)

            # set max iterations for LBFGS
            if self.mode == 'nlopt':
                options = driver.params['lbfgs_options'].value
                options['max_iter'] = self.iterations

            # check if we need to find previous result
            init_from = driver.params.get('init_from', None)
            if init_from == 'result':
                start_from = driver.params.get('start_from', None)
                if start_from is None:
                    start_from = find_init_result(self.folder)
                elif os.path.isdir(start_from):
                    start_from = find_init_result(start_from)

                if not os.path.exists(start_from):
                    raise rsd_io.ConfigurationError(
                        "`start_from` parameter `%s` is not a valid path" %
                        start_from)
                driver.params.add('start_from', value=start_from)

        # ``restart`` mode
        elif self.mode == 'restart':

            # load the driver from param file, optionally reading model from file
            driver = FittingDriver.from_directory(self.folder,
                                                  model_file=self.model)

            # set driver values from command line
            if self.burnin is not None:
                driver.params.add('burnin', value=self.burnin)

        self.algorithm = driver