def _mcmc_sample_to_w0(p, R):
    p = atleast_2d(p, insert_axis=-1) # note: from Gary, not Numpy
    c = _mcmc_sample_to_coord(p, R)
    x0 = c.transform_to(galcen_frame['galactocentric_frame']).cartesian.xyz.decompose(galactic).value
    v0 = gc.vhel_to_gal(c, pm=(p[2]*u.rad/u.Myr,p[3]*u.rad/u.Myr), rv=p[4]*u.kpc/u.Myr,
                        **galcen_frame).decompose(galactic).value
    w0 = np.concatenate((x0, v0))
    return w0
Beispiel #2
0
 def _mcmc_sample_to_w0(self, p):
     _,orbit_pars = self._unpack_orbit(0, p)
     c = self._mcmc_sample_to_coord(p)
     x0 = c.transform_to(FRAME['galactocentric_frame']).cartesian.xyz.decompose(galactic).value
     v0 = gc.vhel_to_gal(c, pm=(orbit_pars['mul']*u.rad/u.Myr,
                                orbit_pars['mub']*u.rad/u.Myr),
                         rv=orbit_pars['vr']*u.kpc/u.Myr, **FRAME).decompose(galactic).value
     w0 = np.concatenate((x0, v0))
     return w0
Beispiel #3
0
def ln_posterior(p, coordinate, obs_vlos, err_vlos):
    pm_ra,pm_dec,vlos = p

    vgal = gc.vhel_to_gal(coordinate,
                          pm=(pm_ra*u.mas/u.yr,pm_dec*u.mas/u.yr),
                          rv=vlos*u.km/u.s,
                          vcirc=vcirc, vlsr=vlsr, galactocentric_frame=gc_frame)
    vtot = np.sqrt(np.sum(vgal**2)).to(u.km/u.s).value
    return norm.logpdf(vtot, loc=0., scale=sigma_halo) + norm.logpdf(vlos, loc=obs_vlos, scale=err_vlos)
Beispiel #4
0
 def _mcmc_sample_to_w0(self, p):
     _, orbit_pars = self._unpack_orbit(0, p)
     c = self._mcmc_sample_to_coord(p)
     x0 = c.transform_to(
         FRAME['galactocentric_frame']).cartesian.xyz.decompose(
             galactic).value
     v0 = gc.vhel_to_gal(c,
                         pm=(orbit_pars['mul'] * u.rad / u.Myr,
                             orbit_pars['mub'] * u.rad / u.Myr),
                         rv=orbit_pars['vr'] * u.kpc / u.Myr,
                         **FRAME).decompose(galactic).value
     w0 = np.concatenate((x0, v0))
     return w0
Beispiel #5
0
def test_hel_gal():
    """
    Note: slight offsets between Astropy / gary transformation and
    this transformation are expected because this assumes (l,b)=(0,0)
    is the Galactic center. Astropy uses a more modern measurement of
    the position of the GC.
    """
    np.random.seed(42)

    RSUN = 8.*u.kpc
    VCIRC = 240.*u.km/u.s
    VLSR = [0,0,0.] * u.km/u.s
    gc_frame = coord.Galactocentric(z_sun=0.*u.pc,
                                    galcen_distance=RSUN)

    l = np.random.uniform(0.,360.,size=n)*u.degree
    b = np.random.uniform(-90.,90.,size=n)*u.degree
    d = np.random.uniform(0.,100.,size=n)*u.kpc
    mul_cosb = np.random.normal(0., 300., size=n)*u.km/u.s/d * np.cos(b)
    mub = np.random.normal(0., 300., size=n)*u.km/u.s/d
    vr = np.random.normal(0., 300., size=n)*u.km/u.s

    mul_cosb = mul_cosb.to(u.mas/u.yr, equivalencies=u.dimensionless_angles())
    mub = mub.to(u.mas/u.yr, equivalencies=u.dimensionless_angles())

    c = coord.Galactic(l=l, b=b, distance=d)
    vxyz = gc.vhel_to_gal(c, (mul_cosb,mub), vr,
                          vcirc=VCIRC, vlsr=VLSR,
                          galactocentric_frame=gc_frame)
    xyz = c.transform_to(gc_frame).cartesian.xyz

    x,y,z = xyz.decompose(galactic).value
    vx,vy,vz = vxyz.decompose(galactic).value

    X = hel_to_gal(np.vstack((l.decompose(galactic).value,
                              b.decompose(galactic).value,
                              d.decompose(galactic).value,
                              mul_cosb.decompose(galactic).value,
                              mub.decompose(galactic).value,
                              vr.decompose(galactic).value)).T,
                   Vcirc=VCIRC.decompose(galactic).value,
                   Rsun=RSUN.decompose(galactic).value)
    x1,y1,z1,vx1,vy1,vz1 = X.T

    assert np.allclose(x1, x, rtol=1E-2)
    assert np.allclose(y1, y, rtol=1E-2)
    assert np.allclose(z1, z, rtol=1E-2)
    assert np.allclose(vx1, vx, rtol=1E-2)
    assert np.allclose(vy1, vy, rtol=1E-2)
    assert np.allclose(vz1, vz, rtol=1E-2)