PyTransit 2.7.0__tar.gz → 2.7.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pytransit-2.7.0 → pytransit-2.7.1}/PKG-INFO +1 -1
- {pytransit-2.7.0 → pytransit-2.7.1}/PyTransit.egg-info/PKG-INFO +1 -1
- {pytransit-2.7.0 → pytransit-2.7.1}/PyTransit.egg-info/SOURCES.txt +2 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/__init__.py +1 -1
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/lpf/rvlpf.py +30 -15
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/roadrunner/esmodel.py +10 -5
- pytransit-2.7.1/pytransit/models/roadrunner/model_eclipse.py +83 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/roadrunner/model_ecspec.py +4 -2
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/roadrunner/model_full.py +3 -4
- pytransit-2.7.1/tests/test_roadrunner_eclipse.py +61 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/LICENSE +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/MANIFEST.in +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/PyTransit.egg-info/dependency_links.txt +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/PyTransit.egg-info/requires.txt +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/PyTransit.egg-info/top_level.txt +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/README.md +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pyproject.toml +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/contamination/__init__.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/contamination/contamination.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/contamination/data/spectra.h5 +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/contamination/data/transmission.nc +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/contamination/filter.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/contamination/instrument.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/contamination/plotting.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/limb_darkening.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/lpf/__init__.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/lpf/baselines/__init__.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/lpf/baselines/legendrebaseline.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/lpf/baselines/linearbaseline.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/lpf/cntlpf.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/lpf/eclipselpf.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/lpf/loglikelihood/__init__.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/lpf/loglikelihood/celeriteloglikelihood.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/lpf/loglikelihood/clloglikelihood.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/lpf/loglikelihood/fmcloglikelihood.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/lpf/loglikelihood/logisticloglikelihood.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/lpf/loglikelihood/multiceleriteloglikelihood.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/lpf/loglikelihood/wnloglikelihood.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/lpf/logposteriorfunction.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/lpf/lpf.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/lpf/mclpf.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/lpf/mptlpf.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/lpf/ocllpf.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/lpf/ocltdvlpf.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/lpf/oclttvlpf.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/lpf/phasecurvelpf.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/lpf/tdvlpf.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/lpf/tess/__init__.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/lpf/tess/ctesslpf.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/lpf/tess/tessttvlpf.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/lpf/tess/tgclpf.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/lpf/tess/tgcmplpf.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/lpf/tess/tmpclpf.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/lpf/tesslpf.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/lpf/tessoclttvlpf.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/lpf/transitanalysis.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/lpf/transitlpf.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/lpf/ttvlpf.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/__init__.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/eclipse_model.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/gdmodel.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/general.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/ldmodel.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/ldtkldm.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/limb_darkening/__init__.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/limb_darkening/general.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/limb_darkening/linear.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/limb_darkening/nonlinear.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/limb_darkening/power_2.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/limb_darkening/quadratic.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/limb_darkening/quadratic_tri.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/limb_darkening/uniform.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/ma_chromosphere.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/ma_quadratic.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/ma_quadratic_cl.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/ma_uniform.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/ma_uniform_cl.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/numba/__init__.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/numba/gdmodel.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/numba/general_nb.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/numba/ldmodels.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/numba/ldtkldm.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/numba/ma_chromosphere_nb.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/numba/ma_quadratic_nb.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/numba/ma_uniform_nb.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/numba/phasecurves.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/numba/qpower2_nb.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/numba/rrmodel.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/numba/spmodel.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/numba/udmodel.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/opencl/ma_quadratic.cl +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/opencl/ma_uniform.cl +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/opencl/orbits.cl +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/opencl/qpower2.cl +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/osmodel.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/qpower2.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/qpower2_cl.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/roadrunner/__init__.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/roadrunner/common.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/roadrunner/ecintersection.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/roadrunner/model.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/roadrunner/model_simple.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/roadrunner/model_trspec.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/roadrunner/opmodel.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/roadrunner/opmodel_full.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/roadrunner/rrmodel.cl +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/roadrunner/rrmodel.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/roadrunner/rrmodel_cl.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/roadrunner/tsmodel.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/transitmodel.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/models/uniform.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/orbits/__init__.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/orbits/orbits.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/orbits/orbits_py.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/orbits/taylor_z.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/param/__init__.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/param/parameter.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/param/prior.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/param/utilities.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/stars/__init__.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/stars/btsettl.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/stars/data/avg_bt_settl.fits +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/stars/data/avg_husser2013.fits +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/stars/husser2013.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/utils/__init__.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/utils/astrometry.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/utils/constants.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/utils/de.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/utils/downsample.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/utils/eclipses.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/utils/io/__init__.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/utils/io/lightcurvedata.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/utils/keplerlc.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/utils/mdwarfs.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/utils/misc.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/utils/mocklc.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/utils/octasphere.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/utils/phasecurves.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/utils/physics.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/utils/rv.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/pytransit/utils/tess.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/requirements.txt +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/setup.cfg +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/tests/test_contamination.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/tests/test_jax_uniformdisk.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/tests/test_limb_darkening.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/tests/test_ma_quadratic.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/tests/test_ma_quadratic_nb.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/tests/test_qpower2_nb.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/tests/test_transitmodel_helpers.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/tests/test_uniform_model.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/tests/test_uniform_model_nb.py +0 -0
- {pytransit-2.7.0 → pytransit-2.7.1}/tests/test_z.py +0 -0
|
@@ -97,6 +97,7 @@ pytransit/models/roadrunner/common.py
|
|
|
97
97
|
pytransit/models/roadrunner/ecintersection.py
|
|
98
98
|
pytransit/models/roadrunner/esmodel.py
|
|
99
99
|
pytransit/models/roadrunner/model.py
|
|
100
|
+
pytransit/models/roadrunner/model_eclipse.py
|
|
100
101
|
pytransit/models/roadrunner/model_ecspec.py
|
|
101
102
|
pytransit/models/roadrunner/model_full.py
|
|
102
103
|
pytransit/models/roadrunner/model_simple.py
|
|
@@ -143,6 +144,7 @@ tests/test_limb_darkening.py
|
|
|
143
144
|
tests/test_ma_quadratic.py
|
|
144
145
|
tests/test_ma_quadratic_nb.py
|
|
145
146
|
tests/test_qpower2_nb.py
|
|
147
|
+
tests/test_roadrunner_eclipse.py
|
|
146
148
|
tests/test_transitmodel_helpers.py
|
|
147
149
|
tests/test_uniform_model.py
|
|
148
150
|
tests/test_uniform_model_nb.py
|
|
@@ -32,8 +32,8 @@ from astropy.table import Column
|
|
|
32
32
|
from corner import corner
|
|
33
33
|
from matplotlib.pyplot import subplots, setp
|
|
34
34
|
from numba import njit
|
|
35
|
-
from numpy import zeros, log, pi, inf, atleast_2d, arange, arctan2, cos, squeeze, median, linspace, \
|
|
36
|
-
|
|
35
|
+
from numpy import zeros, log, pi, inf, atleast_2d, arange, arctan2, cos, squeeze, median, linspace, percentile, argsort, \
|
|
36
|
+
sum, concatenate, full, sqrt, ndarray, floor
|
|
37
37
|
from numpy.random.mtrand import permutation
|
|
38
38
|
|
|
39
39
|
from pytransit.lpf.logposteriorfunction import LogPosteriorFunction
|
|
@@ -57,7 +57,7 @@ def lnlike_normal(o, m, e):
|
|
|
57
57
|
|
|
58
58
|
|
|
59
59
|
class RVLPF(LogPosteriorFunction):
|
|
60
|
-
def __init__(self, name: str, nplanets: int, times, rvs, rves, rvis
|
|
60
|
+
def __init__(self, name: str, nplanets: int, times, rvs, rves, rvis, is_transiting, slope_order: int = 1):
|
|
61
61
|
super().__init__(name)
|
|
62
62
|
|
|
63
63
|
def transform_input(a):
|
|
@@ -76,8 +76,8 @@ class RVLPF(LogPosteriorFunction):
|
|
|
76
76
|
else:
|
|
77
77
|
rvis = zeros(len(times), 'int')
|
|
78
78
|
|
|
79
|
-
self._tref = concatenate(times).
|
|
80
|
-
self.rvm: RVModel = RVModel(self, nplanets, times, rvs, rves, rvis, slope_order=slope_order)
|
|
79
|
+
self._tref = floor(concatenate(times).min())
|
|
80
|
+
self.rvm: RVModel = RVModel(self, nplanets, times, rvs, rves, rvis, is_transiting=is_transiting, slope_order=slope_order)
|
|
81
81
|
|
|
82
82
|
def model(self, pv):
|
|
83
83
|
return self.rvm.rv_model(pv)
|
|
@@ -102,7 +102,7 @@ class RVModel:
|
|
|
102
102
|
"""
|
|
103
103
|
|
|
104
104
|
def __init__(self, lpf: LogPosteriorFunction, nplanets: int,
|
|
105
|
-
times, rvs: Iterable, rves: Iterable, rvis: Iterable,
|
|
105
|
+
times, rvs: Iterable, rves: Iterable, rvis: Iterable, is_transiting,
|
|
106
106
|
tref: Optional[float] = None, slope_order: int = 1):
|
|
107
107
|
self.lpf = lpf
|
|
108
108
|
|
|
@@ -110,6 +110,10 @@ class RVModel:
|
|
|
110
110
|
assert lpf.nplanets == nplanets
|
|
111
111
|
self.nplanets = nplanets
|
|
112
112
|
|
|
113
|
+
if len(is_transiting) != self.nplanets:
|
|
114
|
+
raise ValueError("The size of the is_transiting list must equal the number of planets.")
|
|
115
|
+
self.is_transiting = is_transiting
|
|
116
|
+
|
|
113
117
|
if hasattr(lpf, '_tref'):
|
|
114
118
|
assert tref is None
|
|
115
119
|
self._tref = lpf._tref
|
|
@@ -152,12 +156,15 @@ class RVModel:
|
|
|
152
156
|
self.ps = ps = ParameterSet([])
|
|
153
157
|
pp = []
|
|
154
158
|
for i in range(1, self.nplanets + 1):
|
|
155
|
-
|
|
156
|
-
GParameter(f'
|
|
157
|
-
|
|
158
|
-
GParameter(f'
|
|
159
|
-
|
|
160
|
-
|
|
159
|
+
if self.is_transiting[i-1]:
|
|
160
|
+
pp.append(GParameter(f't0_{i}', f'zero epoch {i}', 'd', NP(0.0, 0.1), (-inf, inf)))
|
|
161
|
+
else:
|
|
162
|
+
pp.append(GParameter(f'm0_{i}', f'reference mean anomaly {i}', 'd', UP(0.0, 2*pi), (0, 2*pi)))
|
|
163
|
+
|
|
164
|
+
pp.extend([GParameter(f'p_{i}', f'period {i}', 'd', NP(1.0, 1e-5), (0, inf)),
|
|
165
|
+
GParameter(f'secw_{i}', f'sqrt(e) cos(w) {i}', '', UP(-1.0, 1.0), (-1, 1)),
|
|
166
|
+
GParameter(f'sesw_{i}', f'sqrt(e) sin(w) {i}', '', UP(-1.0, 1.0), (-1, 1)),
|
|
167
|
+
])
|
|
161
168
|
ps.add_global_block('planets', pp)
|
|
162
169
|
self._start_pl = ps.blocks[-1].start
|
|
163
170
|
self._sl_pl = ps.blocks[-1].slice
|
|
@@ -190,9 +197,11 @@ class RVModel:
|
|
|
190
197
|
self._sl_rv_slope = ps.blocks[-1].slice
|
|
191
198
|
self.ps.freeze()
|
|
192
199
|
|
|
193
|
-
|
|
200
|
+
pnames_tr = "rv_k_{} t0_{} p_{} secw_{} sesw_{}".split()
|
|
201
|
+
pnames_nt = "rv_k_{} m0_{} p_{} secw_{} sesw_{}".split()
|
|
194
202
|
self.pids = zeros((self.nplanets, 5), 'int')
|
|
195
203
|
for ipl in range(self.nplanets):
|
|
204
|
+
pnames = pnames_tr if self.is_transiting[ipl] else pnames_nt
|
|
196
205
|
for ip, p in enumerate(pnames):
|
|
197
206
|
name = p.format(ipl + 1)
|
|
198
207
|
self.pids[ipl, ip] = self.ps.names.index(name)
|
|
@@ -216,7 +225,10 @@ class RVModel:
|
|
|
216
225
|
planets = planets if planets is not None else arange(self.nplanets)
|
|
217
226
|
for ipl in planets:
|
|
218
227
|
pv = pvp[:, self.pids[ipl]]
|
|
219
|
-
|
|
228
|
+
if self.is_transiting[ipl]:
|
|
229
|
+
tc = pv[:, 1] - self._tref
|
|
230
|
+
else:
|
|
231
|
+
tc = pv[:, 1] / (2*pi) * pv[:, 2]
|
|
220
232
|
p = pv[:, 2]
|
|
221
233
|
e = pv[:, 3] ** 2 + pv[:, 4] ** 2
|
|
222
234
|
w = arctan2(pv[:, 4], pv[:, 3])
|
|
@@ -345,7 +357,10 @@ class RVModel:
|
|
|
345
357
|
rv_others = median(self.rv_model(pvp, planets=other_planets, add_sv=False, add_slope=False), 0)
|
|
346
358
|
|
|
347
359
|
period = pv[self.ps.names.index(f'p_{planet + 1}')]
|
|
348
|
-
|
|
360
|
+
if self.is_transiting[planet]:
|
|
361
|
+
tc = pv[self.ps.names.index(f't0_{planet + 1}')] - self._tref
|
|
362
|
+
else:
|
|
363
|
+
tc = pv[self.ps.names.index(f'm0_{planet + 1}')] / (2*pi) * period
|
|
349
364
|
|
|
350
365
|
phase = (fold(self._timea, period, tc, 0.5) - 0.5) * period
|
|
351
366
|
phase_model = (fold(rv_time, period, tc, 0.5) - 0.5) * period
|
|
@@ -46,7 +46,7 @@ class EclipseSpectroscopyModel(TransitModel):
|
|
|
46
46
|
|
|
47
47
|
def evaluate(self, f: ndarray, k: Union[float, ndarray], t0: Union[float, ndarray], p: Union[float, ndarray],
|
|
48
48
|
a: Union[float, ndarray], i: Union[float, ndarray], e: Union[float, ndarray] = 0.0,
|
|
49
|
-
w: Union[float, ndarray] = 0.0) -> ndarray:
|
|
49
|
+
w: Union[float, ndarray] = 0.0, rstar: Union[float, ndarray] = 1.0) -> ndarray:
|
|
50
50
|
"""Evaluate the transit model for a set of scalar or vector parameters.
|
|
51
51
|
|
|
52
52
|
Parameters
|
|
@@ -67,6 +67,9 @@ class EclipseSpectroscopyModel(TransitModel):
|
|
|
67
67
|
Orbital eccentricity as a float or a 1D vector.
|
|
68
68
|
w : optional
|
|
69
69
|
Argument of periastron as a float or a 1D vector.
|
|
70
|
+
rstar : optional
|
|
71
|
+
Stellar radius in solar radii, used to compute the light travel time
|
|
72
|
+
correction between transit and secondary eclipse. Defaults to 1.0.
|
|
70
73
|
|
|
71
74
|
Notes
|
|
72
75
|
-----
|
|
@@ -79,10 +82,12 @@ class EclipseSpectroscopyModel(TransitModel):
|
|
|
79
82
|
ndarray
|
|
80
83
|
Modelled flux either as a 3D ndarray.
|
|
81
84
|
"""
|
|
82
|
-
k, t0, p, a, i, e, w = map(atleast_1d, (k, t0, p, a, i, e, w))
|
|
83
|
-
|
|
85
|
+
k, t0, p, a, i, e, w, rstar = map(atleast_1d, (k, t0, p, a, i, e, w, rstar))
|
|
86
|
+
if rstar.size == 1 and k.size > 1:
|
|
87
|
+
rstar = rstar.repeat(k.size)
|
|
88
|
+
return self.model(self.time, k, t0, p, a, i, e, w, rstar, f, self.nsamples[0], self.exptimes[0])
|
|
84
89
|
|
|
85
90
|
def __call__(self, f: ndarray, k: Union[float, ndarray], t0: Union[float, ndarray], p: Union[float, ndarray],
|
|
86
91
|
a: Union[float, ndarray], i: Union[float, ndarray], e: Union[float, ndarray] = 0.0,
|
|
87
|
-
w: Union[float, ndarray] = 0.0) -> ndarray:
|
|
88
|
-
return self.evaluate(f, k, t0, p, a, i, e, w)
|
|
92
|
+
w: Union[float, ndarray] = 0.0, rstar: Union[float, ndarray] = 1.0) -> ndarray:
|
|
93
|
+
return self.evaluate(f, k, t0, p, a, i, e, w, rstar)
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
from meepmeep import eclipse_light_travel_time
|
|
2
|
+
from meepmeep.utils import eclipse_phase
|
|
3
|
+
|
|
4
|
+
from numba import njit, prange
|
|
5
|
+
from numpy import zeros, isnan, nan, full, floor, pi
|
|
6
|
+
from numpy.typing import NDArray
|
|
7
|
+
|
|
8
|
+
from meepmeep.xy.position import solve_xy_p5s, pd_t15sc, bounding_box
|
|
9
|
+
|
|
10
|
+
from .common import circle_circle_intersection_area_kite as ccia
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@njit(parallel=False, fastmath=False)
|
|
14
|
+
def eclipse_model(times: NDArray, k: NDArray, t0: NDArray, p: NDArray, a: NDArray, i: NDArray, e: NDArray, w: NDArray,
|
|
15
|
+
rstar: float, nlc: int, lcids: NDArray, epids: NDArray, nsamples: int | NDArray,
|
|
16
|
+
exptimes: int | NDArray):
|
|
17
|
+
|
|
18
|
+
npv = k.shape[0]
|
|
19
|
+
npt = times.size
|
|
20
|
+
|
|
21
|
+
if k.ndim != 1:
|
|
22
|
+
raise ValueError(" The radius ratio must be given as an 1D array with shape (npv)")
|
|
23
|
+
|
|
24
|
+
_exptimes = zeros(nlc)
|
|
25
|
+
_exptimes[:] = exptimes
|
|
26
|
+
_nsamples = zeros(nlc)
|
|
27
|
+
_nsamples[:] = nsamples
|
|
28
|
+
|
|
29
|
+
pv_is_good = full(npv, True)
|
|
30
|
+
xyc = zeros((npv, 2, 5)) # Taylor series coefficients for the (x, y) position
|
|
31
|
+
bbs = zeros((npv, nlc, 2))
|
|
32
|
+
eclipse_shifts = zeros(npv)
|
|
33
|
+
ltts = zeros(npv)
|
|
34
|
+
|
|
35
|
+
for ipv in range(npv):
|
|
36
|
+
if isnan(a[ipv]) or (a[ipv] <= 1.0) or (e[ipv] < 0.0):
|
|
37
|
+
pv_is_good[ipv] = False
|
|
38
|
+
continue
|
|
39
|
+
|
|
40
|
+
# ------------------------------------------------------#
|
|
41
|
+
# Calculate the Taylor series expansions for the orbits #
|
|
42
|
+
# ------------------------------------------------------#
|
|
43
|
+
eclipse_shifts[ipv] = eclipse_phase(p[ipv], i[ipv], e[ipv], w[ipv])
|
|
44
|
+
xyc[ipv, :, :] = solve_xy_p5s(eclipse_shifts[ipv], p[ipv], a[ipv], i[ipv], e[ipv], w[ipv])
|
|
45
|
+
ltts[ipv] = eclipse_light_travel_time(p[ipv], a[ipv], i[ipv], e[ipv], w[ipv], rstar)
|
|
46
|
+
|
|
47
|
+
# -----------------------------#
|
|
48
|
+
# Calculate the bounding boxes #
|
|
49
|
+
# -----------------------------#
|
|
50
|
+
bt4, bt1 = bounding_box(k[ipv], xyc[ipv])
|
|
51
|
+
bbs[ipv, :, 0] = bt1
|
|
52
|
+
bbs[ipv, :, 1] = bt4
|
|
53
|
+
for ilc in range(nlc):
|
|
54
|
+
bbs[ipv, ilc, 0] -= 0.003 + _exptimes[ilc]
|
|
55
|
+
bbs[ipv, ilc, 1] += 0.003 + _exptimes[ilc]
|
|
56
|
+
|
|
57
|
+
# ---------------------------#
|
|
58
|
+
# Calculate the light curves #
|
|
59
|
+
# ---------------------------#
|
|
60
|
+
flux = zeros((npv, npt))
|
|
61
|
+
for j in prange(npv * npt):
|
|
62
|
+
ipv = j // npt
|
|
63
|
+
ipt = j % npt
|
|
64
|
+
|
|
65
|
+
if not pv_is_good[ipv]:
|
|
66
|
+
flux[ipv, ipt] = nan
|
|
67
|
+
continue
|
|
68
|
+
|
|
69
|
+
ilc = lcids[ipt]
|
|
70
|
+
iep = epids[ilc]
|
|
71
|
+
|
|
72
|
+
te = t0[ipv, iep] + eclipse_shifts[ipv] + ltts[ipv]
|
|
73
|
+
epoch = floor((times[ipt] - te + 0.5 * p[ipv]) / p[ipv])
|
|
74
|
+
tc = times[ipt] - (te + epoch * p[ipv])
|
|
75
|
+
if not (bbs[ipv, ilc, 0] <= tc <= bbs[ipv, ilc, 1]):
|
|
76
|
+
flux[ipv, ipt] = pi * k[ipv] ** 2
|
|
77
|
+
else:
|
|
78
|
+
for isample in range(1, nsamples[ilc] + 1):
|
|
79
|
+
time_offset = exptimes[ilc] * ((isample - 0.5) / nsamples[ilc] - 0.5)
|
|
80
|
+
z = pd_t15sc(tc + time_offset, xyc[ipv])
|
|
81
|
+
flux[ipv, ipt] += pi * k[ipv] ** 2 - ccia(1.0, k[ipv], z)[0]
|
|
82
|
+
flux[ipv, ipt] /= nsamples[ilc]
|
|
83
|
+
return flux
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from math import fabs, floor
|
|
2
2
|
|
|
3
3
|
from meepmeep.utils import d_from_pkaiews, eclipse_phase
|
|
4
|
+
from meepmeep.newton import eclipse_light_travel_time
|
|
4
5
|
from meepmeep.xy.position import solve_xy_p5s, pd_t15sc
|
|
5
6
|
from numpy import zeros, ndarray, isnan, nan, pi
|
|
6
7
|
|
|
@@ -10,7 +11,7 @@ __all__ = ['esmodel']
|
|
|
10
11
|
|
|
11
12
|
|
|
12
13
|
def esmodel(times: ndarray, k: ndarray, t0: ndarray, p: ndarray, a: ndarray, i: ndarray, e: ndarray, w: ndarray,
|
|
13
|
-
fratio: ndarray, nsamples: int, exptime: float) -> ndarray:
|
|
14
|
+
rstar: ndarray, fratio: ndarray, nsamples: int, exptime: float) -> ndarray:
|
|
14
15
|
if k.ndim != 1:
|
|
15
16
|
raise ValueError(" The radius ratio must be given as an 1D array with shape (npv)")
|
|
16
17
|
|
|
@@ -34,7 +35,8 @@ def esmodel(times: ndarray, k: ndarray, t0: ndarray, p: ndarray, a: ndarray, i:
|
|
|
34
35
|
# -----------------------------------------------------#
|
|
35
36
|
eclipse_shift = eclipse_phase(p[ipv], i[ipv], e[ipv], w[ipv])
|
|
36
37
|
xyc[:, :] = solve_xy_p5s(eclipse_shift, p[ipv], a[ipv], i[ipv], e[ipv], w[ipv])
|
|
37
|
-
|
|
38
|
+
ltt = eclipse_light_travel_time(p[ipv], a[ipv], i[ipv], e[ipv], w[ipv], rstar[ipv])
|
|
39
|
+
te = t0[ipv] + eclipse_shift + ltt
|
|
38
40
|
|
|
39
41
|
# --------------------------------#
|
|
40
42
|
# Calculate the half-window width #
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
from meepmeep.tsorbit import bounding_box
|
|
2
1
|
from numba import njit, prange
|
|
3
2
|
from numpy import zeros, dot, ndarray, isnan, nan, full, floor
|
|
4
3
|
|
|
5
|
-
from meepmeep.xy.position import solve_xy_p5s, pd_t15sc
|
|
4
|
+
from meepmeep.xy.position import solve_xy_p5s, pd_t15sc, bounding_box
|
|
6
5
|
from meepmeep.utils import d_from_pkaiews
|
|
7
6
|
|
|
8
7
|
from .common import calculate_weights_2d, interpolate_mean_limb_darkening_s
|
|
@@ -82,7 +81,7 @@ def rr_full_serial(times: ndarray, k: ndarray, t0: ndarray, p: ndarray, a: ndarr
|
|
|
82
81
|
# -----------------------------#
|
|
83
82
|
# Calculate the bounding boxes #
|
|
84
83
|
# -----------------------------#
|
|
85
|
-
bt1, bt4 = bounding_box(ks[ipv, 0], xyc)
|
|
84
|
+
bt1, bt4 = bounding_box(ks[ipv, 0], xyc[ipv])
|
|
86
85
|
bbs[ipv, :, 0] = bt1
|
|
87
86
|
bbs[ipv, :, 1] = bt4
|
|
88
87
|
for ilc in range(nlc):
|
|
@@ -178,7 +177,7 @@ def rr_full_parallel(times: ndarray, k: ndarray, t0: ndarray, p: ndarray, a: nda
|
|
|
178
177
|
# -----------------------------#
|
|
179
178
|
# Calculate the bounding boxes #
|
|
180
179
|
# -----------------------------#
|
|
181
|
-
bt1, bt4 = bounding_box(ks[ipv, 0], xyc)
|
|
180
|
+
bt1, bt4 = bounding_box(ks[ipv, 0], xyc[ipv])
|
|
182
181
|
bbs[ipv, :, 0] = bt1
|
|
183
182
|
bbs[ipv, :, 1] = bt4
|
|
184
183
|
for ilc in range(nlc):
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# PyTransit: fast and easy exoplanet transit modelling in Python.
|
|
2
|
+
# Copyright (C) 2010-2019 Hannu Parviainen
|
|
3
|
+
#
|
|
4
|
+
# This program is free software: you can redistribute it and/or modify
|
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
7
|
+
# (at your option) any later version.
|
|
8
|
+
|
|
9
|
+
import unittest
|
|
10
|
+
from math import pi
|
|
11
|
+
|
|
12
|
+
import numpy as np
|
|
13
|
+
from numpy import ndarray
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def make_inputs(k=0.1, a=8.0, inc=np.pi / 2, p=2.0, t0=0.0,
|
|
17
|
+
e=0.0, w=0.0, rstar=1.0,
|
|
18
|
+
npt=5000, t_start=-0.5, t_end=3.5, nep=1):
|
|
19
|
+
"""Build a canonical single-pv, single-light-curve input set.
|
|
20
|
+
|
|
21
|
+
The defaults give a non-grazing hot-Jupiter-like geometry on a
|
|
22
|
+
circular orbit, with the primary transit at t=0 and the secondary
|
|
23
|
+
eclipse near t=p/2=1 d.
|
|
24
|
+
"""
|
|
25
|
+
times = np.linspace(t_start, t_end, npt)
|
|
26
|
+
k_arr = np.array([k])
|
|
27
|
+
t0_arr = np.full((1, nep), t0)
|
|
28
|
+
p_arr = np.array([p])
|
|
29
|
+
a_arr = np.array([a])
|
|
30
|
+
i_arr = np.array([inc])
|
|
31
|
+
e_arr = np.array([e])
|
|
32
|
+
w_arr = np.array([w])
|
|
33
|
+
rstar_arr = np.array([rstar])
|
|
34
|
+
nlc, npb = 1, 1
|
|
35
|
+
lcids = np.zeros(npt, dtype=np.int64)
|
|
36
|
+
pbids = np.zeros(nlc, dtype=np.int64)
|
|
37
|
+
epids = np.zeros(nlc, dtype=np.int64)
|
|
38
|
+
nsamples = np.ones(nlc, dtype=np.int64)
|
|
39
|
+
exptimes = np.zeros(nlc)
|
|
40
|
+
return (times, k_arr, t0_arr, p_arr, a_arr, i_arr, e_arr, w_arr,
|
|
41
|
+
rstar_arr, nlc, npb, nep,
|
|
42
|
+
lcids, pbids, epids, nsamples, exptimes)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class TestEclipseKernelImport(unittest.TestCase):
|
|
46
|
+
"""Sanity checks that the kernel imports and runs end-to-end."""
|
|
47
|
+
|
|
48
|
+
def test_kernel_imports(self):
|
|
49
|
+
from pytransit.models.roadrunner.model_eclipse import eclipse_model
|
|
50
|
+
self.assertTrue(callable(eclipse_model))
|
|
51
|
+
|
|
52
|
+
def test_kernel_returns_expected_shape(self):
|
|
53
|
+
from pytransit.models.roadrunner.model_eclipse import eclipse_model
|
|
54
|
+
args = make_inputs()
|
|
55
|
+
flux = eclipse_model(*args)
|
|
56
|
+
self.assertIsInstance(flux, ndarray)
|
|
57
|
+
self.assertEqual(flux.shape, (1, args[0].size))
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
if __name__ == "__main__":
|
|
61
|
+
unittest.main()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytransit-2.7.0 → pytransit-2.7.1}/pytransit/lpf/loglikelihood/multiceleriteloglikelihood.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|