def sample_spraydf_pal5_spiral(Nsamples,
                               spiralpot,
                               fo='blah_trailing.dat',
                               trailing=True):

    p5 = Orbit([229.018, -0.124, 23.2, -2.296, -2.257, -58.7],
               radec=True,
               ro=ro,
               vo=vo,
               solarmotion=[-11.1, 24., 7.25])

    #convert to galpy units
    pal5 = Orbit(p5._orb.vxvv)

    if trailing:
        spdft = streamspraydf.streamspraydf(50000. * u.Msun,
                                            progenitor=pal5,
                                            pot=spiralpot,
                                            leading=False,
                                            tdisrupt=5. * u.Gyr)
        RvR, dt = spdft.sample(n=Nsamples, returndt=True, integrate=True)
        R = RvR[0]
        vR = RvR[1]
        vT = RvR[2]
        z = RvR[3]
        vz = RvR[4]
        phi = RvR[5]

        fo = open(fo, 'w')

    else:
        spdf = streamspraydf.streamspraydf(50000. * u.Msun,
                                           progenitor=pal5,
                                           pot=spiralpot,
                                           tdisrupt=5. * u.Gyr)
        RvR, dt = spdf.sample(n=Nsamples, returndt=True, integrate=True)
        R = RvR[0]
        vR = RvR[1]
        vT = RvR[2]
        z = RvR[3]
        vz = RvR[4]
        phi = RvR[5]
        fo_lead = fo.replace('trailing', 'leading')
        fo = open(fo_lead, 'w')

    fo.write("#R   phi   z   vR    vT    vz    ts" + "\n")

    for jj in range(Nsamples):
        fo.write(
            str(R[jj]) + "   " + str(phi[jj]) + "   " + str(z[jj]) + "   " +
            str(vR[jj]) + "   " + str(vT[jj]) + "   " + str(vz[jj]) + "   " +
            str(dt[jj]) + "\n")

    fo.close()

    return None
Ejemplo n.º 2
0
def sample_spraydf_noprog(N,
                          barpot,
                          nobarpot,
                          fo='sample_trailing.dat',
                          stream='Pal5',
                          Mprogenitor=50000.,
                          tage=5.,
                          write=False,
                          trailing=True):
    '''
        Sample N points for a given stream using the Particle-Spray framework
        Effects of progenitor's motion is not considered
        '''
    print(
        "WARNING: Using particle spray technique, effects of progenitor's orbit neglected."
    )

    if stream == 'Pal5':
        o = Orbit([229.018, -0.124, 23.2, -2.296, -2.257, -58.7],
                  radec=True,
                  ro=ro,
                  vo=vo,
                  solarmotion=[-11.1, 24., 7.25])

        #convert to galpy units
        orb = Orbit(o._orb.vxvv)

    elif stream == 'GD1':
        o = Orbit(phi12_to_lb_6d(0, -0.82, 10.1, -8.5, -2.15, -257.),
                  lb=True,
                  solarmotion=[-11.1, 24., 7.25],
                  ro=8.,
                  vo=220.)
        #convert to galpy units
        orb = Orbit(o._orb.vxvv)

    if trailing:
        spdft = streamspraydf.streamspraydf(Mprogenitor * u.Msun,
                                            progenitor=orb,
                                            pot=nobarpot,
                                            leading=False,
                                            tdisrupt=tage * u.Gyr)
        RvR, dt = spdft.sample(n=N, returndt=True, integrate=False)
        R = RvR[0]
        vR = RvR[1]
        vT = RvR[2]
        z = RvR[3]
        vz = RvR[4]
        phi = RvR[5]

        fo = open(fo, 'w')

    else:
        spdf = streamspraydf.streamspraydf(Mprogenitor * u.Msun,
                                           progenitor=orb,
                                           pot=nobarpot,
                                           tdisrupt=tage * u.Gyr)
        RvR, dt = spdf.sample(n=N, returndt=True, integrate=False)
        R = RvR[0]
        vR = RvR[1]
        vT = RvR[2]
        z = RvR[3]
        vz = RvR[4]
        phi = RvR[5]
        fo_lead = fo.replace('trailing', 'leading')
        fo = open(fo_lead, 'w')

    finalR = numpy.empty(N)
    finalvR = numpy.empty(N)
    finalvT = numpy.empty(N)
    finalvz = numpy.empty(N)
    finalphi = numpy.empty(N)
    finalz = numpy.empty(N)
    tt = numpy.empty(N)

    for ii in range(N):

        orb = Orbit([R[ii], vR[ii], vT[ii], z[ii], vz[ii], phi[ii]])
        orb.turn_physical_off()

        ts_future = numpy.linspace(-dt[ii], 0., 1001)
        #forward integrate in barred potential
        orb.integrate(ts_future, barpot)
        finalR[ii] = orb.R(ts_future[-1])
        finalphi[ii] = orb.phi(ts_future[-1])
        finalz[ii] = orb.z(ts_future[-1])
        finalvR[ii] = orb.vR(ts_future[-1])
        finalvT[ii] = orb.vT(ts_future[-1])
        finalvz[ii] = orb.vz(ts_future[-1])
        tt[ii] = dt[ii]

    if write:

        fo.write("#R   phi   z   vR    vT    vz    ts" + "\n")

        for jj in range(N):
            fo.write(
                str(finalR[jj]) + "   " + str(finalphi[jj]) + "   " +
                str(finalz[jj]) + "   " + str(finalvR[jj]) + "   " +
                str(finalvT[jj]) + "   " + str(finalvz[jj]) + "   " +
                str(tt[jj]) + "\n")

        fo.close()

    else:
        return (finalR, finalphi, finalz, finalvR, finalvT, finalvz, tt)
Ejemplo n.º 3
0
def sample_spraydf(N,
                   barpot,
                   stream='Pal5',
                   fo='sample_trailing.dat',
                   trailing=True,
                   Mprogenitor=50000.,
                   tage=5.,
                   write=False):
    '''
        Sample N points for a given stream using the Particle-Spray framework
        Effects of progenitor's motion is considered
        '''
    print(
        "WARNING: Using particle spray technique, effects of progenitor's orbit incorporated"
    )

    if stream == 'Pal5':
        o = Orbit([229.018, -0.124, 23.2, -2.296, -2.257, -58.7],
                  radec=True,
                  ro=ro,
                  vo=vo,
                  solarmotion=[-11.1, 24., 7.25])

        #convert to galpy units
        orb = Orbit(o._orb.vxvv)

    elif stream == 'GD1':
        o = Orbit(phi12_to_lb_6d(0, -0.82, 10.1, -8.5, -2.15, -257.),
                  lb=True,
                  solarmotion=[-11.1, 24., 7.25],
                  ro=8.,
                  vo=220.)
        #convert to galpy units
        orb = Orbit(o._orb.vxvv)

    fo = stream + fo
    if trailing:
        spdft = streamspraydf.streamspraydf(Mprogenitor * u.Msun,
                                            progenitor=orb,
                                            pot=barpot,
                                            leading=False,
                                            tdisrupt=tage * u.Gyr)
        RvR, dt = spdft.sample(n=N, returndt=True, integrate=True)
        R = RvR[0]
        vR = RvR[1]
        vT = RvR[2]
        z = RvR[3]
        vz = RvR[4]
        phi = RvR[5]

        fo = open(fo, 'w')

    else:
        spdf = streamspraydf.streamspraydf(Mprogenitor * u.Msun,
                                           progenitor=orb,
                                           pot=barpot,
                                           tdisrupt=tage * u.Gyr)
        RvR, dt = spdf.sample(n=N, returndt=True, integrate=True)
        R = RvR[0]
        vR = RvR[1]
        vT = RvR[2]
        z = RvR[3]
        vz = RvR[4]
        phi = RvR[5]
        fo_lead = fo.replace('trailing', 'leading')
        fo = open(fo_lead, 'w')

    if write:

        fo.write("#R   phi   z   vR    vT    vz    ts" + "\n")

        for jj in range(N):
            fo.write(
                str(R[jj]) + "   " + str(phi[jj]) + "   " + str(z[jj]) +
                "   " + str(vR[jj]) + "   " + str(vT[jj]) + "   " +
                str(vz[jj]) + "   " + str(dt[jj]) + "\n")

        fo.close()

    else:

        return (R, phi, z, vR, vT, vz, dt)
                                                                Acos=Ac,
                                                                Asin=As,
                                                                t_on=-5.)

p5 = Orbit([229.018, -0.124, 23.2, -2.296, -2.257, -58.7],
           radec=True,
           ro=ro,
           vo=vo,
           solarmotion=[-11.1, 24., 7.25])

#convert to galpy units
pal5 = Orbit(p5._orb.vxvv)

#mass of Pal 5 from Dehnen https://arxiv.org/pdf/astro-ph/0401422.pdf
spdf = streamspraydf.streamspraydf(60000. * units.Msun,
                                   progenitor=pal5,
                                   pot=barpot,
                                   tdisrupt=5. * units.Gyr)
spdft = streamspraydf.streamspraydf(60000. * units.Msun,
                                    progenitor=pal5,
                                    pot=barpot,
                                    leading=False,
                                    tdisrupt=5. * units.Gyr)

N = 1000

#Rt,vRt,vTt,zt,vzt,phit
RvRl, pdtl = spdf.sample(n=N, returndt=True, integrate=True)
RvRt, pdtt = spdft.sample(n=N, returndt=True, integrate=True)

ftrail = args.output
flead = ftrail.replace('trailing', 'leading')
Ejemplo n.º 5
0
def sample_spraydf_pal5_noprog(N,barpot,nobarpot,fo='blah_trailing.dat',trailing=True):
    
        p5= Orbit([229.018,-0.124,23.2,-2.296,-2.257,-58.7],radec=True,ro=ro,vo=vo,solarmotion=[-11.1,24.,7.25])

        #convert to galpy units
        pal5=Orbit(p5._orb.vxvv)

        if trailing :
            spdft= streamspraydf.streamspraydf(50000.*u.Msun,progenitor=pal5,pot=nobarpot,leading=False,tdisrupt=5.*u.Gyr)
            RvR,dt= spdft.sample(n=N,returndt=True,integrate=False)
            R=RvR[0]
            vR=RvR[1]
            vT=RvR[2]
            z=RvR[3]
            vz=RvR[4]
            phi=RvR[5]
            
            fo=open(fo,'w')
            
     
        else :
            spdf= streamspraydf.streamspraydf(50000.*u.Msun,progenitor=pal5,pot=nobarpot,tdisrupt=5.*u.Gyr)
            RvR,dt= spdf.sample(n=N,returndt=True,integrate=False)
            R=RvR[0]
            vR=RvR[1]
            vT=RvR[2]
            z=RvR[3]
            vz=RvR[4]
            phi=RvR[5]
            fo_lead=fo.replace('trailing','leading')
            fo=open(fo_lead,'w')
              
        finalR= numpy.empty(N)
        finalvR=numpy.empty(N)
        finalvT=numpy.empty(N)
        finalvz=numpy.empty(N)
        finalphi= numpy.empty(N)
        finalz= numpy.empty(N)
        tt=numpy.empty(N)

        for ii in range(N):

                orb= Orbit([R[ii],vR[ii],vT[ii],z[ii],vz[ii],phi[ii]])
                orb.turn_physical_off()
                                                           
                ts_future= numpy.linspace(-dt[ii],0.,1001)
                #forward integrate in barred potential
                orb.integrate(ts_future,barpot)
                finalR[ii]= orb.R(ts_future[-1])
                finalphi[ii]= orb.phi(ts_future[-1])
                finalz[ii]= orb.z(ts_future[-1])
                finalvR[ii]=orb.vR(ts_future[-1])
                finalvT[ii]=orb.vT(ts_future[-1])
                finalvz[ii]=orb.vz(ts_future[-1])
                tt[ii]=dt[ii]
                
        fo.write("#R   phi   z   vR    vT    vz    ts" + "\n")
    
        for jj in range(N):
            fo.write(str(finalR[jj]) + "   " + str(finalphi[jj]) + "   " + str(finalz[jj]) + "   " + str(finalvR[jj]) + "   " + str(finalvT[jj]) + "   " + str(finalvz[jj]) + "   " + str(tt[jj]) + "\n")
        
        fo.close()
    
        return None
barpot, nobarpot = SCFbar_util.Particle_Spray_MWPotentialSCFbar(
    mbar=Mbar, Acos=Ac, Asin=As, t_on=-5., pat_speed=pat_speed, tstream=td)

p5 = Orbit([229.018, -0.124, 23.2, -2.296, -2.257, -58.7],
           radec=True,
           ro=ro,
           vo=vo,
           solarmotion=[-11.1, 24., 7.25])

#convert to galpy units
pal5 = Orbit(p5._orb.vxvv)

#mass of Pal 5 from Dehnen https://arxiv.org/pdf/astro-ph/0401422.pdf
spdf = streamspraydf.streamspraydf(50000. * units.Msun,
                                   progenitor=pal5,
                                   pot=barpot,
                                   tdisrupt=td * units.Gyr,
                                   sigkvec=[0.2, 0., 0.2, 0.5, 0.5, 0.])
spdft = streamspraydf.streamspraydf(50000. * units.Msun,
                                    progenitor=pal5,
                                    pot=barpot,
                                    leading=False,
                                    tdisrupt=td * units.Gyr,
                                    sigkvec=[0.2, 0., 0.2, 0.5, 0.5, 0.])

N = 1000

#Rt,vRt,vTt,zt,vzt,phit
RvRl, pdtl = spdf.sample(n=N, returndt=True, integrate=True)
RvRt, pdtt = spdft.sample(n=N, returndt=True, integrate=True)