run_dir = rdir + '{}/'.format(ncomps)
        mkpath(run_dir)

        try:
            new_groups = dt.loadGroups(run_dir + 'final/final_groups.npy')
            new_meds = np.load(run_dir + 'final/final_med_errs.npy')
            new_z = np.load(run_dir + 'final/final_membership.npy')
            logging.info("Loaded from previous run")
        except IOError:
            new_groups, new_meds, new_z =\
                em.fit_many_comps(star_pars, ncomps, rdir=run_dir, pool=pool,
                                  bg_dens=BG_DENS,
                                  )
            new_groups = np.array(new_groups)

        new_lnlike = em.get_overall_lnlikelihood(star_pars, new_groups,
                                                 bg_ln_ols=bg_ln_ols)
        new_lnpost = em.get_overall_lnlikelihood(star_pars, new_groups,
                                                 bg_ln_ols=bg_ln_ols,
                                                 inc_posterior=True)
        new_BIC = em.calc_bic(star_pars, ncomps, new_lnlike)
    # handle multiple components
    else:
        logging.info("******************************************")
        logging.info("*********  FITTING {} COMPONENTS  *********".\
                     format(ncomps))
        logging.info("******************************************")
        best_fits = []
        lnlikes = []
        lnposts = []
        BICs = []
        all_meds = []
        # final_z_file = rdir + "final/final_membership.npy"
        final_z_file = rdir + "memberships.npy"
        final_groups_file = rdir + "final_groups.npy"
        bg_hists_file = rdir + "bg_hists.npy"
        data_file = ddir + assoc_name + "_xyzuvw.fits"
        star_pars = gf.loadXYZUVW(data_file)

        z = np.load(final_z_file)
        # import pdb; pdb.set_trace()
        groups = np.load(final_groups_file)
        bg_hists = np.load(bg_hists_file)

        bg_ln_ols = em.backgroundLogOverlaps(star_pars['xyzuvw'], bg_hists)

        overall_lnlike, z = em.get_overall_lnlikelihood(star_pars, groups,
                                                        bg_ln_ols, return_memb_probs=True)
        print("overall_lnlike with {} comps is: {:.5}".format(ncomps, overall_lnlike))
        bic = calcBIC(star_pars, ncomps, overall_lnlike)
        print("BIC is: {}".format(bic))
        print("With {:.2} stars accounted for by background"\
              .format(np.sum(z[:,-1])))

        means = {}
        means['fitted_then'] = [g.mean for g in groups]
        means['fitted_now'] = [
            torb.trace_cartesian_orbit(g.mean, g.age, single_age=True)
            for g in groups
        ]
        covs = {}
        covs['fitted_then'] = np.array([
            g.generateSphericalCovMatrix() for g in groups
        # final_z_file = rdir + "final/final_membership.npy"
        final_z_file = rdir + "memberships.npy"
        final_groups_file = rdir + "final_groups.npy"
        bg_hists_file = rdir + "bg_hists.npy"
        data_file = ddir + assoc_name + "_xyzuvw.fits"
        star_pars = gf.loadXYZUVW(data_file)

        z = np.load(final_z_file)
        # import pdb; pdb.set_trace()
        groups = np.load(final_groups_file)
        bg_hists = np.load(bg_hists_file)

        bg_ln_ols = em.backgroundLogOverlaps(star_pars['xyzuvw'], bg_hists)

        overall_lnlike, z = em.get_overall_lnlikelihood(star_pars,
                                                        groups,
                                                        bg_ln_ols,
                                                        return_memb_probs=True)
        print("overall_lnlike with {} comps is: {:.5}".format(
            ncomps, overall_lnlike))
        bic = calcBIC(star_pars, ncomps, overall_lnlike)
        print("BIC is: {}".format(bic))
        print("With {:.2} stars accounted for by background"\
              .format(np.sum(z[:,-1])))

        means = {}
        means['fitted_then'] = [g.mean for g in groups]
        means['fitted_now'] = [
            torb.trace_cartesian_orbit(g.mean, g.age, single_age=True)
            for g in groups
        ]
        covs = {}
Beispiel #4
0
        logging.info("******************************************")
        run_dir = rdir + '{}/'.format(ncomps)
        mkpath(run_dir)

        try:
            new_groups = dt.loadGroups(run_dir + 'final/final_groups.npy')
            new_meds = np.load(run_dir + 'final/final_med_errs.npy')
            new_z = np.load(run_dir + 'final/final_membership.npy')
            logging.info("Loaded from previous run")
        except IOError:
            new_groups, new_meds, new_z = \
                em.fit_many_comps(star_pars, ncomps, rdir=run_dir, pool=pool,
                                  bg_ln_ols=bg_ln_ols) # kill component here
            new_groups = np.array(new_groups)

        new_lnlike = em.get_overall_lnlikelihood(star_pars, new_groups,
                                                 bg_ln_ols=bg_ln_ols)
        new_lnpost = em.get_overall_lnlikelihood(star_pars, new_groups,
                                                 bg_ln_ols=bg_ln_ols,
                                                 inc_posterior=True)
        new_BIC = em.calc_bic(star_pars, ncomps, new_lnlike)
    # handle multiple components
    else:
        logging.info("******************************************")
        logging.info("*********  FITTING {} COMPONENTS  *********".\
                     format(ncomps))
        logging.info("******************************************")
        best_fits = []
        lnlikes = []
        lnposts = []
        BICs = []
        all_meds = []
Beispiel #5
0
                                 trace_orbit_func=trace_orbit_func,
                                 burnin=config.advanced['burnin_steps'],
                                 sampling_steps=config.advanced['sampling_steps'],
                                 use_background=config.config[
                                    'include_background_distribution'],
                                 init_memb_probs=init_memb_probs,
                                 Component=Component,
                                 store_burnin_chains=store_burnin_chains,
                                 max_iters=MAX_ITERS,
                                 )

# Calculate global score of fit for comparison with future fits with different
# component counts
prev_lnlike = expectmax.get_overall_lnlikelihood(
    data_dict,
    prev_comps,
    # bg_ln_ols=bg_ln_ols,
)
prev_lnpost = expectmax.get_overall_lnlikelihood(
    data_dict,
    prev_comps,
    # bg_ln_ols=bg_ln_ols,
    inc_posterior=True)
prev_bic = expectmax.calc_bic(data_dict,
                              ncomps,
                              prev_lnlike,
                              memb_probs=prev_memb_probs,
                              Component=Component)

ncomps += 1
except IOError:
    prev_comps, prev_med_and_spans, prev_memb_probs = \
        expectmax.fit_many_comps(data=data_dict, ncomps=ncomps, rdir=run_dir,
                                 trace_orbit_func=trace_orbit_func,
                                 burnin=config.advanced['burnin_steps'],
                                 sampling_steps=config.advanced['sampling_steps'],
                                 use_background=config.config[
                                    'include_background_distribution'],
                                 init_memb_probs=init_memb_probs,
                                 )


# Calculate global score of fit for comparison with future fits with different
# component counts
prev_lnlike = expectmax.get_overall_lnlikelihood(data_dict, prev_comps,
                                                 # bg_ln_ols=bg_ln_ols,
                                                 )
prev_lnpost = expectmax.get_overall_lnlikelihood(data_dict, prev_comps,
                                                 # bg_ln_ols=bg_ln_ols,
                                                 inc_posterior=True)
prev_bic = expectmax.calc_bic(data_dict, ncomps, prev_lnlike)

ncomps += 1

# Begin iterative loop, each time trialing the incorporation of a new component
while ncomps < MAX_COMPS:
    if ncomps >= MAX_COMPS:
        log_message(msg='REACHED MAX COMP LIMIT', symbol='+', surround=True)
        break

    log_message(msg='FITTING {} COMPONENT'.format(ncomps),