Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
# create the orbitize system and generate model predictions using the standard 1 body model for b, and the 2 body model for b and c
astrom_dat = read_input.read_file(filename)
sys = system.System(2, astrom_dat, m0, plx, tau_ref_epoch=tau_ref_epoch, fit_secondary_mass=True)
# fix most of the orbital parameters to make the dimensionality a bit smaller
sys.sys_priors[sys.param_idx['ecc1']] = b_params[1]
sys.sys_priors[sys.param_idx['inc1']] = b_params[2]
sys.sys_priors[sys.param_idx['aop1']] = b_params[3]
sys.sys_priors[sys.param_idx['pan1']] = b_params[4]
sys.sys_priors[sys.param_idx['ecc2']] = c_params[1]
sys.sys_priors[sys.param_idx['inc2']] = c_params[2]
sys.sys_priors[sys.param_idx['aop2']] = c_params[3]
sys.sys_priors[sys.param_idx['pan2']] = c_params[4]
sys.sys_priors[sys.param_idx['m1']] = priors.LogUniformPrior(mass_b*0.01, mass_b*100)
sys.sys_priors[sys.param_idx['m2']] = priors.LogUniformPrior(mass_c*0.01, mass_c*100)
n_walkers = 50
samp = sampler.MCMC(sys, num_temps=1, num_walkers=n_walkers, num_threads=1)
# should have 8 parameters
assert samp.num_params == 6
# start walkers near the true location for the orbital parameters
np.random.seed(123)
# planet b
samp.curr_pos[:,0] = np.random.normal(b_params[0], 0.01, n_walkers) # sma
samp.curr_pos[:,1] = np.random.normal(b_params[-1], 0.01, n_walkers) # tau
# planet c
samp.curr_pos[:,2] = np.random.normal(c_params[0], 0.01, n_walkers) # sma
samp.curr_pos[:,3] = np.random.normal(c_params[-1], 0.01, n_walkers) # tau
# we will make a fairly broad mass starting position
import numpy as np
import pytest
from scipy.stats import norm as nm
import orbitize.priors as priors
threshold = 1e-1
initialization_inputs = {
priors.GaussianPrior : [1000., 1.],
priors.LogUniformPrior : [1., 2.],
priors.UniformPrior : [0., 1.],
priors.SinPrior : [],
priors.LinearPrior : [-2., 2.]
}
expected_means_mins_maxes = {
priors.GaussianPrior : (1000.,0.,np.inf),
priors.LogUniformPrior : (1/np.log(2),1., 2.),
priors.UniformPrior : (0.5, 0., 1.),
priors.SinPrior : (np.pi/2., 0., np.pi),
priors.LinearPrior : (1./3.,0.,1.0)
}
lnprob_inputs = {
priors.GaussianPrior : np.array([-3.0, np.inf, 1000., 999.]),
priors.LogUniformPrior : np.array([-1., 0., 1., 1.5, 2., 2.5]),
self.track_planet_perturbs = self.fit_secondary_mass and \
((len(self.radec[1]) + len(self.seppa[1]) + len(self.rv[1]) < len(data_table)) or \
(self.num_secondary_bodies > 1))
if restrict_angle_ranges:
angle_upperlim = np.pi
else:
angle_upperlim = 2.*np.pi
#
# Set priors for each orbital element
#
for body in np.arange(num_secondary_bodies):
# Add semimajor axis prior
self.sys_priors.append(priors.LogUniformPrior(0.001, 1e7))
self.labels.append('sma{}'.format(body+1))
# Add eccentricity prior
self.sys_priors.append(priors.UniformPrior(0., 1.))
self.labels.append('ecc{}'.format(body+1))
# Add inclination angle prior
self.sys_priors.append(priors.SinPrior())
self.labels.append('inc{}'.format(body+1))
# Add argument of periastron prior
self.sys_priors.append(priors.UniformPrior(0., 2.*np.pi))
self.labels.append('aop{}'.format(body+1))
# Add position angle of nodes prior
self.sys_priors.append(priors.UniformPrior(0., angle_upperlim))
#
# Set priors on total mass and parallax
#
self.labels.append('plx')
if plx_err > 0:
self.sys_priors.append(priors.GaussianPrior(plx, plx_err))
else:
self.sys_priors.append(plx)
# checking for rv data to include appropriate rv priors:
if len(self.rv[0]) > 0 and self.fit_secondary_mass:
self.sys_priors.append(priors.UniformPrior(-5, 5)) # gamma prior in km/s
self.labels.append('gamma')
self.sys_priors.append(priors.LogUniformPrior(1e-4, 0.05)) # jitter prior in km/s
self.labels.append('sigma')
if self.fit_secondary_mass:
for body in np.arange(num_secondary_bodies)+1:
self.sys_priors.append(priors.LogUniformPrior(1e-6, 2)) # in Solar masses for now
self.labels.append('m{}'.format(body))
self.labels.append('m0')
else:
self.labels.append('mtot')
# still need to append m0/mtot, even though labels are appended above
if mass_err > 0:
self.sys_priors.append(priors.GaussianPrior(stellar_mass, mass_err))
else:
self.sys_priors.append(stellar_mass)
self.sys_priors.append(priors.GaussianPrior(plx, plx_err))
else:
self.sys_priors.append(plx)
# checking for rv data to include appropriate rv priors:
if len(self.rv[0]) > 0 and self.fit_secondary_mass:
self.sys_priors.append(priors.UniformPrior(-5, 5)) # gamma prior in km/s
self.labels.append('gamma')
self.sys_priors.append(priors.LogUniformPrior(1e-4, 0.05)) # jitter prior in km/s
self.labels.append('sigma')
if self.fit_secondary_mass:
for body in np.arange(num_secondary_bodies)+1:
self.sys_priors.append(priors.LogUniformPrior(1e-6, 2)) # in Solar masses for now
self.labels.append('m{}'.format(body))
self.labels.append('m0')
else:
self.labels.append('mtot')
# still need to append m0/mtot, even though labels are appended above
if mass_err > 0:
self.sys_priors.append(priors.GaussianPrior(stellar_mass, mass_err))
else:
self.sys_priors.append(stellar_mass)
# add labels dictionary for parameter indexing
self.param_idx = dict(zip(self.labels, np.arange(len(self.labels))))