sherlockpipe.exomoon.ExoMoonLeastSquares

class sherlockpipe.exomoon.ExoMoonLeastSquares(object_dir, cpus, star_mass, star_radius, ab, planet_radius, planet_radius_err, planet_mass, planet_period, planet_t0, planet_duration, planet_semimajor_axis, planet_inc, planet_inc_err, planet_ecc, planet_ecc_err, planet_arg_periastron, planet_impact_param, min_radius, max_radius, t0s, time, flux, flux_err, max_moon_density, period_grid_size=2000, radius_grid_size=10, min_cadences_per_t0: bool = 20)

Bases: object

Performs exomoon least-squares search and fitting.

__init__(object_dir, cpus, star_mass, star_radius, ab, planet_radius, planet_radius_err, planet_mass, planet_period, planet_t0, planet_duration, planet_semimajor_axis, planet_inc, planet_inc_err, planet_ecc, planet_ecc_err, planet_arg_periastron, planet_impact_param, min_radius, max_radius, t0s, time, flux, flux_err, max_moon_density, period_grid_size=2000, radius_grid_size=10, min_cadences_per_t0: bool = 20)

Initialize the exomoon least-squares search.

Parameters

object_dirstr

Directory for output files.

cpusint

Number of CPU cores to use.

star_massfloat

Stellar mass in solar masses.

star_radiusfloat

Stellar radius in solar radii.

ablist

Limb darkening coefficients [u1, u2].

planet_radiusfloat

Planet radius in Earth radii.

planet_radius_errfloat

Planet radius uncertainty in Earth radii.

planet_massfloat

Planet mass in Earth masses.

planet_periodfloat

Planet orbital period in days.

planet_t0float

Planet transit epoch in BJD.

planet_durationfloat

Planet transit duration in days.

planet_semimajor_axisfloat

Planet semimajor axis in AU.

planet_incfloat

Planet orbital inclination in degrees.

planet_inc_errfloat

Planet inclination uncertainty in degrees.

planet_eccfloat

Planet orbital eccentricity.

planet_ecc_errfloat

Planet eccentricity uncertainty.

planet_arg_periastronfloat

Planet argument of periastron in degrees.

planet_impact_paramfloat

Planet impact parameter.

min_radiusfloat

Minimum moon radius to search in Earth radii.

max_radiusfloat

Maximum moon radius to search in Earth radii.

t0sarray_like

Barycentric transit times.

timearray_like

Time array in days.

fluxarray_like

Normalized flux array.

flux_errarray_like

Flux uncertainty array.

max_moon_densityfloat

Maximum moon density in g/cm^3.

period_grid_sizeint, optional

Number of grid points for period search, default 2000.

radius_grid_sizeint, optional

Number of grid points for radius search, default 10.

min_cadences_per_t0bool, optional

Minimum cadences required per transit, default 20.

Methods

__init__(object_dir, cpus, star_mass, ...[, ...])

Initialize the exomoon least-squares search.

au_to_period(mass, au)

Calculates the orbital period for the semi-major axis assuming a circular orbit.

calculate_residuals(it_time, it_flux, ...[, ...])

Calculate residuals between model and data for a transit scenario.

compute_hill_radius(major_mass, minor_mass, ...)

compute_moon_period_grid(min, max[, mode, ...])

Generate a grid of moon orbital periods.

compute_moon_t0(planet_first_t0, planet_t0, ...)

Compute the moon transit time and orbital phase.

compute_moon_transit_scenarios(time, flux, ...)

Compute moon transit scenarios for all barycentric transit times.

compute_moon_ts(planet_t0, ...)

Compute the maximum moon T0 offset (tau) for a given transit.

compute_roche_period(moon_density)

Compute the Roche limit orbital period for a given moon density.

compute_semimajor_axis(major_mass, minor_period)

Compute the semimajor axis from mass and orbital period.

compute_transit_duration(star_radius, ...[, ...])

depth_to_radius(depth, star_radius)

Convert a transit depth to a body radius.

fit_single_transit(time, flux, flux_err, ...)

Fit a single transit to light curve data.

fit_single_transits(time, flux, flux_err[, plot])

Fit all individual planet transits to refine T0 values.

inject_moon(time, flux, flux_err, t0s, ...)

Inject a moon transit signal into the light curve.

is_skip_t0(time)

Check if a transit epoch should be skipped due to insufficient cadences.

plot_signal(axs, scenario_time, ...)

Plot the moon signal detection results.

remove_non_transit_flux(time, flux, ...)

Remove flux points outside the moon transit windows.

remove_outliers(flux[, sigma, sigma_lower, ...])

Remove outliers from a light curve using sigma clipping.

run([plot])

Run the full exomoon search over the parameter grid.

running_mean_equal_length(data, width_signal)

Returns the running mean in a given window

running_median(data, kernel)

Compute sliding median of width kernel and same length as data.

search(search_input[, return_lc])

Search for a moon signal for a given set of input parameters.

spectra(chi2[, oversampling_factor, kernel_size])

Compute signal detection statistics from chi-squared residuals.

subtract_planet_transit(time, flux, flux_err)

Subtract or mask the planet transit signal from the light curve.

Attributes

MAX_RESIDUAL

static au_to_period(mass, au)

Calculates the orbital period for the semi-major axis assuming a circular orbit. :param mass: the stellar mass :param au: the semi-major axis in astronomical units. :return: the period in days

static calculate_residuals(it_time, it_flux, it_flux_err, oot_time, oot_flux, oot_flux_err, t0_flux_mean_value, datapoints, model_sample, min_radius, max_radius, star_radius, radius_grid_size, ootr_weight=0.5)

Calculate residuals between model and data for a transit scenario.

Parameters

it_timearray_like

In-transit time array in days.

it_fluxarray_like

In-transit normalized flux array.

it_flux_errarray_like

In-transit flux uncertainty array.

oot_timearray_like

Out-of-transit time array in days.

oot_fluxarray_like

Out-of-transit normalized flux array.

oot_flux_errarray_like

Out-of-transit flux uncertainty array.

t0_flux_mean_valuefloat

Mean flux at the transit center.

datapointsint

Number of data points.

model_samplearray_like

Model light curve sample.

min_radiusfloat

Minimum moon radius in Earth radii.

max_radiusfloat

Maximum moon radius in Earth radii.

star_radiusfloat

Stellar radius in solar radii.

radius_grid_sizeint

Number of grid points for radius search.

ootr_weightfloat, optional

Weight for out-of-transit residuals, default 0.5.

Returns

tuple

(best_residual, residuals_baseline, best_radius, best_model).

static compute_hill_radius(major_mass, minor_mass, semimajor_axis, eccentricity=0)
Parameters:
  • major_mass – The main body mass

  • minor_mass – The minor body mass

  • semimajor_axis – The minor body semimajor axis in AU.

  • eccentricity – the planet eccentricity

Returns:

the hill radius of the minor body in the same units than the semimajor_axis

static compute_moon_period_grid(min, max, mode='lin', samples=10000)

Generate a grid of moon orbital periods.

Parameters

minfloat

Minimum period in days.

maxfloat

Maximum period in days.

modestr, optional

Grid spacing mode, “lin” or “log”, default “lin”.

samplesint, optional

Number of grid samples, default 10000.

Returns

numpy.ndarray

Array of period values.

static compute_moon_t0(planet_first_t0, planet_t0, moon_period, moon_initial_alpha, max_moon_t0_tau)

Compute the moon transit time and orbital phase.

Parameters

planet_first_t0float

First planet transit epoch.

planet_t0float

Current planet transit epoch.

moon_periodfloat

Moon orbital period in days.

moon_initial_alphafloat

Initial moon orbital phase in radians.

max_moon_t0_taufloat

Maximum moon T0 offset in days.

Returns

tuple

(moon_t0, moon_phase) where moon_t0 is the transit time in days and moon_phase is the orbital phase in radians.

static compute_moon_transit_scenarios(time, flux, flux_err, planet_t0, moon_initial_alpha, moon_period, bary_t0s, half_moon_orbit_transit_duration, half_moon_max_orbit_transit_duration, half_moon_transit_duration)

Compute moon transit scenarios for all barycentric transit times.

Parameters

timearray_like

Time array in days.

fluxarray_like

Normalized flux array.

flux_errarray_like

Flux uncertainty array.

planet_t0float

First planet transit epoch.

moon_initial_alphafloat

Initial moon orbital phase in radians.

moon_periodfloat

Moon orbital period in days.

bary_t0slist

List of barycentric transit times.

half_moon_orbit_transit_durationfloat

Half the moon orbit transit duration in days.

half_moon_max_orbit_transit_durationfloat

Half the maximum moon orbit transit duration in days.

half_moon_transit_durationfloat

Half the moon transit duration in days.

Returns

list or None

List of [moon_alpha, time, flux, flux_err] for each scenario, or None if no valid scenarios are found.

static compute_moon_ts(planet_t0, half_moon_orbit_transit_duration, half_moon_transit_duration)

Compute the maximum moon T0 offset (tau) for a given transit.

Parameters

planet_t0float

Planet transit epoch.

half_moon_orbit_transit_durationfloat

Half the moon orbit transit duration in days.

half_moon_transit_durationfloat

Half the moon transit duration in days.

Returns

float

Maximum moon T0 tau offset in days.

static compute_roche_period(moon_density)

Compute the Roche limit orbital period for a given moon density.

Parameters

moon_densityfloat

Moon density in g/cm^3.

Returns

float

Roche limit period in days.

static compute_semimajor_axis(major_mass, minor_period)

Compute the semimajor axis from mass and orbital period.

Parameters

major_massfloat

Mass of the central body in solar masses.

minor_periodfloat

Orbital period in days.

Returns

float

Semimajor axis in AU.

static compute_transit_duration(star_radius, transiting_body_semimajor_axis, transit_period, transiting_body_radius, impact_parameter=0)
Parameters:
  • star_radius – star radius

  • transiting_body_semimajor_axis – orbit semimajor axis

  • transit_period – in days

  • transiting_body_radius – transiting body radius

  • impact_parameter

Returns:

static depth_to_radius(depth, star_radius)

Convert a transit depth to a body radius.

Parameters

depthfloat

Transit depth (fractional flux decrease).

star_radiusfloat

Stellar radius in solar radii.

Returns

float

Body radius in Earth radii.

static fit_single_transit(time, flux, flux_err, guess_params, guess_params_bounds, transit_params: TransitParams)

Fit a single transit to light curve data.

Parameters

timearray_like

Time array in days.

fluxarray_like

Normalized flux array.

flux_errarray_like

Flux uncertainty array.

guess_paramslist

Initial guess parameters [t0, a, inc, rp].

guess_params_boundslist

Bounds for each parameter.

transit_paramsbatman.TransitParams

BATMAN transit parameters object.

Returns

tuple

(best_theta, best_model) where best_theta is [t0, a, inc, rp] and best_model is the model light curve array.

fit_single_transits(time, flux, flux_err, plot=False)

Fit all individual planet transits to refine T0 values.

Parameters

timearray_like

Time array in days.

fluxarray_like

Normalized flux array.

flux_errarray_like

Flux uncertainty array.

plotbool, optional

If True, generate transit fit plots, default False.

inject_moon(time, flux, flux_err, t0s, planet_semimajor_axis, planet_ecc, moon_radius, moon_period, moon_mass, initial_alpha=0, plot=False, inject_planet=False, inject_moon=True)

Inject a moon transit signal into the light curve.

Parameters

timearray_like

Time array in days.

fluxarray_like

Normalized flux array.

flux_errarray_like

Flux uncertainty array.

t0slist

List of barycentric transit times.

planet_semimajor_axisfloat

Planet semimajor axis in AU.

planet_eccfloat

Planet orbital eccentricity.

moon_radiusfloat

Moon radius in Earth radii.

moon_periodfloat

Moon orbital period in days.

moon_massfloat

Moon mass in Earth masses.

initial_alphafloat, optional

Initial moon orbital phase in radians, default 0.

plotbool, optional

If True, generate injection plots, default False.

inject_planetbool, optional

If True, inject planet transit as well, default False.

inject_moonbool, optional

If True, inject moon transit signal, default True.

Returns

numpy.ndarray

Flux array with injected moon signal.

is_skip_t0(time)

Check if a transit epoch should be skipped due to insufficient cadences.

Parameters

timearray_like

Time array around the transit.

Returns

bool

True if the transit should be skipped.

plot_signal(axs, scenario_time, scenario_flux, it_time, oot_time, model)

Plot the moon signal detection results.

Parameters

axsmatplotlib.axes.Axes

Matplotlib axes to plot on.

scenario_timearray_like

Time array for the full scenario.

scenario_fluxarray_like

Flux array for the full scenario.

it_timearray_like

In-transit time array.

oot_timearray_like

Out-of-transit time array.

modelarray_like

Model light curve.

remove_non_transit_flux(time, flux, flux_err, t0s, max_planet_mass)

Remove flux points outside the moon transit windows.

Parameters

timearray_like

Time array in days.

fluxarray_like

Normalized flux array.

flux_errarray_like

Flux uncertainty array.

t0slist

List of barycentric transit times.

max_planet_massfloat

Maximum planet mass in Earth masses.

Returns

tuple

(time, flux, flux_err) restricted to transit windows.

static remove_outliers(flux, sigma=5.0, sigma_lower=None, sigma_upper=None, **kwargs)

Remove outliers from a light curve using sigma clipping.

Parameters

fluxarray_like

Flux array to clip.

sigmafloat, optional

Sigma threshold for clipping, default 5.0.

sigma_lowerfloat or None, optional

Lower sigma threshold, default None.

sigma_upperfloat or None, optional

Upper sigma threshold, default None.

**kwargs

Additional arguments passed to astropy.stats.sigma_clip.

Returns

numpy.ndarray

Boolean outlier mask (True where outliers are found).

run(plot=False)

Run the full exomoon search over the parameter grid.

Parameters

plotbool, optional

If True, generate diagnostic plots, default False.

static running_mean_equal_length(data, width_signal)

Returns the running mean in a given window

static running_median(data, kernel)

Compute sliding median of width kernel and same length as data.

Parameters

dataarray_like

Input data array.

kernelint

Window width.

Returns

numpy.ndarray

Running median array with same length as input.

search(search_input, return_lc=False)

Search for a moon signal for a given set of input parameters.

Parameters

search_inputSearchInput

Search input parameters.

return_lcbool, optional

If True, return light curve data in addition to residuals, default False.

Returns

tuple

(residual, baseline_residual, radius, model_snr) if return_lc is False, or (residual, baseline_residual, radius, model_snr, it_time, it_flux, oot_time, oot_flux, residual_model) if return_lc is True.

static spectra(chi2, oversampling_factor=1, kernel_size=30)

Compute signal detection statistics from chi-squared residuals.

Parameters

chi2array_like

Array of chi-squared residual values.

oversampling_factorint, optional

Oversampling factor for kernel width, default 1.

kernel_sizeint, optional

Kernel size for detrending, default 30.

Returns

tuple

(SR, power_raw, power, SDE_raw, SDE) signal statistics.

subtract_planet_transit(time, flux, flux_err, mode='subtract', plot=False)

Subtract or mask the planet transit signal from the light curve.

Parameters

timearray_like

Time array in days.

fluxarray_like

Normalized flux array.

flux_errarray_like

Flux uncertainty array.

modestr, optional

‘subtract’ to subtract the planet model or ‘mask’ to remove in-transit points, default ‘subtract’.

plotbool, optional

If True, generate subtraction plots, default False.

Returns

tuple

(result_time, result_model, result_flux_err) after planet removal.