def test_galcenrect_to_XYZ(): gcX, gcY, gcZ= -1.,4.,2. XYZ= bovy_coords.galcenrect_to_XYZ(gcX,gcY,gcZ,Xsun=1.,Ysun=0.,Zsun=0.) assert numpy.fabs(XYZ[0]-2.) < 10.**-10., 'galcenrect_to_XYZ conversion did not work as expected' assert numpy.fabs(XYZ[1]-4.) < 10.**-10., 'galcenrect_to_XYZ conversion did not work as expected' assert numpy.fabs(XYZ[2]-2.) < 10.**-10., 'galcenrect_to_XYZ conversion did not work as expected' return None
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)
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.0 pp = Polynomial.fit(xdata, tdata, deg=options.polydeg, w=1.0 / numpy.sqrt(h + 1.0)) tdata /= pp(xdata) ll = xdata py = signal.csd(tdata, tdata, fs=1.0 / (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.0) / pp(xdata), ppyr, ppyi)
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
def plot_pdfs_l(plotfilename): lp= potential.LogarithmicHaloPotential(q=0.9,normalize=1.) aAI= actionAngleIsochroneApprox(b=0.8,pot=lp) obs= numpy.array([1.56148083,0.35081535,-1.15481504, 0.88719443,-0.47713334,0.12019596]) sdf= streamdf(_SIGV/220.,progenitor=Orbit(obs),pot=lp,aA=aAI, leading=True,nTrackChunks=_NTRACKCHUNKS, vsun=[0.,30.24*8.,0.], tdisrupt=4.5/bovy_conversion.time_in_Gyr(220.,8.), multi=_NTRACKCHUNKS) sdft= streamdf(_SIGV/220.,progenitor=Orbit(obs),pot=lp,aA=aAI, leading=False,nTrackChunks=_NTRACKCHUNKS, vsun=[0.,30.24*8.,0.], tdisrupt=4.5/bovy_conversion.time_in_Gyr(220.,8.), multi=_NTRACKCHUNKS) #Calculate the density as a function of l, p(l) #Sample from sdf llbd= sdf.sample(n=40000,lb=True) tlbd= sdft.sample(n=50000,lb=True) b,e= numpy.histogram(llbd[0],bins=101,normed=True) t= ((numpy.roll(e,1)-e)/2.+e)[1:] lspl= interpolate.UnivariateSpline(t,numpy.log(b),k=3,s=1.) lls= numpy.linspace(t[0],t[-1],_NLS) lps= numpy.exp(lspl(lls)) lps/= numpy.sum(lps)*(lls[1]-lls[0])*2. b,e= numpy.histogram(tlbd[0],bins=101,normed=True) t= ((numpy.roll(e,1)-e)/2.+e)[1:] tspl= interpolate.UnivariateSpline(t,numpy.log(b),k=3,s=0.5) tls= numpy.linspace(t[0],t[-1],_NLS) tps= numpy.exp(tspl(tls)) tps/= numpy.sum(tps)*(tls[1]-tls[0])*2. bovy_plot.bovy_print(fig_width=8.25,fig_height=3.5) bovy_plot.bovy_plot(lls,lps,'k-',lw=1.5, xlabel=r'$\mathrm{Galactic\ longitude}\,(\mathrm{deg})$', ylabel=r'$p(l)$', xrange=[65.,250.], yrange=[0.,1.2*numpy.nanmax(numpy.hstack((lps,tps)))]) bovy_plot.bovy_plot(tls,tps,'k-',lw=1.5,overplot=True) #Also plot the stream histogram #Read stream data= numpy.loadtxt(os.path.join(_STREAMSNAPDIR,'gd1_evol_hitres_01312.dat'), delimiter=',') #Transform to (l,b) XYZ= bovy_coords.galcenrect_to_XYZ(data[:,1],data[:,3],data[:,2],Xsun=8.) lbd= bovy_coords.XYZ_to_lbd(XYZ[0],XYZ[1],XYZ[2],degree=True) aadata= numpy.loadtxt(os.path.join(_STREAMSNAPAADIR, 'gd1_evol_hitres_aa_01312.dat'), delimiter=',') thetar= aadata[:,6] thetar= (numpy.pi+(thetar-numpy.median(thetar))) % (2.*numpy.pi) indx= numpy.fabs(thetar-numpy.pi) > (5.*numpy.median(numpy.fabs(thetar-numpy.median(thetar)))) lbd= lbd[indx,:] bovy_plot.bovy_hist(lbd[:,0],bins=40,range=[65.,250.], histtype='step',normed=True, overplot=True, lw=1.5,color='k') bovy_plot.bovy_end_print(plotfilename)
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 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)
def plot_stream_lb(plotfilename): #Read stream data= numpy.loadtxt(os.path.join(_STREAMSNAPDIR,'gd1_evol_hitres_01312.dat'), delimiter=',') aadata= numpy.loadtxt(os.path.join(_STREAMSNAPAADIR, 'gd1_evol_hitres_aa_01312.dat'), delimiter=',') thetar= aadata[:,6] thetar= (numpy.pi+(thetar-numpy.median(thetar))) % (2.*numpy.pi) sindx= numpy.fabs(thetar-numpy.pi) > (1.5*numpy.median(numpy.fabs(thetar-numpy.median(thetar)))) #stars in the stream #Transform to (l,b) XYZ= bovy_coords.galcenrect_to_XYZ(data[:,1],data[:,3],data[:,2],Xsun=8.) lbd= bovy_coords.XYZ_to_lbd(XYZ[0],XYZ[1],XYZ[2],degree=True) vXYZ= bovy_coords.galcenrect_to_vxvyvz(data[:,4],data[:,6],data[:,5], vsun=[0.,30.24*8.,0.]) vlbd= bovy_coords.vxvyvz_to_vrpmllpmbb(vXYZ[0],vXYZ[1],vXYZ[2], lbd[:,0],lbd[:,1],lbd[:,2], degree=True) includeorbit= True if includeorbit: npts= 201 pot= potential.LogarithmicHaloPotential(normalize=1.,q=0.9) pts= numpy.linspace(0.,4.,npts) #Calculate progenitor orbit around this point pox= numpy.median(data[:,1]) poy= numpy.median(data[:,3]) poz= numpy.median(data[:,2]) povx= numpy.median(data[:,4]) povy= numpy.median(data[:,6]) povz= numpy.median(data[:,5]) pR,pphi,pZ= bovy_coords.rect_to_cyl(pox,poy,poz) pvR,pvT,pvZ= bovy_coords.rect_to_cyl_vec(povx,povy,povz,pR, pphi,pZ,cyl=True) ppo= Orbit([pR/8.,pvR/220.,pvT/220.,pZ/8.,pvZ/220.,pphi]) pno= Orbit([pR/8.,-pvR/220.,-pvT/220.,pZ/8.,-pvZ/220.,pphi]) ppo.integrate(pts,pot) pno.integrate(pts,pot) pvec= numpy.zeros((6,npts*2-1)) pvec[0,:npts-1]= pno.x(pts)[::-1][:-1] pvec[1,:npts-1]= pno.z(pts)[::-1][:-1] pvec[2,:npts-1]= pno.y(pts)[::-1][:-1] pvec[0,npts-1:]= ppo.x(pts) pvec[1,npts-1:]= ppo.z(pts) pvec[2,npts-1:]= ppo.y(pts) pvec[3,:npts-1]= -pno.vx(pts)[::-1][:-1] pvec[4,:npts-1]= -pno.vz(pts)[::-1][:-1] pvec[5,:npts-1]= -pno.vy(pts)[::-1][:-1] pvec[3,npts-1:]= ppo.vx(pts) pvec[4,npts-1:]= ppo.vz(pts) pvec[5,npts-1:]= ppo.vy(pts) pvec[:3,:]*= 8. pvec[3:,:]*= 220. pXYZ= bovy_coords.galcenrect_to_XYZ(pvec[0,:],pvec[2,:],pvec[1,:], Xsun=8.) plbd= bovy_coords.XYZ_to_lbd(pXYZ[0],pXYZ[1],pXYZ[2],degree=True) pvXYZ= bovy_coords.galcenrect_to_vxvyvz(pvec[3,:],pvec[5,:],pvec[4,:], vsun=[0.,30.24*8.,0.]) pvlbd= bovy_coords.vxvyvz_to_vrpmllpmbb(pvXYZ[0],pvXYZ[1],pvXYZ[2], plbd[:,0],plbd[:,1],plbd[:,2], degree=True) includetrack= True if includetrack: #Setup stream model lp= potential.LogarithmicHaloPotential(q=0.9,normalize=1.) aAI= actionAngleIsochroneApprox(b=0.8,pot=lp) obs= numpy.array([1.56148083,0.35081535,-1.15481504, 0.88719443,-0.47713334,0.12019596]) sdf= streamdf(_SIGV/220.,progenitor=Orbit(obs),pot=lp,aA=aAI, leading=True,nTrackChunks=_NTRACKCHUNKS, vsun=[0.,30.24*8.,0.], tdisrupt=4.5/bovy_conversion.time_in_Gyr(220.,8.), multi=_NTRACKCHUNKS) sdft= streamdf(_SIGV/220.,progenitor=Orbit(obs),pot=lp,aA=aAI, leading=False,nTrackChunks=_NTRACKCHUNKS, vsun=[0.,30.24*8.,0.], tdisrupt=4.5/bovy_conversion.time_in_Gyr(220.,8.), multi=_NTRACKCHUNKS) #Plot bovy_plot.bovy_print(fig_width=8.25,fig_height=3.5) if 'ld' in plotfilename: lbindx= 2 ylabel=r'$\mathrm{Distance}\,(\mathrm{kpc})$' yrange=[0.,30.] elif 'lvlos' in plotfilename: lbindx= 0 ylabel=r'$V_\mathrm{los}\,(\mathrm{km\,s}^{-1})$' yrange=[-500.,500.] elif 'lpmll' in plotfilename: lbindx= 1 ylabel=r'$\mu_{l}\cos b\,(\mathrm{mas\,yr}^{-1})$' yrange=[-2.,13.5] elif 'lpmbb' in plotfilename: lbindx= 2 ylabel=r'$\mu_{b}\,(\mathrm{mas\,yr}^{-1})$' yrange=[-8.,7.] else: lbindx= 1 yrange=[-10.,60.] ylabel=r'$\mathrm{Galactic\ latitude}\,(\mathrm{deg})$' if 'vlos' in plotfilename or 'pm' in plotfilename: #Stream bovy_plot.bovy_plot(lbd[sindx,0],vlbd[sindx,lbindx],'k,', xlabel=r'$\mathrm{Galactic\ longitude}\,(\mathrm{deg})$', ylabel=ylabel, xrange=[0.,290.], yrange=yrange) #Progenitor pindx= copy.copy(True-sindx) pindx[0:9900]= False bovy_plot.bovy_plot(lbd[pindx,0],vlbd[pindx,lbindx],'k,',overplot=True) else: bovy_plot.bovy_plot(lbd[sindx,0],lbd[sindx,lbindx],'k,', xlabel=r'$\mathrm{Galactic\ longitude}\,(\mathrm{deg})$', ylabel=ylabel, xrange=[0.,290.], yrange=yrange) #Progenitor pindx= copy.copy(True-sindx) pindx[0:9900]= False bovy_plot.bovy_plot(lbd[pindx,0],lbd[pindx,lbindx],'k,',overplot=True) if includeorbit: if 'vlos' in plotfilename or 'pm' in plotfilename: bovy_plot.bovy_plot(plbd[npts,0],pvlbd[npts,lbindx], 'o',color='0.5',mec='none',overplot=True,ms=8) bovy_plot.bovy_plot(plbd[:,0],pvlbd[:,lbindx],'k--',overplot=True) else: bovy_plot.bovy_plot(plbd[npts,0],plbd[npts,lbindx], 'o',color='0.5',mec='none',overplot=True,ms=8) bovy_plot.bovy_plot(plbd[:,0],plbd[:,lbindx],'k--',overplot=True) if includetrack: d1= 'll' if 'vlos' in plotfilename: d2= 'vlos' elif 'pmll' in plotfilename: d2= 'pmll' elif 'pmbb' in plotfilename: d2= 'pmbb' elif 'ld' in plotfilename: d2= 'dist' else: d2= 'bb' sdf.plotTrack(d1=d1,d2=d2,interp=True,color='k',spread=0, overplot=True,lw=1.) sdft.plotTrack(d1=d1,d2=d2,interp=True,color='k',spread=0, overplot=True,lw=1.) #Insets if 'vlos' in plotfilename: xmin, xmax= 220., 250. ymin, ymax= 230., 390. pyplot.plot([xmin,xmin],[ymin,ymax],'k-') pyplot.plot([xmax,xmax],[ymin,ymax],'k-') pyplot.plot([xmin,xmax],[ymin,ymin],'k-') pyplot.plot([xmin,xmax],[ymax,ymax],'k-') pyplot.plot([xmin,152.],[ymin,-100.],'k:') pyplot.plot([xmin,152.],[ymax,460.],'k:') insetAxes= pyplot.axes([0.15,0.42,0.38,0.45]) pyplot.sca(insetAxes) bovy_plot.bovy_plot(lbd[:,0],vlbd[:,lbindx],'k,', overplot=True) sdf.plotProgenitor(d1=d1,d2=d2,color='k',ls='--', overplot=True) sdf.plotTrack(d1=d1,d2=d2,interp=True,color='k',spread=0, overplot=True,lw=1.) #Plot approximate scale bovy_plot.bovy_plot([240.,240.],[250.,275.],'k-',lw=2., overplot=True) bovy_plot.bovy_text(241.,255.,r'$25\,\mathrm{km\,s}^{-1}$', size=16.) nullfmt = NullFormatter() # no labels insetAxes.xaxis.set_major_formatter(nullfmt) insetAxes.yaxis.set_major_formatter(nullfmt) insetAxes.set_xlim(xmin,xmax) insetAxes.set_ylim(ymin,ymax) elif 'pmll' in plotfilename: xmin, xmax= 158.,205. ymin, ymax= 10.5, 13. pyplot.plot([xmin,xmin],[ymin,ymax],'k-') pyplot.plot([xmax,xmax],[ymin,ymax],'k-') pyplot.plot([xmin,xmax],[ymin,ymin],'k-') pyplot.plot([xmin,xmax],[ymax,ymax],'k-') pyplot.plot([xmin,113.],[ymin,6.1],'k:') pyplot.plot([xmax,227.],[ymin,6.1],'k:') insetAxes= pyplot.axes([0.43,0.12,0.3,0.4]) pyplot.sca(insetAxes) bovy_plot.bovy_plot(lbd[sindx,0],vlbd[sindx,lbindx],'k,', overplot=True) bovy_plot.bovy_plot(lbd[pindx,0],vlbd[pindx,lbindx],'k,', overplot=True) sdf.plotProgenitor(d1=d1,d2=d2,color='k',ls='--', overplot=True) sdf.plotTrack(d1=d1,d2=d2,interp=True,color='k',spread=0, overplot=True,lw=1.) #Plot approximate scale bovy_plot.bovy_plot([168.5,168.5],[10.75,11.25],'k-',lw=2., overplot=True) bovy_plot.bovy_text(169.8,10.875,r'$0.5\,\mathrm{mas\,yr}^{-1}$', size=16.) nullfmt = NullFormatter() # no labels insetAxes.xaxis.set_major_formatter(nullfmt) insetAxes.yaxis.set_major_formatter(nullfmt) insetAxes.set_xlim(xmin,xmax) insetAxes.set_ylim(ymin,ymax) elif 'pmbb' in plotfilename: xmin, xmax= 185., 230. ymin, ymax= -7.4, -4.7 pyplot.plot([xmin,xmin],[ymin,ymax],'k-') pyplot.plot([xmax,xmax],[ymin,ymax],'k-') pyplot.plot([xmin,xmax],[ymin,ymin],'k-') pyplot.plot([xmin,xmax],[ymax,ymax],'k-') pyplot.plot([xmin,159.],[ymax,1.],'k:') pyplot.plot([xmax,287.],[ymax,1.],'k:') #2nd inset xmin2, xmax2= 80., 125. ymin2, ymax2= 4.2, 5.8 pyplot.plot([xmin2,xmin2],[ymin2,ymax2],'k-') pyplot.plot([xmax2,xmax2],[ymin2,ymax2],'k-') pyplot.plot([xmin2,xmax2],[ymin2,ymin2],'k-') pyplot.plot([xmin2,xmax2],[ymax2,ymax2],'k-') pyplot.plot([xmin2,8.],[ymin2,-1.],'k:') pyplot.plot([xmax2,155.],[ymin2,-1.],'k:') insetAxes= pyplot.axes([0.55,0.57,0.34,0.3]) pyplot.sca(insetAxes) bovy_plot.bovy_plot(lbd[:,0],vlbd[:,lbindx],'k,', overplot=True) sdf.plotProgenitor(d1=d1,d2=d2,color='k',ls='--', overplot=True) sdf.plotTrack(d1=d1,d2=d2,interp=True,color='k',spread=0, overplot=True,lw=1.) #Plot approximate scale bovy_plot.bovy_plot([200.,200.],[-5.75,-5.25],'k-',lw=2., overplot=True) bovy_plot.bovy_text(201.25,-5.675,r'$0.5\,\mathrm{mas\,yr}^{-1}$', size=16.) nullfmt = NullFormatter() # no labels insetAxes.xaxis.set_major_formatter(nullfmt) insetAxes.yaxis.set_major_formatter(nullfmt) insetAxes.set_xlim(xmin,xmax) insetAxes.set_ylim(ymin,ymax) pyplot.tick_params(\ axis='both', # changes apply to the x-axis which='both', # both major and minor ticks are affected bottom='off', # ticks along the bottom edge are off top='off', # ticks along the top edge are off left='off', # ticks along the bottom edge are off right='off') # ticks along the top edge are off #Also make second inset insetAxes= pyplot.axes([0.14,0.12,0.4,0.35]) pyplot.sca(insetAxes) bovy_plot.bovy_plot(lbd[:,0],vlbd[:,lbindx],'k,', overplot=True) sdft.plotProgenitor(d1=d1,d2=d2,color='k',ls='--', overplot=True) sdft.plotTrack(d1=d1,d2=d2,interp=True,color='k',spread=0, overplot=True,lw=1.) #Plot approximate scale bovy_plot.bovy_plot([103.,103.],[4.35,4.85],'k-',lw=2., overplot=True) bovy_plot.bovy_text(104.,4.5,r'$0.5\,\mathrm{mas\,yr}^{-1}$', size=16.) nullfmt = NullFormatter() # no labels insetAxes.xaxis.set_major_formatter(nullfmt) insetAxes.yaxis.set_major_formatter(nullfmt) insetAxes.set_xlim(xmin2,xmax2) insetAxes.set_ylim(ymin2,ymax2) elif 'ld' in plotfilename: xmin, xmax= 158., 227. ymin, ymax= 7.7,9.5 pyplot.plot([xmin,xmin],[ymin,ymax],'k-') pyplot.plot([xmax,xmax],[ymin,ymax],'k-') pyplot.plot([xmin,xmax],[ymin,ymin],'k-') pyplot.plot([xmin,xmax],[ymax,ymax],'k-') pyplot.plot([xmin,70.],[ymax,18.5],'k:') pyplot.plot([xmax,248.],[ymax,18.5],'k:') #2nd inset xmin2, xmax2= 72.,100. ymin2, ymax2= 11.5, 16.1 pyplot.plot([xmin2,xmin2],[ymin2,ymax2],'k-') pyplot.plot([xmax2,xmax2],[ymin2,ymax2],'k-') pyplot.plot([xmin2,xmax2],[ymin2,ymin2],'k-') pyplot.plot([xmin2,xmax2],[ymax2,ymax2],'k-') pyplot.plot([xmin2,66.5],[ymax2,15.85],'k:') pyplot.plot([xmin2,66.5],[ymin2,0.5],'k:') insetAxes= pyplot.axes([0.31,0.6,0.48,0.27]) pyplot.sca(insetAxes) bovy_plot.bovy_plot(lbd[sindx,0],lbd[sindx,lbindx],'k,', overplot=True) bovy_plot.bovy_plot(lbd[pindx,0],lbd[pindx,lbindx],'k,', overplot=True) sdf.plotProgenitor(d1=d1,d2=d2,color='k',ls='--', overplot=True) sdf.plotTrack(d1=d1,d2=d2,interp=True,color='k',spread=0, overplot=True,lw=1.) #Plot approximate scale bovy_plot.bovy_plot([168.,168.],[8.7,9.2],'k-',lw=2., overplot=True) bovy_plot.bovy_text(169.7,8.8,r'$0.5\,\mathrm{kpc}$', size=16.) nullfmt = NullFormatter() # no labels insetAxes.xaxis.set_major_formatter(nullfmt) insetAxes.yaxis.set_major_formatter(nullfmt) insetAxes.set_xlim(xmin,xmax) insetAxes.set_ylim(ymin,ymax) pyplot.tick_params(\ axis='both', # changes apply to the x-axis which='both', # both major and minor ticks are affected bottom='off', # ticks along the bottom edge are off top='off', # ticks along the top edge are off left='off', # ticks along the bottom edge are off right='off') # ticks along the top edge are off #Also make second inset insetAxes= pyplot.axes([0.13,0.12,0.17,0.4]) pyplot.sca(insetAxes) bovy_plot.bovy_plot(lbd[:,0],lbd[:,lbindx],'k,', overplot=True) sdft.plotProgenitor(d1=d1,d2=d2,color='k',ls='--', overplot=True) sdft.plotTrack(d1=d1,d2=d2,interp=True,color='k',spread=0, overplot=True,lw=1.) #Plot approximate scale bovy_plot.bovy_plot([74.,74.],[11.95,12.45],'k-',lw=2., overplot=True) bovy_plot.bovy_text(76.,12.01,r'$0.5\,\mathrm{kpc}$', size=16.) nullfmt = NullFormatter() # no labels insetAxes.xaxis.set_major_formatter(nullfmt) insetAxes.yaxis.set_major_formatter(nullfmt) insetAxes.set_xlim(xmin2,xmax2) insetAxes.set_ylim(ymin2,ymax2) else: xmin, xmax= 90., 165. ymin, ymax= 47., 59. pyplot.plot([xmin,xmin],[ymin,ymax],'k-') pyplot.plot([xmax,xmax],[ymin,ymax],'k-') pyplot.plot([xmin,xmax],[ymin,ymin],'k-') pyplot.plot([xmin,xmax],[ymax,ymax],'k-') pyplot.plot([xmin,70.],[ymin,31.],'k:') pyplot.plot([xmax,213.],[ymin,31.],'k:') insetAxes= pyplot.axes([0.31,0.12,0.38,0.45]) pyplot.sca(insetAxes) bovy_plot.bovy_plot(lbd[sindx,0],lbd[sindx,lbindx],'k,', overplot=True) bovy_plot.bovy_plot(lbd[pindx,0],lbd[pindx,lbindx],'k,', overplot=True) sdft.plotProgenitor(d1=d1,d2=d2,color='k',ls='--', overplot=True) sdft.plotTrack(d1=d1,d2=d2,interp=True,color='k',spread=0, overplot=True,lw=1.) #Plot approximate scale bovy_plot.bovy_plot([115.,115.],[48.5,49.5],'k-',lw=2., overplot=True) bovy_plot.bovy_text(117.2,48.5,r'$1^\circ$', size=16.) nullfmt = NullFormatter() # no labels insetAxes.xaxis.set_major_formatter(nullfmt) insetAxes.yaxis.set_major_formatter(nullfmt) insetAxes.set_xlim(xmin,xmax) insetAxes.set_ylim(ymin,ymax) pyplot.tick_params(\ axis='both', # changes apply to the x-axis which='both', # both major and minor ticks are affected bottom='off', # ticks along the bottom edge are off top='off', # ticks along the top edge are off left='off', # ticks along the bottom edge are off right='off') # ticks along the top edge are off bovy_plot.bovy_end_print(plotfilename)