def test_orbmethods(): from galpy.orbit import Orbit from galpy.potential import MWPotential2014 # 8/17/2019: added explicit z=0.025, because that was the default at the # time of the galpy paper, but the default has been changed o = Orbit([0.8, 0.3, 0.75, 0., 0.2, 0.], zo=0.025) # setup R,vR,vT,z,vz,phi times = numpy.linspace(0., 10., 1001) # Output times o.integrate(times, MWPotential2014) # Integrate o.E() # Energy assert numpy.fabs(o.E() + 1.2547650648697966 ) < 10.**-5., 'Orbit method does not work as expected' o.L() # Angular momentum assert numpy.all( numpy.fabs(o.L() - numpy.array([[0., -0.16, 0.6]])) < 10.**-5. ), 'Orbit method does not work as expected' o.Jacobi(OmegaP=0.65) #Jacobi integral E-OmegaP Lz assert numpy.fabs(o.Jacobi(OmegaP=0.65) - numpy.array([-1.64476506]) ) < 10.**-5., 'Orbit method does not work as expected' o.ER(times[-1]), o.Ez(times[-1]) # Rad. and vert. E at end assert numpy.fabs(o.ER(times[-1]) + 1.27601734263047 ) < 10.**-5., 'Orbit method does not work as expected' assert numpy.fabs(o.Ez(times[-1]) - 0.021252201847851909 ) < 10.**-5., 'Orbit method does not work as expected' o.rperi(), o.rap(), o.zmax() # Peri-/apocenter r, max. |z| assert numpy.fabs(o.rperi() - 0.44231993168097 ) < 10.**-5., 'Orbit method does not work as expected' assert numpy.fabs(o.rap() - 0.87769030382105 ) < 10.**-5., 'Orbit method does not work as expected' assert numpy.fabs(o.zmax() - 0.077452357289016 ) < 10.**-5., 'Orbit method does not work as expected' o.e() # eccentricity (rap-rperi)/(rap+rperi) assert numpy.fabs(o.e() - 0.32982348199330563 ) < 10.**-5., 'Orbit method does not work as expected' o.R(2., ro=8.) # Cylindrical radius at time 2. in kpc assert numpy.fabs(o.R(2., ro=8.) - 3.5470772876920007 ) < 10.**-3., 'Orbit method does not work as expected' o.vR(5., vo=220.) # Cyl. rad. velocity at time 5. in km/s assert numpy.fabs(o.vR(5., vo=220.) - 45.202530965094553 ) < 10.**-3., 'Orbit method does not work as expected' o.ra(1.), o.dec(1.) # RA and Dec at t=1. (default settings) # 5/12/2016: test weakened, because improved galcen<->heliocen # transformation has changed these, but still close assert numpy.fabs(o.ra(1.) - numpy.array([288.19277]) ) < 10.**-1., 'Orbit method does not work as expected' assert numpy.fabs(o.dec(1.) - numpy.array([18.98069155]) ) < 10.**-1., 'Orbit method does not work as expected' o.jr(type='adiabatic'), o.jz() # R/z actions (ad. approx.) assert numpy.fabs(o.jr(type='adiabatic') - 0.05285302231137586 ) < 10.**-3., 'Orbit method does not work as expected' assert numpy.fabs(o.jz() - 0.006637988850751242 ) < 10.**-3., 'Orbit method does not work as expected' # Rad. period w/ Staeckel approximation w/ focal length 0.5, o.Tr(type='staeckel', delta=0.5, ro=8., vo=220.) # in Gyr assert numpy.fabs( o.Tr(type='staeckel', delta=0.5, ro=8., vo=220.) - 0.1039467864018446 ) < 10.**-3., 'Orbit method does not work as expected' o.plot(d1='R', d2='z') # Plot the orbit in (R,z) o.plot3d() # Plot the orbit in 3D, w/ default [x,y,z] return None
def test_orbmethods(): from galpy.orbit import Orbit from galpy.potential import MWPotential2014 o= Orbit([0.8,0.3,0.75,0.,0.2,0.]) # setup R,vR,vT,z,vz,phi times= numpy.linspace(0.,10.,1001) # Output times o.integrate(times,MWPotential2014) # Integrate o.E() # Energy assert numpy.fabs(o.E()+1.2547650648697966) < 10.**-5., 'Orbit method does not work as expected' o.L() # Angular momentum assert numpy.all(numpy.fabs(o.L()-numpy.array([[ 0. , -0.16, 0.6 ]])) < 10.**-5.), 'Orbit method does not work as expected' o.Jacobi(OmegaP=0.65) #Jacobi integral E-OmegaP Lz assert numpy.fabs(o.Jacobi(OmegaP=0.65)-numpy.array([-1.64476506])) < 10.**-5., 'Orbit method does not work as expected' o.ER(times[-1]), o.Ez(times[-1]) # Rad. and vert. E at end assert numpy.fabs(o.ER(times[-1])+1.27601734263047) < 10.**-5., 'Orbit method does not work as expected' assert numpy.fabs(o.Ez(times[-1])-0.021252201847851909) < 10.**-5., 'Orbit method does not work as expected' o.rperi(), o.rap(), o.zmax() # Peri-/apocenter r, max. |z| assert numpy.fabs(o.rperi()-0.44231993168097) < 10.**-5., 'Orbit method does not work as expected' assert numpy.fabs(o.rap()-0.87769030382105) < 10.**-5., 'Orbit method does not work as expected' assert numpy.fabs(o.zmax()-0.077452357289016) < 10.**-5., 'Orbit method does not work as expected' o.e() # eccentricity (rap-rperi)/(rap+rperi) assert numpy.fabs(o.e()-0.32982348199330563) < 10.**-5., 'Orbit method does not work as expected' o.R(2.,ro=8.) # Cylindrical radius at time 2. in kpc assert numpy.fabs(o.R(2.,ro=8.)-3.5470772876920007) < 10.**-3., 'Orbit method does not work as expected' o.vR(5.,vo=220.) # Cyl. rad. velocity at time 5. in km/s assert numpy.fabs(o.vR(5.,vo=220.)-45.202530965094553) < 10.**-3., 'Orbit method does not work as expected' o.ra(1.), o.dec(1.) # RA and Dec at t=1. (default settings) # 5/12/2016: test weakened, because improved galcen<->heliocen # transformation has changed these, but still close assert numpy.fabs(o.ra(1.)-numpy.array([ 288.19277])) < 10.**-1., 'Orbit method does not work as expected' assert numpy.fabs(o.dec(1.)-numpy.array([ 18.98069155])) < 10.**-1., 'Orbit method does not work as expected' o.jr(type='adiabatic'), o.jz() # R/z actions (ad. approx.) assert numpy.fabs(o.jr(type='adiabatic')-0.05285302231137586) < 10.**-3., 'Orbit method does not work as expected' assert numpy.fabs(o.jz()-0.006637988850751242) < 10.**-3., 'Orbit method does not work as expected' # Rad. period w/ Staeckel approximation w/ focal length 0.5, o.Tr(type='staeckel',delta=0.5,ro=8.,vo=220.) # in Gyr assert numpy.fabs(o.Tr(type='staeckel',delta=0.5,ro=8.,vo=220.)-0.1039467864018446) < 10.**-3., 'Orbit method does not work as expected' o.plot(d1='R',d2='z') # Plot the orbit in (R,z) o.plot3d() # Plot the orbit in 3D, w/ default [x,y,z] return None
now_arrayphi_star3 = star3.phi(-ts) #finding velocity components of star 1 now: now_arrayvr_star3 = star3.vR(-ts) now_arrayvt_star3 = star3.vT(-ts) now_arrayvz_star3 = star3.vz(-ts) #finding energies of star 1 now: now_arraye_star3 = star3.E(-ts) now_arrayer_star3 = star3.ER(-ts) now_arrayez_star3 = star3.Ez(-ts) i = (range(len(-ts))) now_arrayra_star3 = star3.ra(-ts)[i] now_arraydec_star3 = star3.dec(-ts)[i] now_arrayra_star2 = star2.ra(-ts)[i] now_arraydec_star2 = star2.dec(-ts)[i] now_arrayra_star1 = star1.ra(-ts)[i] now_arraydec_star1 = star1.dec(-ts)[i] now_arrayra_omega = forward_omega_orbit.ra(-ts)[i] now_arraydec_omega = forward_omega_orbit.dec(-ts)[i] #compared with current orbit of omega cen print("original omega cen location according to builtin orbit:",rrr,vrvr,vtvt,zzz,vzvz,phiphi) print('current star 3 location:',now_arrayR_star3[-1],now_arrayvr_star3[-1],now_arrayvt_star3[-1],now_arrayz_star3[-1],now_arrayvz_star3[-1],now_arrayphi_star3[-1]) i = (range(len(-ts))) #ploting 3 stars R when changing velocities
def orbital_path(cluster, dt=0.1, nt=100, pot=MWPotential2014, from_centre=False, skypath=False, initialize=False, ro=8.0, vo=220.0, plot=False): """Calculate the cluster's orbital path Parameters ---------- cluster : class StarCluster dt : float timestep that StarCluster is to be moved to nt : int number of timesteps pot : class galpy Potential that orbit is to be integrate in (default: MWPotential2014) from_centre : bool genrate orbit from cluster's exact centre instead of its assigned galactocentric coordinates (default: False) sky_path : bool return sky coordinates instead of cartesian coordinates (default: False) initialize : bool Initialize and return Orbit (default: False) ro :float galpy distance scale (Default: 8.) vo : float galpy velocity scale (Default: 220.) plot : bool plot a snapshot of the cluster in galactocentric coordinates with the orbital path (defualt: False) Returns ------- t : float times for which path is provided x,y,z : float orbit positions vx,vy,vz : float orbit velocity o : class galpy orbit (if initialize==True) History ------- 2018 - Written - Webb (UofT) """ o = initialize_orbit(cluster, from_centre=from_centre) ts = np.linspace(0, -1.0 * dt / bovy_conversion.time_in_Gyr(ro=ro, vo=vo), nt) o.integrate(ts, pot) R, phi, z = bovy_coords.rect_to_cyl(o.x(ts[-1]), o.y(ts[-1]), o.z(ts[-1])) vR, vT, vz = bovy_coords.rect_to_cyl_vec(o.vx(ts[-1]), o.vy(ts[-1]), o.vz(ts[-1]), o.x(ts[-1]), o.y(ts[-1]), o.z(ts[-1])) o = Orbit( [R / ro, vR / vo, vT / vo, z / ro, vz / vo, phi], ro=ro, vo=vo, solarmotion=[-11.1, 24.0, 7.25], ) ts = np.linspace( -1.0 * dt / bovy_conversion.time_in_Gyr(ro=ro, vo=vo), dt / bovy_conversion.time_in_Gyr(ro=ro, vo=vo), nt, ) o.integrate(ts, pot) if skypath: ra = np.array(o.ra(ts)) dec = np.array(o.dec(ts)) dist = np.array(o.dist(ts)) pmra = np.array(o.pmra(ts)) pmdec = np.array(o.pmdec(ts)) vlos = np.array(o.vlos(ts)) if cluster.units == "pckms": t = ts * bovy_conversion.time_in_Gyr(ro=ro, vo=vo) elif cluster.units == "nbody": t = ts * bovy_conversion.time_in_Gyr(ro=ro, vo=vo) / cluster.tstar elif cluster.units == "galpy": t = ts else: t = ts * bovy_conversion.time_in_Gyr(ro=ro, vo=vo) if plot: filename = kwargs.pop("filename", None) overplot = kwargs.pop("overplot", False) skyplot(cluster) plt.plot(ra, dec) if filename != None: plt.savefig(filename) if initialize: cluster.orbit = o return t, ra, dec, dist, pmra, pmdec, vlos, o else: return t, ra, dec, dist, pmra, pmdec, vlos else: x = np.array(o.x(ts)) y = np.array(o.y(ts)) z = np.array(o.z(ts)) vx = np.array(o.vx(ts)) vy = np.array(o.vy(ts)) vz = np.array(o.vz(ts)) if cluster.units == "pckms": x *= 1000.0 y *= 1000.0 z *= 1000.0 t = ts * bovy_conversion.time_in_Gyr(ro=ro, vo=vo) elif cluster.units == "nbody": x *= 1000.0 / cluster.rbar y *= 1000.0 / cluster.rbar z *= 1000.0 / luster.rbar vx /= cluster.vstar vy /= cluster.vstar vz /= cluster.vstar t = ts * bovy_conversion.time_in_Gyr(ro=ro, vo=vo) / cluster.tstar elif cluster.units == "galpy": x /= ro y /= ro z /= ro vx /= vo vy /= vo vz /= vo t = ts else: t = ts * bovy_conversion.time_in_Gyr(ro=ro, vo=vo) if plot: filename = kwargs.pop("filename", None) overplot = kwargs.pop("overplot", False) starplot(cluster, coord='xy', overplot=overplot) _lplot(x, y, overplot=True) if filename != None: plt.savefig(filename) if initialize: return t, x, y, z, vx, vy, vz, o else: return t, x, y, z, vx, vy, vz
def orbital_path( cluster, dt=0.1, nt=100, pot=MWPotential2014, from_centre=False, skypath=False, initialize=False, r0=8.0, v0=220.0, ): """ NAME: orbital_path PURPOSE: Calculate orbital path +/- dt Gyr around the cluster INPUT: cluster - StarCluster dt - timestep that StarCluster is to be moved to nt - number of timesteps pot - Potential orbit is to be integrate in (Default: MWPotential2014) from_centre - interpolate from cluster's define position (default) or the measured centre of cluster sky_path - return sky coordinates instead of cartesian coordinates (Default: False) initialize - Initialize and return Orbit (Default: False) r0 - galpy distance scale (Default: 8.) v0 - galpy velocity scale (Default: 220.) OUTPUT: t,x,y,z,vx,vy,vz HISTORY: 2018 - Written - Webb (UofT) """ o = initialize_orbit(cluster, from_centre=from_centre) ts = np.linspace(0, -1.0 * dt / bovy_conversion.time_in_Gyr(ro=r0, vo=v0), nt) o.integrate(ts, pot) R, phi, z = bovy_coords.rect_to_cyl(o.x(ts[-1]), o.y(ts[-1]), o.z(ts[-1])) vR, vT, vz = bovy_coords.rect_to_cyl_vec( o.vx(ts[-1]), o.vy(ts[-1]), o.vz(ts[-1]), o.x(ts[-1]), o.y(ts[-1]), o.z(ts[-1]) ) o = Orbit( [R / r0, vR / v0, vT / v0, z / r0, vz / v0, phi], ro=r0, vo=v0, solarmotion=[-11.1, 24.0, 7.25], ) ts = np.linspace( -1.0 * dt / bovy_conversion.time_in_Gyr(ro=r0, vo=v0), dt / bovy_conversion.time_in_Gyr(ro=r0, vo=v0), nt, ) o.integrate(ts, pot) if skypath: ra = np.array(o.ra(ts)) dec = np.array(o.dec(ts)) dist = np.array(o.dist(ts)) pmra = np.array(o.pmra(ts)) pmdec = np.array(o.pmdec(ts)) vlos = np.array(o.vlos(ts)) if cluster.units == "realpc": t = ts * bovy_conversion.time_in_Gyr(ro=r0, vo=v0) elif cluster.units == "nbody": t = ts * bovy_conversion.time_in_Gyr(ro=r0, vo=v0) / cluster.tstar elif cluster.units == "galpy": t = ts else: t = ts * bovy_conversion.time_in_Gyr(ro=r0, vo=v0) if initialize: cluster.orbit = o return t, ra, dec, dist, pmra, pmdec, vlos, o else: return t, ra, dec, dist, pmra, pmdec, vlos else: x = np.array(o.x(ts)) y = np.array(o.y(ts)) z = np.array(o.z(ts)) vx = np.array(o.vx(ts)) vy = np.array(o.vy(ts)) vz = np.array(o.vz(ts)) if cluster.units == "realpc": x *= 1000.0 y *= 1000.0 z *= 1000.0 t = ts * bovy_conversion.time_in_Gyr(ro=r0, vo=v0) elif cluster.units == "nbody": x *= 1000.0 / cluster.rbar y *= 1000.0 / cluster.rbar z *= 1000.0 / luster.rbar vx /= cluster.vstar vy /= cluster.vstar vz /= cluster.vstar t = ts * bovy_conversion.time_in_Gyr(ro=r0, vo=v0) / cluster.tstar elif cluster.units == "galpy": x /= r0 y /= r0 z /= r0 vx /= v0 vy /= v0 vz /= v0 t = ts else: t = ts * bovy_conversion.time_in_Gyr(ro=r0, vo=v0) if initialize: cluster.orbit = o return t, x, y, z, vx, vy, vz, o else: return t, x, y, z, vx, vy, vz
o.integrate(ts, MWPotential, method='dopr54_c') ##Integrating Forward in time newOrbit = Orbit([o.R(TIME), -o.vR(TIME), -o.vT(TIME), o.z(TIME), -o.vz(TIME), o.phi(TIME)],ro=8.,vo=220.) newOrbit.turn_physical_off() newOrbit.integrate(ts, MWPotential, method='dopr54_c') def randomVelocity(std=.001): if type(std).__name__ == "Quantity": return nu.random.normal(scale=std.value)*std.unit return nu.random.normal(scale=std) time1 = nu.arange(0, TIME.value, dt.value)*units.Myr orbits_pos = nu.empty((len(time1) + 1,9,len(ts)), dtype=units.quantity.Quantity) orbits_pos[0, :, :] = ts, newOrbit.x(ts), newOrbit.y(ts), newOrbit.z(ts), newOrbit.vx(ts), newOrbit.vy(ts), newOrbit.vz(ts), newOrbit.ra(ts), newOrbit.dec(ts) orbits_pos[:,:,:] = orbits_pos[0,:,:] i = 0 std = 0.004 stdR = std stdT = std stdz = std for t in time1: print t dvR = randomVelocity(stdR) dvT = randomVelocity(stdT) dvz = randomVelocity(stdz) #dvR, dvT, dvz = 0,0,0 tempOrbit = Orbit([newOrbit.R(t), newOrbit.vR(t) + dvR, newOrbit.vT(t) + dvT, newOrbit.z(t), newOrbit.vz(t) + dvz, newOrbit.phi(t)],ro=8.,vo=220.) tempOrbit.turn_physical_off() time = nu.arange(0,(TIME + step_size - t).value,step_size.value)*units.Myr
def pal5_dpmguess(pot, doras=None, dodecs=None, dovloss=None, dmin=21., dmax=25., dstep=0.02, pmmin=-0.36, pmmax=0.36, pmstep=0.01, alongbfpm=False, ro=_REFR0, vo=_REFV0): if doras is None: with open('pal5_stream_orbit_offset.pkl', 'rb') as savefile: doras = pickle.load(savefile) dodecs = pickle.load(savefile) dovloss = pickle.load(savefile) ds = numpy.arange(dmin, dmax + dstep / 2., dstep) pmoffs = numpy.arange(pmmin, pmmax + pmstep / 2., pmstep) lnl = numpy.zeros((len(ds), len(pmoffs))) pos_radec, rvel_ra = pal5_data() print("Determining good distance and parallel proper motion...") for ii, d in tqdm.tqdm(enumerate(ds)): for jj, pmoff in enumerate(pmoffs): if alongbfpm: pm = (d - 24.) * 0.099 + 0.0769 + pmoff else: pm = pmoff progt = Orbit([ 229.11, 0.3, d + 0.3, -2.27 + pm, -2.22 + pm * 2.257 / 2.296, -58.5 ], radec=True, ro=ro, vo=vo, solarmotion=[-11.1, 24., 7.25]).flip() ts = numpy.linspace(0., 3., 1001) progt.integrate(ts, pot) progt._orb.orbit[:, 1] *= -1. progt._orb.orbit[:, 2] *= -1. progt._orb.orbit[:, 4] *= -1. toras, todecs, tovloss = progt.ra(ts), progt.dec(ts), progt.vlos( ts) # Interpolate onto common RA ipdec = interpolate.InterpolatedUnivariateSpline(toras, todecs) ipvlos = interpolate.InterpolatedUnivariateSpline(toras, tovloss) todecs = ipdec(doras) - dodecs tovloss = ipvlos(doras) - dovloss est_trackRADec_trailing = numpy.zeros((1, len(doras), 2)) est_trackRADec_trailing[0, :, 0] = doras est_trackRADec_trailing[0, :, 1] = todecs est_trackRAVlos_trailing = numpy.zeros((1, len(doras), 2)) est_trackRAVlos_trailing[0, :, 0] = doras est_trackRAVlos_trailing[0, :, 1] = tovloss lnl[ii,jj]= numpy.sum(\ pal5_lnlike(pos_radec,rvel_ra, est_trackRADec_trailing, est_trackRADec_trailing, # hack est_trackRAVlos_trailing, est_trackRAVlos_trailing, # hack numpy.array([0.]), numpy.array([0.]),None)[0,:3:2])\ -0.5*pm**2./0.186**2. #pm measurement bestd = ds[numpy.unravel_index(numpy.argmax(lnl), lnl.shape)[0]] if alongbfpm: bestpmoff= (bestd-24.)*0.099+0.0769\ +pmoffs[numpy.unravel_index(numpy.argmax(lnl),lnl.shape)[1]] else: bestpmoff = pmoffs[numpy.unravel_index(numpy.argmax(lnl), lnl.shape)[1]] return (bestd, bestpmoff, lnl, ds, pmoffs)
def pal5_dpmguess( pot: PotentialType, doras: Optional[float] = None, dodecs: Optional[float] = None, dovloss: Optional[float] = None, dmin: float = 21.0, dmax: float = 25.0, dstep: float = 0.02, pmmin: float = -0.36, pmmax: float = 0.36, pmstep: float = 0.01, alongbfpm: bool = False, ro: float = REFR0, vo: float = REFV0, ) -> tuple: """pal5_dpmguess. Parameters ---------- pot: Potential doras : float or None, optional default None dodecs : float or None, optional default None dovloss : float or None, optional default None dmin=21 : float or None, optional default 0 dmax=25 : float or None, optional default 0 dstep=0 : float or None, optional default 02 pmmin=-0 : float or None, optional default 36 pmmax=0 : float or None, optional default 36 pmstep=0 : float or None, optional default 01 alongbfpm : float or None, optional default False ro : float or None, optional default REFR0 vo : float or None, optional default REFV0 Returns ------- bestd bestpmoff lnl ds pmoffs """ if doras is None: with open("pal5_stream_orbit_offset.pkl", "rb") as savefile: doras = pickle.load(savefile) dodecs = pickle.load(savefile) dovloss = pickle.load(savefile) ds = np.arange(dmin, dmax + dstep / 2.0, dstep) pmoffs = np.arange(pmmin, pmmax + pmstep / 2.0, pmstep) lnl = np.zeros((len(ds), len(pmoffs))) pos_radec, rvel_ra = pal5_data_total() print("Determining good distance and parallel proper motion...") for ii, d in tqdm(enumerate(ds)): for jj, pmoff in enumerate(pmoffs): if alongbfpm: pm = (d - 24.0) * 0.099 + 0.0769 + pmoff else: pm = pmoff progt = Orbit( [ 229.11, 0.3, d + 0.3, -2.27 + pm, -2.22 + pm * 2.257 / 2.296, -58.5, ], radec=True, ro=ro, vo=vo, solarmotion=[-11.1, 24.0, 7.25], ).flip() ts = np.linspace(0.0, 3.0, 1001) progt.integrate(ts, pot) progt._orb.orbit[:, 1] *= -1.0 progt._orb.orbit[:, 2] *= -1.0 progt._orb.orbit[:, 4] *= -1.0 toras, todecs, tovloss = ( progt.ra(ts), progt.dec(ts), progt.vlos(ts), ) # Interpolate onto common RA ipdec = interpolate.InterpolatedUnivariateSpline(toras, todecs) ipvlos = interpolate.InterpolatedUnivariateSpline(toras, tovloss) todecs = ipdec(doras) - dodecs tovloss = ipvlos(doras) - dovloss est_trackRADec_trailing = np.zeros((1, len(doras), 2)) est_trackRADec_trailing[0, :, 0] = doras est_trackRADec_trailing[0, :, 1] = todecs est_trackRAVlos_trailing = np.zeros((1, len(doras), 2)) est_trackRAVlos_trailing[0, :, 0] = doras est_trackRAVlos_trailing[0, :, 1] = tovloss lnl[ii, jj] = ( np.sum( pal5_lnlike( pos_radec, rvel_ra, est_trackRADec_trailing, est_trackRADec_trailing, # hack est_trackRAVlos_trailing, est_trackRAVlos_trailing, # hack np.array([0.0]), np.array([0.0]), None, )[0, :3:2]) - 0.5 * pm**2.0 / 0.186**2.0) # pm measurement # /for # /for bestd = ds[np.unravel_index(np.argmax(lnl), lnl.shape)[0]] if alongbfpm: bestpmoff = ((bestd - 24.0) * 0.099 + 0.0769 + pmoffs[np.unravel_index(np.argmax(lnl), lnl.shape)[1]]) else: bestpmoff = pmoffs[np.unravel_index(np.argmax(lnl), lnl.shape)[1]] # /if return bestd, bestpmoff, lnl, ds, pmoffs
for key in cols: o_data[key] = np.nan ################################################################################ # Integrate orbit ############################################################## if verbose: print "Initializing orbit" o = Orbit(vxvv=vxvv, radec=True, ro=ro, vo=vo, solarmotion=solarmotion) if verbose: print "Integrating orbit" o.integrate(ts, pot, method='leapfrog') if verbose: print "Saving results to data frame." if 'ra' in o_data.keys(): o_data['ra'] = o.ra(ts) if 'dec' in o_data.keys(): o_data['dec'] = o.dec(ts) if 'd' in o_data.keys(): o_data['d'] = o.dist(ts) if 'pmra' in o_data.keys(): o_data['pmra'] = o.pmra(ts) if 'pmde' in o_data.keys(): o_data['pmde'] = o.pmdec(ts) if 'rv' in o_data.keys(): o_data['rv'] = o.vlos(ts) if 'x' in o_data.keys(): o_data['x'] = o.x(ts) if 'y' in o_data.keys(): o_data['y'] = o.y(ts) if 'z' in o_data.keys(): o_data['z'] = o.z(ts) if 'r' in o_data.keys(): o_data['r'] = o.R(ts) if 'phi' in o_data.keys(): o_data['phi'] = o.phi(ts) if 'vx' in o_data.keys(): o_data['vx'] = o.vx(ts) if 'vy' in o_data.keys(): o_data['vy'] = o.vy(ts) if 'vz' in o_data.keys(): o_data['vz'] = o.vz(ts) if 'vr' in o_data.keys(): o_data['vr'] = o.vR(ts)