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
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 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 with pytest.raises(ValueError) as excinfo: dum= streamgapdf(sigv/V0,progenitor=prog_unp_peri,pot=lp,aA=aAI, leading=False,nTrackChunks=26, nTrackIterations=1, sigMeanOffset=4.5, tdisrupt=10.88\ /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/conversion.time_in_Gyr(V0,R0), impact_angle=2.34, GM=10.**-2.\ /conversion.mass_in_1010msol(V0,R0), rs=0.625/R0) return None
def setup_gd1model(leading=True, timpact=None, hernquist=True, age=9., singleImpact=False, length_factor=1., **kwargs): lp = LogarithmicHaloPotential(normalize=1., q=0.9) aAI = actionAngleIsochroneApprox(pot=lp, b=0.8) obs = Orbit([ 1.56148083, 0.35081535, -1.15481504, 0.88719443, -0.47713334, 0.12019596 ]) sigv = 0.365 / 2. * (9. / age) #km/s, /2 bc tdis x2, adjust for diff. age if timpact is None: sdf = streamdf(sigv / 220., progenitor=obs, pot=lp, aA=aAI, leading=leading, nTrackChunks=11, tdisrupt=age / bovy_conversion.time_in_Gyr(V0, R0), Vnorm=V0, Rnorm=R0) elif singleImpact: sdf = streamgapdf(sigv / 220., progenitor=obs, pot=lp, aA=aAI, leading=leading, nTrackChunks=11, tdisrupt=age / bovy_conversion.time_in_Gyr(V0, R0), Vnorm=V0, Rnorm=R0, timpact=timpact, spline_order=3, hernquist=hernquist, **kwargs) else: sdf = streampepperdf(sigv / 220., progenitor=obs, pot=lp, aA=aAI, leading=leading, nTrackChunks=101, tdisrupt=age / bovy_conversion.time_in_Gyr(V0, R0), Vnorm=V0, Rnorm=R0, timpact=timpact, spline_order=1, hernquist=hernquist, length_factor=length_factor) sdf.turn_physical_off() return sdf
def setup_phxmodel(leading=False, timpact=None, hernquist=True, age=1.5, singleImpact=False, length_factor=1., obs = obs, sigvmod = .23, progIsTrack=False, **kwargs): #obs= Orbit([229.018,-0.124,23.2,-2.296,-2.257,-58.7], # radec=True,ro=R0,vo=V0, # solarmotion=[-11.1,24.,7.25]) aAI= actionAngleIsochroneApprox(pot=MWPotential2014,b=0.8458) sigv= sigvmod*(5./age) #km/s, adjust for diff. age if timpact is None: sdf= streamdf(sigv/V0,progenitor=obs, pot=MWPotential2014,aA=aAI, leading=leading,nTrackChunks=11, progIsTrack=progIsTrack, tdisrupt=age/bovy_conversion.time_in_Gyr(V0,R0), ro=R0,vo=V0,R0=R0, vsun=[-11.1,V0+24.,7.25],**kwargs) elif singleImpact: sdf= streamgapdf(sigv/V0,progenitor=obs, pot=MWPotential2014,aA=aAI, leading=leading,nTrackChunks=11, tdisrupt=age/bovy_conversion.time_in_Gyr(V0,R0), ro=R0,vo=V0,R0=R0, vsun=[-11.1,V0+24.,7.25], timpact= 0.3/bovy_conversion.time_in_Gyr(V0,R0), spline_order=3, hernquist=hernquist, impact_angle=0.7, impactb=0., GM= 10.**-2./bovy_conversion.mass_in_1010msol(V0,R0), rs= 0.625/R0, subhalovel=np.array([6.82200571,132.7700529,14.4174464])/V0, **kwargs) else: sdf= streampepperdf(sigv/V0,progenitor=obs, pot=MWPotential2014,aA=aAI, leading=leading,nTrackChunks=101, tdisrupt=age/bovy_conversion.time_in_Gyr(V0,R0), ro=R0,vo=V0,R0=R0, vsun=[-11.1,V0+24.,7.25], timpact=timpact, spline_order=1, hernquist=hernquist, length_factor=length_factor) sdf.turn_physical_off() return sdf
def test_sanders15_setup(): #Imports from galpy.df import streamdf, 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]) global sdf_sanders15 V0, R0= 220., 8. sigv= 0.365*(10./2.)**(1./3.) # km/s sdf_sanders15= 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) assert not sdf_sanders15 is None, 'sanders15 streamgapdf setup did not work' # Also setup the unperturbed model global sdf_sanders15_unp sdf_sanders15_unp= streamdf(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) assert not sdf_sanders15_unp is None, \ 'sanders15 unperturbed streamdf setup did not work' return None
def setup_pal5model(leading=False, timpact=None, hernquist=True, age=5., singleImpact=False, length_factor=1., **kwargs): obs= Orbit([229.018,-0.124,23.2,-2.296,-2.257,-58.7], radec=True,ro=R0,vo=V0, solarmotion=[-11.1,24.,7.25]) aAI= actionAngleIsochroneApprox(pot=MWPotential2014,b=0.8) sigv= 0.5*(5./age) #km/s, adjust for diff. age if timpact is None: sdf= streamdf(sigv/V0,progenitor=obs, pot=MWPotential2014,aA=aAI, leading=leading,nTrackChunks=11, tdisrupt=age/bovy_conversion.time_in_Gyr(V0,R0), Rnorm=R0,Vnorm=V0,R0=R0, vsun=[-11.1,V0+24.,7.25], custom_transform=_TPAL5) elif singleImpact: sdf= streamgapdf(sigv/V0,progenitor=obs, pot=MWPotential2014,aA=aAI, leading=leading,nTrackChunks=11, tdisrupt=age/bovy_conversion.time_in_Gyr(V0,R0), Rnorm=R0,Vnorm=V0,R0=R0, vsun=[-11.1,V0+24.,7.25], custom_transform=_TPAL5, timpact=timpact, spline_order=3, hernquist=hernquist,**kwargs) else: sdf= streampepperdf(sigv/V0,progenitor=obs, pot=MWPotential2014,aA=aAI, leading=leading,nTrackChunks=101, tdisrupt=age/bovy_conversion.time_in_Gyr(V0,R0), Rnorm=R0,Vnorm=V0,R0=R0, vsun=[-11.1,V0+24.,7.25], custom_transform=_TPAL5, timpact=timpact, spline_order=1, hernquist=hernquist, length_factor=length_factor) return sdf
def test_sanders15_setup(): #Imports from galpy.df import streamdf, streamgapdf from galpy.orbit import Orbit from galpy.potential import LogarithmicHaloPotential from galpy.actionAngle import actionAngleIsochroneApprox from galpy.util import 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 ]) global sdf_sanders15 V0, R0 = 220., 8. sigv = 0.365 * (10. / 2.)**(1. / 3.) # km/s sdf_sanders15= streamgapdf(sigv/V0,progenitor=prog_unp_peri,pot=lp,aA=aAI, leading=False,nTrackChunks=26, nTrackIterations=1, sigMeanOffset=4.5, tdisrupt=10.88\ /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/conversion.time_in_Gyr(V0,R0), impact_angle=-2.34, GM=10.**-2.\ /conversion.mass_in_1010msol(V0,R0), rs=0.625/R0) assert not sdf_sanders15 is None, 'sanders15 streamgapdf setup did not work' # Also setup the unperturbed model global sdf_sanders15_unp sdf_sanders15_unp= streamdf(sigv/V0,progenitor=prog_unp_peri,pot=lp,aA=aAI, leading=False,nTrackChunks=26, nTrackIterations=1, sigMeanOffset=4.5, tdisrupt=10.88\ /conversion.time_in_Gyr(V0,R0), Vnorm=V0,Rnorm=R0) assert not sdf_sanders15_unp is None, \ 'sanders15 unperturbed streamdf setup did not work' return None
def setup_gd1model(leading=True, timpact=None, hernquist=True, age=9., singleImpact=False, length_factor=1., **kwargs): lp= LogarithmicHaloPotential(normalize=1.,q=0.9) aAI= actionAngleIsochroneApprox(pot=lp,b=0.8) obs= Orbit([1.56148083,0.35081535,-1.15481504,0.88719443, -0.47713334,0.12019596]) sigv= 0.365/2.*(9./age) #km/s, /2 bc tdis x2, adjust for diff. age if timpact is None: sdf= streamdf(sigv/220.,progenitor=obs,pot=lp,aA=aAI,leading=leading, nTrackChunks=11, tdisrupt=age/bovy_conversion.time_in_Gyr(V0,R0), Vnorm=V0,Rnorm=R0) elif singleImpact: sdf= streamgapdf(sigv/220.,progenitor=obs,pot=lp,aA=aAI, leading=leading, nTrackChunks=11, tdisrupt=age/bovy_conversion.time_in_Gyr(V0,R0), Vnorm=V0,Rnorm=R0, timpact=timpact, spline_order=3, hernquist=hernquist,**kwargs) else: sdf= streampepperdf(sigv/220.,progenitor=obs,pot=lp,aA=aAI, leading=leading, nTrackChunks=101, tdisrupt=age/bovy_conversion.time_in_Gyr(V0,R0), Vnorm=V0,Rnorm=R0, timpact=timpact, spline_order=1, hernquist=hernquist, length_factor=length_factor) return sdf
def setup_mockgd1model(leading=True, pot=MWPotential2014, timpact=None, Zsun=0.025, hernquist=True, isob=0.8, age=9., sigv=0.46, singleImpact=False, length_factor=1., **kwargs): aAI = actionAngleIsochroneApprox(pot=pot, b=isob) obs = Orbit.from_name("GD1") if timpact is None: sdf = streamdf(sigv / 220., progenitor=obs, pot=pot, aA=aAI, leading=leading, nTrackChunks=11, vsun=[-11.1, 244., 7.25], Zsun=Zsun, tdisrupt=age / conversion.time_in_Gyr(V0, R0), vo=V0, ro=R0) elif singleImpact: sdf = streamgapdf(sigv / 220., progenitor=obs, pot=pot, aA=aAI, leading=leading, nTrackChunks=11, vsun=[-11.1, 244., 7.25], Zsun=Zsun, tdisrupt=age / conversion.time_in_Gyr(V0, R0), vo=V0, ro=R0, timpact=timpact, spline_order=3, hernquist=hernquist, **kwargs) else: sdf = streampepperdf(sigv / 220., progenitor=obs, pot=pot, aA=aAI, leading=leading, nTrackChunks=101, vsun=[-11.1, 244., 7.25], Zsun=Zsun, tdisrupt=age / conversion.time_in_Gyr(V0, R0), vo=V0, ro=R0, timpact=timpact, spline_order=1, hernquist=hernquist, length_factor=length_factor) sdf.turn_physical_off() #original #obs.turn_physical_off() return sdf
def setup_gd1model(leading=True, pot=MWPotential2014, timpact=None, hernquist=True, age=9., singleImpact=False, length_factor=1., **kwargs): #lp= LogarithmicHaloPotential(normalize=1.,q=0.9) aAI = actionAngleIsochroneApprox(pot=pot, b=0.8) #obs= Orbit([1.56148083,0.35081535,-1.15481504,0.88719443, # -0.47713334,0.12019596]) #progenitor pos and vel from Bovy 1609.01298 and with corrected proper motion obs = 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.) sigv = 0.365 / 2. * (9. / age) #km/s, /2 bc tdis x2, adjust for diff. age if timpact is None: sdf = streamdf(sigv / 220., progenitor=obs, pot=pot, aA=aAI, leading=leading, nTrackChunks=11, vsun=[-11.1, 244., 7.25], tdisrupt=age / bovy_conversion.time_in_Gyr(V0, R0), Vnorm=V0, Rnorm=R0) elif singleImpact: sdf = streamgapdf(sigv / 220., progenitor=obs, pot=pot, aA=aAI, leading=leading, nTrackChunks=11, vsun=[-11.1, 244., 7.25], tdisrupt=age / bovy_conversion.time_in_Gyr(V0, R0), Vnorm=V0, Rnorm=R0, timpact=timpact, spline_order=3, hernquist=hernquist, **kwargs) else: sdf = streampepperdf(sigv / 220., progenitor=obs, pot=pot, aA=aAI, leading=leading, nTrackChunks=101, vsun=[-11.1, 244., 7.25], tdisrupt=age / bovy_conversion.time_in_Gyr(V0, R0), Vnorm=V0, Rnorm=R0, timpact=timpact, spline_order=1, hernquist=hernquist, length_factor=length_factor) #sdf.turn_physical_off() #original obs.turn_physical_off() return sdf
def test_sanders15_leading_setup(): #Imports from galpy.df import streamdf, streamgapdf from galpy.orbit import Orbit from galpy.potential import LogarithmicHaloPotential, PlummerPotential 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]) global sdfl_sanders15 V0, R0= 220., 8. sigv= 0.365*(10./2.)**(1./3.) # km/s # Use a Potential object for the impact pp= PlummerPotential(amp=10.**-2.\ /bovy_conversion.mass_in_1010msol(V0,R0), b=0.625/R0) import warnings from galpy.util import galpyWarning with warnings.catch_warnings(record=True) as w: warnings.simplefilter("always",galpyWarning) sdfl_sanders15= streamgapdf(sigv/V0,progenitor=prog_unp_peri, pot=lp,aA=aAI, leading=True,nTrackChunks=26, nTrackChunksImpact=29, nTrackIterations=1, sigMeanOffset=4.5, tdisrupt=10.88\ /bovy_conversion.time_in_Gyr(V0,R0), Vnorm=V0,Rnorm=R0, impactb=0., subhalovel=numpy.array([49.447319, 116.179436, 155.104156])/V0, timpact=0.88/bovy_conversion.time_in_Gyr(V0,R0), impact_angle=2.09, subhalopot=pp, nKickPoints=290, deltaAngleTrackImpact=4.5, multi=True) # test multi # Should raise warning bc of deltaAngleTrackImpact, might raise others raisedWarning= False for wa in w: raisedWarning= (str(wa.message) == "WARNING: deltaAngleTrackImpact angle range large compared to plausible value") if raisedWarning: break assert raisedWarning, 'deltaAngleTrackImpact warning not raised when it should have been' assert not sdfl_sanders15 is None, 'sanders15 trailing streamdf setup did not work' # Also setup the unperturbed model global sdfl_sanders15_unp sdfl_sanders15_unp= streamdf(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) assert not sdfl_sanders15_unp is None, \ 'sanders15 unperturbed streamdf setup did not work' return None
def setup_pal5model(leading=False, pot=MWPotential2014, orb=[229.018, -0.124, 23.2, -2.296, -2.257, -58.7], timpact=None, b=0.8, hernquist=True, age=5., singleImpact=False, length_factor=1., **kwargs): obs = Orbit(orb, radec=True, ro=R0, vo=V0, solarmotion=[-11.1, 24., 7.25]) aAI = actionAngleIsochroneApprox(pot=pot, b=b) sigv = 0.5 * (5. / age) #km/s, adjust for diff. age if timpact is None: sdf = streamdf(sigv / V0, progenitor=obs, pot=pot, aA=aAI, leading=leading, nTrackChunks=11, tdisrupt=age / bovy_conversion.time_in_Gyr(V0, R0), Rnorm=R0, Vnorm=V0, R0=R0, vsun=[-11.1, V0 + 24., 7.25], custom_transform=_TPAL5) elif singleImpact: sdf = streamgapdf(sigv / V0, progenitor=obs, pot=pot, aA=aAI, leading=leading, nTrackChunks=11, tdisrupt=age / bovy_conversion.time_in_Gyr(V0, R0), Rnorm=R0, Vnorm=V0, R0=R0, vsun=[-11.1, V0 + 24., 7.25], custom_transform=_TPAL5, timpact=timpact, spline_order=3, hernquist=hernquist, **kwargs) else: sdf = streampepperdf(sigv / V0, progenitor=obs, pot=pot, aA=aAI, leading=leading, nTrackChunks=101, tdisrupt=age / bovy_conversion.time_in_Gyr(V0, R0), Rnorm=R0, Vnorm=V0, R0=R0, vsun=[-11.1, V0 + 24., 7.25], custom_transform=_TPAL5, timpact=timpact, spline_order=1, hernquist=hernquist, length_factor=length_factor) sdf.turn_physical_off() return sdf
def setup_streammodel( obs=None, pot = MWPotential2014, leading=False, timpact=None, hernquist=True, age=5., sigv=.5, singleImpact=False, length_factor=1., vsun=[-11.1,V0+24.,7.25], b=None, **kwargs): ''' NAME: setup_streammodel PURPOSE: Initialize a streamdf or streampepperdf instance of stellar stream, depending on its impact history INPUT: obs: Orbit instance for progenitor position pot: host potential age: stream age in Gyr sigv: ~ internal velocity dispersion in km/s, controls the stream length in proportion to the age b: fit parameter for the isochrone approximation, if None it is set automatically R, R_coord: R_name: a rotation matrix for transformation to stream coordinates,the frame they are transforming from, and a name for the new coordinate system custom_transform: depreciated, superseded by the Astropy implementation below leading: if True, use leading tail, use trailing tail otherwise hernquist: if True, use Hernquist spheres for subhalos; Plummer otherwise singleImpact: force use of the streamgapdf instead of streampepperdf length_factor: consider impacts up to length_factor x length of the stream streamdf kwargs OUTPUT: object HISTORY: 2016 - Started - Bovy (UofT) 2020-05-08 - Generalized - Hendel (UofT) ''' #automatically set up potential model if b==None: obs.turn_physical_off() b = estimateBIsochrone(pot, obs.R(), obs.z()) obs.turn_physical_on() print('Using isochrone approxmation parameter of %1.3f, should typically be between 0.5 and 1'%b) aAI= actionAngleIsochroneApprox(pot=pot,b=b) if timpact is None: sdf= streamdf(sigv/V0,progenitor=obs, pot=pot,aA=aAI, leading=leading,nTrackChunks=11, tdisrupt=age/bovy_conversion.time_in_Gyr(V0,R0), ro=R0,vo=V0,R0=R0, vsun=vsun, custom_transform=None) elif singleImpact: sdf= streamgapdf(sigv/V0,progenitor=obs, pot=pot,aA=aAI, leading=leading,nTrackChunks=11, tdisrupt=age/bovy_conversion.time_in_Gyr(V0,R0), ro=R0,vo=V0,R0=R0, vsun=vsun, custom_transform=None, timpact= 0.3/bovy_conversion.time_in_Gyr(V0,R0), spline_order=3, hernquist=hernquist, impact_angle=0.7, impactb=0., GM= 10.**-2./bovy_conversion.mass_in_1010msol(V0,R0), rs= 0.625/R0, subhalovel=np.array([6.82200571,132.7700529,14.4174464])/V0, **kwargs) else: sdf= streampepperdf(sigv/V0,progenitor=obs, pot=pot,aA=aAI, leading=leading,nTrackChunks=101, tdisrupt=age/bovy_conversion.time_in_Gyr(V0,R0), ro=R0,vo=V0,R0=R0, vsun=vsun, custom_transform=None, timpact=timpact, spline_order=3, hernquist=hernquist, length_factor=length_factor) sdf.turn_physical_off() return sdf
def test_sanders15_leading_setup(): #Imports from galpy.df import streamdf, streamgapdf from galpy.orbit import Orbit from galpy.potential import LogarithmicHaloPotential, PlummerPotential from galpy.actionAngle import actionAngleIsochroneApprox from galpy.util import 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 ]) global sdfl_sanders15 V0, R0 = 220., 8. sigv = 0.365 * (10. / 2.)**(1. / 3.) # km/s # Use a Potential object for the impact pp= PlummerPotential(amp=10.**-2.\ /conversion.mass_in_1010msol(V0,R0), b=0.625/R0) import warnings from galpy.util import galpyWarning with warnings.catch_warnings(record=True) as w: warnings.simplefilter("always", galpyWarning) sdfl_sanders15= streamgapdf(sigv/V0,progenitor=prog_unp_peri, pot=lp,aA=aAI, leading=True,nTrackChunks=26, nTrackChunksImpact=29, nTrackIterations=1, sigMeanOffset=4.5, tdisrupt=10.88\ /conversion.time_in_Gyr(V0,R0), Vnorm=V0,Rnorm=R0, impactb=0., subhalovel=numpy.array([49.447319, 116.179436, 155.104156])/V0, timpact=0.88/conversion.time_in_Gyr(V0,R0), impact_angle=2.09, subhalopot=pp, nKickPoints=290, deltaAngleTrackImpact=4.5, multi=True) # test multi # Should raise warning bc of deltaAngleTrackImpact, might raise others raisedWarning = False for wa in w: raisedWarning = ( str(wa.message) == "WARNING: deltaAngleTrackImpact angle range large compared to plausible value" ) if raisedWarning: break assert raisedWarning, 'deltaAngleTrackImpact warning not raised when it should have been' assert not sdfl_sanders15 is None, 'sanders15 trailing streamdf setup did not work' # Also setup the unperturbed model global sdfl_sanders15_unp sdfl_sanders15_unp= streamdf(sigv/V0,progenitor=prog_unp_peri, pot=lp,aA=aAI, leading=True,nTrackChunks=26, nTrackIterations=1, sigMeanOffset=4.5, tdisrupt=10.88\ /conversion.time_in_Gyr(V0,R0), Vnorm=V0,Rnorm=R0) assert not sdfl_sanders15_unp is None, \ 'sanders15 unperturbed streamdf setup did not work' return None