Surface emission ======================= PLATON can now calculate the emission from a rocky planet's surface, using realistic albedos newly measured in a lab by Caltech graduate student Kim Paragas (see Paragas et al. 2025 for more details). To try out this feature, take a look at examples/surface_example.py. One begins by initializing an eclipse depth calculator with either the "HES2012" (Hu, Ehlmann, Seager 2012) spectral library or the new "Paragas" library:: calc = EclipseDepthCalculator(surface_library="Paragas") Optionally, one can estimate the surface temperature of a chosen surface_type from energy balance before computing the secondary eclipse depths by first retrieving the appropriate stellar spectrum and then calling calc_surface_temp:: stellar_fluxes_orig, _ = calc.atm.get_stellar_spectrum(calc.atm.orig_lambda_grid, T_star, stellar_blackbody=False) surface_temp = calc.calc_surface_temp(surface_type, stellar_fluxes_orig, semi_major_axis / star_radius) Then, call compute_depths with all the ordinary eclipse calculator arguments, but also the surface arguments:: wavelengths, depths, info_dict = calc.compute_depths(..., surface_pressure = Psurf, surface_type=surface_type, semimajor_axis=semi_major_axis, surface_temp = surface_temp) surface_temp can be None, in which case the temperature will be automatically calculated from energy balance. The available surface types are the columns in data/HES2012/hemi_refls.csv or data/Paragas/hemi_refls.csv. The "Paragas" library surface types include a range of textures. One can also see the surface temperature after the run:: surface_temp = info_dict['surface_temperature'] A commonly asked question is **how do I generate the emission spectrum of an airless planet?** We have yet to implement a simple way to do this, but it's easy enough to hack. In surface_example.py, set Psurf to a negligible value, set the atmospheric temperature to the surface temperature, and give the atmosphere a composition that has no features:: Psurf = 2e-4 ... abundances = AbundanceGetter().get(0, 0.5) for key in abundances: abundances[key] *= 0 abundances["N2"] += 1 ... p.set_isothermal(surface_temp) This is way overkill because the first and third steps alone should be enough to simulate an airless body, but better safe than sorry.