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
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
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)
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
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)