def test_surfacesection(): #Preliminary code import numpy from galpy.potential import MWPotential2014 from galpy.potential import evaluatePotentials as evalPot from galpy.orbit import Orbit E, Lz= -1.25, 0.6 o1= Orbit([0.8,0.,Lz/0.8,0.,numpy.sqrt(2.*(E-evalPot(MWPotential2014,0.8,0.)-(Lz/0.8)**2./2.)),0.]) ts= numpy.linspace(0.,100.,2001) o1.integrate(ts,MWPotential2014) o2= Orbit([0.8,0.3,Lz/0.8,0.,numpy.sqrt(2.*(E-evalPot(MWPotential2014,0.8,0.)-(Lz/0.8)**2./2.-0.3**2./2.)),0.]) o2.integrate(ts,MWPotential2014) def surface_section(Rs,zs,vRs): # Find points where the orbit crosses z from - to + shiftzs= numpy.roll(zs,-1) indx= (zs[:-1] < 0.)*(shiftzs[:-1] > 0.) return (Rs[:-1][indx],vRs[:-1][indx]) # Calculate and plot the surface of section ts= numpy.linspace(0.,1000.,20001) # long integration o1.integrate(ts,MWPotential2014) o2.integrate(ts,MWPotential2014) sect1Rs,sect1vRs=surface_section(o1.R(ts),o1.z(ts),o1.vR(ts)) sect2Rs,sect2vRs=surface_section(o2.R(ts),o2.z(ts),o2.vR(ts)) from matplotlib.pyplot import plot, xlim, ylim plot(sect1Rs,sect1vRs,'bo',mec='none') xlim(0.3,1.); ylim(-0.69,0.69) plot(sect2Rs,sect2vRs,'yo',mec='none') return None
def test_surfacesection(): #Preliminary code import numpy from galpy.potential import MWPotential2014 from galpy.potential import evaluatePotentials as evalPot from galpy.orbit import Orbit E, Lz= -1.25, 0.6 o1= Orbit([0.8,0.,Lz/0.8,0.,numpy.sqrt(2.*(E-evalPot(0.8,0.,MWPotential2014)-(Lz/0.8)**2./2.)),0.]) ts= numpy.linspace(0.,100.,2001) o1.integrate(ts,MWPotential2014) o2= Orbit([0.8,0.3,Lz/0.8,0.,numpy.sqrt(2.*(E-evalPot(0.8,0.,MWPotential2014)-(Lz/0.8)**2./2.-0.3**2./2.)),0.]) o2.integrate(ts,MWPotential2014) def surface_section(Rs,zs,vRs): # Find points where the orbit crosses z from - to + shiftzs= numpy.roll(zs,-1) indx= (zs[:-1] < 0.)*(shiftzs[:-1] > 0.) return (Rs[:-1][indx],vRs[:-1][indx]) # Calculate and plot the surface of section ts= numpy.linspace(0.,1000.,20001) # long integration o1.integrate(ts,MWPotential2014) o2.integrate(ts,MWPotential2014) sect1Rs,sect1vRs=surface_section(o1.R(ts),o1.z(ts),o1.vR(ts)) sect2Rs,sect2vRs=surface_section(o2.R(ts),o2.z(ts),o2.vR(ts)) from matplotlib.pyplot import plot, xlim, ylim plot(sect1Rs,sect1vRs,'bo',mec='none') xlim(0.3,1.); ylim(-0.69,0.69) plot(sect2Rs,sect2vRs,'yo',mec='none') return None
def orbit_at_E_L(logE, logL, x=4. / 5., pot=MWPotential2014): ''' return an orbit instance at a given energy and angular momentum in a given potential ''' Einf = evalPot(pot, 10.**5., 0.) Rc = rl(pot, 10**logL) Ec = evalPot(pot, Rc, 0.) + 0.5 * (10**logL)**2. / Rc**2. Es = Ec + (Einf - Ec) * 10.**logE Er = 2. * (Es - Ec) vR = numpy.sqrt(x * Er) vz = numpy.sqrt((1 - x) * Er) o = Orbit([Rc, vR, (10**logL) / Rc, 0., vz, 0.]) return o
def test_orbitint(): import numpy from galpy.potential import MWPotential2014 from galpy.potential import evaluatePotentials as evalPot from galpy.orbit import Orbit E, Lz= -1.25, 0.6 o1= Orbit([0.8,0.,Lz/0.8,0.,numpy.sqrt(2.*(E-evalPot(0.8,0.,MWPotential2014)-(Lz/0.8)**2./2.)),0.]) ts= numpy.linspace(0.,100.,2001) o1.integrate(ts,MWPotential2014) o1.plot(xrange=[0.3,1.],yrange=[-0.2,0.2],color='k') o2= Orbit([0.8,0.3,Lz/0.8,0.,numpy.sqrt(2.*(E-evalPot(0.8,0.,MWPotential2014)-(Lz/0.8)**2./2.-0.3**2./2.)),0.]) o2.integrate(ts,MWPotential2014) o2.plot(xrange=[0.3,1.],yrange=[-0.2,0.2],color='k') return None
def test_orbitint(): import numpy from galpy.potential import MWPotential2014 from galpy.potential import evaluatePotentials as evalPot from galpy.orbit import Orbit E, Lz= -1.25, 0.6 o1= Orbit([0.8,0.,Lz/0.8,0.,numpy.sqrt(2.*(E-evalPot(MWPotential2014,0.8,0.)-(Lz/0.8)**2./2.)),0.]) ts= numpy.linspace(0.,100.,2001) o1.integrate(ts,MWPotential2014) o1.plot(xrange=[0.3,1.],yrange=[-0.2,0.2],color='k') o2= Orbit([0.8,0.3,Lz/0.8,0.,numpy.sqrt(2.*(E-evalPot(MWPotential2014,0.8,0.)-(Lz/0.8)**2./2.-0.3**2./2.)),0.]) o2.integrate(ts,MWPotential2014) o2.plot(xrange=[0.3,1.],yrange=[-0.2,0.2],color='k') return None
def calc_delta_MWPotential2014(savefilename,plotfilename): Lmin, Lmax= 0.01, 10. if not os.path.exists(savefilename): #Setup grid nL, nE= 101,101 Ls= 10.**numpy.linspace(numpy.log10(Lmin),numpy.log10(Lmax),nL) #Integration times ts= numpy.linspace(0.,20.,1001) deltas= numpy.empty((nL,nE)) Einf= evalPot(10.**12.,0.,MWPotential2014) print Einf for ii in range(nL): #Calculate Ec Rc= rl(MWPotential2014,Ls[ii]) print ii, "Rc = ", Rc*8. Ec= evalPot(Rc,0.,MWPotential2014)+0.5*Ls[ii]**2./Rc**2. Es= Ec+(Einf-Ec)*10.**numpy.linspace(-2.,0.,nE) for jj in range(nE): #Setup an orbit with this energy and angular momentum Er= 2.*(Es[jj]-Ec) #Random energy times 2 = vR^2 + vz^2 vR= numpy.sqrt(4./5.*Er) vz= numpy.sqrt(1./5.*Er) o= Orbit([Rc,vR,Ls[ii]/Rc,0.,vz,0.]) o.integrate(ts,MWPotential2014,method='symplec4_c') deltas[ii,jj]= estimateDeltaStaeckel(o.R(ts),o.z(ts), pot=MWPotential2014) #Save save_pickles(savefilename,deltas) else: savefile= open(savefilename,'rb') deltas= pickle.load(savefile) savefile.close() #Plot print numpy.nanmax(deltas) bovy_plot.bovy_print() bovy_plot.bovy_dens2d(deltas.T,origin='lower',cmap='jet', xrange=[numpy.log10(Lmin),numpy.log10(Lmax)], yrange=[-2,0.], xlabel=r'$\log_{10} L$', ylabel=r'$\log_{10}\left(\frac{E-E_c(L)}{E(\infty)-E_c(L)}\right)$', colorbar=True,shrink=0.78, zlabel=r'$\mathrm{Approximate\ focal\ length}$', # interpolation='nearest', vmin=0.,vmax=0.6) bovy_plot.bovy_end_print(plotfilename) return None
def plot_twoorbits(plotfilename1,plotfilename2): #First orbit E, Lz= -1.25, 0.6 o1= Orbit([0.8,0.,Lz/0.8,0.,numpy.sqrt(2.*(E-evalPot(0.8,0.,MWPotential2014)-(Lz/0.8)**2./2.)),0.]) ts= numpy.linspace(0.,100.,2001) o1.integrate(ts,MWPotential2014) print "First orbit: E, L = %f,%f" % (o1.E(),o1.L()[:,2]) o2= Orbit([0.8,0.3,Lz/0.8,0.,numpy.sqrt(2.*(E-evalPot(0.8,0.,MWPotential2014)-(Lz/0.8)**2./2.-0.3**2./2.)),0.]) o2.integrate(ts,MWPotential2014) print "Second orbit: E, L = %f,%f" % (o2.E(),o2.L()[:,2]) print "First orbit: zmax = %f" % (o1.zmax()) print "Second orbit: zmax = %f" % (o2.zmax()) o1.plot(xrange=[0.3,1.],yrange=[-0.2,0.2],color='k') bovy_plot.bovy_end_print(plotfilename1) o2.plot(xrange=[0.3,1.],yrange=[-0.2,0.2],color='k') bovy_plot.bovy_end_print(plotfilename2) return (o1,o2)
def plot_aagrid(plotfilename1,plotfilename2): #Setup orbit E, Lz= -1.25, 0.6 o= Orbit([0.8,0.3,Lz/0.8,0.,numpy.sqrt(2.*(E-evalPot(0.8,0.,MWPotential2014)-(Lz/0.8)**2./2.-0.3**2./2.)),0.]) delta= 0.434 #Integrate the orbit, setup Staeckel already to calculate the period aAS= actionAngleStaeckel(pot=MWPotential2014,delta=delta,c=True) orbt= 2.*numpy.pi/aAS.actionsFreqs(o)[4] norb= 5. nt= 501 ts= numpy.linspace(0.,norb*orbt,nt) o.integrate(ts,MWPotential2014,method='symplec4_c') #First do adiabatic aAA= actionAngleAdiabatic(pot=MWPotential2014,gamma=1.,c=True) aAAG= actionAngleAdiabaticGrid(pot=MWPotential2014,gamma=1.,c=True, nR=31,nEz=31,nEr=51,nLz=51) jfa= aAA(o.R(ts),o.vR(ts),o.vT(ts),o.z(ts),o.vz(ts),o.phi(ts)) jfag= aAAG(o.R(ts),o.vR(ts),o.vT(ts),o.z(ts),o.vz(ts),o.phi(ts)) #First do adiabatic #aAS already setup aASG= actionAngleStaeckelGrid(pot=MWPotential2014,delta=delta,c=True, nE=51,npsi=51,nLz=51) jfs= aAS(o.R(ts),o.vR(ts),o.vT(ts),o.z(ts),o.vz(ts),o.phi(ts)) jfsg= aASG(o.R(ts),o.vR(ts),o.vT(ts),o.z(ts),o.vz(ts),o.phi(ts)) bovy_plot.bovy_print() line1= bovy_plot.bovy_plot(jfa[0],jfa[2],'r.', xrange=[0.045,0.055], yrange=[0.0075,0.011], xlabel=r'$J_R$',ylabel=r'$J_z$',zorder=2) line2= bovy_plot.bovy_plot(jfag[0],jfag[2],'rx',overplot=True,zorder=1) bovy_plot.bovy_plot(jfs[0],jfs[2],'k,',overplot=True) pyplot.legend((line1[0],line2[0]), (r'$\mathrm{\texttt{actionAngleAdiabatic}}$', r'$\mathrm{\texttt{actionAngleAdiabaticGrid}}$',), loc='upper right',#bbox_to_anchor=(.91,.375), numpoints=1, prop={'size':14}, frameon=False) bovy_plot.bovy_end_print(plotfilename1) #Zoom of Staeckel line1= bovy_plot.bovy_plot(jfs[0],jfs[2],'k.', xrange=[0.05025,0.05145], yrange=[0.0086,0.00933], xlabel=r'$J_R$',ylabel=r'$J_z$') line2= bovy_plot.bovy_plot(jfsg[0],jfsg[2],'kx',overplot=True) pyplot.legend((line1[0],line2[0]), (r'$\mathrm{\texttt{actionAngleStaeckel}}$', r'$\mathrm{\texttt{actionAngleStaeckelGrid}}$',), loc='upper right',#bbox_to_anchor=(.91,.375), numpoints=1, prop={'size':14}, frameon=False) bovy_plot.bovy_end_print(plotfilename2) return None
def orbits_on_grid(logE_range=[-2., 0.], logL_range=[-2., 1.], nE=101, nL=101, x=4. / 5., pot=MWPotential2014): ''' generate initial phase-space points for a grid of orbits in a given potential ''' grid = np.empty([nE, nL, 6]) logEs = np.linspace(logE_range[0], logE_range[1], nE) logLs = np.linspace(logL_range[0], logL_range[1], nL) Einf = evalPot(pot, 10.**12., 0.) for j in range(nL): Rc = rl(pot, 10**logLs[j]) Ec = evalPot(pot, Rc, 0.) + 0.5 * (10**logLs[j])**2. / Rc**2. Es = Ec + (Einf - Ec) * 10.**logEs for i in range(nE): Er = 2. * (Es[i] - Ec) vR = numpy.sqrt(x * Er) vz = numpy.sqrt((1 - x) * Er) grid[i, j] = [Rc, vR, (10**logLs[j]) / Rc, 0., vz, 0.] return grid
def plot_liouville(plotfilename): E, Lz= -1.25, 0.6 aAS= actionAngleStaeckel(pot=MWPotential2014,c=True,delta=0.5) #planarOrbit w/ the same energy o= Orbit([0.8,numpy.sqrt(2.*(E-evalPot(0.8,0.,MWPotential2014)-(Lz/0.8)**2./2.)),Lz/0.8,0.]) #For the orbital period fo= Orbit([0.8,numpy.sqrt(2.*(E-evalPot(0.8,0.,MWPotential2014)-(Lz/0.8)**2./2.)),Lz/0.8,0.,0.001,0.]) orbt= 2.*numpy.pi/aAS.actionsFreqs(fo)[4] norb= 200. nt= 20001 ts= numpy.linspace(0.,norb*orbt,nt) start= time.time() integrator= 'dopr54_c' o.integrate_dxdv([1.,0.,0.,0.],ts,MWPotential2014, method=integrator, rectIn=True,rectOut=True) dx= o.getOrbit_dxdv()[:,:] o.integrate_dxdv([0.,1.,0.,0.],ts,MWPotential2014, method=integrator, rectIn=True,rectOut=True) dy= o.getOrbit_dxdv()[:,:] o.integrate_dxdv([0.,0.,1.,0.],ts,MWPotential2014, method=integrator, rectIn=True,rectOut=True) dvx= o.getOrbit_dxdv()[:,:] o.integrate_dxdv([0.,0.,0.,1.],ts,MWPotential2014, method=integrator, rectIn=True,rectOut=True) dvy= o.getOrbit_dxdv()[:,:] print integrator, time.time()-start #Calculate Jacobian jacs= numpy.array([numpy.linalg.det(numpy.array([dx[ii],dy[ii], dvx[ii],dvy[ii]])) for ii in range(nt)]) breakt= 8. pts= list(ts[ts < breakt]) pts.extend(list((ts[ts >= breakt])[::10])) pts= numpy.array(pts) pjacs= list(jacs[ts < breakt]) pjacs.extend(list((jacs[ts >= breakt])[::10])) pjacs= numpy.array(pjacs) print integrator, numpy.mean(jacs)-1. bovy_plot.bovy_print(fig_width=3.25,fig_height=4.5) pyplot.subplot(4,1,4) bovy_plot.bovy_plot(pts/orbt,numpy.fabs(pjacs-1.),color='k', loglog=True,gcf=True, xrange=[0.5,norb], yrange=[10.**-12.,10.**0.], xlabel=r'$\mathrm{Number\ of\ orbital\ periods}$') bovy_plot.bovy_text(r'$\texttt{dopr54\_c}$', top_left=True,size=14.) bovy_plot.bovy_text(0.1,10.**44.5, r'$|\mathrm{Determinant\ of\ volume\ transformation}-1|$', fontsize=16., rotation='vertical') ax= pyplot.gca() ax.xaxis.set_major_formatter(ticker.FormatStrFormatter(r'$%0.f$')) ax.yaxis.set_ticks([10.**-12.,10.**-8.,10.**-4.,1.]) nullfmt = NullFormatter() # no labels other_integrators= ['odeint', 'rk4_c','rk6_c'] for ii,integrator in enumerate(other_integrators): start= time.time() o.integrate_dxdv([1.,0.,0.,0.],ts,MWPotential2014, method=integrator, rectIn=True,rectOut=True) dx= o.getOrbit_dxdv()[:,:] o.integrate_dxdv([0.,1.,0.,0.],ts,MWPotential2014, method=integrator, rectIn=True,rectOut=True) dy= o.getOrbit_dxdv()[:,:] o.integrate_dxdv([0.,0.,1.,0.],ts,MWPotential2014, method=integrator, rectIn=True,rectOut=True) dvx= o.getOrbit_dxdv()[:,:] o.integrate_dxdv([0.,0.,0.,1.],ts,MWPotential2014, method=integrator, rectIn=True,rectOut=True) dvy= o.getOrbit_dxdv()[:,:] print integrator, time.time()-start jacs= numpy.array([numpy.linalg.det(numpy.array([dx[jj],dy[jj], dvx[jj],dvy[jj]])) for jj in range(nt)]) pts= list(ts[ts < breakt]) pts.extend(list((ts[ts >= breakt])[::10])) pts= numpy.array(pts) pjacs= list(jacs[ts < breakt]) pjacs.extend(list((jacs[ts >= breakt])[::10])) pjacs= numpy.array(pjacs) print integrator, numpy.mean(jacs)-1. pyplot.subplot(4,1,ii+1) if integrator == 'odeint': yrange=[10.**-8.,10.**4.] yticks= [10.**-8.,10.**-4.,1.,10.**4.] else: yrange=[10.**-12.,10.**0.] yticks= [10.**-12.,10.**-8.,10.**-4.,1.] bovy_plot.bovy_plot(pts/orbt,numpy.fabs(pjacs-1.),color='k', loglog=True,gcf=True, xrange=[0.5,norb], yrange=yrange) thisax= pyplot.gca() thisax.xaxis.set_major_formatter(nullfmt) thisax.yaxis.set_ticks(yticks) bovy_plot.bovy_text(r'$\texttt{%s}$' % (integrator.replace('_','\_')), top_left=True,size=14.) bovy_plot.bovy_end_print(plotfilename) return None
def plot_aaspher_conservation(plotfilename1,plotfilename2): #Setup orbit E, Lz= -1.25, 0.6 o= Orbit([0.8,0.3,Lz/0.8,0.,numpy.sqrt(2.*(E-evalPot(0.8,0.,MWPotential2014)-(Lz/0.8)**2./2.-0.3**2./2.)),0.]) #Integrate the orbit to estimate an equivalent b nt= 1001 ts= numpy.linspace(0.,20.,nt) o.integrate(ts,MWPotential2014,method='symplec4_c') b= estimateBIsochrone(o.R(ts),o.z(ts),pot=MWPotential2014) print b b= 0.3 #Now integrate the orbit in the isochronePotential ip= IsochronePotential(normalize=1.,b=b) aAI= actionAngleIsochrone(ip=ip) orbt= 2.*numpy.pi/aAI.actionsFreqs(o)[4] norb= 200. nt= 20001 ts= numpy.linspace(0.,norb*orbt,nt) o.integrate(ts,ip,method='symplec4_c') #Calculate actions, frequencies, and angles jfa= aAI.actionsFreqsAngles(o.R(ts),o.vR(ts),o.vT(ts), o.z(ts),o.vz(ts),o.phi(ts)) dJs= numpy.fabs((jfa[0]-numpy.mean(jfa[0]))/numpy.mean(jfa[0])) dOrs= numpy.fabs((jfa[3]-numpy.mean(jfa[3]))/numpy.mean(jfa[3])) dOzs= numpy.fabs((jfa[5]-numpy.mean(jfa[5]))/numpy.mean(jfa[5])) print "frequencies", numpy.mean(dOrs), numpy.mean(dOzs) ar= dePeriod(numpy.reshape(jfa[6],(1,len(ts)))).flatten() az= dePeriod(numpy.reshape(jfa[8],(1,len(ts)))).flatten() danglers= numpy.fabs(ar-numpy.mean(jfa[3])*ts-jfa[6][0])/2./numpy.pi danglezs= numpy.fabs(az-numpy.mean(jfa[5])*ts-jfa[8][0])/2./numpy.pi #Break up breakt= 50. pts= parse_break(ts,ts < breakt) pdJs= parse_break(dJs,ts < breakt) pdanglers= parse_break(danglers,ts < breakt) pdanglezs= parse_break(danglezs,ts < breakt) #dAngles bovy_plot.bovy_print() pyplot.subplot(2,1,1) bovy_plot.bovy_plot(pts/orbt, pdJs, color='k',loglog=True,gcf=True, xrange=[0.5,norb], yrange=[10.**-12.,1.]) bovy_plot.bovy_text(r'$\texttt{actionAngleIsochrone}$', top_left=True,size=14.) ax= pyplot.gca() ax.yaxis.set_ticks([10.**-12.,10.**-8.,10.**-4.,1.]) nullfmt = NullFormatter() # no labels ax.xaxis.set_major_formatter(nullfmt) #Same for actionAngleSpherical aAS= actionAngleSpherical(pot=ip) tts= ts[::1] jfa= aAS.actionsFreqsAngles(o.R(tts),o.vR(tts),o.vT(tts), o.z(tts),o.vz(tts),o.phi(tts), fixed_quad=True) #dJr dJs= numpy.fabs((jfa[0]-numpy.mean(jfa[0]))/numpy.mean(jfa[0])) dOrs= numpy.fabs((jfa[3]-numpy.mean(jfa[3]))/numpy.mean(jfa[3])) dOzs= numpy.fabs((jfa[5]-numpy.mean(jfa[5]))/numpy.mean(jfa[5])) print "frequencies", numpy.mean(dOrs), numpy.mean(dOzs) #dAngles ar= dePeriod(numpy.reshape(jfa[6],(1,len(tts)))).flatten() az= dePeriod(numpy.reshape(jfa[8],(1,len(tts)))).flatten() danglers= numpy.fabs(ar-numpy.mean(jfa[3])*tts-jfa[6][0])/2./numpy.pi danglezs= numpy.fabs(az-numpy.mean(jfa[5])*tts-jfa[8][0])/2./numpy.pi print numpy.mean(danglers) print numpy.mean(danglezs) ptts= parse_break(tts,tts < breakt) pdJs= parse_break(dJs,tts < breakt) pyplot.subplot(2,1,2) bovy_plot.bovy_plot(ptts/orbt, pdJs, color='k',loglog=True,gcf=True, xrange=[0.5,norb], yrange=[10.**-12.,1.], xlabel=r'$\mathrm{Number\ of\ orbital\ periods}$') bovy_plot.bovy_text(r'$\texttt{actionAngleSpherical}$', top_left=True,size=14.) bovy_plot.bovy_text(0.175,10.**2.,r'$\left|\Delta J_R / J_R\right|$', fontsize=16., rotation='vertical') ax= pyplot.gca() ax.xaxis.set_major_formatter(ticker.FormatStrFormatter(r'$%0.f$')) ax.yaxis.set_ticks([10.**-12.,10.**-8.,10.**-4.,1.]) bovy_plot.bovy_end_print(plotfilename1) #Now plot the deviations in the angles bovy_plot.bovy_print() pyplot.subplot(2,1,1) liner= bovy_plot.bovy_plot(pts/orbt, pdanglers, color='k',ls='-',loglog=True,gcf=True, xrange=[0.5,norb], yrange=[10.**-12.,1.]) linez= bovy_plot.bovy_plot(pts/orbt, pdanglezs, color='k',ls='--',overplot=True) legend1= pyplot.legend((liner[0],linez[0]), (r'$\theta_R$', r'$\theta_z$'), loc='lower right',#bbox_to_anchor=(.91,.375), numpoints=2, prop={'size':14}, frameon=False) bovy_plot.bovy_text(r'$\texttt{actionAngleIsochrone}$', top_left=True,size=14.) ax= pyplot.gca() ax.yaxis.set_ticks([10.**-12.,10.**-8.,10.**-4.,1.]) nullfmt = NullFormatter() # no labels ax.xaxis.set_major_formatter(nullfmt) #Same for Spherical pdanglers= parse_break(danglers,tts < breakt) pdanglezs= parse_break(danglezs,tts < breakt) pyplot.subplot(2,1,2) bovy_plot.bovy_plot(ptts/orbt, pdanglers, color='k',ls='-',loglog=True,gcf=True, xrange=[0.5,norb], yrange=[10.**-12.,1.], xlabel=r'$\mathrm{Number\ of\ orbital\ periods}$') bovy_plot.bovy_plot(ptts/orbt, pdanglezs, color='k',ls='--',overplot=True) bovy_plot.bovy_text(r'$\texttt{actionAngleSpherical}$', top_left=True,size=14.) bovy_plot.bovy_text(0.175,10.**4.,r'$\left|\Delta \theta_{R,z} / 2\,\pi\right|$', fontsize=16., rotation='vertical') ax= pyplot.gca() ax.xaxis.set_major_formatter(ticker.FormatStrFormatter(r'$%0.f$')) ax.yaxis.set_ticks([10.**-12.,10.**-8.,10.**-4.,1.]) bovy_plot.bovy_end_print(plotfilename2) return None