def test_convertManyLSRXYZUVWToAstrometry(): return xyzuvw_bp_helio = np.array([-3.4, -16.4, -9.9, -11.0, -16.0, -9.1]) xyzuvw_bp_lsr = xyzuvw_bp_helio + XYZUVWSOLARNOW_pc astr_bp = [ # astrometry from wikiepdia 86.82125, #deg -51.0664, #deg 51.44, #mas 4.65, #mas/yr 83.1, #mas/yr 20.0 #km/s ] xyzuvw_lsrs = np.array([ xyzuvw_bp_lsr, xyzuvw_bp_lsr, xyzuvw_bp_lsr, ]) astros = np.array([ astr_bp, astr_bp, astr_bp, ]) calculated_astros = cc.convert_many_lsrxyzuvw2astrometry(xyzuvw_lsrs) assert np.allclose(calculated_astros, astros, rtol=1e-2) recalculated_xyzuvws = cc.convert_many_astrometry2lsrxyzuvw(calculated_astros) assert np.allclose(recalculated_xyzuvws, xyzuvw_lsrs)
def test_convertManyLSRXYZUVWToAstrometry(): return xyzuvw_bp_helio = np.array([-3.4, -16.4, -9.9, -11.0, -16.0, -9.1]) xyzuvw_bp_lsr = xyzuvw_bp_helio + XYZUVWSOLARNOW_pc astr_bp = [ # astrometry from wikiepdia 86.82125, #deg -51.0664, #deg 51.44, #mas 4.65, #mas/yr 83.1, #mas/yr 20.0 #km/s ] xyzuvw_lsrs = np.array([ xyzuvw_bp_lsr, xyzuvw_bp_lsr, xyzuvw_bp_lsr, ]) astros = np.array([ astr_bp, astr_bp, astr_bp, ]) calculated_astros = cc.convert_many_lsrxyzuvw2astrometry(xyzuvw_lsrs) assert np.allclose(calculated_astros, astros, rtol=1e-2) recalculated_xyzuvws = cc.convert_many_astrometry2lsrxyzuvw( calculated_astros) assert np.allclose(recalculated_xyzuvws, xyzuvw_lsrs)
def convertMeasurementsToCartesian(t=None, loadfile='', astr_dict=None): """ Parameters ---------- t : astropy Table with the following columns: name : id or name of star radeg : right ascension in degrees dedeg : declination in degrees plx : parallax in mas e_plx : error of parallax in mas pmra : proper motion in right ascension in mas/yr e_pmra : error of pm in right ascension in mas/yr pmde : proper motion in declination in mas/yr e_pmde : error of pm in declination in mas/yr rv : radial velocity in km/s e_rv : error of radial velocity in km/s loadfile : (String {''}) if t is None, try and load table from loadfile savefile : (String {''}) if non-empty, will save a fits file with this filename. Appropriate file extension is applied if not there. Returns ------- dict : t : astropy table xyzuvw : [nstars, 6] array space positions and velocities of each star xyzuvw_cov : [nstars, 6, 6] array covariance of positions and velocities of each star """ while True: if t: nstars = len(t) astr_arr, err_arr = convertTableToArray(t) astr_covs = convertAstrErrsToCovs(err_arr) break if loadfile: t = Table.read(loadfile, format='ascii') nstars = len(t) astr_arr, err_arr = convertTableToArray(t) astr_covs = convertAstrErrsToCovs(err_arr) break if astr_dict: astr_arr = astr_dict['astr_mns'] astr_covs = astr_dict['astr_covs'] nstars = astr_arr.shape[0] break raise StandardError xyzuvw = coordinate.convert_many_astrometry2lsrxyzuvw(astr_arr, mas=True) xyzuvw_cov = transformAstrCovsToCartesian(astr_covs, astr_arr) xyzuvw_dict = {'table':t, 'xyzuvw':xyzuvw, 'xyzuvw_cov':xyzuvw_cov} return xyzuvw_dict
def convertMeasurementsToCartesian(t=None, loadfile='', astr_dict=None): """ Parameters ---------- t : astropy Table with the following columns: name : id or name of star radeg : right ascension in degrees dedeg : declination in degrees plx : parallax in mas e_plx : error of parallax in mas pmra : proper motion in right ascension in mas/yr e_pmra : error of pm in right ascension in mas/yr pmde : proper motion in declination in mas/yr e_pmde : error of pm in declination in mas/yr rv : radial velocity in km/s e_rv : error of radial velocity in km/s loadfile : (String {''}) if t is None, try and load table from loadfile savefile : (String {''}) if non-empty, will save a fits file with this filename. Appropriate file extension is applied if not there. Returns ------- dict : t : astropy table xyzuvw : [nstars, 6] array space positions and velocities of each star xyzuvw_cov : [nstars, 6, 6] array covariance of positions and velocities of each star """ while True: if t: # nstars = len(t) astr_arr, err_arr = convertTableToArray(t) astr_covs = convertAstrErrsToCovs(err_arr) break if loadfile: t = Table.read(loadfile, format='ascii') # nstars = len(t) astr_arr, err_arr = convertTableToArray(t) astr_covs = convertAstrErrsToCovs(err_arr) break if astr_dict: astr_arr = astr_dict['astr_mns'] astr_covs = astr_dict['astr_covs'] # nstars = astr_arr.shape[0] break raise StandardError xyzuvw = coordinate.convert_many_astrometry2lsrxyzuvw(astr_arr, mas=True) xyzuvw_cov = transformAstrCovsToCartesian(astr_covs, astr_arr) xyzuvw_dict = {'table': t, 'xyzuvw': xyzuvw, 'xyzuvw_cov': xyzuvw_cov} return xyzuvw_dict
def convertGaiaMeansToXYZUVW(astr_file="all_rvs_w_ok_plx", server=False): """ Generate mean XYZUVW for eac star in provided fits file (Gaia format) """ if server: rdir = '/data/mash/tcrun/' else: rdir = '../data/' #gaia_astr_file = rdir+'all_rvs_w_ok_plx.fits' gaia_astr_file = rdir + astr_file + ".fits" hdul = fits.open(gaia_astr_file) #, memmap=True) nstars = hdul[1].data.shape[0] means = np.zeros((nstars, 6)) means[:, 0] = hdul[1].data['ra'] means[:, 1] = hdul[1].data['dec'] means[:, 2] = hdul[1].data['parallax'] means[:, 3] = hdul[1].data['pmra'] means[:, 4] = hdul[1].data['pmdec'] means[:, 5] = hdul[1].data['radial_velocity'] xyzuvw_mns = cc.convert_many_astrometry2lsrxyzuvw(means, mas=True) np.save(rdir + astr_file + "mean_xyzuvw.npy", xyzuvw_mns)
def convertGaiaMeansToXYZUVW(astr_file="all_rvs_w_ok_plx", server=False): """ Generate mean XYZUVW for eac star in provided fits file (Gaia format) """ if server: rdir = '/data/mash/tcrun/' else: rdir = '../data/' #gaia_astr_file = rdir+'all_rvs_w_ok_plx.fits' gaia_astr_file = rdir+astr_file+".fits" hdul = fits.open(gaia_astr_file)#, memmap=True) nstars = hdul[1].data.shape[0] means = np.zeros((nstars,6)) means[:,0] = hdul[1].data['ra'] means[:,1] = hdul[1].data['dec'] means[:,2] = hdul[1].data['parallax'] means[:,3] = hdul[1].data['pmra'] means[:,4] = hdul[1].data['pmdec'] means[:,5] = hdul[1].data['radial_velocity'] xyzuvw_mns = cc.convert_many_astrometry2lsrxyzuvw(means, mas=True) np.save(rdir + astr_file + "mean_xyzuvw.npy", xyzuvw_mns)
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() plt.plot(xyzuvw_now[:,1], xyzuvw_now[:,2], '.') chronostar.fitplotter.plotCovEllipse(group.generateEllipticalCovMatrix()[1:3, 1:3], group.mean[1:3], with_line=True) xyzuvw_covs = np.zeros((nstars,6,6)) for ix in range(nstars): xyzuvw_covs[ix] = tf.transform_covmatrix( astr_covs[ix], cc.convert_astrometry2lsrxyzuvw, astr_arr[ix], dim=6 ) if plot_it:
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() plt.plot(xyzuvw_now[:, 1], xyzuvw_now[:, 2], '.') chronostar.fitplotter.plotCovEllipse( group.generateEllipticalCovMatrix()[1:3, 1:3], group.mean[1:3], with_line=True) xyzuvw_covs = np.zeros((nstars, 6, 6)) for ix in range(nstars): xyzuvw_covs[ix] = tf.transform_covmatrix(astr_covs[ix], cc.convert_astrometry2lsrxyzuvw, astr_arr[ix],