Esempio n. 1
0
def residual(params, mod_pars, photo_data, rv_data, ncores, *args):
    # mod_pars[1] = params['epoch'].value
    params = utilfuncs.get_lmfit_parameters(mod_pars, params)

    mod_flux, mod_rv = utilfuncs.model(mod_pars, params, photo_data[0], rv_data[0], ncores)
    weighted = ((mod_flux - photo_data[1]) / photo_data[2])

    return np.append(weighted, ((mod_rv - rv_data[1]) / rv_data[2]))
Esempio n. 2
0
def lnlike(mod_pars, params, photo_data, rv_data):
    # lnf = np.log(1.0e-10)  # Natural log of the underestimation fraction
    # inv_sigma2 = 1.0 / (yerr ** 2 + model ** 2 * np.exp(2 * lnf))
    # return -0.5 * (np.sum((y - model) ** 2 * inv_sigma2 - np.log(inv_sigma2)))

    mod_flux, mod_rv = utilfuncs.model(mod_pars, params, photo_data[0], rv_data[0])
    flnl = np.sum((-0.5 * ((mod_flux - photo_data[1]) / photo_data[2]) ** 2))
    rvlnl = np.sum((-0.5 * ((mod_rv - rv_data[1]) / rv_data[2])**2))

    return flnl + rvlnl
Esempio n. 3
0
def lnlike(cube, ndim, nparams):
    theta = np.array([cube[i] for i in range(ndim)])

    params = utilfuncs.split_parameters(theta, mod_pars[0])

    mod_flux, mod_rv = utilfuncs.model(mod_pars, params, photo_data[0], rv_data[0], ncores)

    flnl = np.sum((-0.5 * ((mod_flux - photo_data[1]) / photo_data[2]) ** 2))
    rvlnl = np.sum((-0.5 * ((mod_rv - rv_data[1]) / rv_data[2])**2))

    per_iteration(mod_pars, theta, flnl, mod_flux)

    return flnl + rvlnl
Esempio n. 4
0
def generate(lmod_pars, lparams, lphoto_data, lrv_data, lncores, lfname):
    global mod_pars, params, photo_data, rv_data, ncores, fname
    mod_pars, params, photo_data, rv_data, ncores, fname = \
        lmod_pars, lparams, lphoto_data, lrv_data, lncores, lfname

    # number of dimensions our problem has
    parameters = ["{0}".format(i) for i in range(mod_pars[0] * 5 + (mod_pars[0] - 1) * 6)]
    nparams = len(parameters)

    # make sure the output directories exist
    if not os.path.exists("./output/{0}/multinest".format(fname)):
        os.makedirs(os.path.join("./", "output", "{0}".format(fname), "multinest"))

    if not os.path.exists("./output/{0}/plots".format(fname)):
        os.makedirs(os.path.join("./", "output", "{0}".format(fname), "plots"))

    if not os.path.exists("chains"): os.makedirs("chains")
    # we want to see some output while it is running
    progress_plot = pymultinest.ProgressPlotter(n_params=nparams,
                                                outputfiles_basename='output/{0}/multinest/'.format(fname))
    progress_plot.start()
    # progress_print = pymultinest.ProgressPrinter(n_params=nparams, outputfiles_basename='output/{0}/multinest/'.format(fname))
    # progress_print.start()

    # run MultiNest
    pymultinest.run(lnlike, lnprior, nparams, outputfiles_basename=u'./output/{0}/multinest/'.format(fname),
                    resume=True, verbose=True,
                    sampling_efficiency='parameter', n_live_points=1000)

    # run has completed
    progress_plot.stop()
    # progress_print.stop()
    json.dump(parameters, open('./output/{0}/multinest/params.json'.format(fname), 'w'))  # save parameter names

    # plot the distribution of a posteriori possible models
    plt.figure()
    plt.plot(photo_data[0], photo_data[1], '+ ', color='red', label='data')

    a = pymultinest.Analyzer(outputfiles_basename="./output/{0}/reports/".format(fname), n_params=nparams)

    for theta in a.get_equal_weighted_posterior()[::100, :-1]:
        params = utilfuncs.split_parameters(theta, mod_pars[0])

        mod_flux, mod_rv = utilfuncs.model(mod_pars, params, photo_data[0], rv_data[0])

        plt.plot(photo_data[0], mod_flux, '-', color='blue', alpha=0.3, label='data')

    utilfuncs.report_as_input(params, fname)

    plt.savefig('./output/{0}/plots/posterior.pdf'.format(fname))
    plt.close()
Esempio n. 5
0
def plot_model(mod_pars, body_pars, photo_data, rv_data):
    mod_flux, mod_rv = utilfuncs.model(mod_pars, body_pars, photo_data[0], photo_data[0])
    # print("Reduced chi-square:",
    #       np.sum(((photo_data[1] - mod_flux) / photo_data[2]) ** 2) /
    #       (photo_data[2].size - 1 - (mod_pars[0] * 5 + (mod_pars[0] - 1) * 6)))
    #
    # inv_sigma2 = 1.0 / (photo_data[2] ** 2 + mod_flux ** 2 * np.exp(2.0 * np.log(1.0e-10)))
    # print("Custom optimized value:",
    #       -0.5 * (np.sum((photo_data[1] - mod_flux) ** 2 * inv_sigma2 - np.log(inv_sigma2))))

    pylab.plot(photo_data[0], photo_data[1], 'k+')
    pylab.plot(photo_data[0], mod_flux, 'r')
    pylab.show()

    pylab.plot(rv_data[0], rv_data[1], 'o')
    pylab.plot(photo_data[0], mod_rv, 'r')
    pylab.show()