PHOEBE Research#

What is PHOEBE?#

PHOEBE (PHysics Of Eclipsing BinariEs) is an open-source Python package for modeling eclipsing binary systems from observational data.
This project used photometric and spectroscopic inputs to estimate binary-star parameters and present reproducible fitting results.

PHOEBE eclipsing binary model

PHOEBE eclipsing binary model visualization.#

Objective#

This work focused on an inverse problem: estimating unknown system parameters from real observations.
The primary goal was to balance fit quality, computational cost, and parameter uncertainty across large datasets.

MCMC Parameter Fitting#

To solve the inverse problem, I employed a Markov Chain Monte Carlo (MCMC) approach using the emcee Python package. The method uses an ensemble of “walkers” that explore the parameter space, converging on the most probable values for the system parameters.

Parameters estimated:

  • Orbital inclination ($incl$)

  • Primary stellar radius ($r_1$)

  • Secondary stellar radius ($r_2$)

  • Secondary effective temperature ($T_{\text{eff},2}$)

Light Curve Geometry#

The simulated binary system generates light curves that encode information about the system’s orbital geometry and stellar properties.

Light curve geometry

Light curve geometry of the eclipsing binary system.#

EBAI classification

EBAI light curve classification.#

Corner Plot#

The corner plot visualizes the posterior probability distributions and correlations between all fitted parameters. Well-constrained parameters show tight distributions centered on the true values.

MCMC corner plot

Corner plot showing posterior distributions and parameter correlations from the MCMC analysis. True values are marked with blue lines.#

Model Fit#

The fit plot overlays MCMC sampled models on the observed data, demonstrating convergence to the true system parameters.

MCMC fit to light curve data

MCMC fit results overlaid on the simulated light curve data.#

Parameter Distributions#

Individual parameter histograms with Gaussian fits, showing the recovered values for each system parameter:

Inclination distribution

Inclination#

Primary radius distribution

Primary Radius#

Secondary radius distribution

Secondary Radius#

Secondary temperature distribution

Secondary Teff#

Code Highlights#

MCMC Probability Function

The core of the fitting process is the log-probability function, which combines prior constraints with a chi-squared likelihood:

def lnprob(model_params, sigma_arr):
    """Calculate the log-probability for a set of model parameters."""
    # Set PHOEBE bundle parameters
    c['incl@binary@orbit@component'] = model_params[0]
    c['requiv@primary@star@component'] = model_params[1]
    c['requiv@secondary@star@component'] = model_params[2]
    c['teff@secondary@star@component'] = model_params[3]

    # Check priors (uniform)
    lnp = lnprior(priors, model_params)
    if not np.isfinite(lnp):
        return -np.inf

    try:
        c.run_compute()
        chi2 = 0.
        for dataset in c.get_model().datasets:
            chi2 += np.sum(
                c.calculate_residuals(dataset=dataset, as_quantity=False)**2
                / sigma_arr**2
            )
        return -0.5 * chi2 + lnp
    except:
        return -np.inf

Download#

Download PHOEBE Research Summary (PDF)

Download Poster Presentation (PDF)

View on GitHub