Skip to content

Commit

Permalink
Tests of setup errors and test for impact parameters earlier
Browse files Browse the repository at this point in the history
  • Loading branch information
jobovy committed Sep 25, 2015
1 parent cbaa0cc commit 5697b47
Show file tree
Hide file tree
Showing 2 changed files with 116 additions and 10 deletions.
18 changes: 9 additions & 9 deletions galpy/df_src/streamgapdf.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,15 @@ def __init__(self,*args,**kwargs):
galpy.df_src.streamdf._INTERPDURINGSETUP)
useInterp= kwargs.pop('useInterp',
galpy.df_src.streamdf._USEINTERP)
# Analytical Plummer or general potential?
self._general_kick= GM is None or rs is None
if self._general_kick and subhalopot is None:
raise IOError("One of (GM=, rs=) or subhalopot= needs to be set to specify the subhalo's structure")
if self._general_kick:
self._subhalopot= subhalopot
else:
self._GM= GM
self._rs= rs
# Now run the regular streamdf setup, but without calculating the
# stream track (nosetup=True)
kwargs['nosetup']= True
Expand Down Expand Up @@ -153,15 +162,6 @@ def _determine_deltav_kick(self,impactb,subhalovel,
self._nKickPoints= 10*self._nTrackChunksImpact
else:
self._nKickPoints= nKickPoints
# Analytical Plummer or general potential?
self._general_kick= GM is None or rs is None
if self._general_kick and subhalopot is None:
raise IOError("One of (GM=, rs=) or subhalopot= needs to be set to specify the subhalo's structure")
if self._general_kick:
self._subhalopot= subhalopot
else:
self._GM= GM
self._rs= rs
# Interpolate the track near the gap in (x,v) at the kick_thetas
self._interpolate_stream_track_kick()
self._interpolate_stream_track_kick_aA()
Expand Down
108 changes: 107 additions & 1 deletion nose/test_streamgapdf.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,115 @@
import numpy
from nose.tools import raises
numpy.random.seed(1)
sdf_sanders15= None #so we can set this up and then use in other tests
sdft_sanders15= None #so we can set this up and then use in other tests

@raises(IOError)
def test_setupimpact_error():
#Imports
from galpy.df import streamgapdf
from galpy.orbit import Orbit
from galpy.potential import LogarithmicHaloPotential
from galpy.actionAngle import actionAngleIsochroneApprox
from galpy.util import bovy_conversion #for unit conversions
lp= LogarithmicHaloPotential(normalize=1.,q=0.9)
aAI= actionAngleIsochroneApprox(pot=lp,b=0.8)
prog_unp_peri= Orbit([2.6556151742081835,
0.2183747276300308,
0.67876510797240575,
-2.0143395648974671,
-0.3273737682604374,
0.24218273922966019])
V0, R0= 220., 8.
sigv= 0.365*(10./2.)**(1./3.) # km/s
dum= streamgapdf(sigv/V0,progenitor=prog_unp_peri,pot=lp,aA=aAI,
leading=False,nTrackChunks=26,
nTrackIterations=1,
sigMeanOffset=4.5,
tdisrupt=10.88\
/bovy_conversion.time_in_Gyr(V0,R0),
Vnorm=V0,Rnorm=R0,
impactb=0.,
subhalovel=numpy.array([6.82200571,132.7700529,
149.4174464])/V0,
timpact=0.88/bovy_conversion.time_in_Gyr(V0,R0),
impact_angle=-2.34)
# Should be including these:
# GM=10.**-2.\
# /bovy_conversion.mass_in_1010msol(V0,R0),
# rs=0.625/R0)
return None

@raises(ValueError)
def test_leadingwtrailingimpact_error():
#Imports
from galpy.df import streamgapdf
from galpy.orbit import Orbit
from galpy.potential import LogarithmicHaloPotential
from galpy.actionAngle import actionAngleIsochroneApprox
from galpy.util import bovy_conversion #for unit conversions
lp= LogarithmicHaloPotential(normalize=1.,q=0.9)
aAI= actionAngleIsochroneApprox(pot=lp,b=0.8)
prog_unp_peri= Orbit([2.6556151742081835,
0.2183747276300308,
0.67876510797240575,
-2.0143395648974671,
-0.3273737682604374,
0.24218273922966019])
V0, R0= 220., 8.
sigv= 0.365*(10./2.)**(1./3.) # km/s
dum= streamgapdf(sigv/V0,progenitor=prog_unp_peri,pot=lp,aA=aAI,
leading=True,nTrackChunks=26,
nTrackIterations=1,
sigMeanOffset=4.5,
tdisrupt=10.88\
/bovy_conversion.time_in_Gyr(V0,R0),
Vnorm=V0,Rnorm=R0,
impactb=0.,
subhalovel=numpy.array([6.82200571,132.7700529,
149.4174464])/V0,
timpact=0.88/bovy_conversion.time_in_Gyr(V0,R0),
impact_angle=-2.34,
GM=10.**-2.\
/bovy_conversion.mass_in_1010msol(V0,R0),
rs=0.625/R0)
return None

@raises(ValueError)
def test_trailingwleadingimpact_error():
#Imports
from galpy.df import streamgapdf
from galpy.orbit import Orbit
from galpy.potential import LogarithmicHaloPotential
from galpy.actionAngle import actionAngleIsochroneApprox
from galpy.util import bovy_conversion #for unit conversions
lp= LogarithmicHaloPotential(normalize=1.,q=0.9)
aAI= actionAngleIsochroneApprox(pot=lp,b=0.8)
prog_unp_peri= Orbit([2.6556151742081835,
0.2183747276300308,
0.67876510797240575,
-2.0143395648974671,
-0.3273737682604374,
0.24218273922966019])
V0, R0= 220., 8.
sigv= 0.365*(10./2.)**(1./3.) # km/s
dum= streamgapdf(sigv/V0,progenitor=prog_unp_peri,pot=lp,aA=aAI,
leading=False,nTrackChunks=26,
nTrackIterations=1,
sigMeanOffset=4.5,
tdisrupt=10.88\
/bovy_conversion.time_in_Gyr(V0,R0),
Vnorm=V0,Rnorm=R0,
impactb=0.,
subhalovel=numpy.array([6.82200571,132.7700529,
149.4174464])/V0,
timpact=0.88/bovy_conversion.time_in_Gyr(V0,R0),
impact_angle=2.34,
GM=10.**-2.\
/bovy_conversion.mass_in_1010msol(V0,R0),
rs=0.625/R0)
return None

#Exact setup from Section 5 of Sanders, Bovy, and Erkal (2015); should reproduce those results (which have been checked against a simulation)
def test_sanders15_setup():
#Imports
Expand Down Expand Up @@ -598,7 +705,6 @@ def test_impulse_deltav_general_curved_hernquist():
assert numpy.all(numpy.fabs(kick-general_kick) < 10.**tol), 'general kick calculation does not agree with Hernquist calculation for a Hernquist potential, for curved stream'
return None

from nose.tools import raises
@raises(ValueError)
def test_hernquistX_negative():
from galpy.df_src import streamgapdf
Expand Down

0 comments on commit 5697b47

Please sign in to comment.