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:
objectPerforms 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.