Noise model (esc_etc.noise)
Analytic coronagraph SNR engine for the ESC ETC.
Extracted verbatim from Observatory.calc_SNR / calc_int_time. This is the default Simulation.noise_model; a future 2D-PSF image model can be swapped in behind the same interface.
Frame accounting (issue #15): an integration of total_time is read out as
n_reads = ceil(total_time / frame_time) frames – whole frames of
frame_time plus one shorter final frame – and never fewer than one read.
Read-noise variance scales with that integer.
Reference subtraction (issue #12): with coronagraph.subtraction == "rdi" a
reference star beta = ref_brightness_ratio times brighter than the host is
observed for t_ref = ref_time_ratio * total_time, scaled by
kappa = total_time / (beta * t_ref) to match the target speckle counts, and
subtracted. Its random variance kappa**2 * var_ref (speckle scaled by beta;
zodi, exozodi, dark and read noise as on target) adds to the science variance.
total_time is on-target science time; charged_time includes the
reference. "none" reproduces the single-image budget.
- esc_etc.noise.n_reads(total_time, frame_time)[source]
Integer number of detector reads: whole frames plus a shorter last one.
- class esc_etc.noise.CountRates(source: astropy.units.quantity.Quantity, zodi: astropy.units.quantity.Quantity, exozodi: astropy.units.quantity.Quantity, speckle: astropy.units.quantity.Quantity, host: astropy.units.quantity.Quantity)[source]
Bases:
object
- class esc_etc.noise.AnalyticCoronagraphNoiseModel[source]
Bases:
object- int_time_for_snr(snr, rates, sensor, coronagraph, frame_time)[source]
Integration time to reach
snr.int_time_continuousis the closed-form inversion treating reads astotal_time / frame_time;int_timerounds it up to whole frames, the shortest realizable schedule that meetssnr. NaN when unreachable (systematic floor).