PyTransit 2.6.4__tar.gz → 2.6.5__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.
Files changed (146) hide show
  1. {pytransit-2.6.4 → pytransit-2.6.5}/PKG-INFO +1 -1
  2. {pytransit-2.6.4 → pytransit-2.6.5}/PyTransit.egg-info/PKG-INFO +1 -1
  3. {pytransit-2.6.4 → pytransit-2.6.5}/pyproject.toml +1 -1
  4. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/lpf/rvlpf.py +16 -9
  5. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/eclipse_model.py +1 -70
  6. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/ldtkldm.py +12 -4
  7. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/numba/udmodel.py +1 -2
  8. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/roadrunner/model_trspec.py +12 -15
  9. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/roadrunner/opmodel.py +8 -1
  10. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/roadrunner/tsmodel.py +5 -0
  11. {pytransit-2.6.4 → pytransit-2.6.5}/LICENSE +0 -0
  12. {pytransit-2.6.4 → pytransit-2.6.5}/MANIFEST.in +0 -0
  13. {pytransit-2.6.4 → pytransit-2.6.5}/PyTransit.egg-info/SOURCES.txt +0 -0
  14. {pytransit-2.6.4 → pytransit-2.6.5}/PyTransit.egg-info/dependency_links.txt +0 -0
  15. {pytransit-2.6.4 → pytransit-2.6.5}/PyTransit.egg-info/requires.txt +0 -0
  16. {pytransit-2.6.4 → pytransit-2.6.5}/PyTransit.egg-info/top_level.txt +0 -0
  17. {pytransit-2.6.4 → pytransit-2.6.5}/README.md +0 -0
  18. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/__init__.py +0 -0
  19. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/contamination/__init__.py +0 -0
  20. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/contamination/contamination.py +0 -0
  21. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/contamination/data/spectra.h5 +0 -0
  22. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/contamination/data/transmission.nc +0 -0
  23. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/contamination/filter.py +0 -0
  24. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/contamination/instrument.py +0 -0
  25. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/contamination/plotting.py +0 -0
  26. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/limb_darkening.py +0 -0
  27. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/lpf/__init__.py +0 -0
  28. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/lpf/baselines/__init__.py +0 -0
  29. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/lpf/baselines/legendrebaseline.py +0 -0
  30. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/lpf/baselines/linearbaseline.py +0 -0
  31. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/lpf/cntlpf.py +0 -0
  32. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/lpf/eclipselpf.py +0 -0
  33. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/lpf/loglikelihood/__init__.py +0 -0
  34. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/lpf/loglikelihood/celeriteloglikelihood.py +0 -0
  35. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/lpf/loglikelihood/clloglikelihood.py +0 -0
  36. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/lpf/loglikelihood/fmcloglikelihood.py +0 -0
  37. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/lpf/loglikelihood/logisticloglikelihood.py +0 -0
  38. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/lpf/loglikelihood/multiceleriteloglikelihood.py +0 -0
  39. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/lpf/loglikelihood/wnloglikelihood.py +0 -0
  40. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/lpf/logposteriorfunction.py +0 -0
  41. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/lpf/lpf.py +0 -0
  42. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/lpf/mclpf.py +0 -0
  43. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/lpf/mptlpf.py +0 -0
  44. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/lpf/ocllpf.py +0 -0
  45. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/lpf/ocltdvlpf.py +0 -0
  46. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/lpf/oclttvlpf.py +0 -0
  47. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/lpf/phasecurvelpf.py +0 -0
  48. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/lpf/tdvlpf.py +0 -0
  49. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/lpf/tess/__init__.py +0 -0
  50. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/lpf/tess/ctesslpf.py +0 -0
  51. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/lpf/tess/tessttvlpf.py +0 -0
  52. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/lpf/tess/tgclpf.py +0 -0
  53. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/lpf/tess/tgcmplpf.py +0 -0
  54. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/lpf/tess/tmpclpf.py +0 -0
  55. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/lpf/tesslpf.py +0 -0
  56. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/lpf/tessoclttvlpf.py +0 -0
  57. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/lpf/transitanalysis.py +0 -0
  58. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/lpf/transitlpf.py +0 -0
  59. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/lpf/ttvlpf.py +0 -0
  60. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/__init__.py +0 -0
  61. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/gdmodel.py +0 -0
  62. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/general.py +0 -0
  63. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/ldmodel.py +0 -0
  64. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/limb_darkening/__init__.py +0 -0
  65. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/limb_darkening/general.py +0 -0
  66. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/limb_darkening/linear.py +0 -0
  67. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/limb_darkening/nonlinear.py +0 -0
  68. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/limb_darkening/power_2.py +0 -0
  69. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/limb_darkening/quadratic.py +0 -0
  70. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/limb_darkening/quadratic_tri.py +0 -0
  71. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/limb_darkening/uniform.py +0 -0
  72. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/ma_chromosphere.py +0 -0
  73. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/ma_quadratic.py +0 -0
  74. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/ma_quadratic_cl.py +0 -0
  75. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/ma_uniform.py +0 -0
  76. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/ma_uniform_cl.py +0 -0
  77. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/numba/__init__.py +0 -0
  78. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/numba/gdmodel.py +0 -0
  79. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/numba/general_nb.py +0 -0
  80. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/numba/ldmodels.py +0 -0
  81. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/numba/ldtkldm.py +0 -0
  82. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/numba/ma_chromosphere_nb.py +0 -0
  83. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/numba/ma_quadratic_nb.py +0 -0
  84. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/numba/ma_uniform_nb.py +0 -0
  85. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/numba/phasecurves.py +0 -0
  86. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/numba/qpower2_nb.py +0 -0
  87. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/numba/rrmodel.py +0 -0
  88. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/numba/spmodel.py +0 -0
  89. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/opencl/ma_quadratic.cl +0 -0
  90. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/opencl/ma_uniform.cl +0 -0
  91. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/opencl/orbits.cl +0 -0
  92. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/opencl/qpower2.cl +0 -0
  93. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/osmodel.py +0 -0
  94. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/qpower2.py +0 -0
  95. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/qpower2_cl.py +0 -0
  96. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/roadrunner/__init__.py +0 -0
  97. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/roadrunner/common.py +0 -0
  98. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/roadrunner/ecintersection.py +0 -0
  99. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/roadrunner/model.py +0 -0
  100. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/roadrunner/model_full.py +0 -0
  101. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/roadrunner/model_simple.py +0 -0
  102. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/roadrunner/opmodel_full.py +0 -0
  103. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/roadrunner/rrmodel.cl +0 -0
  104. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/roadrunner/rrmodel.py +0 -0
  105. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/roadrunner/rrmodel_cl.py +0 -0
  106. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/transitmodel.py +0 -0
  107. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/models/uniform.py +0 -0
  108. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/orbits/__init__.py +0 -0
  109. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/orbits/orbits.py +0 -0
  110. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/orbits/orbits_py.py +0 -0
  111. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/orbits/taylor_z.py +0 -0
  112. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/param/__init__.py +0 -0
  113. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/param/parameter.py +0 -0
  114. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/param/prior.py +0 -0
  115. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/param/utilities.py +0 -0
  116. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/stars/__init__.py +0 -0
  117. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/stars/btsettl.py +0 -0
  118. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/stars/data/avg_bt_settl.fits +0 -0
  119. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/stars/data/avg_husser2013.fits +0 -0
  120. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/stars/husser2013.py +0 -0
  121. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/utils/__init__.py +0 -0
  122. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/utils/astrometry.py +0 -0
  123. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/utils/constants.py +0 -0
  124. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/utils/de.py +0 -0
  125. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/utils/downsample.py +0 -0
  126. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/utils/eclipses.py +0 -0
  127. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/utils/io/__init__.py +0 -0
  128. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/utils/io/lightcurvedata.py +0 -0
  129. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/utils/keplerlc.py +0 -0
  130. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/utils/mdwarfs.py +0 -0
  131. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/utils/misc.py +0 -0
  132. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/utils/mocklc.py +0 -0
  133. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/utils/octasphere.py +0 -0
  134. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/utils/phasecurves.py +0 -0
  135. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/utils/physics.py +0 -0
  136. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/utils/rv.py +0 -0
  137. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/utils/tess.py +0 -0
  138. {pytransit-2.6.4 → pytransit-2.6.5}/pytransit/version.py +0 -0
  139. {pytransit-2.6.4 → pytransit-2.6.5}/setup.cfg +0 -0
  140. {pytransit-2.6.4 → pytransit-2.6.5}/tests/test_contamination.py +0 -0
  141. {pytransit-2.6.4 → pytransit-2.6.5}/tests/test_ma_quadratic.py +0 -0
  142. {pytransit-2.6.4 → pytransit-2.6.5}/tests/test_ma_quadratic_nb.py +0 -0
  143. {pytransit-2.6.4 → pytransit-2.6.5}/tests/test_qpower2_nb.py +0 -0
  144. {pytransit-2.6.4 → pytransit-2.6.5}/tests/test_uniform_model.py +0 -0
  145. {pytransit-2.6.4 → pytransit-2.6.5}/tests/test_uniform_model_nb.py +0 -0
  146. {pytransit-2.6.4 → pytransit-2.6.5}/tests/test_z.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PyTransit
3
- Version: 2.6.4
3
+ Version: 2.6.5
4
4
  Summary: Fast and painless exoplanet transit light curve modelling.
5
5
  Author-email: Hannu Parviainen <hpparvi@gmail.com>
6
6
  License: GPLv2
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PyTransit
3
- Version: 2.6.4
3
+ Version: 2.6.5
4
4
  Summary: Fast and painless exoplanet transit light curve modelling.
5
5
  Author-email: Hannu Parviainen <hpparvi@gmail.com>
6
6
  License: GPLv2
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "PyTransit"
3
- version = "2.6.4"
3
+ version = "2.6.5"
4
4
  description = 'Fast and painless exoplanet transit light curve modelling.'
5
5
  authors=[{name='Hannu Parviainen', email='hpparvi@gmail.com'}]
6
6
  classifiers=[
@@ -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('rv_slope', 'linear rv slope', 'm/s', NP(0.0, 1.0), (-inf, inf))]
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
- return times * pvp[:, self._sl_rv_slope]
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) - squeeze(self.rv_slope(pv, self._timea))
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], fmt='o', marker=markers[iid],
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, 1D vector, or 2D array.
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)
@@ -18,7 +18,7 @@ from typing import Tuple, Optional, Union
18
18
  from pathlib import Path
19
19
 
20
20
  from numba import njit
21
- from numpy import zeros, interp, pi, ndarray, linspace, meshgrid, transpose
21
+ from numpy import zeros, interp, pi, ndarray, linspace, meshgrid, transpose, asarray, newaxis, errstate
22
22
  from scipy.interpolate import interpn, interpnd, RegularGridInterpolator as RGI
23
23
 
24
24
  from .ldmodel import LDModel
@@ -67,13 +67,21 @@ class LDTkLDModel(LDModel):
67
67
  self.logg0, self.dlogg, self.nlogg = loggs[0], loggs[1]-loggs[0], self.sc.client.nlogg
68
68
  self.metal0, self.dmetal, self.nmetal = zs[0], zs[1]-zs[0], self.sc.client.nz
69
69
 
70
- self.ps = self.sc.create_profiles(teff=teffg.ravel(), logg=loggg.ravel(), metal=zg.ravel())
71
- self.ps.resample(mu=self.mu)
72
- self.profiles = transpose(self.ps._ldps.copy(), axes=(1, 0, 2)).reshape((self.nteff, self.nlogg, self.nmetal, self.npb, self.nmu))
70
+ with errstate(divide='ignore'):
71
+ self.ps = self.sc.create_profiles(teff=teffg.ravel(), logg=loggg.ravel(), metal=zg.ravel())
72
+ self.ps.resample(mu=self.mu)
73
+ self.profiles = transpose(self.ps._ldps.copy(), axes=(1, 0, 2)).reshape((self.nteff, self.nlogg, self.nmetal, self.npb, self.nmu))
73
74
 
74
75
  def __call__(self, mu: ndarray, x: ndarray) -> Tuple[ndarray, ndarray]:
75
76
  if self.mu is None or id(mu) != id(self.mu):
76
77
  self._init_interpolation(mu)
78
+
79
+ x = asarray(x)
80
+ if x.ndim == 1:
81
+ x = x[newaxis, newaxis, :]
82
+ elif x.ndim == 2:
83
+ x = x[:, newaxis, :]
84
+
77
85
  ldp = trilinear_interpolation_set(self.profiles, x[:, 0, 0], x[:, 0, 1], x[:, 0, 2],
78
86
  self.teff0, self.dteff, self.nteff,
79
87
  self.logg0, self.dlogg, self.nlogg,
@@ -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))
@@ -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 range(npv):
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
- dk, dg, wg = calculate_weights_2d(kmean, z_edges, ng)
137
- for ipb in prange(npb):
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 prange(npt):
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
- for isample in range(1, nsamples[0] + 1):
161
- time_offset = exptimes[0] * ((isample - 0.5) / nsamples[0] - 0.5)
162
- z = pd_t15sc(tc + time_offset, xyc)
163
- aplanet = ccia(1.0, kmean, z)[0]
164
- for ipb in range(npb):
165
- iplanet = interpolate_mean_limb_darkening_s(z / (1.0 + kmean), dg, ldm[ipb])
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
@@ -41,6 +41,13 @@ __all__ = ['OblatePlanetModel']
41
41
 
42
42
 
43
43
  class OblatePlanetModel(RoadRunnerModel):
44
+ def __init__(self, ldmodel: Union[str, Callable, Tuple[Callable, Callable]] = 'quadratic',
45
+ precompute_weights: bool = False, klims: tuple = (0.005, 0.5), nk: int = 256,
46
+ nzin: int = 20, nzlimb: int = 20, zcut: float = 0.7, ng: int = 100, nlines: int = 100,
47
+ nthreads: int = 1, small_planet_limit: float = 0.05, **kwargs):
48
+ super().__init__(ldmodel, precompute_weights, klims, nk, nzin, nzlimb, zcut, ng, nthreads, small_planet_limit, **kwargs)
49
+ self.nlines = nlines
50
+
44
51
  def evaluate(self, k: Union[float, ndarray], f: Union[float, ndarray], alpha: Union[float, ndarray],
45
52
  ldc: Union[ndarray, List],
46
53
  t0: Union[float, ndarray], p: Union[float, ndarray], a: Union[float, ndarray],
@@ -97,7 +104,7 @@ class OblatePlanetModel(RoadRunnerModel):
97
104
  istar[ipv, ipb] = 2 * pi * trapz(self._ldz * ldpi[ipv, ipb], self._ldz)
98
105
 
99
106
  flux = opmodel(self.time, k, f, alpha, t0, p, a, i, e, w, self.parallel,
100
- self.nlc, self.npb, self.nep, 100,
107
+ self.nlc, self.npb, self.nep, self.nlines,
101
108
  self.lcids, self.pbids, self.epids, self.nsamples, self.exptimes,
102
109
  ldp, istar, self.weights, self.dk, self.klims[0], self.klims[1], self.dg, self.ze)
103
110
 
@@ -28,6 +28,7 @@
28
28
  # along with this program. If not, see <https://www.gnu.org/licenses/>.
29
29
  from typing import Union, List, Optional
30
30
 
31
+ from numba import get_num_threads, set_num_threads
31
32
  from numpy import ndarray, isscalar, atleast_2d, atleast_1d, array
32
33
  from pytransit.models.roadrunner.common import calculate_weights_3d
33
34
  from scipy.integrate import trapz
@@ -84,6 +85,9 @@ class TransmissionSpectroscopyModel(RoadRunnerModel):
84
85
  t0, p, a, i, e, w = map(atleast_1d, (t0, p, a, i, e, w))
85
86
  npv = k.shape[0]
86
87
 
88
+ nthreads_cur = get_num_threads()
89
+ set_num_threads(self.nthreads)
90
+
87
91
  # Limb darkening
88
92
  # --------------
89
93
  ldc = array(ldc)
@@ -127,6 +131,7 @@ class TransmissionSpectroscopyModel(RoadRunnerModel):
127
131
  flux = tsmodel_serial(self.time, k, t0, p, a, i, e, w, self.nsamples, self.exptimes,
128
132
  ldp, istar, weights, dk, self.klims[0], self.klims[1], self.ng, dg, self.ze)
129
133
 
134
+ set_num_threads(nthreads_cur)
130
135
  return flux.squeeze()
131
136
 
132
137
  def __call__(self, k: Union[float, ndarray], ldc: Union[ndarray, List],
File without changes
File without changes
File without changes
File without changes
File without changes