Exemplo n.º 1
0
def test_galcencyl_to_XYZ():
    gcR, gcp, gcZ= 5.,numpy.arctan(4./3.),2.
    XYZ= bovy_coords.galcencyl_to_XYZ(gcR,gcp,gcZ,Xsun=8.,Ysun=0.,Zsun=0.)
    assert numpy.fabs(XYZ[0]-5.) < 10.**-10., 'galcencyl_to_XYZ conversion did not work as expected'
    assert numpy.fabs(XYZ[1]-4.) < 10.**-10., 'galcencyl_to_XYZ conversion did not work as expected'
    assert numpy.fabs(XYZ[2]-2.) < 10.**-10., 'galcencyl_to_XYZ conversion did not work as expected'
    return None
Exemplo n.º 2
0
def _fit_orbit_mlogl(new_vxvv,vxvv,vxvv_err,pot,radec,lb,tmockAA,
                     ro,vo,obs):
    """The log likelihood for fitting an orbit"""
    #Use this _parse_args routine, which does forward and backward integration
    iR,ivR,ivT,iz,ivz,iphi= tmockAA._parse_args(True,False,
                                                new_vxvv[0],
                                                new_vxvv[1],
                                                new_vxvv[2],
                                                new_vxvv[3],
                                                new_vxvv[4],
                                                new_vxvv[5])
    if radec or lb:
        #Need to transform to ra,dec
        #First transform to X,Y,Z,vX,vY,vZ (Galactic)
        X,Y,Z = coords.galcencyl_to_XYZ(iR.flatten(),iphi.flatten(),
                                        iz.flatten(),
                                        Xsun=obs[0]/ro,
                                        Ysun=obs[1]/ro,
                                        Zsun=obs[2]/ro)
        vX,vY,vZ = coords.galcencyl_to_vxvyvz(ivR.flatten(),ivT.flatten(),
                                              ivz.flatten(),iphi.flatten(),
                                              vsun=nu.array(\
                obs[3:6])/vo)
        bad_indx= (X == 0.)*(Y == 0.)*(Z == 0.)
        if True in bad_indx: X[bad_indx]+= ro/10000.
        lbdvrpmllpmbb= coords.rectgal_to_sphergal(X*ro,Y*ro,Z*ro,
                                                  vX*vo,vY*vo,vZ*vo,
                                                  degree=True)
        if lb:
            orb_vxvv= nu.array([lbdvrpmllpmbb[:,0],
                                lbdvrpmllpmbb[:,1],
                                lbdvrpmllpmbb[:,2],
                                lbdvrpmllpmbb[:,4],
                                lbdvrpmllpmbb[:,5],
                                lbdvrpmllpmbb[:,3]]).T
        else:
            #Further transform to ra,dec,pmra,pmdec
            radec= coords.lb_to_radec(lbdvrpmllpmbb[:,0],
                                      lbdvrpmllpmbb[:,1],degree=True)
            pmrapmdec= coords.pmllpmbb_to_pmrapmdec(lbdvrpmllpmbb[:,4],
                                                    lbdvrpmllpmbb[:,5],
                                                    lbdvrpmllpmbb[:,0],
                                                    lbdvrpmllpmbb[:,1],
                                                    degree=True)
            orb_vxvv= nu.array([radec[:,0],radec[:,1],
                                lbdvrpmllpmbb[:,2],
                                pmrapmdec[:,0],pmrapmdec[:,1],
                                lbdvrpmllpmbb[:,3]]).T
    else:
        #shape=(2tintJ-1,6)
        orb_vxvv= nu.array([iR.flatten(),ivR.flatten(),ivT.flatten(),
                            iz.flatten(),ivz.flatten(),iphi.flatten()]).T 
    out= 0.
    for ii in range(vxvv.shape[0]):
        sub_vxvv= (orb_vxvv-vxvv[ii,:].flatten())**2.
        #print sub_vxvv[nu.argmin(nu.sum(sub_vxvv,axis=1))]
        if not vxvv_err is None:
            sub_vxvv/= vxvv_err[ii,:]**2.
        else:
            sub_vxvv/= 0.01**2.
        out+= logsumexp(-0.5*nu.sum(sub_vxvv,axis=1))
    return -out
Exemplo n.º 3
0
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]
Exemplo n.º 4
0
def _fit_orbit_mlogl(new_vxvv,vxvv,vxvv_err,pot,radec,lb,
                     customsky,lb_to_customsky,pmllpmbb_to_customsky,
                     tmockAA,
                     ro,vo,obs):
    """The log likelihood for fitting an orbit"""
    #Use this _parse_args routine, which does forward and backward integration
    iR,ivR,ivT,iz,ivz,iphi= tmockAA._parse_args(True,False,
                                                new_vxvv[0],
                                                new_vxvv[1],
                                                new_vxvv[2],
                                                new_vxvv[3],
                                                new_vxvv[4],
                                                new_vxvv[5])
    if radec or lb or customsky:
        #Need to transform to (l,b), (ra,dec), or a custom set
        #First transform to X,Y,Z,vX,vY,vZ (Galactic)
        X,Y,Z = coords.galcencyl_to_XYZ(iR.flatten(),iphi.flatten(),
                                        iz.flatten(),
                                        Xsun=obs[0]/ro,
                                        Ysun=obs[1]/ro,
                                        Zsun=obs[2]/ro)
        vX,vY,vZ = coords.galcencyl_to_vxvyvz(ivR.flatten(),ivT.flatten(),
                                              ivz.flatten(),iphi.flatten(),
                                              vsun=nu.array(\
                obs[3:6])/vo)
        bad_indx= (X == 0.)*(Y == 0.)*(Z == 0.)
        if True in bad_indx: X[bad_indx]+= ro/10000.
        lbdvrpmllpmbb= coords.rectgal_to_sphergal(X*ro,Y*ro,Z*ro,
                                                  vX*vo,vY*vo,vZ*vo,
                                                  degree=True)
        if lb:
            orb_vxvv= nu.array([lbdvrpmllpmbb[:,0],
                                lbdvrpmllpmbb[:,1],
                                lbdvrpmllpmbb[:,2],
                                lbdvrpmllpmbb[:,4],
                                lbdvrpmllpmbb[:,5],
                                lbdvrpmllpmbb[:,3]]).T
        elif radec:
            #Further transform to ra,dec,pmra,pmdec
            radec= coords.lb_to_radec(lbdvrpmllpmbb[:,0],
                                      lbdvrpmllpmbb[:,1],degree=True)
            pmrapmdec= coords.pmllpmbb_to_pmrapmdec(lbdvrpmllpmbb[:,4],
                                                    lbdvrpmllpmbb[:,5],
                                                    lbdvrpmllpmbb[:,0],
                                                    lbdvrpmllpmbb[:,1],
                                                    degree=True)
            orb_vxvv= nu.array([radec[:,0],radec[:,1],
                                lbdvrpmllpmbb[:,2],
                                pmrapmdec[:,0],pmrapmdec[:,1],
                                lbdvrpmllpmbb[:,3]]).T
        elif customsky:
            #Further transform to ra,dec,pmra,pmdec
            customradec= lb_to_customsky(lbdvrpmllpmbb[:,0],
                                              lbdvrpmllpmbb[:,1],degree=True)
            custompmrapmdec= pmllpmbb_to_customsky(lbdvrpmllpmbb[:,4],
                                                   lbdvrpmllpmbb[:,5],
                                                   lbdvrpmllpmbb[:,0],
                                                   lbdvrpmllpmbb[:,1],
                                                   degree=True)
            orb_vxvv= nu.array([customradec[:,0],customradec[:,1],
                                lbdvrpmllpmbb[:,2],
                                custompmrapmdec[:,0],custompmrapmdec[:,1],
                                lbdvrpmllpmbb[:,3]]).T
    else:
        #shape=(2tintJ-1,6)
        orb_vxvv= nu.array([iR.flatten(),ivR.flatten(),ivT.flatten(),
                            iz.flatten(),ivz.flatten(),iphi.flatten()]).T 
    out= 0.
    for ii in range(vxvv.shape[0]):
        sub_vxvv= (orb_vxvv-vxvv[ii,:].flatten())**2.
        #print(sub_vxvv[nu.argmin(nu.sum(sub_vxvv,axis=1))])
        if not vxvv_err is None:
            sub_vxvv/= vxvv_err[ii,:]**2.
        else:
            sub_vxvv/= 0.01**2.
        out+= logsumexp(-0.5*nu.sum(sub_vxvv,axis=1))
    return -out
Exemplo n.º 5
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)