Parametric atmosphere (lazuli_exo.atmosphere)

Parametric isothermal transmission spectrum from the shared zeta grid.

zeta(lambda) = -ln P_photo(lambda)/bar is tabulated on a (T, [M/H], C/O) grid for two fiducial planets (1 R_J at g = 10 m/s^2; 0.3 R_J at g = 30 m/s^2), i.e. at two nodes x = 0 and -1.15 of the slant-column axis x = 0.5 ln[(R_p H)/(R_p H)_0] (precompute/make_zeta_grid.py). For any other planet, with x_p = 0.5 ln[(R_p H)/(R_p,0 H_0)] - ln(T_eq/T_chem):

s(lam)  = (zeta_1 - zeta_0) / (x_1 - x_0)        slant-column exponent, ~1/(1+a)
zeta_p  = zeta_0 + s (x_p - x_0)                  linear in x, extrapolated
        + 1.5 s [ln(r/R_p) - ln(r_0/R_fid)]       local column at r(lam), iterated
zeta_g1 = zeta_p - s gamma_E                      gas tau_chord = 1 level
zeta_h1 = -ln P_haze + 1.5 ln(r/R_p)              haze tau_chord = 1 level
tau(z)  = exp((zeta_g1 - z)/s) + exp(zeta_h1 - z)
zeta    = zeta_d + int_0^inf [1 - exp(-tau(zeta_d + u))] du
R(lam)  = R_p / (1 - (H / R_p) (zeta - median_band(zeta))),  depth = (R / R_s)^2

s < 1 where the opacity grows with pressure (tau ~ P^(1+a): CIA, Lorentz wings), so both the column scaling and the vertical tau scale height (s H) shrink. The grid zeta is an effective-radius level (POSEIDON depth -> R -> r(P)), which for an exponential tau profile sits s gamma_E above the tau_chord = 1 level; the haze level is a tau_chord = 1 pressure with exponent 1. Both are therefore taken back to tau = 1 and the thin-atmosphere effective radius of the summed profile above an opaque deck at zeta_d = -ln P_cloud (no deck: zeta_d deep enough that tau(zeta_d) >= e^12) is integrated numerically. For pure gas this is zeta_d + s Ein(exp((zeta_p - zeta_d)/s - gamma_E)) (Ein the entire exponential integral; the no-haze fast path), which tends to max(zeta_p, zeta_d) in both limits but keeps the partial absorption of gas whose tau = 1 level lies just below the deck; the integral also gives the haze its own tau scale height (H, not s H) where it dominates.

so R_p is the band-median transit radius and H = k T_eq / (mu m_H g(R_p)). The radius mapping is the exact isothermal hydrostatic solution with g ~ 1/r^2 (1/r is linear in ln P), which POSEIDON also integrates; its first- order form R_p + H dzeta under-predicts puffy atmospheres (H/R_p ~ 0.03 gives ~30 % too little amplitude). The chord column sqrt(2 pi r H(r)) ~ r^1.5 is likewise evaluated at each wavelength’s own radius r(lam) (fixed point in ln r, 2-4 steps), net of the curvature the fiducial already carries at its own r_0(lam); without it a 1 R_J, g = 1.7 m/s^2 planet (H/R_p = 0.033) came out 7 % low in amplitude. The residual 0.1-0.2 H there is the second-order sphericity term (tau sampled across r(z), not at r_eff). Fidelity: isothermal, equilibrium chemistry, gray deck, power-law haze; no pressure-broadening correction.

lazuli_exo.atmosphere.grid_wavelengths(tables_dir=None)[source]
lazuli_exo.atmosphere.transmission_depth(wl_um, *, T_eq_K, R_p_RJ, M_p_MJ, R_s_RSun, log_met=0.0, c_to_o=0.55, mu=None, log_P_cloud_bar=None, log_a_haze=None, haze_slope=-4.0, tables_dir=None)[source]

Transit depth on wl_um plus a dict of derived quantities.

R_p_RJ is the band-median (0.40-1.70 um) transit radius. T_eq below the grid floor clamps the chemistry lookup only (reported as T_clamped); the scale height always uses the true T_eq. mu=None takes the equilibrium- chemistry mean molecular weight from the grid.