Skip to content

Commit

Permalink
rv_geometry with different lengths fix (2.3.16 release) (#403)
Browse files Browse the repository at this point in the history
* fixes estimator.rv_geometry when primary and secondary component have different times.

Co-authored-by: Angela <[email protected]>
  • Loading branch information
kecnry and gecheline authored Jan 26, 2021
1 parent f28cb04 commit d4330da
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 8 deletions.
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,10 @@ To understand how to use PHOEBE, please consult the [tutorials, scripts and manu
CHANGELOG
----------

### 2.3.16 - rv_geometry with different lengths fix

* fixes estimator.rv_geometry when primary and secondary component have different times.

### 2.3.15 - alternate backends with l3_frac and dataset-scaled fix

* fix bug in applying l3_frac within dataset scaling (pblum_mode='dataset-scaled') when using alternate backends.
Expand Down
2 changes: 1 addition & 1 deletion phoebe/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
"""

__version__ = '2.3.15'
__version__ = '2.3.16'

import os as _os
import sys as _sys
Expand Down
56 changes: 52 additions & 4 deletions phoebe/solverbackends/rv_geometry.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,50 @@ def smooth_rv(rvdata):

return np.array([rvdata[:,0], rv_smooth, rvdata[:,2]]).T

def interpolate_rvs(rv1data, rv2data):

def estimate_q(rv1data, rv2data, vgamma=None):
rv1max = max(rv1data[:,1])
rv2min = rv2data[:,1][rv1data[:,1]==rv1max]
phases1, rvs1 = rv1data[:,0], rv1data[:,1]
phases2, rvs2 = rv2data[:,0], rv2data[:,1]
# find the min and max phases of both arrays
ph1_min, ph1_max = phases1.min(), phases1.max()
ph2_min, ph2_max = phases2.min(), phases2.max()

# determine the overlapping region
ph_min = max([ph1_min, ph2_min])
ph_max = min([ph1_max, ph2_max])

# filter the rv arrays to only include the overlapping regions
# interpolate in the array that covers more phases

cond1 = (ph_min <= phases1) & (phases1 <= ph_max)
cond2 = (ph_min <= phases2) & (phases2 <= ph_max)

ph1_new, rvs1_new = phases1[cond1], rvs1[cond1]
ph2_new, rvs2_new = phases2[cond2], rvs2[cond2]

if len(ph1_new) > len(ph2_new):
# interpolate rv2 in ph1 phases
rv2_interp = interp1d(ph2_new, rvs2_new)
rvs2_new = rv2_interp(ph1_new)
else:
# interpolate rv1 in ph2 phases
rv1_interp = interp1d(ph1_new, rvs1_new)
rvs1_new = rv1_interp(ph2_new)

return rvs1_new, rvs2_new


def estimate_q(rv1data, rv2data, vgamma=None, tol=1e-8):
if len(rv1data) != len(rv2data):
rvs1, rvs2 = interpolate_rvs(rv1data, rv2data)
elif (np.abs(rv1data[:,0] - rv2data[:,0]) > 1e-8).any():
rvs1, rvs2 = interpolate_rvs(rv1data, rv2data)
else:
rvs1 = rv1data[:,1]
rvs2 = rv2data[:,1]

rv1max = max(rvs1)
rv2min = rvs2[rvs1 ==rv1max]
# rv2max = max(rv2data[:,1])
if vgamma is None:
return np.abs(rv1max/rv2min)
Expand All @@ -43,7 +83,15 @@ def estimate_q(rv1data, rv2data, vgamma=None):


def estimate_vgamma(rv1data, rv2data, q=1.):
return np.mean(rv1data[:,1]+q*rv2data[:,1])/(1+q)
if len(rv1data) != len(rv2data):
rvs1, rvs2 = interpolate_rvs(rv1data, rv2data)
elif (np.abs(rv1data[:,0] - rv2data[:,0]) > 1e-8).any():
rvs1, rvs2 = interpolate_rvs(rv1data, rv2data)
else:
rvs1 = rv1data[:,1]
rvs2 = rv2data[:,1]

return np.mean(rvs1+q*rvs2)/(1+q)


def estimate_q_vgamma(rv1data, rv2data, maxiter=10):
Expand Down
6 changes: 3 additions & 3 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -346,8 +346,8 @@ def _env_variable_bool(key, default):
long_description = "\n".join(long_description_s[long_description_s.index("INTRODUCTION"):])

setup (name = 'phoebe',
version = '2.3.15',
description = 'PHOEBE 2.3.15',
version = '2.3.16',
description = 'PHOEBE 2.3.16',
long_description=long_description,
author = 'PHOEBE development team',
author_email = '[email protected]',
Expand All @@ -367,7 +367,7 @@ def _env_variable_bool(key, default):
'Programming Language :: Python :: 3 :: Only',
],
python_requires='>=3.6, <4',
download_url = 'https://github.com/phoebe-project/phoebe2/tarball/2.3.15',
download_url = 'https://github.com/phoebe-project/phoebe2/tarball/2.3.16',
packages = ['phoebe', 'phoebe.parameters', 'phoebe.parameters.solver', 'phoebe.parameters.figure', 'phoebe.frontend', 'phoebe.constraints', 'phoebe.dynamics', 'phoebe.distortions', 'phoebe.algorithms', 'phoebe.atmospheres', 'phoebe.backend', 'phoebe.solverbackends', 'phoebe.solverbackends.ebai', 'phoebe.utils', 'phoebe.helpers', 'phoebe.pool', 'phoebe.dependencies', 'phoebe.dependencies.autofig', 'phoebe.dependencies.nparray', 'phoebe.dependencies.distl', 'phoebe.dependencies.unitsiau2015'],
install_requires=['numpy>=1.12','scipy>=1.2','astropy>=1.0', 'corner', 'pytest', 'requests', 'python-socketio[client]']+['flask', 'flask-cors', 'flask-socketio', 'gevent-websocket'],
package_data={'phoebe.atmospheres':['tables/wd/*', 'tables/passbands/*'],
Expand Down

0 comments on commit d4330da

Please sign in to comment.