コード例 #1
0
def test_singleTime():
    """Test usage where we only provide the desired age, and not an array

    Good demo of how to traceback 2 stars forward through time, either
    with an array of time steps, or a single age
    """
    xyzuvw_1 = [0., 0., 25., 0., 0., 0.]
    xyzuvw_2 = [0., 0., 0., 0., -10., 0.]
    xyzuvws = np.vstack((xyzuvw_1, xyzuvw_2))
    age = 10.
    times = np.linspace(0., age, 2)

    # get position for each time in times
    xyzuvws_both = torb.trace_many_cartesian_orbit(xyzuvws,
                                                   times,
                                                   single_age=False)

    # get position for *age* only
    xyzuvws_now = torb.trace_many_cartesian_orbit(xyzuvws,
                                                  age,
                                                  single_age=True)
    assert np.allclose(xyzuvws_both[:, 1], xyzuvws_now)

    xyzuvw_both = torb.trace_cartesian_orbit(xyzuvws[0],
                                             times,
                                             single_age=False)
    xyzuvw_now = torb.trace_cartesian_orbit(xyzuvws[0], age, single_age=True)
    assert np.allclose(xyzuvw_both[1], xyzuvw_now)
コード例 #2
0
    xyzuvw_init, origin = \
        syn.synthesiseXYZUVW(group_pars, form='sphere', return_group=True,
                             xyzuvw_savefile=rdir + xyzuvw_init_savefile,
                             group_savefile=rdir + group_savefile)
    logging.info("Origin has values\n"
                 "\tage:     {}\n"
                 "\tsph_dX:  {}\n"
                 "\tdV:      {}\n"
                 "\tnstars:  {}".format(
                     origin.age,
                     origin.sphere_dx,
                     origin.dv,
                     origin.nstars,
                 ))
    xyzuvw_now_perf =\
        torb.trace_many_cartesian_orbit(xyzuvw_init, origin.age, single_age=True,
                                        savefile=rdir+xyzuvw_perf_file)

for prec in precs:
    logging.info("Fitting to prec: {}".format(prec))
    pdir = rdir + prec + '/'
    mkpath(pdir)
    # os.chdir(prec)
    try:
        dummy = np.load(pdir + group_savefile)
        logging.info("Precision [{}] already fitted for".format(prec))
    except IOError:
        # convert XYZUVW data into astrometry
        astro_table = chronostar.synthdata.measureXYZUVW(xyzuvw_now_perf,
                                                         prec_val[prec],
                                                         savefile=pdir +
                                                         astro_savefile)
コード例 #3
0
        logging.info(" generating from group {}".format(i))
        # MANUALLY SEPARATE CURRENT DAY DISTROS IN DIMENSION X
        mean_now_w_offset = mean_now.copy()
        # mean_now_w_offset[0] += i * 50
        mean_now_w_offset += offsets[i]
    
        mean_then = torb.trace_cartesian_orbit(mean_now_w_offset, -extra_pars[i, -2],
                                               single_age=True)
        group_pars = np.hstack((mean_then, extra_pars[i]))
        xyzuvw_init, origin = syn.synthesiseXYZUVW(group_pars, form='sphere',
                                                   return_group=True,
                                                   internal=False)
        origins.append(origin)
        all_xyzuvw_init = np.vstack((all_xyzuvw_init, xyzuvw_init))
        xyzuvw_now_perf = torb.trace_many_cartesian_orbit(xyzuvw_init,
                                                          times=origin.age,
                                                          single_age=True)
        all_xyzuvw_now_perf = np.vstack((all_xyzuvw_now_perf, xyzuvw_now_perf))

    # insert 'background stars' with density `BG_DENS` [pc km/s]^-3
    ubound = np.max(all_xyzuvw_now_perf, axis=0)
    lbound = np.min(all_xyzuvw_now_perf, axis=0)
    margin = 0.5 * (ubound - lbound)
    ubound += margin
    lbound -= margin
    nbg_stars = int(BG_DENS * np.prod(ubound - lbound))

    # centre bg stars on mean of assoc stars
    # centre = np.mean(all_xyzuvw_now_perf, axis=0)
    # centre = 0.5 * (ubound + lbound)
    # spread = ubound - lbound
コード例 #4
0
file_stems = [scen + "_" + prec for scen in scenarios for prec in precs]

#fit_files = [res_dir + "xyzuvw_now_" + stem + ".fits" for stem in file_stems]
assert len(fits_files) == len(file_stems)

for i in range(len(fits_files)):
    xyzuvw_dict = gf.loadXYZUVW(fits_files[i])
    nstars = xyzuvw_dict['xyzuvw'].shape[0]
    origin_file = res_dir + file_stems[i][:-5] + '_origins.npy'
    group = np.load(origin_file).item()
    true_age = group.age
    ntimes = int(2 * true_age + 1)
    times = -np.linspace(0, 2 * true_age, ntimes)
    tb = torb.trace_many_cartesian_orbit(xyzuvw_dict['xyzuvw'], times=times,
                                         single_age=False,
                                         savefile=res_dir + 'tb_{}.npy'. \
                                         format(int(true_age)))

    # for each timestep, get mean of association and distance from mean
    dists = np.zeros((nstars, ntimes))
    stds = np.zeros(ntimes)
    for tix in range(ntimes):
        dists[:, tix] = get_euc_dist(tb[:, tix, :3],
                                     tb[:, tix, :3].mean(axis=0))

    plt.clf()
    plt.plot(-times, dists.T, '#888888')
    plt.plot(-times, np.median(dists.T, axis=1), 'r')
    plt.savefig(res_dir + file_stems[i]+"_sep_from_mean.pdf")
コード例 #5
0
import chronostar.retired2.datatool as dt

rdir = "../results/synth_fit/50_2_1_50/"
# rdir = "../results/synth_fit/30_5_2_100/"

xyzuvw_init_file = rdir + "xyzuvw_init.npy"

xyzuvw_init = np.load(xyzuvw_init_file)
origin = np.load(rdir + 'origins.npy').item()
origin = dt.loadGroups(rdir + 'origins.npy')
max_age = origin.age
ntimes = int(max_age) + 1
#ntimes = 3
times = np.linspace(1e-5, max_age, ntimes)

traceforward = torb.trace_many_cartesian_orbit(xyzuvw_init, times, False)
nstars = xyzuvw_init.shape[0]

def plot_subplot(traceforward, t_ix, dim1, dim2, ax):
    flat_tf = traceforward.reshape(-1,6)
#    mins = np.min(flat_tf, axis=0)
#    maxs = np.max(flat_tf, axis=0)
    labels = ['X [pc]', 'Y [pc]', 'Z [pc]',
              'U [km/s]', 'V [km/s]', 'W [km/s]']

    for i in range(nstars):
        # plot orbits
        ax.plot(traceforward[i, :t_ix, dim1],
                 traceforward[i, :t_ix, dim2],
                 'b',
                 alpha=0.1)
コード例 #6
0
ファイル: jacobian_fun.py プロジェクト: tcrundall/chronostar
    #for cnt, dummy_group_pars_ex in enumerate(dummy_groups):
    mean = my_group.mean
    cov = my_group.generateEllipticalCovMatrix()

    stars = np.random.multivariate_normal(mean, cov, nstars)
    if plotit:
        plt.clf()
        plt.plot(stars[:, 0], stars[:, 1], 'b.')
        #plt.hist2d(stars[:,0], stars[:,1], bins=20)
        chronostar.fitplotter.plotCovEllipse(cov[:2, :2],
                                             mean,
                                             color='b',
                                             alpha=0.3)

    new_stars = np.zeros(stars.shape)
    new_stars = torb.trace_many_cartesian_orbit(stars, np.array(0, age))


def stop():
    # calculate the new mean and cov
    new_mean = trace_forward(mean, age)
    new_cov = tf.transform_covmatrix(cov,
                                     trace_forward,
                                     mean,
                                     dim=6,
                                     args=(age, ))
    new_eigvals = np.linalg.eigvalsh(new_cov)

    estimated_cov = np.cov(new_stars.T)
    estimated_eigvals = np.linalg.eigvalsh(estimated_cov)
コード例 #7
0
import chronostar.traceorbit as torb
import chronostar.retired2.converter as cv
import chronostar.fitplotter as fp

pdir = "../figures/paper1/"
ERROR = 1.0

# set X to be really large to encourage significant errors
origin_pars = np.array([50., 0., -50., 0., 10., 0., 10., 0.5, 10., 100])

xyzuvw_init, origin = syn.synthesiseXYZUVW(origin_pars,
                                           form='sphere',
                                           return_group=True,
                                           internal=False)
xyzuvw_now_perf = torb.trace_many_cartesian_orbit(xyzuvw_init,
                                                  times=origin.age,
                                                  single_age=True)
astr_table = chronostar.synthdata.measureXYZUVW(xyzuvw_now_perf, ERROR)
star_pars = cv.convertMeasurementsToCartesian(astr_table)

dims = 'XYZUVW'
plt.clf()
fp.plot1DProjection(0, star_pars, [origin], np.array([origin.nstars]))
plt.savefig(pdir + "1dprojection.pdf")
plt.clf()
dim1, dim2 = 'xu'
fp.plotPane(dim1,
            dim2,
            groups=origin,
            star_pars=star_pars,
            group_then=True,
コード例 #8
0
ファイル: explore.py プロジェクト: tcrundall/chronostar
#get_ipython().magic(u'autoreload 2')
import numpy as np
import matplotlib.pyplot as plt
import sys
sys.path.insert(0, '../../..')
import chronostar.synthdata as syn
import chronostar.compfitter as gf
import chronostar.traceorbit as torb

xyzuvw_init = np.load('xyzuvw_init.npy')
origin = np.load('origins.npy').item()
max_age = origin.age
ntimes = int(max_age) + 1
times = np.linspace(1e-5, max_age, ntimes)

traceback = torb.trace_many_cartesian_orbit(xyzuvw_init, times, False)
nstars = xyzuvw_init.shape[0]

#times = np.array([1e-5])

for i in range(nstars):
    plt.plot(traceback[i,:,0], traceback[i,:,1], 'b')

plt.xlabel('X [pc]')
plt.ylabel('Y [pc]')
plt.savefig("xy.png")
plt.clf()

# TRACEBACK
for t_ix in range(times.shape[0]):
        plt.clf()
コード例 #9
0
file_stems = [scen + "_" + prec for scen in scenarios for prec in precs]

#fit_files = [res_dir + "xyzuvw_now_" + stem + ".fits" for stem in file_stems]
assert len(fits_files) == len(file_stems)

for i in range(len(fits_files)):
    xyzuvw_dict = gf.loadXYZUVW(fits_files[i])
    nstars = xyzuvw_dict['xyzuvw'].shape[0]
    origin_file = res_dir + file_stems[i][:-5] + '_origins.npy'
    group = np.load(origin_file).item()
    true_age = group.age
    ntimes = int(2 * true_age + 1)
    times = -np.linspace(0, 2 * true_age, ntimes)
    tb = torb.trace_many_cartesian_orbit(xyzuvw_dict['xyzuvw'], times=times,
                                         single_age=False,
                                         savefile=res_dir + 'tb_{}.npy'. \
                                         format(int(true_age)))

    # for each timestep, get mean of association and distance from mean
    dists = np.zeros((nstars, ntimes))
    stds = np.zeros(ntimes)
    for tix in range(ntimes):
        dists[:, tix] = get_euc_dist(tb[:, tix, :3], tb[:,
                                                        tix, :3].mean(axis=0))

    plt.clf()
    plt.plot(-times, dists.T, '#888888')
    plt.plot(-times, np.median(dists.T, axis=1), 'r')
    plt.savefig(res_dir + file_stems[i] + "_sep_from_mean.pdf")
コード例 #10
0
    my_group = Component(dummy_groups[0], form=False)

    #for cnt, dummy_group_pars_ex in enumerate(dummy_groups):
    mean = my_group.mean
    cov  = my_group.generateEllipticalCovMatrix()

    stars = np.random.multivariate_normal(mean, cov, nstars)
    if plotit:
        plt.clf()
        plt.plot(stars[:,0], stars[:,1], 'b.')
        #plt.hist2d(stars[:,0], stars[:,1], bins=20)
        chronostar.fitplotter.plotCovEllipse(cov[:2, :2], mean, color='b', alpha=0.3)

    new_stars = np.zeros(stars.shape)
    new_stars = torb.trace_many_cartesian_orbit(stars, np.array(0, age))

def stop():
    # calculate the new mean and cov
    new_mean = trace_forward(mean, age)
    new_cov = tf.transform_covmatrix(cov, trace_forward, mean, dim=6, args=(age,))
    new_eigvals = np.linalg.eigvalsh(new_cov)

    estimated_cov = np.cov(new_stars.T)
    estimated_eigvals = np.linalg.eigvalsh(estimated_cov)


    if plotit:
        #plt.clf()
        plt.plot(new_stars[:,0], new_stars[:,1], 'r.')
        #plt.hist2d(stars[:,0], stars[:,1], bins=20)
コード例 #11
0
    # synthesise perfect XYZUVW data
    logging.info("Synthesising data")
    xyzuvw_init, origin =\
        syn.synthesise_xyzuvw(group_pars, sphere=True,
                              xyzuvw_savefile=xyzuvw_init_savefile,
                              return_group=True, group_savefile=group_savefile)
    logging.info("Origin has values\n"
                 "\tage:     {}\n"
                 "\tsph_dX:  {}\n"
                 "\tdV:      {}\n"
                 "\tnstars:  {}".format(
        origin.age, origin.sphere_dx, origin.dv, origin.nstars,
    ))
    xyzuvw_now_perf =\
        torb.trace_many_cartesian_orbit(xyzuvw_init, origin.age, single_age=True,
                                        savefile=xyzuvw_perf_file)

logging.info(mpi_msg)
if not using_mpi:
    logging.info("MPI available! - call this with e.g. mpirun -np 19"
                 " python perform_synth_fit.py")

for prec in precs:
    logging.info("Fitting to prec: {}".format(prec))
    mkpath(prec)
    os.chdir(prec)
    np.save(group_savefile, origin) # store in each directory, for hexplotter
    try:
        res = np.load(result_file)
        logging.info("Precision [{}] already fitted for".format(prec))
    except IOError:
コード例 #12
0
logging.basicConfig(level=logging.INFO, stream=sys.stdout)

save_dir = 'temp_data/'
group_savefile = save_dir + 'origins.npy'
xyzuvw_init_savefile = save_dir + 'xyzuvw_init.npy'
astro_savefile = save_dir + 'astro_table.txt'


group_pars = [0., 0., 0., 0., 0., 0., 1., 1., 0.5, 20]
xyzuvw_init, group = syn.synthesiseXYZUVW(group_pars, form='sphere',
                                          return_group=True,
                                          xyzuvw_savefile=xyzuvw_init_savefile,
                                          group_savefile=group_savefile)
logging.info("Age is: {} Myr".format(group.age))
xyzuvw_now_true = to.trace_many_cartesian_orbit(xyzuvw_init, np.array([0., group.age]))[:, 1]
#assert np.allclose(np.mean(xyzuvw_now, axis=0), group.mean, rtol=1e-1)
logging.info("Mean of initial stars: {}".format(np.mean(xyzuvw_init, axis=0)))
logging.info("Mean of final stars: {}".format(np.mean(xyzuvw_now_true, axis=0)))

star_table = chronostar.synthdata.measureXYZUVW(xyzuvw_now_true, 20.0, astro_savefile)
astr_arr, err_arr = ms.convertTableToArray(star_table)
nstars = len(star_table)

astr_covs = cv.convertAstroErrsToCovs(err_arr)

xyzuvw_now = cc.convert_many_astrometry2lsrxyzuvw(astr_arr, mas=True)
logging.info("Mean of retrieved stars: {}".format(np.mean(xyzuvw_now, axis=0)))

if plot_it:
    plt.clf()
コード例 #13
0
    xyzuvw_init += mean_then
    np.save(rdir+'xyzuvw_init_offset.npy', xyzuvw_init)
    # xyzuvw_init[:,:3] += approx_final_pos

    # fit an approximate Gaussian to initial distribution for reference
    mean = np.mean(xyzuvw_init, axis=0)
    dx, dy, dz = np.std(xyzuvw_init[:,:3], axis=0)
    dv = np.prod(np.std(xyzuvw_init[:,3:], axis=0))**(1./3.)
    group_pars = np.hstack((mean, dx, dy, dz, dv, 0., 0., 0., age))
    origin = chronostar.component.Component(group_pars, form=False,
                                            internal=False)
    np.save(group_savefile, origin)

    xyzuvw_now_perf =\
        torb.trace_many_cartesian_orbit(xyzuvw_init, age, single_age=True,
                                        savefile=rdir+xyzuvw_perf_file)

if not using_mpi:
    logging.info("MPI available! - call this with e.g. mpirun -np 19"
                 " python perform_synth_fit.py")

# Performing fit for each precision
for prec in precs:
    logging.info("Fitting to prec: {}".format(prec))
    pdir = rdir + prec + '/'
    mkpath(pdir)
    np.save(pdir+group_savefile, origin) # store in each directory, for hexplotter
    try:
        best_group = dt.loadGroups(pdir + 'final_groups.npy')
        logging.info("Precision [{}] already fitted for".format(prec))
    except IOError:
コード例 #14
0
logging.basicConfig(level=logging.INFO, stream=sys.stdout)

save_dir = 'temp_data/'
group_savefile = save_dir + 'origins.npy'
xyzuvw_init_savefile = save_dir + 'xyzuvw_init.npy'
astro_savefile = save_dir + 'astro_table.txt'

group_pars = [0., 0., 0., 0., 0., 0., 1., 1., 0.5, 20]
xyzuvw_init, group = syn.synthesiseXYZUVW(group_pars,
                                          form='sphere',
                                          return_group=True,
                                          xyzuvw_savefile=xyzuvw_init_savefile,
                                          group_savefile=group_savefile)
logging.info("Age is: {} Myr".format(group.age))
xyzuvw_now_true = to.trace_many_cartesian_orbit(xyzuvw_init,
                                                np.array([0., group.age]))[:,
                                                                           1]
#assert np.allclose(np.mean(xyzuvw_now, axis=0), group.mean, rtol=1e-1)
logging.info("Mean of initial stars: {}".format(np.mean(xyzuvw_init, axis=0)))
logging.info("Mean of final stars: {}".format(np.mean(xyzuvw_now_true,
                                                      axis=0)))

star_table = chronostar.synthdata.measureXYZUVW(xyzuvw_now_true, 20.0,
                                                astro_savefile)
astr_arr, err_arr = ms.convertTableToArray(star_table)
nstars = len(star_table)

astr_covs = cv.convertAstroErrsToCovs(err_arr)

xyzuvw_now = cc.convert_many_astrometry2lsrxyzuvw(astr_arr, mas=True)
logging.info("Mean of retrieved stars: {}".format(np.mean(xyzuvw_now, axis=0)))
コード例 #15
0
import chronostar.retired2.datatool as dt

rdir = "../results/synth_fit/50_2_1_50/"
# rdir = "../results/synth_fit/30_5_2_100/"

xyzuvw_init_file = rdir + "xyzuvw_init.npy"

xyzuvw_init = np.load(xyzuvw_init_file)
origin = np.load(rdir + 'origins.npy').item()
origin = dt.loadGroups(rdir + 'origins.npy')
max_age = origin.age
ntimes = int(max_age) + 1
#ntimes = 3
times = np.linspace(1e-5, max_age, ntimes)

traceforward = torb.trace_many_cartesian_orbit(xyzuvw_init, times, False)
nstars = xyzuvw_init.shape[0]


def plot_subplot(traceforward, t_ix, dim1, dim2, ax):
    flat_tf = traceforward.reshape(-1, 6)
    #    mins = np.min(flat_tf, axis=0)
    #    maxs = np.max(flat_tf, axis=0)
    labels = ['X [pc]', 'Y [pc]', 'Z [pc]', 'U [km/s]', 'V [km/s]', 'W [km/s]']

    for i in range(nstars):
        # plot orbits
        ax.plot(traceforward[i, :t_ix, dim1],
                traceforward[i, :t_ix, dim2],
                'b',
                alpha=0.1)
コード例 #16
0

    xyzuvw_init += offset
    xyzuvw_init[:,:3] += approx_final_pos

    # fit an approximate Gaussian to initial distribution
    mean = np.mean(xyzuvw_init, axis=0)
    dx, dy, dz = np.std(xyzuvw_init[:,:3], axis=0)
    dv = np.prod(np.std(xyzuvw_init[:,3:], axis=0))**(1./3.)
    group_pars = np.hstack((mean, dx, dy, dz, dv, 0., 0., 0., age))
    pdb.set_trace()
    origin = chronostar.component.Component(group_pars, form=False)
    np.save(group_savefile, origin)

    xyzuvw_now_perf =\
        torb.trace_many_cartesian_orbit(xyzuvw_init, age, single_age=True,
                                        savefile=xyzuvw_perf_file)

logging.info(mpi_msg)
if not using_mpi:
    logging.info("MPI available! - call this with e.g. mpirun -np 19"
                 " python perform_synth_fit.py")

# Performing fit for each precision
for prec in precs:
    logging.info("Fitting to prec: {}".format(prec))
    mkpath(prec)
    os.chdir(prec)
    np.save(group_savefile, origin) # store in each directory, for hexplotter
    try:
        res = np.load(result_file)
        logging.info("Precision [{}] already fitted for".format(prec))