Near-resonant Analytic TTV Solver for Unknown Mass Estimates
Project description
NATSUME
Near-resonant Analytic TTV Solver for Unknown Mass Estimates (NATSUME) for Python 3.
A python 3 module which aims to quickly estimate non-transiting exoplanet masses in possible near Mean Motion Resonance (MMR) scenarios from approximately sinusoidal Transit Timing Variation (TTV) signals.
TTV mass inversions are transcribed from Lithwick's model for 1st order near MMR (https://doi.org/10.1088/0004-637X/761/2/122) and Deck-Agol's model for higher order near MMRs (https://doi.org/10.3847/0004-637X/821/2/96).
Installation
Install from pypi:
pip install natsume-ttv
Usage Overview
natsume is to be used with the following steps:
- Define the orbital elements (orbital periods, eccentricities, longitudes of periastron), TTV signal parameters (amplitudes, superperiods), and MMR scenario (e.g.
'2:1','5:3') of the planet pair. All units are in days or degrees. - Encode complex eccentricity and sinusoidal TTV information into the
natsume.classes.ComplexEccentricitiesandnatsume.classes.TTVSineCurveobjects usingnatsume.get_ComplexEccentricitiesandnatsume.get_TTVSineCurvefunctions. - Estimate inner or outer exoplanet masses using
natsume.EstimateInnerMassornatsume.EstimateOuterMassfunctions.
TTV amplitude and superperiod characterization is left to the user, as multiple valid approaches exist.
Usage Example
To illustrate the steps above, suppose the following planetary parameters for a pair in the Kepler-32 system
# Planetary parameters for Kepler-32b/c
Pb = 5.901 # Inner period (days; Lithwick+12, Table 1)
Pc = 8.752 # Outer period (days; Lithwick+12, Table 1)
Vb = 0.0062 # Inner TTV Amplitude (days; Lithwick+12, Table 1)
Vc = 0.0077 # Outer TTV Amplitude (days; Lithwick+12, Table 1)
Pttvb = 267.1 # TTV "superperiod" for planet b (days; Holczer+16, Table 5)
Pttvc = Pttvb # TTV "superperiod" for planet c (Assume identical superperiod
# as inner TTV as Holczer+16 did not report the period)
mmr = '3:2' # MMR Scenario
# Eccentricity and arguments of periastron (deg)
# Calculated from Fabrycky+12, Table 6 eccentricity vectors
eb = 0.003822
ec = 0.002384
wb = -166.56
wc = +43.98
Mstar = 0.49 # Host star mass (solar masses; Fabrycky+12, Table 6)
We then encode system complex eccentricity and sinusoidal TTV informations into the ComplexEccentricities object with natsume.get_ComplexEccentricities and TTVSineCurve object with natsume.get_TTVSineCurve
import natsume
# Build sinusoidal TTV object for inner TTV
TTVb = natsume.get_TTVSineCurve(amplitude=Vb, superperiod=Pttvb)
TTVc = natsume.get_TTVSineCurve(amplitude=Vc, superperiod=Pttvc)
# Build complex eccentricity object for Kepler-32b/c pair
z = natsume.get_ComplexEccentricities(e1=eb, w1=wb, e2=ec, w2=wc)
Finally, we calculate exoplanet masses using analytic sinusoidal TTV models
# Estimate outer planet mass relative to the host star
mu_c = natsume.EstimateOuterMass(
innerTTV=TTVb,
inner_period=Pb,
mmr=mmr,
eccentricity=z,
outer_period='none'
)
# Estimate inner planet mass relative to the host star
mu_b = natsume.EstimateInnerMass(
outerTTV=TTVc,
outer_period=Pc,
mmr=mmr,
eccentricity=z,
inner_period='none'
)
However, through above code, mu_c and mu_b will be numpy arrays containing two possible mass solutions. This is because the perturbing planet's period can be unknown if it is non-transiting, and two periods are possible given the definition of the TTV superperiod (see Lithwick's eqn. 5). If the perturbing planets' orbital periods are already known, we can skip the calculation of perturbing planet's orbital period entirely, and replace the 'none' arguments with appropriate values
# Estimate outer planet mass relative to the host star
mu_c = natsume.EstimateOuterMass(
innerTTV=TTVb,
inner_period=Pb,
mmr=mmr,
eccentricity=z,
outer_period=Pc
)
# Estimate inner planet mass relative to the host star
mu_b = natsume.EstimateInnerMass(
outerTTV=TTVc,
outer_period=Pc,
mmr=mmr,
eccentricity=z,
inner_period=Pb
)
To which mu_c and mu_b will be floats
Addendum
Conversion from mu_c and mu_b which are relative to host stellar masses to m_c and m_bin Earth masses can also be done with astropy.units
# Convert planet masses relative to host star to Earth masses
from astropy import units as u
m_b = (mu_b * Mstar*u.M_sun).to(u.M_earth).value
m_c = (mu_c * Mstar*u.M_sun).to(u.M_earth).value
Nominal mass calculations, where orbits are assumed with zero eccentricity, can be done by using the following variable z0 in the eccentricity arguments of mass calculation functions
# Build complex eccentricity object for zero eccentricity
z0 = natsume.get_ComplexEccentricities()
to which nominal mass calculations are only possible in near first-order resonance scenarios.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file natsume_ttv-0.1.7.tar.gz.
File metadata
- Download URL: natsume_ttv-0.1.7.tar.gz
- Upload date:
- Size: 12.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d6896e860f7c345bc58f3898c68bfe5e6fe284fe4b8fae8e9518977063ad8506
|
|
| MD5 |
b55a10e590693523d7315b9af49f7f79
|
|
| BLAKE2b-256 |
93438a1b6d92dca90e446b522c4e5a20546fe58da6ad0279cf147c5fbe55531b
|
File details
Details for the file natsume_ttv-0.1.7-py3-none-any.whl.
File metadata
- Download URL: natsume_ttv-0.1.7-py3-none-any.whl
- Upload date:
- Size: 13.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eec06a2f140ac55236feb8f5feb88440548bdd6341904875711d03362cf2d7c1
|
|
| MD5 |
7a0d9f52baaaee61b50997be407013db
|
|
| BLAKE2b-256 |
27d61c18a6ef7a758304d4ecddcb005334a288cf2820720080ed695926ae804a
|