Skip to content

Commit

Permalink
Dont' apply extra rotation of the Galactocentric frame to planarOrbits
Browse files Browse the repository at this point in the history
  • Loading branch information
jobovy committed Apr 19, 2018
1 parent a3416eb commit 0e402ab
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 19 deletions.
9 changes: 7 additions & 2 deletions galpy/orbit_src/Orbit.py
Original file line number Diff line number Diff line change
Expand Up @@ -176,10 +176,13 @@ def __init__(self,vxvv=None,uvw=False,lb=False,
else:
ra, dec= vxvv[0], vxvv[1]
l,b= coords.radec_to_lb(ra,dec,degree=True,epoch=None)
_extra_rot= True
elif len(vxvv) == 4:
l, b= vxvv[0], 0.
_extra_rot= False
else:
l,b= vxvv[0],vxvv[1]
_extra_rot= True
if _APY_LOADED and isinstance(l,units.Quantity):
l= l.to(units.deg).value
if _APY_LOADED and isinstance(b,units.Quantity):
Expand Down Expand Up @@ -234,12 +237,14 @@ def __init__(self,vxvv=None,uvw=False,lb=False,
vy/= vo
vz/= vo
vsun= nu.array([0.,1.,0.,])+vsolar/vo
R, phi, z= coords.XYZ_to_galcencyl(X,Y,Z,Zsun=zo/ro)
R, phi, z= coords.XYZ_to_galcencyl(X,Y,Z,Zsun=zo/ro,
_extra_rot=_extra_rot)
vR, vT,vz= coords.vxvyvz_to_galcencyl(vx,vy,vz,
R,phi,z,
vsun=vsun,
Xsun=1.,Zsun=zo/ro,
galcen=True)
galcen=True,
_extra_rot=_extra_rot)
if lb and len(vxvv) == 4: vxvv= [R,vR,vT,phi]
else: vxvv= [R,vR,vT,z,vz,phi]
# Parse vxvv if it consists of Quantities
Expand Down
18 changes: 9 additions & 9 deletions galpy/orbit_src/OrbitTop.py
Original file line number Diff line number Diff line change
Expand Up @@ -951,20 +951,20 @@ def _helioXYZ(self,*args,**kwargs):
X,Y,Z = coords.galcencyl_to_XYZ(\
thiso[0,:],thiso[3,:]-nu.arctan2(obs[1],obs[0]),0.,
Xsun=nu.sqrt(obs[0]**2.+obs[1]**2.)/ro,
Zsun=obs[2]/ro).T
Zsun=obs[2]/ro,_extra_rot=False).T
else: #Orbit instance
obs.turn_physical_off()
if obs.dim() == 2:
X,Y,Z = coords.galcencyl_to_XYZ(\
thiso[0,:],thiso[3,:]-obs.phi(*args,**kwargs),
nu.zeros_like(thiso[0]),
Xsun=obs.R(*args,**kwargs),Zsun=0.).T
Xsun=obs.R(*args,**kwargs),Zsun=0.,_extra_rot=False).T
else:
X,Y,Z = coords.galcencyl_to_XYZ(\
thiso[0,:],thiso[3,:]-obs.phi(*args,**kwargs),
nu.zeros_like(thiso[0]),
Xsun=obs.R(*args,**kwargs),
Zsun=obs.z(*args,**kwargs)).T
Zsun=obs.z(*args,**kwargs),_extra_rot=False).T
obs.turn_physical_on()
else: #FullOrbit
if isinstance(obs,(nu.ndarray,list)):
Expand Down Expand Up @@ -1011,35 +1011,35 @@ def _XYZvxvyvz(self,*args,**kwargs):
X,Y,Z = coords.galcencyl_to_XYZ(\
thiso[0,:],thiso[3,:]-nu.arctan2(obs[1],obs[0]),
nu.zeros_like(thiso[0]),
Xsun=Xsun/ro,Zsun=obs[2]/ro).T
Xsun=Xsun/ro,Zsun=obs[2]/ro,_extra_rot=False).T
vX,vY,vZ = coords.galcencyl_to_vxvyvz(\
thiso[1,:],thiso[2,:],nu.zeros_like(thiso[0]),
thiso[3,:]-nu.arctan2(obs[1],obs[0]),
vsun=nu.array(# have to rotate
[obs[3]*obs[0]/Xsun+obs[4]*obs[1]/Xsun,
-obs[3]*obs[1]/Xsun+obs[4]*obs[0]/Xsun,
obs[5]])/vo,
Xsun=Xsun/ro,Zsun=obs[2]/ro).T
Xsun=Xsun/ro,Zsun=obs[2]/ro,_extra_rot=False).T
else: #Orbit instance
obs.turn_physical_off()
if obs.dim() == 2:
X,Y,Z = coords.galcencyl_to_XYZ(\
thiso[0,:],thiso[3,:]-obs.phi(*args,**kwargs),
nu.zeros_like(thiso[0]),
Xsun=obs.R(*args,**kwargs),Zsun=0.).T
Xsun=obs.R(*args,**kwargs),Zsun=0.,_extra_rot=False).T
vX,vY,vZ = coords.galcencyl_to_vxvyvz(\
thiso[1,:],thiso[2,:],nu.zeros_like(thiso[0]),
thiso[3,:]-obs.phi(*args,**kwargs),
vsun=nu.array([\
obs.vR(*args,**kwargs),obs.vT(*args,**kwargs),
0.]),
Xsun=obs.R(*args,**kwargs),Zsun=0.).T
Xsun=obs.R(*args,**kwargs),Zsun=0.,_extra_rot=False).T
else:
X,Y,Z = coords.galcencyl_to_XYZ(\
thiso[0,:],thiso[3,:]-obs.phi(*args,**kwargs),
nu.zeros_like(thiso[0]),
Xsun=obs.R(*args,**kwargs),
Zsun=obs.z(*args,**kwargs)).T
Zsun=obs.z(*args,**kwargs),_extra_rot=False).T
vX,vY,vZ = coords.galcencyl_to_vxvyvz(\
thiso[1,:],thiso[2,:],nu.zeros_like(thiso[0]),
thiso[3,:]-obs.phi(*args,**kwargs),
Expand All @@ -1048,7 +1048,7 @@ def _XYZvxvyvz(self,*args,**kwargs):
obs.vT(*args,**kwargs),
obs.vz(*args,**kwargs)]),
Xsun=obs.R(*args,**kwargs),
Zsun=obs.z(*args,**kwargs)).T
Zsun=obs.z(*args,**kwargs),_extra_rot=False).T
obs.turn_physical_on()
else: #FullOrbit
if isinstance(obs,(nu.ndarray,list)):
Expand Down
12 changes: 4 additions & 8 deletions tests/test_orbit.py
Original file line number Diff line number Diff line change
Expand Up @@ -1703,8 +1703,7 @@ def test_orbit_setup_planar():
o= Orbit([120.,2.,0.5,30.],lb=True,zo=0.,solarmotion=[-10.,10.,0.])
obs= [8.,0.]
assert numpy.fabs(o.ll(obs=obs)-120.) < 10.**-10., 'Orbit ll setup does not agree with o.ll()'
# 04/2018: new definition of Galactocentric no longer has the plane at b=0 even for zo=0
assert numpy.fabs(o.bb(obs=obs)-0.) < 10.**-4., 'Orbit bb setup does not agree with o.bb()'
assert numpy.fabs(o.bb(obs=obs)-0.) < 10.**-10., 'Orbit bb setup does not agree with o.bb()'
assert numpy.fabs(o.dist(obs=obs)-2.) < 10.**-10., 'Orbit dist setup does not agree with o.dist()'
obs= [8.,0.,-10.,230.]
assert numpy.fabs(o.pmll(obs=obs)-0.5) < 10.**-10., 'Orbit pmll setup does not agree with o.pmbb()'
Expand All @@ -1714,8 +1713,7 @@ def test_orbit_setup_planar():
o= Orbit([120.,2.,0.5,30.],lb=True,zo=0.,solarmotion=[-10.,10.,0.],
ro=7.5)
assert numpy.fabs(o.ll()-120.) < 10.**-10., 'Orbit ll setup does not agree with o.ll()'
# 04/2018: new definition of Galactocentric no longer has the plane at b=0 even for zo=0
assert numpy.fabs(o.bb()-0.) < 10.**-4., 'Orbit bb setup does not agree with o.bb()'
assert numpy.fabs(o.bb()-0.) < 10.**-10., 'Orbit bb setup does not agree with o.bb()'
assert numpy.fabs(o.dist()-2.) < 10.**-10., 'Orbit dist setup does not agree with o.dist()'
obs= [8.5,0.,-10.,245.]
assert numpy.fabs(o.pmll()-0.5) < 10.**-10., 'Orbit pmll setup does not agree with o.pmbb()'
Expand All @@ -1725,8 +1723,7 @@ def test_orbit_setup_planar():
o= Orbit([120.,2.,0.5,30.],lb=True,zo=0.,solarmotion=[-10.1,4.,0.])
obs= Orbit([1.,-10.1/220.,224./220,0.],solarmotion='hogg')
assert numpy.fabs(o.ll(obs=obs)-120.) < 10.**-10., 'Orbit ll setup does not agree with o.ll()'
# 04/2018: new definition of Galactocentric no longer has the plane at b=0 even for zo=0
assert numpy.fabs(o.bb(obs=obs)-0.) < 10.**-4., 'Orbit bb setup does not agree with o.bb()'
assert numpy.fabs(o.bb(obs=obs)-0.) < 10.**-10., 'Orbit bb setup does not agree with o.bb()'
assert numpy.fabs(o.dist(obs=obs)-2.) < 10.**-10., 'Orbit dist setup does not agree with o.dist()'
assert numpy.fabs(o.pmll(obs=obs)-0.5) < 10.**-10., 'Orbit pmll setup does not agree with o.pmll()'
assert numpy.fabs(o.pmbb(obs=obs)-0.) < 10.**-5.5, 'Orbit pmbb setup does not agree with o.pmbb()'
Expand All @@ -1735,8 +1732,7 @@ def test_orbit_setup_planar():
o= Orbit([120.,2.,0.5,30.],lb=True,zo=0.,solarmotion=[-10.1,4.,0.])
obs= Orbit([1.,-10.1/220.,224./220,0.,0.,0.],solarmotion='hogg')
assert numpy.fabs(o.ll(obs=obs)-120.) < 10.**-10., 'Orbit ll setup does not agree with o.ll()'
# 04/2018: new definition of Galactocentric no longer has the plane at b=0 even for zo=0
assert numpy.fabs(o.bb(obs=obs)-0.) < 10.**-4., 'Orbit bb setup does not agree with o.bb()'
assert numpy.fabs(o.bb(obs=obs)-0.) < 10.**-10., 'Orbit bb setup does not agree with o.bb()'
assert numpy.fabs(o.dist(obs=obs)-2.) < 10.**-10., 'Orbit dist setup does not agree with o.dist()'
assert numpy.fabs(o.pmll(obs=obs)-0.5) < 10.**-10., 'Orbit pmll setup does not agree with o.pmll()'
assert numpy.fabs(o.pmbb(obs=obs)-0.) < 10.**-5.5, 'Orbit pmbb setup does not agree with o.pmbb()'
Expand Down

0 comments on commit 0e402ab

Please sign in to comment.