PyTransit 2.6.10__tar.gz → 2.6.11__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.6.10 → pytransit-2.6.11}/PKG-INFO +1 -1
- {pytransit-2.6.10 → pytransit-2.6.11}/PyTransit.egg-info/PKG-INFO +1 -1
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/__init__.py +1 -1
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/lpf/logposteriorfunction.py +20 -15
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/lpf/rvlpf.py +16 -9
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/eclipse_model.py +1 -70
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/gdmodel.py +3 -3
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/ldtkldm.py +1 -2
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/numba/udmodel.py +1 -2
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/roadrunner/ecintersection.py +87 -4
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/roadrunner/model_trspec.py +12 -15
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/utils/de.py +1 -1
- {pytransit-2.6.10 → pytransit-2.6.11}/LICENSE +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/MANIFEST.in +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/PyTransit.egg-info/SOURCES.txt +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/PyTransit.egg-info/dependency_links.txt +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/PyTransit.egg-info/requires.txt +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/PyTransit.egg-info/top_level.txt +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/README.md +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pyproject.toml +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/contamination/__init__.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/contamination/contamination.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/contamination/data/spectra.h5 +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/contamination/data/transmission.nc +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/contamination/filter.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/contamination/instrument.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/contamination/plotting.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/limb_darkening.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/lpf/__init__.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/lpf/baselines/__init__.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/lpf/baselines/legendrebaseline.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/lpf/baselines/linearbaseline.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/lpf/cntlpf.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/lpf/eclipselpf.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/lpf/loglikelihood/__init__.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/lpf/loglikelihood/celeriteloglikelihood.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/lpf/loglikelihood/clloglikelihood.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/lpf/loglikelihood/fmcloglikelihood.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/lpf/loglikelihood/logisticloglikelihood.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/lpf/loglikelihood/multiceleriteloglikelihood.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/lpf/loglikelihood/wnloglikelihood.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/lpf/lpf.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/lpf/mclpf.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/lpf/mptlpf.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/lpf/ocllpf.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/lpf/ocltdvlpf.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/lpf/oclttvlpf.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/lpf/phasecurvelpf.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/lpf/tdvlpf.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/lpf/tess/__init__.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/lpf/tess/ctesslpf.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/lpf/tess/tessttvlpf.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/lpf/tess/tgclpf.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/lpf/tess/tgcmplpf.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/lpf/tess/tmpclpf.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/lpf/tesslpf.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/lpf/tessoclttvlpf.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/lpf/transitanalysis.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/lpf/transitlpf.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/lpf/ttvlpf.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/__init__.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/general.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/ldmodel.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/limb_darkening/__init__.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/limb_darkening/general.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/limb_darkening/linear.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/limb_darkening/nonlinear.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/limb_darkening/power_2.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/limb_darkening/quadratic.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/limb_darkening/quadratic_tri.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/limb_darkening/uniform.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/ma_chromosphere.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/ma_quadratic.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/ma_quadratic_cl.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/ma_uniform.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/ma_uniform_cl.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/numba/__init__.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/numba/gdmodel.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/numba/general_nb.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/numba/ldmodels.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/numba/ldtkldm.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/numba/ma_chromosphere_nb.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/numba/ma_quadratic_nb.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/numba/ma_uniform_nb.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/numba/phasecurves.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/numba/qpower2_nb.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/numba/rrmodel.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/numba/spmodel.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/opencl/ma_quadratic.cl +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/opencl/ma_uniform.cl +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/opencl/orbits.cl +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/opencl/qpower2.cl +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/osmodel.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/qpower2.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/qpower2_cl.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/roadrunner/__init__.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/roadrunner/common.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/roadrunner/model.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/roadrunner/model_full.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/roadrunner/model_simple.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/roadrunner/opmodel.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/roadrunner/opmodel_full.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/roadrunner/rrmodel.cl +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/roadrunner/rrmodel.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/roadrunner/rrmodel_cl.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/roadrunner/tsmodel.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/transitmodel.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/models/uniform.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/orbits/__init__.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/orbits/orbits.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/orbits/orbits_py.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/orbits/taylor_z.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/param/__init__.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/param/parameter.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/param/prior.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/param/utilities.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/stars/__init__.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/stars/btsettl.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/stars/data/avg_bt_settl.fits +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/stars/data/avg_husser2013.fits +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/stars/husser2013.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/utils/__init__.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/utils/astrometry.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/utils/constants.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/utils/downsample.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/utils/eclipses.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/utils/io/__init__.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/utils/io/lightcurvedata.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/utils/keplerlc.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/utils/mdwarfs.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/utils/misc.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/utils/mocklc.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/utils/octasphere.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/utils/phasecurves.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/utils/physics.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/utils/rv.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/pytransit/utils/tess.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/requirements.txt +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/setup.cfg +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/tests/test_contamination.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/tests/test_ma_quadratic.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/tests/test_ma_quadratic_nb.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/tests/test_qpower2_nb.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/tests/test_uniform_model.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/tests/test_uniform_model_nb.py +0 -0
- {pytransit-2.6.10 → pytransit-2.6.11}/tests/test_z.py +0 -0
|
@@ -136,11 +136,12 @@ class LogPosteriorFunction:
|
|
|
136
136
|
|
|
137
137
|
def optimize_global(self, niter=200, npop=50, population=None, pool=None, lnpost=None, vectorize=True,
|
|
138
138
|
label='Global optimisation', leave=False, plot_convergence: bool = True, use_tqdm: bool = True,
|
|
139
|
-
plot_parameters: tuple = (0, 2, 3, 4)):
|
|
139
|
+
plot_parameters: tuple = (0, 2, 3, 4), min_ptp: float = 1e-2):
|
|
140
140
|
|
|
141
141
|
lnpost = lnpost or self.lnposterior
|
|
142
142
|
if self.de is None:
|
|
143
|
-
self.de = DiffEvol(lnpost, clip(self.ps.bounds, -1, 1), npop, maximize=True, vectorize=vectorize,
|
|
143
|
+
self.de = DiffEvol(lnpost, clip(self.ps.bounds, -1, 1), npop, maximize=True, vectorize=vectorize,
|
|
144
|
+
pool=pool, min_ptp=min_ptp)
|
|
144
145
|
if population is None:
|
|
145
146
|
self.de._population[:, :] = self.create_pv_population(npop)
|
|
146
147
|
else:
|
|
@@ -179,24 +180,28 @@ class LogPosteriorFunction:
|
|
|
179
180
|
raise ValueError('The MCMC sampler is set to save the results, but the result directory is not set.')
|
|
180
181
|
|
|
181
182
|
lnpost = lnpost or self.lnposterior
|
|
182
|
-
if
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
183
|
+
if population is not None:
|
|
184
|
+
pop0 = population
|
|
185
|
+
else:
|
|
186
|
+
if self.sampler is None:
|
|
187
|
+
if hasattr(self, '_local_minimization') and self._local_minimization is not None:
|
|
188
|
+
pop0 = multivariate_normal(self._local_minimization.x, diag(full(len(self.ps), 0.001 ** 2)), size=npop)
|
|
189
|
+
elif self.de is not None:
|
|
190
|
+
pop0 = self.de.population.copy()
|
|
191
|
+
else:
|
|
192
|
+
raise ValueError('Sample MCMC needs an initial population.')
|
|
189
193
|
else:
|
|
190
|
-
|
|
194
|
+
pop0 = self.sampler.chain[:, -1, :].copy()
|
|
195
|
+
|
|
196
|
+
if self.sampler is None:
|
|
191
197
|
self.sampler = EnsembleSampler(pop0.shape[0], pop0.shape[1], lnpost, vectorize=vectorize, pool=pool)
|
|
192
|
-
else:
|
|
193
|
-
pop0 = self.sampler.chain[:, -1, :].copy()
|
|
194
198
|
|
|
195
199
|
for i in tqdm(range(repeats), desc=label, disable=(not use_tqdm), leave=leave):
|
|
196
|
-
if reset or i > 0:
|
|
200
|
+
if (self.sampler is not None and reset) or i > 0:
|
|
197
201
|
self.sampler.reset()
|
|
198
|
-
for _ in tqdm(self.sampler.sample(pop0, iterations=niter, thin=thin
|
|
199
|
-
desc='Run {:d}/{:d}'.format(i + 1, repeats), leave=False,
|
|
202
|
+
for _ in tqdm(self.sampler.sample(pop0, iterations=niter, thin=thin, skip_initial_state_check=False),
|
|
203
|
+
total=niter, desc='Run {:d}/{:d}'.format(i + 1, repeats), leave=False,
|
|
204
|
+
disable=(not use_tqdm)):
|
|
200
205
|
pass
|
|
201
206
|
if save:
|
|
202
207
|
self.save(self.result_dir)
|
|
@@ -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=None):
|
|
60
|
+
def __init__(self, name: str, nplanets: int, times, rvs, rves, rvis=None, slope_order: int = 1):
|
|
61
61
|
super().__init__(name)
|
|
62
62
|
|
|
63
63
|
def transform_input(a):
|
|
@@ -77,7 +77,7 @@ class RVLPF(LogPosteriorFunction):
|
|
|
77
77
|
rvis = zeros(len(times), 'int')
|
|
78
78
|
|
|
79
79
|
self._tref = concatenate(times).mean()
|
|
80
|
-
self.rvm: RVModel = RVModel(self, nplanets, times, rvs, rves, rvis)
|
|
80
|
+
self.rvm: RVModel = RVModel(self, nplanets, times, rvs, rves, rvis, slope_order=slope_order)
|
|
81
81
|
|
|
82
82
|
def model(self, pv):
|
|
83
83
|
return self.rvm.rv_model(pv)
|
|
@@ -103,7 +103,7 @@ class RVModel:
|
|
|
103
103
|
|
|
104
104
|
def __init__(self, lpf: LogPosteriorFunction, nplanets: int,
|
|
105
105
|
times, rvs: Iterable, rves: Iterable, rvis: Iterable,
|
|
106
|
-
tref: Optional[float] = None):
|
|
106
|
+
tref: Optional[float] = None, slope_order: int = 1):
|
|
107
107
|
self.lpf = lpf
|
|
108
108
|
|
|
109
109
|
if hasattr(lpf, 'nplanets'):
|
|
@@ -125,6 +125,7 @@ class RVModel:
|
|
|
125
125
|
self._rva = None
|
|
126
126
|
self._rvea = None
|
|
127
127
|
self._rv_ids = None
|
|
128
|
+
self.slope_order = slope_order
|
|
128
129
|
|
|
129
130
|
self.setup_data(times, rvs, rves, rvis)
|
|
130
131
|
|
|
@@ -183,7 +184,7 @@ class RVModel:
|
|
|
183
184
|
self._start_rvk = ps.blocks[-1].start
|
|
184
185
|
self._sl_rvk = ps.blocks[-1].slice
|
|
185
186
|
|
|
186
|
-
psl = [GParameter('
|
|
187
|
+
psl = [GParameter(f'rv_slope_{i}', 'rv slope', '', NP(0.0, 1.0), (-inf, inf)) for i in range(1, self.slope_order+1)]
|
|
187
188
|
ps.add_global_block('rv_slope', psl)
|
|
188
189
|
self._start_rv_slope = ps.blocks[-1].start
|
|
189
190
|
self._sl_rv_slope = ps.blocks[-1].slice
|
|
@@ -202,7 +203,10 @@ class RVModel:
|
|
|
202
203
|
|
|
203
204
|
def rv_slope(self, pvp, times):
|
|
204
205
|
pvp = atleast_2d(pvp)
|
|
205
|
-
|
|
206
|
+
slope = times * pvp[:, self._start_rv_slope : self._start_rv_slope + 1]
|
|
207
|
+
if self.slope_order == 2:
|
|
208
|
+
slope += times**2 * pvp[:, self._start_rv_slope + 1: self._start_rv_slope + 2]
|
|
209
|
+
return slope
|
|
206
210
|
|
|
207
211
|
def rv_model(self, pvp, times=None, planets=None, add_sv=True, add_slope=True):
|
|
208
212
|
times = self._timea if times is None else times - self._tref
|
|
@@ -264,10 +268,10 @@ class RVModel:
|
|
|
264
268
|
rv_time = linspace(self._timea.min() - 1, self._timea.max() + 1, num=ntimes) + self._tref
|
|
265
269
|
|
|
266
270
|
if pvp is None:
|
|
267
|
-
rv_model = self.rv_model(pv, rv_time, add_sv=False)
|
|
271
|
+
rv_model = self.rv_model(pv, rv_time, add_sv=False, add_slope=slope)
|
|
268
272
|
rv_model_limits = None
|
|
269
273
|
else:
|
|
270
|
-
rv_percentiles = percentile(self.rv_model(pvp, rv_time, add_sv=False), [50, 16, 84, 2.5, 97.5], 0)
|
|
274
|
+
rv_percentiles = percentile(self.rv_model(pvp, rv_time, add_sv=False, add_slope=slope), [50, 16, 84, 2.5, 97.5], 0)
|
|
271
275
|
rv_model = rv_percentiles[0]
|
|
272
276
|
rv_model_limits = rv_percentiles[1:]
|
|
273
277
|
|
|
@@ -279,10 +283,13 @@ class RVModel:
|
|
|
279
283
|
colors = len(self.rvis) * ['k']
|
|
280
284
|
if markers is None:
|
|
281
285
|
markers = len(self.rvis) * ['.']
|
|
282
|
-
rvs = self._rva - self.rv_shifts(pv)
|
|
286
|
+
rvs = self._rva - self.rv_shifts(pv)
|
|
287
|
+
if not slope:
|
|
288
|
+
rvs -= squeeze(self.rv_slope(pv, self._timea))
|
|
289
|
+
|
|
283
290
|
for iid, instrument in enumerate(self.rvis):
|
|
284
291
|
m = self._rv_ids == iid
|
|
285
|
-
axs[0].errorbar(self._timea[m] + self._tref, rvs[m], self._rvea[m],
|
|
292
|
+
axs[0].errorbar(self._timea[m] + self._tref, rvs[m], self._rvea[m], marker=markers[iid], ls='',
|
|
286
293
|
c=colors[iid], ms=4, label=instrument)
|
|
287
294
|
axs[1].errorbar(self._timea[m] + self._tref, self._rva[m] - squeeze(self.rv_model(pv))[m], self._rvea[m],
|
|
288
295
|
fmt='ok', ms=4)
|
|
@@ -38,7 +38,7 @@ class EclipseModel(TransitModel):
|
|
|
38
38
|
Parameters
|
|
39
39
|
----------
|
|
40
40
|
k
|
|
41
|
-
Radius ratio(s) either as a single float
|
|
41
|
+
Radius ratio(s) either as a single float or a 1D vector.
|
|
42
42
|
t0
|
|
43
43
|
Transit center(s) as a float or a 1D vector.
|
|
44
44
|
p
|
|
@@ -97,72 +97,3 @@ class EclipseModel(TransitModel):
|
|
|
97
97
|
flux = 1.0 + (flux - 1.0) / k**2
|
|
98
98
|
|
|
99
99
|
return squeeze(flux)
|
|
100
|
-
|
|
101
|
-
def evaluate_ps(self, k: float, t0: float, p: float, a: float, i: float, e: float = 0., w: float = 0., fr: Optional[float] = None) -> ndarray:
|
|
102
|
-
"""Evaluate the transit model for a set of scalar parameters.
|
|
103
|
-
|
|
104
|
-
Parameters
|
|
105
|
-
----------
|
|
106
|
-
k : array-like
|
|
107
|
-
Radius ratio(s) either as a single float or an 1D array.
|
|
108
|
-
t0 : float
|
|
109
|
-
Transit center as a float.
|
|
110
|
-
p : float
|
|
111
|
-
Orbital period as a float.
|
|
112
|
-
a : float
|
|
113
|
-
Orbital semi-major axis divided by the stellar radius as a float.
|
|
114
|
-
i : float
|
|
115
|
-
Orbital inclination(s) as a float.
|
|
116
|
-
e : float, optional
|
|
117
|
-
Orbital eccentricity as a float.
|
|
118
|
-
w : float, optional
|
|
119
|
-
Argument of periastron as a float.
|
|
120
|
-
fr : float, optional
|
|
121
|
-
Planet-star flux ratio as a float.
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
Notes
|
|
125
|
-
-----
|
|
126
|
-
This version of the `evaluate` method is optimized for calculating a single transit model (such as when using a
|
|
127
|
-
local optimizer). If you want to evaluate the model for a large number of parameters simultaneously, use either
|
|
128
|
-
`evaluate` or `evaluate_pv`.
|
|
129
|
-
|
|
130
|
-
Returns
|
|
131
|
-
-------
|
|
132
|
-
ndarray
|
|
133
|
-
Modelled flux as a 1D ndarray.
|
|
134
|
-
"""
|
|
135
|
-
if self.time is None:
|
|
136
|
-
raise ValueError("Need to set the data before calling the transit model.")
|
|
137
|
-
|
|
138
|
-
k = asarray(k)
|
|
139
|
-
flux = uniform_model_s(self.time, k, t0, p, a, i, e, w, self.lcids, self.pbids, self.nsamples, self.exptimes, zsign=-1.0)
|
|
140
|
-
if fr is not None:
|
|
141
|
-
flux = 1.0 + (flux - 1.0) * fr
|
|
142
|
-
return squeeze(flux)
|
|
143
|
-
|
|
144
|
-
def evaluate_pv(self, pvp: ndarray, fr = None) -> ndarray:
|
|
145
|
-
"""Evaluate the transit model for a 2D parameter array.
|
|
146
|
-
|
|
147
|
-
Parameters
|
|
148
|
-
----------
|
|
149
|
-
pvp
|
|
150
|
-
Parameter array with a shape `(npv, npar)` where `npv` is the number of parameter vectors, and each row
|
|
151
|
-
contains a set of parameters `[k, t0, p, a, i, e, w]`. The radius ratios can also be given per passband,
|
|
152
|
-
in which case the row should be structured as `[k_0, k_1, k_2, ..., k_npb, t0, p, a, i, e, w]`.
|
|
153
|
-
|
|
154
|
-
Notes
|
|
155
|
-
-----
|
|
156
|
-
This version of the `evaluate` method is optimized for calculating several models in parallel, such as when
|
|
157
|
-
using *emcee* for MCMC sampling.
|
|
158
|
-
|
|
159
|
-
Returns
|
|
160
|
-
-------
|
|
161
|
-
ndarray
|
|
162
|
-
Modelled flux either as a 1D or 2D ndarray.
|
|
163
|
-
"""
|
|
164
|
-
assert self.time is not None, "Need to set the data before calling the transit model."
|
|
165
|
-
flux = uniform_model_pv(self.time, pvp, self.lcids, self.pbids, self.nsamples, self.exptimes, zsign=-1.0)
|
|
166
|
-
if fr is not None:
|
|
167
|
-
flux = 1.0 + (flux - 1.0) * fr
|
|
168
|
-
return squeeze(flux)
|
|
@@ -227,9 +227,9 @@ class GravityDarkenedModel(TransitModel):
|
|
|
227
227
|
|
|
228
228
|
# Plot the info
|
|
229
229
|
# -------------
|
|
230
|
-
ax.text(0.025, 0.95, f"i$_
|
|
231
|
-
ax.text(0.025, 0.90, f"i$_
|
|
232
|
-
ax.text(1 - 0.025, 0.95, fr"
|
|
230
|
+
ax.text(0.025, 0.95, f"i$_\\star$ = {degrees(istar):.1f}$^\\circ$", transform=ax.transAxes)
|
|
231
|
+
ax.text(0.025, 0.90, f"i$_\\mathrm{{p}}$ = {degrees(inc):.1f}$^\\circ$", transform=ax.transAxes)
|
|
232
|
+
ax.text(1 - 0.025, 0.95, fr"$\\alpha$ = {degrees(alpha):.1f}$^\\circ$", transform=ax.transAxes, ha='right')
|
|
233
233
|
ax.text(0.025, 0.05, f"f = {f:.1f}", transform=ax.transAxes)
|
|
234
234
|
|
|
235
235
|
setp(ax, xlim=(-1.1, 1.1), ylim=(-1.1, 1.1), xticks=[], yticks=[])
|
|
@@ -17,9 +17,8 @@
|
|
|
17
17
|
from typing import Tuple, Optional, Union
|
|
18
18
|
from pathlib import Path
|
|
19
19
|
|
|
20
|
+
from numpy import ndarray, linspace, meshgrid, transpose, asarray, newaxis, errstate
|
|
20
21
|
from numba import njit
|
|
21
|
-
from numpy import zeros, interp, pi, ndarray, linspace, meshgrid, transpose, asarray, newaxis, errstate
|
|
22
|
-
from scipy.interpolate import interpn, interpnd, RegularGridInterpolator as RGI
|
|
23
22
|
|
|
24
23
|
from .ldmodel import LDModel
|
|
25
24
|
from .numba.ldtkldm import trilinear_interpolation_set, integrate_profiles_set
|
|
@@ -80,8 +80,7 @@ def uniform_model_simple(times, k, t0, p, a, i, e, w, with_derivatives):
|
|
|
80
80
|
|
|
81
81
|
|
|
82
82
|
@njit
|
|
83
|
-
def uniform_model_v(times, k, t0, p, dkdp, cfs, dcfs, with_derivatives,
|
|
84
|
-
lcids, pbids, epids, nsamples, exptimes):
|
|
83
|
+
def uniform_model_v(times, k, t0, p, dkdp, cfs, dcfs, with_derivatives, lcids, pbids, epids, nsamples, exptimes):
|
|
85
84
|
k = atleast_1d(asarray(k))
|
|
86
85
|
dkdp = atleast_1d(asarray(dkdp))
|
|
87
86
|
t0 = atleast_1d(asarray(t0))
|
|
@@ -4,9 +4,93 @@ from numpy import ndarray, fabs, pi, full, arange
|
|
|
4
4
|
from numba import njit
|
|
5
5
|
|
|
6
6
|
@njit
|
|
7
|
-
def
|
|
7
|
+
def rotated_ellipse_bbox(a: float, f: float):
|
|
8
|
+
"""
|
|
9
|
+
Parameters
|
|
10
|
+
----------
|
|
11
|
+
a : float
|
|
12
|
+
The angle (in radians) by which the ellipse is rotated.
|
|
13
|
+
f : float
|
|
14
|
+
The eccentricity of the ellipse, with a value between 0 and 1.
|
|
15
|
+
|
|
16
|
+
Returns
|
|
17
|
+
-------
|
|
18
|
+
hw : float
|
|
19
|
+
The half-width of the bounding box of the rotated ellipse.
|
|
20
|
+
hh : float
|
|
21
|
+
The half-height of the bounding box of the rotated ellipse.
|
|
22
|
+
|
|
23
|
+
"""
|
|
24
|
+
r1, r2 = 1.0, 1.0-f
|
|
25
|
+
ux = r1 * cos(a)
|
|
26
|
+
uy = r1 * sin(a)
|
|
27
|
+
vx = r2 * cos(a + pi/2)
|
|
28
|
+
vy = r2 * sin(a + pi/2)
|
|
29
|
+
hw = sqrt(ux*ux + vx*vx)
|
|
30
|
+
hh = sqrt(uy*uy + vy*vy)
|
|
31
|
+
return hw, hh
|
|
32
|
+
|
|
33
|
+
@njit
|
|
34
|
+
def rotated_ellipse_x(y: float, a: float, f: float) -> tuple[float, float]:
|
|
35
|
+
"""Calculate the x coordinates for a rotated ellipse given the y coordinate and the flattening factor.
|
|
36
|
+
|
|
37
|
+
Parameters
|
|
38
|
+
----------
|
|
39
|
+
y
|
|
40
|
+
The y-coordinate of the point on the ellipse.
|
|
41
|
+
a
|
|
42
|
+
The angle (in radians) of rotation for the ellipse.
|
|
43
|
+
f
|
|
44
|
+
The flattening parameter of the ellipse.
|
|
45
|
+
|
|
46
|
+
Returns
|
|
47
|
+
-------
|
|
48
|
+
tuple[float, float]
|
|
49
|
+
The ellipse x-coordinates for the given y coordinate.
|
|
50
|
+
"""
|
|
51
|
+
ca, sa = cos(a), sin(a)
|
|
52
|
+
b = 1.0 - f
|
|
53
|
+
d = b**2*ca**2 - y**2*sa**4 - 2*y**2*sa**2*ca**2 - y**2*ca**4 + sa**2
|
|
54
|
+
if d >= 0.0:
|
|
55
|
+
xl = (y*(-sa*ca + sa*ca/b**2) - sqrt(d)/b) / (ca**2 + sa**2/b**2)
|
|
56
|
+
xr = (y*(-sa*ca + sa*ca/b**2) + sqrt(d)/b) / (ca**2 + sa**2/b**2)
|
|
57
|
+
return xl, xr
|
|
58
|
+
else:
|
|
59
|
+
return nan, nan
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
@njit
|
|
63
|
+
def rotated_ellipse_dxdy(y: float, a: float, f: float) -> tuple[float, float]:
|
|
64
|
+
"""Calculate dx/dy for a rotated ellipse given the y coordinate and the flattening factor.
|
|
65
|
+
|
|
66
|
+
Parameters
|
|
67
|
+
----------
|
|
68
|
+
y
|
|
69
|
+
The y-coordinate of the point on the ellipse.
|
|
70
|
+
a
|
|
71
|
+
The angle, in radians, of rotation of the ellipse.
|
|
72
|
+
f
|
|
73
|
+
The flattening parameter of the ellipse.
|
|
74
|
+
|
|
75
|
+
Returns
|
|
76
|
+
-------
|
|
77
|
+
tuple[float, float]
|
|
78
|
+
The ellipse derivatives (dx/dy) for the given y coordinate.
|
|
8
79
|
"""
|
|
9
|
-
|
|
80
|
+
ca, sa = cos(a), sin(a)
|
|
81
|
+
b = 1.0 - f
|
|
82
|
+
d = b**2*ca**2 - y**2*sa**4 - 2*y**2*sa**2*ca**2 - y**2*ca**4 + sa**2
|
|
83
|
+
if d >= 0.0:
|
|
84
|
+
dxl = (-sa*ca - (-y*sa**4 - 2*y*sa**2*ca**2 - y*ca**4)/(b*sqrt(d)) + sa*ca/b**2)/(ca**2 + sa**2/b**2)
|
|
85
|
+
dxr = (-sa*ca + (-y*sa**4 - 2*y*sa**2*ca**2 - y*ca**4)/(b*sqrt(d)) + sa*ca/b**2)/(ca**2 + sa**2/b**2)
|
|
86
|
+
return dxl, dxr
|
|
87
|
+
else:
|
|
88
|
+
return nan, nan
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
@njit
|
|
92
|
+
def create_ellipse(ny: int, k: float, f: float, a: float) -> (ndarray, ndarray):
|
|
93
|
+
"""Create the coordinates for a rotated ellipse.
|
|
10
94
|
|
|
11
95
|
Parameters
|
|
12
96
|
----------
|
|
@@ -54,8 +138,7 @@ def create_ellipse(ny: int, k: float, f: float, a: float) -> (ndarray, ndarray):
|
|
|
54
138
|
|
|
55
139
|
@njit
|
|
56
140
|
def ellipse_circle_intersection_area(cx: float, cy: float, z: float, k: float, f: float, xs: ndarray, ys: ndarray) -> float:
|
|
57
|
-
"""
|
|
58
|
-
Calculate the intersection area between a rotated ellipse and a circle using a scanline fill approach.
|
|
141
|
+
"""Calculate the intersection area between a rotated ellipse and a circle using a scanline fill approach.
|
|
59
142
|
|
|
60
143
|
Parameters
|
|
61
144
|
----------
|
|
@@ -93,8 +93,8 @@ def tsmodel_parallel(times: ndarray,
|
|
|
93
93
|
weights: ndarray, dk: float, kmin: float, kmax: float, ng: int, dg: float, z_edges: ndarray,
|
|
94
94
|
nthreads: int) -> ndarray:
|
|
95
95
|
|
|
96
|
-
nthreads_current = get_num_threads()
|
|
97
|
-
set_num_threads(nthreads)
|
|
96
|
+
#nthreads_current = get_num_threads()
|
|
97
|
+
#set_num_threads(nthreads)
|
|
98
98
|
|
|
99
99
|
if k.ndim != 2:
|
|
100
100
|
raise ValueError(" The radius ratios must be given as a 2D array with shape (npv, npb)")
|
|
@@ -115,7 +115,7 @@ def tsmodel_parallel(times: ndarray,
|
|
|
115
115
|
ldm = zeros((npb, ng)) # Limb darkening means
|
|
116
116
|
xyc = zeros((2, 5)) # Taylor series coefficients for the (x, y) position
|
|
117
117
|
|
|
118
|
-
for ipv in
|
|
118
|
+
for ipv in prange(npv):
|
|
119
119
|
if isnan(a[ipv]) or (a[ipv] <= 1.0) or (e[ipv] < 0.0):
|
|
120
120
|
flux[ipv, :, :] = nan
|
|
121
121
|
continue
|
|
@@ -133,8 +133,8 @@ def tsmodel_parallel(times: ndarray,
|
|
|
133
133
|
ldm[ipb, :] = (1.0 - ak) * dot(weights[ik], ldp[ipv, ipb, :]) + ak * dot(weights[ik + 1],
|
|
134
134
|
ldp[ipv, ipb, :])
|
|
135
135
|
else:
|
|
136
|
-
|
|
137
|
-
for ipb in
|
|
136
|
+
_, dg, wg = calculate_weights_2d(kmean, z_edges, ng)
|
|
137
|
+
for ipb in range(npb):
|
|
138
138
|
ldm[ipb, :] = dot(wg, ldp[ipv, ipb, :])
|
|
139
139
|
|
|
140
140
|
# -----------------------------------------------------#
|
|
@@ -151,19 +151,16 @@ def tsmodel_parallel(times: ndarray,
|
|
|
151
151
|
# --------------------------#
|
|
152
152
|
# Calculate the light curve #
|
|
153
153
|
# --------------------------#
|
|
154
|
-
for ipt in
|
|
154
|
+
for ipt in range(npt):
|
|
155
155
|
epoch = floor((times[ipt] - t0[ipv] + 0.5 * p[ipv]) / p[ipv])
|
|
156
156
|
tc = times[ipt] - (t0[ipv] + epoch * p[ipv])
|
|
157
157
|
if fabs(tc) > hww:
|
|
158
158
|
flux[ipv, :, ipt] = 1.0
|
|
159
159
|
else:
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
flux[ipv, ipb, ipt] += (istar[ipv, ipb] - iplanet * aplanet * afac[ipb]) / istar[ipv, ipb]
|
|
167
|
-
flux[ipv, :, ipt] /= nsamples[0]
|
|
168
|
-
set_num_threads(nthreads_current)
|
|
160
|
+
z = pd_t15sc(tc, xyc)
|
|
161
|
+
aplanet = ccia(1.0, kmean, z)[0]
|
|
162
|
+
for ipb in range(npb):
|
|
163
|
+
iplanet = interpolate_mean_limb_darkening_s(z / (1.0 + kmean), dg, ldm[ipb])
|
|
164
|
+
flux[ipv, ipb, ipt] += (istar[ipv, ipb] - iplanet * aplanet * afac[ipb]) / istar[ipv, ipb]
|
|
165
|
+
#set_num_threads(nthreads_current)
|
|
169
166
|
return flux
|
|
@@ -118,7 +118,7 @@ class DiffEvol(object):
|
|
|
118
118
|
"""
|
|
119
119
|
|
|
120
120
|
def __init__(self, fun, bounds, npop, f=None, c=None, seed=None, maximize=False, vectorize=False, cbounds=(0.25, 1),
|
|
121
|
-
fbounds=(0.25, 0.75), pool=None, min_ptp=
|
|
121
|
+
fbounds=(0.25, 0.75), pool=None, min_ptp=0.01, args=[], kwargs={}):
|
|
122
122
|
if seed is not None:
|
|
123
123
|
rseed(seed)
|
|
124
124
|
|
|
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
|
{pytransit-2.6.10 → pytransit-2.6.11}/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
|