Fit RV and Astrometry

You can use Octofitter as a basic tool for fitting radial velocity data, by itself, or in combination with other kinds of data. Multiple instruments (up to five) are supported.

Tip

Radial velocity modelling is supported in Octofitter via the extension package OctofitterRadialVelocity. To install it, run pkg> add OctofitterRadialVelocity

The following is an example of jointly fitting the radial velocity and astrometric motion of the star $\epsilon$ Eridani using some of the radial velocity data collated in Mawet et al.

Datasets from two different radial velocity insturments are included and modelled together with separate jitters and instrumental offsets.

For the purposes of this quick example, a fixed semi-major axis, eccentricity, and m*sin(i) are used.



using Octofitter, OctofitterRadialVelocity, Distributions, PlanetOrbits, Plots

gaia_id = 5164707970261890560 


@planet b Visual{KepOrbit} begin
    e = 0
    τ ~ UniformCircular(1.0)
    mass = 0.78*sin(b.i)
    a=3.48
    i~Sine()
    ω=0.0
    Ω~UniformCircular()
end # No planet astrometry is included since it has not yet been directly detected


# Convert from JD to MJD
# Data tabulated from Mawet et al
jd(mjd) = mjd - 2400000.5
rvs = RadialVelocityLikelihood(
    (;inst_idx=1, epoch=jd(2455110.97985),  rv=−6.54, σ_rv=1.30),
    (;inst_idx=1, epoch=jd(2455171.90825),  rv=−3.33, σ_rv=1.09),
    (;inst_idx=1, epoch=jd(2455188.78841),  rv=7.90, σ_rv=.11),
    (;inst_idx=1, epoch=jd(2455231.7593),  rv=−8.39, σ_rv=.13),
    (;inst_idx=1, epoch=jd(2455255.70841),  rv=1.66, σ_rv=.70),
    (;inst_idx=1, epoch=jd(2455260.71231),  rv=1.77, σ_rv=.01),
    (;inst_idx=1, epoch=jd(2455261.71825),  rv=0.75, σ_rv=.30),
    (;inst_idx=1, epoch=jd(2455413.14376),  rv=−10.67, σ_rv=0.76),
    (;inst_idx=1, epoch=jd(2455414.13849),  rv=−16.73, σ_rv=0.99),
    (;inst_idx=1, epoch=jd(2455415.14082),  rv=−20.89, σ_rv=0.78),
    (;inst_idx=1, epoch=jd(2455426.14477),  rv=−17.57, σ_rv=0.86),
    (;inst_idx=1, epoch=jd(2455427.14813),  rv=−18.05, σ_rv=0.87),
    (;inst_idx=1, epoch=jd(2455428.14758),  rv=−21.46, σ_rv=0.87),
    (;inst_idx=1, epoch=jd(2455429.14896),  rv=−18.67, σ_rv=0.90),
    (;inst_idx=1, epoch=jd(2455434.14805),  rv=7.21, σ_rv=.86),
    (;inst_idx=1, epoch=jd(2455435.14705),  rv=4.46, σ_rv=.89),
    (;inst_idx=1, epoch=jd(2455436.14535),  rv=−2.48, σ_rv=0.83),
    (;inst_idx=1, epoch=jd(2455437.15006),  rv=−5.03, σ_rv=0.94),
    (;inst_idx=1, epoch=jd(2455438.15172),  rv=−14.24, σ_rv=0.90),
    (;inst_idx=1, epoch=jd(2455439.14979),  rv=−13.17, σ_rv=0.51),
    (;inst_idx=1, epoch=jd(2455440.15188),  rv=−22.38, σ_rv=0.88),
    (;inst_idx=1, epoch=jd(2455441.15033),  rv=−19.71, σ_rv=0.99),
    (;inst_idx=1, epoch=jd(2455456.01632),  rv=4.52, σ_rv=.97),
    (;inst_idx=1, epoch=jd(2455465.07401),  rv=−12.99, σ_rv=0.98),
    (;inst_idx=1, epoch=jd(2455469.1284),  rv=7.81, σ_rv=1.01),
    (;inst_idx=1, epoch=jd(2455471.97444),  rv=−4.15, σ_rv=1.16),
    (;inst_idx=1, epoch=jd(2455487.00413),  rv=−9.44, σ_rv=0.96),
    (;inst_idx=1, epoch=jd(2455500.98687),  rv=−2.23, σ_rv=1.05),
    (;inst_idx=1, epoch=jd(2455521.89317),  rv=−11.42, σ_rv=1.05),
    (;inst_idx=1, epoch=jd(2455542.95125),  rv=−8.56, σ_rv=1.20),
    (;inst_idx=1, epoch=jd(2455613.70363),  rv=0.65, σ_rv=.01),
    (;inst_idx=1, epoch=jd(2455791.13884),  rv=1.87, σ_rv=.87),
    (;inst_idx=1, epoch=jd(2455792.13464),  rv=−9.19, σ_rv=0.90),
    (;inst_idx=1, epoch=jd(2455793.13858),  rv=−17.85, σ_rv=0.89),
    (;inst_idx=1, epoch=jd(2455795.14053),  rv=−15.43, σ_rv=0.96),
    (;inst_idx=1, epoch=jd(2455797.13828),  rv=−5.67, σ_rv=0.83),
    (;inst_idx=1, epoch=jd(2455798.14195),  rv=−5.00, σ_rv=0.84),
    (;inst_idx=1, epoch=jd(2455807.1116),  rv=−3.91, σ_rv=.99),
    (;inst_idx=1, epoch=jd(2455809.1367),  rv=−0.90, σ_rv=.99),
    (;inst_idx=1, epoch=jd(2455870.9902),  rv=1.81, σ_rv=1.20),
    (;inst_idx=1, epoch=jd(2455902.82961),  rv=4.20, σ_rv=.74),
    (;inst_idx=1, epoch=jd(2455960.69933),  rv=−8.22, σ_rv=1.21),
    (;inst_idx=1, epoch=jd(2456138.12976),  rv=−2.69, σ_rv=0.86),
    (;inst_idx=1, epoch=jd(2456149.05961),  rv=−2.49, σ_rv=0.53),
    (;inst_idx=1, epoch=jd(2456173.13157),  rv=−1.22, σ_rv=0.96),
    (;inst_idx=1, epoch=jd(2456202.99824),  rv=19.64, σ_rv=0.71),
    (;inst_idx=1, epoch=jd(2456327.70174),  rv=20.33, σ_rv=1.05),
    (;inst_idx=1, epoch=jd(2456343.7026),  rv=16.52, σ_rv=.05),
    (;inst_idx=1, epoch=jd(2456530.11763),  rv=6.76, σ_rv=.90),
    (;inst_idx=1, epoch=jd(2456532.12218),  rv=8.06, σ_rv=.85),
    (;inst_idx=1, epoch=jd(2456587.96668),  rv=14.41, σ_rv=1.03),
    (;inst_idx=1, epoch=jd(2456613.91026),  rv=15.04, σ_rv=1.02),
    (;inst_idx=1, epoch=jd(2456637.81493),  rv=23.88, σ_rv=1.02),
    (;inst_idx=1, epoch=jd(2456638.79118),  rv=32.35, σ_rv=1.07),
    (;inst_idx=1, epoch=jd(2456674.80603),  rv=11.70, σ_rv=1.03),
    (;inst_idx=1, epoch=jd(2456708.78257),  rv=2.49, σ_rv=.99),
    (;inst_idx=1, epoch=jd(2456884.13093),  rv=12.85, σ_rv=0.95),
    (;inst_idx=1, epoch=jd(2456889.14678),  rv=18.51, σ_rv=0.82),
    (;inst_idx=1, epoch=jd(2456890.14703),  rv=13.09, σ_rv=0.86),
    (;inst_idx=1, epoch=jd(2456894.13998),  rv=8.71, σ_rv=.83),
    (;inst_idx=1, epoch=jd(2456896.11131),  rv=15.09, σ_rv=0.78),
    (;inst_idx=1, epoch=jd(2456910.94964),  rv=13.84, σ_rv=0.64),
    (;inst_idx=1, epoch=jd(2457234.13834),  rv=9.97, σ_rv=.85),
    (;inst_idx=1, epoch=jd(2457240.99109),  rv=6.26, σ_rv=.52),
    (;inst_idx=1, epoch=jd(2457243.14297),  rv=3.19, σ_rv=.78),
    (;inst_idx=1, epoch=jd(2457245.14532),  rv=5.26, σ_rv=.90),
    (;inst_idx=1, epoch=jd(2457246.14242),  rv=−1.45, σ_rv=0.99),
    (;inst_idx=1, epoch=jd(2457247.14678),  rv=−5.60, σ_rv=1.01),
    (;inst_idx=1, epoch=jd(2457254.14889),  rv=8.50, σ_rv=.80),
    (;inst_idx=1, epoch=jd(2457255.15244),  rv=6.36, σ_rv=.91),
    (;inst_idx=1, epoch=jd(2457256.15168),  rv=5.80, σ_rv=.83),
    (;inst_idx=1, epoch=jd(2457265.14924),  rv=5.74, σ_rv=.88),
    (;inst_idx=1, epoch=jd(2457291.04683),  rv=6.07, σ_rv=.05),
    (;inst_idx=1, epoch=jd(2457326.9831),  rv=6.10, σ_rv=1.12),
    (;inst_idx=1, epoch=jd(2457353.88153),  rv=−0.55, σ_rv=1.09),
    (;inst_idx=1, epoch=jd(2457378.78993),  rv=2.19, σ_rv=.08),
    (;inst_idx=1, epoch=jd(2457384.78144),  rv=14.17, σ_rv=1.10),
    (;inst_idx=1, epoch=jd(2457401.75106),  rv=6.07, σ_rv=.99),
    (;inst_idx=1, epoch=jd(2457669.02614),  rv=1.91, σ_rv=.10),
    (;inst_idx=1, epoch=jd(2457672.99494),  rv=−1.33, σ_rv=1.20),
    (;inst_idx=1, epoch=jd(2457678.97973),  rv=−13.88, σ_rv=1.10),
    (;inst_idx=1, epoch=jd(2457704.03411),  rv=−14.12, σ_rv=0.67),
    (;inst_idx=1, epoch=jd(2457712.99284),  rv=−4.84, σ_rv=1.18),
    (;inst_idx=1, epoch=jd(2457789.74988),  rv=−13.12, σ_rv=1.12),
    (;inst_idx=1, epoch=jd(2457790.737),  rv=−8.09, σ_rv=1.01),
    (;inst_idx=1, epoch=jd(2457803.70407),  rv=−4.25, σ_rv=1.09),
    (;inst_idx=1, epoch=jd(2457804.70718),  rv=−6.55, σ_rv=1.09),
    (;inst_idx=1, epoch=jd(2457806.79201),  rv=−11.62, σ_rv=1.13),
    (;inst_idx=1, epoch=jd(2457828.7545),  rv=−12.69, σ_rv=1.12),
    (;inst_idx=1, epoch=jd(2457829.71875),  rv=−19.82, σ_rv=0.98),
    (;inst_idx=1, epoch=jd(2457830.71979),  rv=−12.66, σ_rv=1.10),




    (inst_idx=2, epoch=jd(2456582.93034), rv=26.64, σ_rv=2.73),
    (inst_idx=2, epoch=jd(2456597.91368), rv=6.40, σ_rv=2.36),
    (inst_idx=2, epoch=jd(2456606.68427), rv=16.52, σ_rv=0.75),
    (inst_idx=2, epoch=jd(2456608.10376), rv=4.69, σ_rv=0.78),
    (inst_idx=2, epoch=jd(2456610.7625), rv=16.04, σ_rv=1.18),
    (inst_idx=2, epoch=jd(2456618.88476), rv=−2.11, σ_rv=0.78),
    (inst_idx=2, epoch=jd(2456624.72004), rv=4.20, σ_rv=1.11),
    (inst_idx=2, epoch=jd(2456626.81421), rv=24.46, σ_rv=0.75),
    (inst_idx=2, epoch=jd(2456628.72976), rv=24.14, σ_rv=0.70),
    (inst_idx=2, epoch=jd(2456631.42746), rv=−2.26, σ_rv=0.88),
    (inst_idx=2, epoch=jd(2456632.80921), rv=14.46, σ_rv=0.62),
    (inst_idx=2, epoch=jd(2456644.75696), rv=8.20, σ_rv=2.30),
    (inst_idx=2, epoch=jd(2456647.81171), rv=14.44, σ_rv=0.63),
    (inst_idx=2, epoch=jd(2456648.59184), rv=12.62, σ_rv=1.10),
    (inst_idx=2, epoch=jd(2456662.63738), rv=9.77, σ_rv=0.73),
    (inst_idx=2, epoch=jd(2456663.75415), rv=10.43, σ_rv=1.11),
    (inst_idx=2, epoch=jd(2456667.52792), rv=18.00, σ_rv=0.78),
    (inst_idx=2, epoch=jd(2456671.68695), rv=19.96, σ_rv=1.05),
    (inst_idx=2, epoch=jd(2456675.75647), rv=7.84, σ_rv=1.12),
    (inst_idx=2, epoch=jd(2456679.83732), rv=17.70, σ_rv=1.05),
    (inst_idx=2, epoch=jd(2456682.56608), rv=17.80, σ_rv=0.82),
    (inst_idx=2, epoch=jd(2456689.76638), rv=26.34, σ_rv=0.75),
    (inst_idx=2, epoch=jd(2456875.02028), rv=7.12, σ_rv=2.18),
    (inst_idx=2, epoch=jd(2456894.88054), rv=8.28, σ_rv=1.30),
    (inst_idx=2, epoch=jd(2456901.06193), rv=9.95, σ_rv=1.54),
    (inst_idx=2, epoch=jd(2456909.10279), rv=−4.71, σ_rv=1.21),
    (inst_idx=2, epoch=jd(2456922.07953), rv=12.25, σ_rv=2.13),
    (inst_idx=2, epoch=jd(2456935.94021), rv=−2.43, σ_rv=1.27),
    (inst_idx=2, epoch=jd(2456937.92403), rv=−0.55, σ_rv=1.35),
    (inst_idx=2, epoch=jd(2456950.03798), rv=3.82, σ_rv=1.44),
    (inst_idx=2, epoch=jd(2456985.64755), rv=−1.80, σ_rv=2.28),
    (inst_idx=2, epoch=jd(2456988.63095), rv=5.93, σ_rv=1.29),
    (inst_idx=2, epoch=jd(2456999.76434), rv=8.84, σ_rv=1.37),
    (inst_idx=2, epoch=jd(2457015.72916), rv=−2.17, σ_rv=1.10),
    (inst_idx=2, epoch=jd(2457026.78021), rv=−1.44, σ_rv=1.34),
    (inst_idx=2, epoch=jd(2457058.45996), rv=−3.69, σ_rv=1.89),
    (inst_idx=2, epoch=jd(2457234.08236), rv=7.73, σ_rv=1.39),
    (inst_idx=2, epoch=jd(2457245.86234), rv=−4.19, σ_rv=1.41),
    (inst_idx=2, epoch=jd(2457249.93007), rv=−3.94, σ_rv=1.31),
    (inst_idx=2, epoch=jd(2457253.11257), rv=5.63, σ_rv=1.33),
    (inst_idx=2, epoch=jd(2457257.15719), rv=−1.02, σ_rv=1.15),
    (inst_idx=2, epoch=jd(2457258.94437), rv=−12.69, σ_rv=1.23),
    (inst_idx=2, epoch=jd(2457261.02221), rv=−2.76, σ_rv=1.32),
    (inst_idx=2, epoch=jd(2457262.94505), rv=−7.81, σ_rv=1.36),
    (inst_idx=2, epoch=jd(2457265.95783), rv=9.67, σ_rv=1.24),
    (inst_idx=2, epoch=jd(2457275.01304), rv=−1.91, σ_rv=1.23),
    (inst_idx=2, epoch=jd(2457283.96368), rv=1.88, σ_rv=1.29),
    (inst_idx=2, epoch=jd(2457287.02735), rv=−1.11, σ_rv=1.35),
    (inst_idx=2, epoch=jd(2457290.95635), rv=3.19, σ_rv=1.42),
    (inst_idx=2, epoch=jd(2457305.83659), rv=−5.63, σ_rv=1.23),
    (inst_idx=2, epoch=jd(2457308.90844), rv=13.30, σ_rv=1.26),
    (inst_idx=2, epoch=jd(2457318.83435), rv=8.72, σ_rv=1.26),
    (inst_idx=2, epoch=jd(2457321.79157), rv=6.64, σ_rv=1.36),
    (inst_idx=2, epoch=jd(2457325.84352), rv=2.87, σ_rv=1.41),
    (inst_idx=2, epoch=jd(2457331.10764), rv=9.90, σ_rv=1.36),
    (inst_idx=2, epoch=jd(2457332.78237), rv=9.64, σ_rv=1.25),
    (inst_idx=2, epoch=jd(2457334.82998), rv=5.22, σ_rv=1.30),
    (inst_idx=2, epoch=jd(2457337.7891), rv=5.41, σ_rv=1.59),
    (inst_idx=2, epoch=jd(2457340.95644), rv=−1.99, σ_rv=1.27),
    (inst_idx=2, epoch=jd(2457347.86896), rv=4.10, σ_rv=1.29),
    (inst_idx=2, epoch=jd(2457348.77993), rv=4.65, σ_rv=1.27),
    (inst_idx=2, epoch=jd(2457350.72611), rv=5.83, σ_rv=1.20),
    (inst_idx=2, epoch=jd(2457354.70613), rv=−0.88, σ_rv=1.65),
    (inst_idx=2, epoch=jd(2457361.64656), rv=17.26, σ_rv=1.43),
    (inst_idx=2, epoch=jd(2457364.77113), rv=−7.80, σ_rv=1.30),
    (inst_idx=2, epoch=jd(2457365.70544), rv=0.72, σ_rv=1.26),
    (inst_idx=2, epoch=jd(2457424.71436), rv=−1.68, σ_rv=1.37),
    (inst_idx=2, epoch=jd(2457426.63205), rv=3.62, σ_rv=1.42),
    (inst_idx=2, epoch=jd(2457427.38923), rv=3.97, σ_rv=1.17),
    (inst_idx=2, epoch=jd(2457429.72793), rv=2.42, σ_rv=0.90),
    (inst_idx=2, epoch=jd(2457432.60322), rv=6.20, σ_rv=1.25),
    (inst_idx=2, epoch=jd(2457435.69406), rv=−18.61, σ_rv=18.79),
    (inst_idx=2, epoch=jd(2457443.66061), rv=2.25, σ_rv=1.24),
    (inst_idx=2, epoch=jd(2457446.70278), rv=3.96, σ_rv=1.37),
    (inst_idx=2, epoch=jd(2457471.55712), rv=5.85, σ_rv=1.63),
    (inst_idx=2, epoch=jd(2457599.93545), rv=−5.69, σ_rv=0.85),
    (inst_idx=2, epoch=jd(2457605.99828), rv=−5.33, σ_rv=1.27),
    (inst_idx=2, epoch=jd(2457607.92844), rv=−24.97, σ_rv=1.39),
    (inst_idx=2, epoch=jd(2457611.16197), rv=−16.02, σ_rv=1.26),
    (inst_idx=2, epoch=jd(2457613.86777), rv=2.47, σ_rv=1.54),
    (inst_idx=2, epoch=jd(2457615.04307), rv=3.50, σ_rv=1.48),
    (inst_idx=2, epoch=jd(2457617.08138), rv=0.91, σ_rv=1.29),
    (inst_idx=2, epoch=jd(2457619.05397), rv=−12.30, σ_rv=1.46),
    (inst_idx=2, epoch=jd(2457621.79772), rv=−13.43, σ_rv=1.57),
    (inst_idx=2, epoch=jd(2457626.10874), rv=0.39, σ_rv=1.33),
    (inst_idx=2, epoch=jd(2457627.95628), rv=−4.92, σ_rv=1.37),
    (inst_idx=2, epoch=jd(2457633.96762), rv=−8.24, σ_rv=1.70),
    (inst_idx=2, epoch=jd(2457636.08672), rv=−1.33, σ_rv=1.18),
    (inst_idx=2, epoch=jd(2457637.95848), rv=−7.66, σ_rv=1.37),
    (inst_idx=2, epoch=jd(2457643.92459), rv=−14.39, σ_rv=1.33),
    (inst_idx=2, epoch=jd(2457668.93315), rv=−0.83, σ_rv=1.34),
    (inst_idx=2, epoch=jd(2457669.90475), rv=2.76, σ_rv=1.43),
    (inst_idx=2, epoch=jd(2457670.88203), rv=−8.82, σ_rv=1.42),
    (inst_idx=2, epoch=jd(2457674.61398), rv=−5.61, σ_rv=1.42),
    (inst_idx=2, epoch=jd(2457679.98028), rv=−12.42, σ_rv=1.78),
    (inst_idx=2, epoch=jd(2457687.77138), rv=1.17, σ_rv=1.37),
    (inst_idx=2, epoch=jd(2457694.76122), rv=−3.81, σ_rv=1.33),
    (inst_idx=2, epoch=jd(2457696.82099), rv=−5.60, σ_rv=1.32),
    (inst_idx=2, epoch=jd(2457700.96748), rv=−10.84, σ_rv=1.41),
    (inst_idx=2, epoch=jd(2457701.84849), rv=−11.69, σ_rv=1.38),
    (inst_idx=2, epoch=jd(2457702.89789), rv=−14.82, σ_rv=1.22),
    (inst_idx=2, epoch=jd(2457703.82658), rv=−19.89, σ_rv=1.25),
    (inst_idx=2, epoch=jd(2457705.73282), rv=−9.58, σ_rv=1.32),
    (inst_idx=2, epoch=jd(2457707.78376), rv=−9.03, σ_rv=1.24),
    (inst_idx=2, epoch=jd(2457717.79818), rv=−15.06, σ_rv=1.22),
    (inst_idx=2, epoch=jd(2457722.75749), rv=−12.43, σ_rv=2.05),
    (inst_idx=2, epoch=jd(2457728.81592), rv=−7.64, σ_rv=1.67),
    (inst_idx=2, epoch=jd(2457741.79955), rv=−14.52, σ_rv=1.16),
    (inst_idx=2, epoch=jd(2457743.5028), rv=−17.28, σ_rv=1.32),
    (inst_idx=2, epoch=jd(2457745.93451), rv=−17.74, σ_rv=1.31),
    (inst_idx=2, epoch=jd(2457749.71344), rv=−5.63, σ_rv=1.30),
    (inst_idx=2, epoch=jd(2457751.64976), rv=−16.16, σ_rv=1.32),
    (inst_idx=2, epoch=jd(2457753.47716), rv=−12.45, σ_rv=1.30),
    (inst_idx=2, epoch=jd(2457798.55461), rv=−18.91, σ_rv=2.25),
    (inst_idx=2, epoch=jd(2457821.65582), rv=−5.60, σ_rv=1.63),
)

@system ϵEri begin
    M = 0.78
    plx ~ gaia_plx(;gaia_id)
    pmra ~ Normal(-975, 10)
    pmdec ~ Normal(20,  10)

    rv0_1 ~ Normal(0,10)
    rv0_2 ~ Normal(0,10)
    jitter_1 ~ truncated(Normal(0,10),lower=0)
    jitter_2 ~ truncated(Normal(0,10),lower=0)
end HGCALikelihood(;gaia_id) rvs b

## Build model
model = Octofitter.LogDensityModel(ϵEri; autodiff=:ForwardDiff, verbosity=4) # defaults are ForwardDiff, and verbosity=0

## Sample from chains

results = octofit(
    model, 0.75;
    adaptation =  2000,
    iterations =  5000,
    verbosity = 4,
    max_depth = 12
)

## Save results plot
octoplot(model, results, cmap=:greys, clims=(-0.5,1));

model plot with astrometry