def process_mock_densdata(options):
    print("Using mock Pal 5 data from %s" % options.mockfilename)
    # Read and prep data for mocks
    xvid= numpy.loadtxt(options.mockfilename)
    xv= xvid[:,:6]
    xv= xv[numpy.argsort(xvid[:,6])]
    XYZ= bovy_coords.galcenrect_to_XYZ(xv[:,0],xv[:,1],xv[:,2],
                                       Xsun=R0,Zsun=0.025)
    lbd= bovy_coords.XYZ_to_lbd(XYZ[0],XYZ[1],XYZ[2],degree=True)
    radec= bovy_coords.lb_to_radec(lbd[:,0],lbd[:,1],degree=True)
    xieta= pal5_util.radec_to_pal5xieta(radec[:,0],radec[:,1],degree=True)
    # make sure the progenitor is at (0,0)
    xieta[:,0]-= numpy.median(xieta[:,0])
    xieta[:,1]-= numpy.median(xieta[:,1])
    h,e= numpy.histogram(xieta[:,0],range=[0.2,14.3],bins=141)
    xdata= numpy.arange(0.25,14.35,0.1)
    # Compute power spectrum
    tdata= h-0.
    pp= Polynomial.fit(xdata,tdata,deg=options.polydeg,w=1./numpy.sqrt(h+1.))
    tdata/= pp(xdata)
    ll= xdata
    py= signal.csd(tdata,tdata,fs=1./(ll[1]-ll[0]),scaling='spectrum',
                   nperseg=len(ll))[1]
    py= py.real
    # Also compute the bispectrum
    Bspec, Bpx= bispectrum.bispectrum(numpy.vstack((tdata,tdata)).T,
                                      nfft=len(tdata),wind=7,nsamp=1,overlap=0)
    ppyr= numpy.fabs(Bspec[len(Bspec)//2+_BISPECIND,len(Bspec)//2:].real)
    ppyi= numpy.fabs(Bspec[len(Bspec)//2+_BISPECIND,len(Bspec)//2:].imag)
    return (numpy.sqrt(py*(ll[-1]-ll[0])),numpy.sqrt(h+1.)/pp(xdata),
            ppyr,ppyi)
Esempio n. 2
0
def sky_coords(cluster):
    """Get the sky coordinates of every star in the cluster

    Parameters
    ----------
    cluster : class
        StarCluster

    Returns
    -------
    ra,dec,d0,pmra,pmdec,vr0 : float
      on-sky positions and velocities of cluster stars
      
    History
    -------
    2018 - Written - Webb (UofT)
    """
    origin0 = cluster.origin

    if origin0 != "galaxy":
        cluster.to_galaxy()

    x0, y0, z0 = bovy_coords.galcenrect_to_XYZ(cluster.x,
                                               cluster.y,
                                               cluster.z,
                                               Xsun=8.0,
                                               Zsun=0.025).T
    vx0, vy0, vz0 = bovy_coords.galcenrect_to_vxvyvz(
        cluster.vx,
        cluster.vy,
        cluster.vz,
        Xsun=8.0,
        Zsun=0.025,
        vsun=[-11.1, 244.0, 7.25],
    ).T

    l0, b0, d0 = bovy_coords.XYZ_to_lbd(x0, y0, z0, degree=True).T
    ra, dec = bovy_coords.lb_to_radec(l0, b0, degree=True).T

    vr0, pmll0, pmbb0 = bovy_coords.vxvyvz_to_vrpmllpmbb(vx0,
                                                         vy0,
                                                         vz0,
                                                         l0,
                                                         b0,
                                                         d0,
                                                         degree=True).T
    pmra, pmdec = bovy_coords.pmllpmbb_to_pmrapmdec(pmll0,
                                                    pmbb0,
                                                    l0,
                                                    b0,
                                                    degree=True).T

    if origin0 == "centre":
        cluster.to_centre()
    elif origin0 == "cluster":
        cluster.to_cluster()

    return ra, dec, d0, pmra, pmdec, vr0
Esempio n. 3
0
def sky_coords(cluster):
    """
    NAME:

       sky_coords

    PURPOSE:

       Get the sky coordinates of every star in the cluster

    INPUT:

       cluster - a StarCluster-class object

    OUTPUT:

       ra,dec,d0,pmra,pmdec,vr0

    HISTORY:

       2018 - Written - Webb (UofT)

    """
    origin0 = cluster.origin

    if origin0 != "galaxy":
        cluster.to_galaxy()

    x0, y0, z0 = bovy_coords.galcenrect_to_XYZ(
        cluster.x, cluster.y, cluster.z, Xsun=8.0, Zsun=0.025
    ).T
    vx0, vy0, vz0 = bovy_coords.galcenrect_to_vxvyvz(
        cluster.vx,
        cluster.vy,
        cluster.vz,
        Xsun=8.0,
        Zsun=0.025,
        vsun=[-11.1, 244.0, 7.25],
    ).T

    l0, b0, d0 = bovy_coords.XYZ_to_lbd(x0, y0, z0, degree=True).T
    ra, dec = bovy_coords.lb_to_radec(l0, b0, degree=True).T

    vr0, pmll0, pmbb0 = bovy_coords.vxvyvz_to_vrpmllpmbb(
        vx0, vy0, vz0, l0, b0, d0, degree=True
    ).T
    pmra, pmdec = bovy_coords.pmllpmbb_to_pmrapmdec(pmll0, pmbb0, l0, b0, degree=True).T

    if origin0 == "centre":
        cluster.to_centre()
    elif origin0 == "cluster":
        cluster.to_cluster()

    return ra, dec, d0, pmra, pmdec, vr0
def get_star_dx(pepperdf, n=1000, returnapar=False, returnxi=False):
    (Omega, angle, dt) = pepperdf.sample(n=n, returnaAdt=True)
    RvR = pepperdf._approxaAInv(Omega[0], Omega[1], Omega[2], angle[0],
                                angle[1], angle[2])
    vo = pepperdf._vo
    ro = pepperdf._ro
    R0 = pepperdf._R0
    Zsun = pepperdf._Zsun
    vsun = pepperdf._vsun
    XYZ = bovy_coords.galcencyl_to_XYZ(RvR[0] * ro,
                                       RvR[5],
                                       RvR[3] * ro,
                                       Xsun=R0,
                                       Zsun=Zsun).T
    slbd = bovy_coords.XYZ_to_lbd(XYZ[0], XYZ[1], XYZ[2], degree=True)
    sradec = bovy_coords.lb_to_radec(slbd[:, 0], slbd[:, 1], degree=True)
    xieta = pal5_util.radec_to_pal5xieta(sradec[:, 0],
                                         sradec[:, 1],
                                         degree=True)
    l = slbd[:, 0]
    b = slbd[:, 1]
    r = slbd[:, 2]
    if returnapar:
        closesttrackindexes = np.zeros(len(r))
        for i in np.arange(len(r)):
            closesttrackindexes[i] = pepperdf.find_closest_trackpoint(
                RvR[0][i],
                RvR[1][i],
                RvR[2][i],
                RvR[3][i],
                RvR[4][i],
                RvR[5][i],
                interp=True)
        starapar = pepperdf._interpolatedThetasTrack[(
            closesttrackindexes).astype(int)]
        return starapar
    if returnxi: return xieta[:, 0]
    else: return None
def galcencyl_to_lbd(R, phi, Z, degree=True):
    xyz = bovy_coords.galcencyl_to_XYZ(R, phi, Z)
    lbd = bovy_coords.XYZ_to_lbd(xyz[0], xyz[1], xyz[2], degree=degree)
    return lbd[0], lbd[1], lbd[2]
Esempio n. 6
0
def xyzuvw_to_skycoord(xyzuvw_in,
                       solarmotion='schoenrich',
                       reverse_x_sign=True):
    """Converts XYZUVW with respect to the LSR or the sun
    to RAdeg, DEdeg, plx, pmra, pmdec, RV
    
    Parameters
    ----------
    xyzuvw_in:
        XYZUVW with respect to the LSR.
        
    solarmotion: string
        The reference of assumed solar motion. "schoenrich" or None if inputs are already 
        relative to the sun.
        
    reverse_x_sign: bool
        Do we reverse the sign of the X co-ordinate? This is needed for dealing with 
        galpy sign conventions.

    TODO: not working at all... fix this
    """
    if solarmotion == None:
        xyzuvw_sun = np.zeros(6)
    elif solarmotion == 'schoenrich':
        xyzuvw_sun = [0, 0, 25, 11.1, 12.24, 7.25]
    else:
        raise UserWarning

    #Make coordinates relative to sun
    xyzuvw = xyzuvw_in - xyzuvw_sun

    #Special for the sun itself...
    #FIXME: This seems like a hack.
    #if (np.sum(xyzuvw**2) < 1) and solarmotion != None:
    #    return [0,0,1e5, 0,0,0]

    #Find l, b and distance.
    #!!! WARNING: the X-coordinate may have to be reversed here, just like everywhere else,
    #because of the convention in Orbit.x(), which doesn't seem to match X.
    if reverse_x_sign:
        lbd = bovy_coords.XYZ_to_lbd(-xyzuvw[0] / 1e3,
                                     xyzuvw[1] / 1e3,
                                     xyzuvw[2] / 1e3,
                                     degree=True)
    else:
        lbd = bovy_coords.XYZ_to_lbd(xyzuvw[0] / 1e3,
                                     xyzuvw[1] / 1e3,
                                     xyzuvw[2] / 1e3,
                                     degree=True)
    radec = bovy_coords.lb_to_radec(lbd[0], lbd[1], degree=True)
    vrpmllpmbb = bovy_coords.vxvyvz_to_vrpmllpmbb(xyzuvw[3],xyzuvw[4], xyzuvw[5],\
                    lbd[0],lbd[1],lbd[2], degree=True)
    pmrapmdec = bovy_coords.pmllpmbb_to_pmrapmdec(vrpmllpmbb[1],
                                                  vrpmllpmbb[2],
                                                  lbd[0],
                                                  lbd[1],
                                                  degree=True)
    return [
        radec[0], radec[1], 1.0 / lbd[2], pmrapmdec[0], pmrapmdec[1],
        vrpmllpmbb[0]
    ]
Esempio n. 7
0
def to_radec(cluster, do_order=False, do_key_params=False, ro=8.0, vo=220.0):
    """Convert to on-sky position, proper motion, and radial velocity of cluster
    
    Parameters
    ----------
    cluster : class
        StarCluster
    do_order : bool
        sort star by radius after coordinate change (default: False)
    do_key_params : bool
        call key_params to calculate key parameters after unit change (default: False)
    ro : float
        galpy radius scaling parameter
    vo : float
        galpy velocity scaling parameter

    Returns
    -------
    None

    History:
    -------
   2018 - Written - Webb (UofT)
    """
    if len(cluster.ra) == len(cluster.x):
        cluster.x = copy(cluster.ra)
        cluster.y = copy(cluster.dec)
        cluster.z = copy(cluster.dist)
        cluster.vx = copy(cluster.pmra)
        cluster.vy = copy(cluster.pmdec)
        cluster.vz = copy(cluster.vlos)

        cluster.units = "radec"
        cluster.origin = "sky"

    else:

        units0, origin0 = cluster.units, cluster.origin

        cluster.to_galaxy()
        cluster.to_kpckms()

        x0, y0, z0 = bovy_coords.galcenrect_to_XYZ(cluster.x,
                                                   cluster.y,
                                                   cluster.z,
                                                   Xsun=8.0,
                                                   Zsun=0.025).T

        cluster.dist = np.sqrt(x0**2.0 + y0**2.0 + z0**2.0)

        vx0, vy0, vz0 = bovy_coords.galcenrect_to_vxvyvz(
            cluster.vx,
            cluster.vy,
            cluster.vz,
            Xsun=8.0,
            Zsun=0.025,
            vsun=[-11.1, 244.0, 7.25],
        ).T

        cluster.vlos = (vx0 * x0 + vy0 * y0 +
                        vz0 * z0) / np.sqrt(x0**2.0 + y0**2.0 + z0**2.0)

        l0, b0, cluster.dist = bovy_coords.XYZ_to_lbd(x0, y0, z0,
                                                      degree=True).T
        cluster.ra, cluster.dec = bovy_coords.lb_to_radec(l0, b0,
                                                          degree=True).T

        vr0, pmll0, pmbb0 = bovy_coords.vxvyvz_to_vrpmllpmbb(vx0,
                                                             vy0,
                                                             vz0,
                                                             l0,
                                                             b0,
                                                             cluster.dist,
                                                             degree=True).T
        cluster.pmra, cluster.pmdec = bovy_coords.pmllpmbb_to_pmrapmdec(
            pmll0, pmbb0, l0, b0, degree=True).T

        x0, y0, z0 = bovy_coords.galcenrect_to_XYZ(cluster.xgc,
                                                   cluster.ygc,
                                                   cluster.zgc,
                                                   Xsun=8.0,
                                                   Zsun=0.025)
        vx0, vy0, vz0 = bovy_coords.galcenrect_to_vxvyvz(
            cluster.vxgc,
            cluster.vygc,
            cluster.vzgc,
            Xsun=8.0,
            Zsun=0.025,
            vsun=[-11.1, 244.0, 7.25],
        )

        cluster.vlos_gc = (vx0 * x0 + vy0 * y0 +
                           vz0 * z0) / np.sqrt(x0**2.0 + y0**2.0 + z0**2.0)

        l0, b0, cluster.dist_gc = bovy_coords.XYZ_to_lbd(x0,
                                                         y0,
                                                         z0,
                                                         degree=True)
        cluster.ra_gc, cluster.dec_gc = bovy_coords.lb_to_radec(l0,
                                                                b0,
                                                                degree=True)

        vr0, pmll0, pmbb0 = bovy_coords.vxvyvz_to_vrpmllpmbb(vx0,
                                                             vy0,
                                                             vz0,
                                                             l0,
                                                             b0,
                                                             cluster.dist_gc,
                                                             degree=True)
        cluster.pmra_gc, cluster.pmdec_gc = bovy_coords.pmllpmbb_to_pmrapmdec(
            pmll0, pmbb0, l0, b0, degree=True)

        cluster.x = copy(cluster.ra)
        cluster.y = copy(cluster.dec)
        cluster.z = copy(cluster.dist)
        cluster.vx = copy(cluster.pmra)
        cluster.vy = copy(cluster.pmdec)
        cluster.vz = copy(cluster.vlos)

        cluster.xgc = copy(cluster.ra_gc)
        cluster.ygc = copy(cluster.dec_gc)
        cluster.zgc = copy(cluster.dist_gc)
        cluster.vxgc = copy(cluster.pmra_gc)
        cluster.vygc = copy(cluster.pmdec_gc)
        cluster.vzgc = copy(cluster.vlos_gc)

        cluster.units = "radec"
        cluster.origin = "sky"

    cluster.rv3d()

    if do_key_params:
        cluster.key_params(do_order=do_order)
Esempio n. 8
0
def sample_and_hist_apars(pepperdf, apar, survey, nsample):
    (Omega, angle, dt) = pepperdf.sample(n=nsample, returnaAdt=True)
    RvR = pepperdf._approxaAInv(Omega[0], Omega[1], Omega[2], angle[0],
                                angle[1], angle[2])
    vo = pepperdf._vo
    ro = pepperdf._ro
    R0 = pepperdf._R0
    Zsun = pepperdf._Zsun
    vsun = pepperdf._vsun
    XYZ = bovy_coords.galcencyl_to_XYZ(RvR[0] * ro,
                                       RvR[5],
                                       RvR[3] * ro,
                                       Xsun=R0,
                                       Zsun=Zsun).T
    slbd = bovy_coords.XYZ_to_lbd(XYZ[0], XYZ[1], XYZ[2], degree=True)
    l = slbd[:, 0]
    b = slbd[:, 1]
    r = slbd[:, 2]
    closesttrackindexes = np.zeros(len(r))
    for i in np.arange(len(r)):
        closesttrackindexes[i] = pepperdf.find_closest_trackpoint(RvR[0][i],
                                                                  RvR[1][i],
                                                                  RvR[2][i],
                                                                  RvR[3][i],
                                                                  RvR[4][i],
                                                                  RvR[5][i],
                                                                  interp=True)
    starapar = pepperdf._interpolatedThetasTrack[(
        closesttrackindexes).astype(int)]
    masses = assign_masses(nsample)
    if 'LSST' in survey:
        mag1 = isodict['lsst_g-10.00-0.0001'](masses) + (
            5 * np.log10(r * 1e3) - 5)
        magerror1 = errormodels[survey]['g'](mag1)
        mag2 = isodict['lsst_r-10.00-0.0001'](masses) + (
            5 * np.log10(r * 1e3) - 5)
        magerror2 = errormodels[survey]['r'](mag2)
    elif survey == 'CASTOR':
        mag1 = isodict['castor_u-10.00-0.0001'](masses) + (
            5 * np.log10(r * 1e3) - 5)
        magerror1 = errormodels[survey]['u'](mag1)
        mag2 = isodict['castor_g-10.00-0.0001'](masses) + (
            5 * np.log10(r * 1e3) - 5)
        magerror2 = errormodels[survey]['g'](mag2)
    elif survey == 'WFIRST':
        mag1 = isodict['Z087-10.00-0.0001'](masses) + (5 * np.log10(r * 1e3) -
                                                       5)
        magerror1 = errormodels[survey]['z'](mag1)
        mag2 = isodict['H158-10.00-0.0001'](masses) + (5 * np.log10(r * 1e3) -
                                                       5)
        magerror2 = errormodels[survey]['h'](mag2)
    else:
        mag1 = isodict['sdss_g-10.00-0.0001'](masses) + (
            5 * np.log10(r * 1e3) - 5)
        magerror1 = errormodels[survey]['g'](mag1)
        mag2 = isodict['sdss_r-10.00-0.0001'](masses) + (
            5 * np.log10(r * 1e3) - 5)
        magerror2 = errormodels[survey]['r'](mag2)

    omag1 = (mag1 +
             np.random.normal(size=len(mag1)) * magerror1)[((magerror1 < .1) &
                                                            (magerror2 < .1))]
    omag2 = (mag2 +
             np.random.normal(size=len(mag2)) * magerror2)[((magerror1 < .1) &
                                                            (magerror2 < .1))]

    magsel = ((magerror1 < .1) & (magerror2 < .1))
    lrange = [340, 360]
    brange = [37.5, 47.5]
    skysel = ((l < lrange[1]) & (l > lrange[0]) & (b < brange[1]) &
              (b > brange[0]))
    aparbins = np.linspace(apar[0] - (apar[1] - apar[0]) / 2.,
                           apar[-1] + 3 * (apar[1] - apar[0]) / 2.,
                           len(apar) + 1,
                           endpoint=False)
    #centroids = bins[1:]-(bins[1]-bins[0])/2.
    counts, bins = np.histogram(starapar[magsel & skysel], bins=aparbins)