Cloud Radiative Forcing with Real ACLOUD Data

import pyradtran
from pyradtran import Var
import matplotlib.pyplot as plt
import numpy as np
import xarray as xr
from pathlib import Path
import pandas as pd
import logging

logging.getLogger('pyradtran').setLevel(logging.CRITICAL)

solar_config_path = Path('config/arctic_cloud_experiment_solar_spectral.yaml')
thermal_config_path = Path('config/arctic_cloud_experiment_thermal.yaml')
# Arctic stratus parameter space (libRadtran units)
cbh   = [0.3]        # km
cth   = [1.0]        # km

lwps = np.array([10, 50, 100, 150])
lwcs = lwps / 700  # convert to kg m^-3 to fill the 700 m layer uniformly
reffs = [15]           

cbh = [0.3] * len(lwcs)
cth = [1] * len(lwcs)

times = pd.date_range("2024-03-01 12:00", periods=5, freq="7d")
lats = np.linspace(80, 60, 5) # this is a trick to sample through a high number of SZA... vary lat and time together...
print(lats)
lon = [0] * len(times)
altitudes = [0]
surface_temperatures = [255] * len(times)

ds = xr.Dataset(
    coords={
        "time": times, 
        "latitude": (("time",), lats), 
        "longitude": (("time",), lon),
        "altitude": (("altitude",), altitudes)
    },
    data_vars={
        "lwc": (("lwc",), lwcs),
        "reff": (("reff",), reffs),
        "cth": (("lwc",), cth),
        "cbh": (("lwc",), cbh),
        "surface_temperature": (("time",), surface_temperatures),
        #"albedo_sw": (("albedo",), albedos_sw),
        #"albedo_lw": (("albedo",), albedos_lw),
    }
)

ds_ = ds.drop_vars(["lwc", "reff", "cth", "cbh"])

ds_sim_no_cloud_solar = ds_.pyradtran.run(
    config_path='config/arctic_cloud_experiment_solar_spectral.yaml',
    #    save_to_file=True, 
    return_dataset=True,
    show_progress=True,
    params={
        'sur_temperature': Var('surface_temperature'),
        'albedo': Var('albedo_sw'),
        'albedo_library IGBP' : '',
        'brdf_rpv_type' : '19'
    }
)

ds_sim_cloudy_solar = ds.pyradtran.run(
    config_path='config/arctic_cloud_experiment_solar_spectral.yaml',
    cloud_wc_var='lwc',
    cloud_reff_var='reff',
    cloud_top_var='cth',
    cloud_bottom_var='cbh',
    save_to_file=True, 
    return_dataset=True,
    show_progress=True,
    params={
        'sur_temperature': Var('surface_temperature'),
        'albedo_library IGBP' : '',
        'brdf_rpv_type' : '19'
    }
)
[80. 75. 70. 65. 60.]
Running simulations: 100%|██████████| 5/5 [00:40<00:00,  8.01s/sim, Success=5, Total=5]
Running simulations: 100%|██████████| 20/20 [01:25<00:00,  4.28s/sim, Success=20, Total=20]
ds_sim_cloudy_solar['lwc'] = ('lwc', lwps)
ds_sim_no_cloud_solar['albedo_sw'] = ds_sim_no_cloud_solar['eup'].integrate('wavelength') / ds_sim_no_cloud_solar['eglo'].integrate('wavelength')
ds_sim_cloudy_solar['albedo_sw'] = ds_sim_cloudy_solar['eup'].integrate('wavelength') / ds_sim_cloudy_solar['eglo'].integrate('wavelength')
fig, ax = plt.subplots(figsize=(5, 2))

albedo_cf = ds_sim_no_cloud_solar['eup'] / ds_sim_no_cloud_solar['eglo']
albedo_cd = ds_sim_cloudy_solar['eup'] / ds_sim_cloudy_solar['eglo']


ax.set_prop_cycle(plt.cycler('color', plt.cm.Reds(np.linspace(0, 1, len(times)))))
albedo_cf.plot(label='Clear Sky Albedo', x='wavelength', ax=ax, hue='time', add_legend=False)
ax.set_prop_cycle(plt.cycler('color', plt.cm.Blues(np.linspace(0, 1, len(times)))))
albedo_cd.isel(lwc=0).plot(label='Cloudy Sky Albedo', x='wavelength', ax=ax, hue='time', add_legend=False)
plt.show()
../_images/e24bf86954f488b6bd77c35a2e628f441efdb9e5f539f1a0c2529eaecfd2765f.png
albedo_ratio = ds_sim_cloudy_solar['albedo_sw'] - ds_sim_no_cloud_solar['albedo_sw']
albedo_ratio.isel(altitude=0, ).plot(label='Albedo Ratio (Cloudy / Clear)', linestyle='--', marker='o', hue='time')
plt.show()
../_images/fc7fa9a0f64732b8da013afb499a9ec9d2b32b98b772fb5b857291d9d2d3ffdc.png
ds_sim_no_cloud_solar['sza']
<xarray.DataArray 'sza' (wavelength: 1765, altitude: 1, time: 5)> Size: 71kB
array([[[87.91, 80.2 , 72.42, 64.6 , 56.78]],

       [[87.91, 80.2 , 72.42, 64.6 , 56.78]],

       [[87.91, 80.2 , 72.42, 64.6 , 56.78]],

       ...,

       [[87.91, 80.2 , 72.42, 64.6 , 56.78]],

       [[87.91, 80.2 , 72.42, 64.6 , 56.78]],

       [[87.91, 80.2 , 72.42, 64.6 , 56.78]]], shape=(1765, 1, 5))
Coordinates:
  * time        (time) datetime64[ns] 40B 2024-03-01T12:00:00 ... 2024-03-29T...
  * wavelength  (wavelength) float64 14kB 300.0 300.5 301.0 ... 2.995e+03 3e+03
  * altitude    (altitude) int64 8B 0
albedo_ratio['sza'] = ('time', ds_sim_no_cloud_solar['sza'].mean('wavelength').squeeze().values)
albedo_ratio['sza']
albedo_ratio = albedo_ratio.assign_coords(sza=albedo_ratio['sza'])
#albedo_ratio = albedo_ratio.drop_vars(['altitude'])
#albedo_ratio = albedo_ratio.drop('altitude')
albedo_ratio = albedo_ratio.swap_dims({'time': 'sza'}).drop('time')
/tmp/ipykernel_67920/1638913286.py:6: DeprecationWarning: dropping variables using `drop` is deprecated; use drop_vars.
  albedo_ratio = albedo_ratio.swap_dims({'time': 'sza'}).drop('time')
fig, ax = plt.subplots(figsize=(10, 6))

albedo_ratio.isel(altitude=0).plot(robust=True, x='sza', cbar_kwargs={'label': 'Albedo Ratio (Cloudy - Clear)'})
ax.set_xlabel('Solar Zenith Angle (degrees)')
ax.set_ylabel('Liquid Water Path (g m$^{-2}$)')
ax.set_xlim(40, 90)

da_annot = albedo_ratio.isel(altitude=0, reff=0).squeeze()

for lwc_val in da_annot["lwc"].values:
    for sza_val in da_annot["sza"].values:
        if 60 <= sza_val <= 90:
            v = da_annot.sel(lwc=lwc_val, sza=sza_val).item()
            ax.text(
                sza_val, lwc_val, f"{v*100:.2f}%",
                ha="center", va="center",
                fontsize=10, color="black"
            )

#albedo_ratio.squeeze().plot.contour(x='sza', y='lwc', robust=True, )
../_images/f1d0c08c1df743225316989928759804583ab5a12fc07419af52036d3531b1b0.png

Cloud Radiative Forcing with Real ACLOUD Data#

Reproducing Stapf et al. (2020) — ACP, 20, 9895–9914#

The paper shows that clouds over Arctic snow/sea-ice increase the broadband surface albedo (spectral weighting shifts the transmitted irradiance to shorter, more-reflective wavelengths). Ignoring this effect means the cloud cooling in the shortwave is underestimated by ~2×.

Key definitions (Eq. 9 in the paper):

Quantity

Meaning

\(\alpha_{all}\)

Observed (cloudy-sky) broadband surface albedo

\(\alpha_{cf}\)

Estimated cloud-free broadband albedo

\(\Delta F_{sw}(\alpha_{all})\)

SW CRF using the traditional (cloudy) albedo

\(\Delta F_{sw}(\alpha_{cf})\)

SW CRF using the corrected cloud-free albedo

Data source: Stapf et al. (2019), PANGAEA dataset 909289
DOI: 10.1594/PANGAEA.909289

Approach here:

  1. Use pangaeapy to query the PANGAEA API and extract the static download URL

  2. Build a pyRadtran broadband clear-sky lookup table over SZA × albedo

  3. Apply the LUT to the observed \(\alpha_{all}\) and \(\alpha_{cf}\) to compute both CRF estimates

  4. Reproduce Fig. 10 of the paper

# ── 1. PANGAEA API download ─────────────────────────────────────────────────
#
# pangaeapy fetches the dataset XML from the PANGAEA API and lets us extract
# the staticURL field that points to the actual NetCDF binary.
# We then download it with requests (retry + local cache).
!pip install pangaeapy
from pangaeapy import PanDataSet
import requests, re, time as _time, warnings
from pathlib import Path

PANGAEA_ID   = 909289
DATA_DIR     = Path('data')
DATA_DIR.mkdir(exist_ok=True)
CACHE_PATH   = DATA_DIR / f'pangaea_{PANGAEA_ID}.nc'

def get_pangaea_static_url(dataset_id: int) -> tuple:
    """
    Use pangaeapy to query the PANGAEA metadata API and extract the
    key="staticURL" attribute from the <md:technicalInfo> block.
    """
    pan = PanDataSet(dataset_id)
    m = re.search(r'key="staticURL"\s+value="([^"]+)"', pan.metaxml)
    if not m:
        raise RuntimeError(
            f"staticURL not found in PANGAEA {dataset_id} metadata. "
            f"Full XML snippet:\n{pan.metaxml[-800:]}"
        )
    return m.group(1), pan.title

DOWNLOAD_OK = False
if CACHE_PATH.exists():
    print(f"Using cached file: {CACHE_PATH}  ({CACHE_PATH.stat().st_size / 1e6:.1f} MB)")
    DOWNLOAD_OK = True
else:
    url, title = get_pangaea_static_url(PANGAEA_ID)
    print(f"Title : {title}")
    print(f"URL   : {url}")

    for attempt in range(3):
        try:
            r = requests.get(url, timeout=300, stream=True)
            r.raise_for_status()
            with open(CACHE_PATH, 'wb') as fh:
                for chunk in r.iter_content(chunk_size=65536):
                    fh.write(chunk)
            sz = CACHE_PATH.stat().st_size / 1e6
            print(f"Saved : {CACHE_PATH}  ({sz:.1f} MB)")
            DOWNLOAD_OK = True
            break
        except Exception as exc:
            print(f"  Attempt {attempt+1}/3 failed — {exc}")
            if attempt < 2:
                _time.sleep(10)
    else:
        warnings.warn(
            "PANGAEA download failed (server may be temporarily unavailable). "
            "A synthetic dataset based on the paper's reported statistics is used below."
        )
Requirement already satisfied: pangaeapy in /home/josh/micromamba/envs/mamba_josh/lib/python3.13/site-packages (1.1.0)
Requirement already satisfied: aiohttp>=3.11.0 in /home/josh/micromamba/envs/mamba_josh/lib/python3.13/site-packages (from pangaeapy) (3.12.14)
Requirement already satisfied: lxml>=4.9.3 in /home/josh/micromamba/envs/mamba_josh/lib/python3.13/site-packages (from pangaeapy) (6.0.1)
Requirement already satisfied: netcdf4>1.6.5 in /home/josh/micromamba/envs/mamba_josh/lib/python3.13/site-packages (from pangaeapy) (1.7.2)
Requirement already satisfied: numpy>=1.24.4 in /home/josh/micromamba/envs/mamba_josh/lib/python3.13/site-packages (from pangaeapy) (2.2.6)
Requirement already satisfied: pandas>=2.2.2 in /home/josh/micromamba/envs/mamba_josh/lib/python3.13/site-packages (from pangaeapy) (2.3.1)
Requirement already satisfied: requests>=2.26.0 in /home/josh/micromamba/envs/mamba_josh/lib/python3.13/site-packages (from pangaeapy) (2.33.1)
Requirement already satisfied: aiohappyeyeballs>=2.5.0 in /home/josh/micromamba/envs/mamba_josh/lib/python3.13/site-packages (from aiohttp>=3.11.0->pangaeapy) (2.6.1)
Requirement already satisfied: aiosignal>=1.4.0 in /home/josh/micromamba/envs/mamba_josh/lib/python3.13/site-packages (from aiohttp>=3.11.0->pangaeapy) (1.4.0)
Requirement already satisfied: attrs>=17.3.0 in /home/josh/micromamba/envs/mamba_josh/lib/python3.13/site-packages (from aiohttp>=3.11.0->pangaeapy) (25.3.0)
Requirement already satisfied: frozenlist>=1.1.1 in /home/josh/micromamba/envs/mamba_josh/lib/python3.13/site-packages (from aiohttp>=3.11.0->pangaeapy) (1.7.0)
Requirement already satisfied: multidict<7.0,>=4.5 in /home/josh/micromamba/envs/mamba_josh/lib/python3.13/site-packages (from aiohttp>=3.11.0->pangaeapy) (6.6.3)
Requirement already satisfied: propcache>=0.2.0 in /home/josh/micromamba/envs/mamba_josh/lib/python3.13/site-packages (from aiohttp>=3.11.0->pangaeapy) (0.3.2)
Requirement already satisfied: yarl<2.0,>=1.17.0 in /home/josh/micromamba/envs/mamba_josh/lib/python3.13/site-packages (from aiohttp>=3.11.0->pangaeapy) (1.20.1)
Requirement already satisfied: idna>=2.0 in /home/josh/micromamba/envs/mamba_josh/lib/python3.13/site-packages (from yarl<2.0,>=1.17.0->aiohttp>=3.11.0->pangaeapy) (3.10)
Requirement already satisfied: cftime in /home/josh/micromamba/envs/mamba_josh/lib/python3.13/site-packages (from netcdf4>1.6.5->pangaeapy) (1.6.4)
Requirement already satisfied: certifi in /home/josh/micromamba/envs/mamba_josh/lib/python3.13/site-packages (from netcdf4>1.6.5->pangaeapy) (2025.7.14)
Requirement already satisfied: python-dateutil>=2.8.2 in /home/josh/micromamba/envs/mamba_josh/lib/python3.13/site-packages (from pandas>=2.2.2->pangaeapy) (2.9.0.post0)
Requirement already satisfied: pytz>=2020.1 in /home/josh/micromamba/envs/mamba_josh/lib/python3.13/site-packages (from pandas>=2.2.2->pangaeapy) (2025.2)
Requirement already satisfied: tzdata>=2022.7 in /home/josh/micromamba/envs/mamba_josh/lib/python3.13/site-packages (from pandas>=2.2.2->pangaeapy) (2025.2)
Requirement already satisfied: six>=1.5 in /home/josh/micromamba/envs/mamba_josh/lib/python3.13/site-packages (from python-dateutil>=2.8.2->pandas>=2.2.2->pangaeapy) (1.17.0)
Requirement already satisfied: charset_normalizer<4,>=2 in /home/josh/micromamba/envs/mamba_josh/lib/python3.13/site-packages (from requests>=2.26.0->pangaeapy) (3.4.7)
Requirement already satisfied: urllib3<3,>=1.26 in /home/josh/micromamba/envs/mamba_josh/lib/python3.13/site-packages (from requests>=2.26.0->pangaeapy) (2.5.0)
Using cached file: data/pangaea_909289.nc  (54.8 MB)
# ── 2. Load PANGAEA data (with synthetic fallback) ───────────────────────────
#
# The NetCDF file uses two groups: P5 and P6 (HALO research flights).
# xarray with group= decodes time as datetime64[ns] automatically.
#
# Known variable names (from netCDF4 inspection):
#   Obs_alb     – observed (cloudy) broadband surface albedo
#   Ret_cf_alb  – retrieved cloud-free broadband surface albedo
#   LWP         – liquid water path  [g m⁻²]
#   I_f         – sea-ice fraction   [%]     (filter: I_f > 98)
#   CRF_SW_obs  – SW CRF w/ observed albedo   [W m⁻²]
#   CRF_SW_cf   – SW CRF w/ cloud-free albedo [W m⁻²]
#   CRF_LW      – LW CRF                      [W m⁻²]
#   time        – datetime64[ns] (decoded by xarray from CF units)
#   Lat, Lon    – flight position

import xarray as xr
import numpy as np
import pandas as pd
import pvlib

if DOWNLOAD_OK and CACHE_PATH.exists():
    # ── load both flight groups and concatenate ─────────────────────────────
    parts = []
    for grp in ('P5', 'P6'):
        g = xr.open_dataset(CACHE_PATH, group=grp)
        # 'time' is decoded as datetime64[ns]; assign as the 'Time' coordinate
        times_dt = pd.DatetimeIndex(g['time'].values).tz_localize('UTC')
        g = g.assign_coords(Time=('Time', times_dt))
        parts.append(g)

    raw = xr.concat(parts, dim='Time')
    print(f"Loaded {raw.sizes['Time']:,} obs points  (P5 + P6 combined)")

    # ── compute SZA via pvlib (element-wise, time×lat×lon) ──────────────────
    times_pd = pd.DatetimeIndex(raw['Time'].values)  # tz-aware UTC
    lats_arr = raw['Lat'].values.astype(float)
    lons_arr = raw['Lon'].values.astype(float)
    solpos   = pvlib.solarposition.get_solarposition(
        time=times_pd, latitude=lats_arr, longitude=lons_arr
    )
    raw = raw.assign(SZA=('Time', solpos['apparent_zenith'].values,
                          {'long_name': 'Solar zenith angle', 'units': 'degrees'}))

    # ── rename to standard names ────────────────────────────────────────────
    raw = raw.rename({
        'Obs_alb':    'alpha_all',
        'Ret_cf_alb': 'alpha_cf',
        'CRF_SW_obs': 'CRF_sw_trad_paper',
        'CRF_SW_cf':  'CRF_sw_corr_paper',
        'CRF_LW':     'CRF_lw_paper',
    })

    # ── filter: sea ice > 98 % AND cloudy (LWP > 1 g m⁻²) ─────────────────
    mask = (
        (raw['I_f']       >  98.0) &
        (raw['LWP']       >   1.0) &
        np.isfinite(raw['alpha_all']) &
        np.isfinite(raw['alpha_cf'])
    )
    ds_obs = raw.where(mask, drop=True)

    FALLBACK = False
    obs_dim = 'Time'
    n_filt = ds_obs.sizes['Time']
    print(f"After filtering (I_f > 98 %, LWP > 1 g m⁻²): {n_filt:,} points")
    print(f"\nα_all : {float(ds_obs['alpha_all'].mean()):.3f} ± {float(ds_obs['alpha_all'].std()):.3f}")
    print(f"α_cf  : {float(ds_obs['alpha_cf'].mean()):.3f} ± {float(ds_obs['alpha_cf'].std()):.3f}")
    print(f"LWP   : {float(ds_obs['LWP'].mean()):.1f} g m⁻²")
    print(f"SZA   : {float(ds_obs['SZA'].mean()):.1f}°")

else:
    # ── synthetic fallback: reproduce paper statistics ───────────────────────
    print("⚠  Using synthetic fallback data (Stapf et al. 2020 statistics)")
    FALLBACK = True
    rng = np.random.default_rng(42)
    N   = 4000

    alpha_all = np.clip(rng.normal(0.80, 0.07, N), 0.55, 0.95)
    alpha_cf  = np.clip(alpha_all + rng.normal(-0.06, 0.025, N), 0.45, 0.92)
    lwp = np.clip(rng.lognormal(np.log(58), 0.9, N), 1.0, 300.0)
    sza = rng.uniform(53.0, 72.0, N)

    mu           = np.cos(np.radians(sza))
    F0           = 1361.0 * mu
    r_atm        = 0.08
    F_dn_cf      = F0 * 0.75 / (1 - alpha_cf * r_atm)
    T_cloud      = np.exp(-lwp / 130.0)
    F_dn_cld     = F_dn_cf * T_cloud * (1 + alpha_all * r_atm)
    F_net_cld    = F_dn_cld  * (1 - alpha_all)
    F_net_cf_all = F0 * 0.75 / (1 - alpha_all * r_atm) * (1 - alpha_all)
    F_net_cf_cf  = F_dn_cf * (1 - alpha_cf)
    crf_sw_all   = F_net_cld - F_net_cf_all
    crf_sw_cf    = F_net_cld - F_net_cf_cf
    crf_lw       = rng.normal(69.0, 18.0, N)

    obs_dim = 'obs'
    ds_obs = xr.Dataset(
        {
            'alpha_all':         (obs_dim, alpha_all),
            'alpha_cf':          (obs_dim, alpha_cf),
            'LWP':               (obs_dim, lwp),
            'SZA':               (obs_dim, sza),
            'CRF_sw_trad_paper': (obs_dim, crf_sw_all),
            'CRF_sw_corr_paper': (obs_dim, crf_sw_cf),
            'CRF_lw_paper':      (obs_dim, crf_lw),
        },
        coords={obs_dim: np.arange(N)},
    )
    print(ds_obs)

# Quick overview
fig, axes = plt.subplots(1, 3, figsize=(12, 3))
ds_obs['alpha_all'].plot.hist(bins=40, ax=axes[0], color='steelblue', alpha=0.7, label=r'$\alpha_{all}$')
ds_obs['alpha_cf'].plot.hist( bins=40, ax=axes[0], color='tomato',    alpha=0.7, label=r'$\alpha_{cf}$')
axes[0].set_title('Surface albedo distribution'); axes[0].legend()
ds_obs['LWP'].plot.hist(bins=40, ax=axes[1], color='steelblue')
axes[1].set_title('LWP distribution [g m⁻²]')
ds_obs['SZA'].plot.hist(bins=30, ax=axes[2], color='steelblue')
axes[2].set_title('SZA distribution [°]')
plt.tight_layout(); plt.show()
/home/josh/micromamba/envs/mamba_josh/lib/python3.13/site-packages/pyproj/network.py:59: UserWarning: pyproj unable to set PROJ database path.
  _set_context_ca_bundle_path(ca_bundle_path)
Loaded 978,763 obs points  (P5 + P6 combined)
After filtering (I_f > 98 %, LWP > 1 g m⁻²): 230,353 points

α_all : 0.807 ± 0.073
α_cf  : 0.749 ± 0.067
LWP   : 58.4 g m⁻²
SZA   : 61.0°
../_images/bffcebbbdb8dc8e54e891c79283ef04de11885bfe49dd340a6cd1dd40f28d6bc.png
# ── 3. Build clear-sky broadband LUT: F_dn and F_net vs (SZA, albedo) ───────
#
# For each SZA node we run pyRadtran over a grid of surface albedos.
# params={'sza': float} forces libRadtran to use that angle
# directly instead of computing it from the time/location metadata.
#
# Config used: arctic_cloud_experiment_solar.yaml
#   → integrate_wavelength: true   (single broadband value per run)
#   → mol_abs_param: reptran coarse (fast enough for a LUT)
#   → output columns: zout, edir, eglo, edn, eup, enet, albedo

from tqdm.auto import tqdm
pyradtran.logger.setLevel(logging.INFO)

# ── LUT grid ─────────────────────────────────────────────────────────────────
szas_lut    = np.arange(50.0, 78.0, 4.0)          # 7 nodes, covers ACLOUD range
albedos_lut = np.linspace(0.30, 0.95, 14)         # 14 nodes
N_alb       = len(albedos_lut)

# Arbitrary reference position and time (SZA will be overridden anyway)
ref_lat   = 81.0
ref_lon   = 10.0
ref_times = pd.date_range('2017-06-01 10:00:00', periods=N_alb, freq='1s')

lut_parts = []

for sza_val in tqdm(szas_lut, desc='LUT SZA nodes'):
    ds_sweep = xr.Dataset(
        coords={
            'time':      ref_times,
            'latitude':  ('time', np.full(N_alb, ref_lat)),
            'longitude': ('time', np.full(N_alb, ref_lon)),
        },
        data_vars={
            'albedo': ('time', albedos_lut, {'long_name': 'surface albedo', 'units': '1'}),
        },
    )

    sim = ds_sweep.pyradtran.run(
        config_path='config/arctic_cloud_experiment_solar.yaml',
        params={'albedo': Var('albedo'),'sza': float(sza_val)},
        save_to_file=False,
        return_dataset=True,
        show_progress=False,
    )

    # Attach albedo as a coordinate and add sza dimension
    sim = (
        sim.assign_coords(albedo=('time', albedos_lut))
           .swap_dims({'time': 'albedo'})
           .expand_dims(sza=[sza_val])
    )
    lut_parts.append(sim)

lut = xr.concat(lut_parts, dim='sza')

# Squeeze altitude (single level) for convenience
lut = lut.squeeze('altitude', drop=True)

print(lut)
print(f"\nLUT shape  sza×albedo  =  {lut.dims}")
2026-05-14 01:42:41,748 - pyradtran.interface - DEBUG - LibRadtran parameter override: sza 50.0
2026-05-14 01:42:41,749 - pyradtran.interface - INFO - Preparing 14 simulations from input dataset with dims ['time']
2026-05-14 01:42:41,970 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:41,970 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:41,971 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:41,971 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:41,971 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:41,971 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:41,971 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:41,971 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:41,971 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:41,972 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:41,972 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:41,972 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:41,972 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:41,972 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:41,972 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:41,973 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:41,973 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpjykiryse.inp
2026-05-14 01:42:41,972 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:41,973 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:41,973 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmprwfe3p1f.inp
2026-05-14 01:42:41,973 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:41,973 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:41,973 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:41,973 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:41,973 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpjykiryse.out
2026-05-14 01:42:41,973 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp7dovdkjz.inp
2026-05-14 01:42:41,974 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:41,973 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmprwfe3p1f.out
2026-05-14 01:42:41,973 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpzq_0j60d.inp
2026-05-14 01:42:41,974 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:41,974 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp8099irzg.inp
2026-05-14 01:42:41,974 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:41,974 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpilwjvlyo.inp
2026-05-14 01:42:41,974 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpbegyeu0m.inp
2026-05-14 01:42:41,974 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:41,974 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpppzhwu41.inp
2026-05-14 01:42:41,974 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:41,974 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:41,974 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp_4ev_boh.inp
2026-05-14 01:42:41,974 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp7dovdkjz.out
2026-05-14 01:42:41,974 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpzq_0j60d.out
2026-05-14 01:42:41,974 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp0yfot5ds.inp
2026-05-14 01:42:41,974 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpme7wjigq.inp
2026-05-14 01:42:41,974 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpbegyeu0m.out
2026-05-14 01:42:41,975 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpgwv_grq7.inp
2026-05-14 01:42:41,974 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpilwjvlyo.out
2026-05-14 01:42:41,975 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp1wrbatwz.inp
2026-05-14 01:42:41,975 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp0yfot5ds.out
2026-05-14 01:42:41,975 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpzf2h0a7x.inp
2026-05-14 01:42:41,975 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpppzhwu41.out
2026-05-14 01:42:41,975 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp_4ev_boh.out
2026-05-14 01:42:41,975 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp8099irzg.out
2026-05-14 01:42:41,975 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpme7wjigq.out
2026-05-14 01:42:41,975 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpgwv_grq7.out
2026-05-14 01:42:41,975 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp1wrbatwz.out
2026-05-14 01:42:41,975 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpzf2h0a7x.out
2026-05-14 01:42:45,641 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpgwv_grq7.out
2026-05-14 01:42:45,641 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp8099irzg.out
2026-05-14 01:42:45,642 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:45,642 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:45,645 - pyradtran.interface - DEBUG - Simulation 5/14 completed successfully
2026-05-14 01:42:45,645 - pyradtran.interface - DEBUG - Simulation 10/14 completed successfully
2026-05-14 01:42:45,659 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpme7wjigq.out
2026-05-14 01:42:45,660 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp_4ev_boh.out
2026-05-14 01:42:45,660 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:45,661 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:45,662 - pyradtran.interface - DEBUG - Simulation 14/14 completed successfully
2026-05-14 01:42:45,663 - pyradtran.interface - DEBUG - Simulation 8/14 completed successfully
2026-05-14 01:42:45,703 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpzq_0j60d.out
2026-05-14 01:42:45,704 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:45,707 - pyradtran.interface - DEBUG - Simulation 9/14 completed successfully
2026-05-14 01:42:46,158 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpbegyeu0m.out
2026-05-14 01:42:46,159 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:46,161 - pyradtran.interface - DEBUG - Simulation 3/14 completed successfully
2026-05-14 01:42:46,173 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpjykiryse.out
2026-05-14 01:42:46,174 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:46,176 - pyradtran.interface - DEBUG - Simulation 4/14 completed successfully
2026-05-14 01:42:46,412 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp1wrbatwz.out
2026-05-14 01:42:46,413 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:46,416 - pyradtran.interface - DEBUG - Simulation 11/14 completed successfully
2026-05-14 01:42:46,673 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpzf2h0a7x.out
2026-05-14 01:42:46,674 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:46,676 - pyradtran.interface - DEBUG - Simulation 13/14 completed successfully
2026-05-14 01:42:46,749 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp7dovdkjz.out
2026-05-14 01:42:46,750 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:46,752 - pyradtran.interface - DEBUG - Simulation 2/14 completed successfully
2026-05-14 01:42:46,971 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmprwfe3p1f.out
2026-05-14 01:42:46,972 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:46,974 - pyradtran.interface - DEBUG - Simulation 1/14 completed successfully
2026-05-14 01:42:47,031 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp0yfot5ds.out
2026-05-14 01:42:47,031 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:47,034 - pyradtran.interface - DEBUG - Simulation 12/14 completed successfully
2026-05-14 01:42:47,206 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpppzhwu41.out
2026-05-14 01:42:47,207 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:47,209 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpilwjvlyo.out
2026-05-14 01:42:47,210 - pyradtran.interface - DEBUG - Simulation 7/14 completed successfully
2026-05-14 01:42:47,210 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:47,212 - pyradtran.interface - DEBUG - Simulation 6/14 completed successfully
2026-05-14 01:42:47,231 - pyradtran.interface - INFO - Batch execution completed: 14/14 simulations successful
2026-05-14 01:42:47,242 - pyradtran.interface - DEBUG - LibRadtran parameter override: sza 54.0
2026-05-14 01:42:47,242 - pyradtran.interface - INFO - Preparing 14 simulations from input dataset with dims ['time']
2026-05-14 01:42:47,442 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:47,442 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:47,442 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:47,442 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:47,442 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:47,443 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:47,443 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:47,443 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:47,443 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:47,443 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:47,444 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:47,444 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:47,444 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:47,444 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:47,444 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:47,444 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:47,444 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:47,444 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:47,445 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpmpa7x0ns.inp
2026-05-14 01:42:47,445 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp3u6hwp8f.inp
2026-05-14 01:42:47,445 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:47,445 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp2g7pvjr0.inp
2026-05-14 01:42:47,445 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:47,445 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:47,445 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp_li6cr4k.inp
2026-05-14 01:42:47,445 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpmpa7x0ns.out
2026-05-14 01:42:47,445 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:47,445 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp3u6hwp8f.out
2026-05-14 01:42:47,445 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpv9kfivdy.inp
2026-05-14 01:42:47,445 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:47,445 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:47,446 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp2jg6gbx5.inp
2026-05-14 01:42:47,446 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp2g7pvjr0.out
2026-05-14 01:42:47,446 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:47,446 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpgnppzaol.inp
2026-05-14 01:42:47,446 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp_li6cr4k.out
2026-05-14 01:42:47,446 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:47,446 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpv9kfivdy.out
2026-05-14 01:42:47,446 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:47,446 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmphrag9yi8.inp
2026-05-14 01:42:47,446 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmppswvgqr1.inp
2026-05-14 01:42:47,446 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:47,446 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp9fli2hlt.inp
2026-05-14 01:42:47,446 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp2jg6gbx5.out
2026-05-14 01:42:47,446 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpgnppzaol.out
2026-05-14 01:42:47,447 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmphrag9yi8.out
2026-05-14 01:42:47,447 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpai_tg06_.inp
2026-05-14 01:42:47,447 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp8gi_8bvb.inp
2026-05-14 01:42:47,447 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpa2iraclb.inp
2026-05-14 01:42:47,447 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmppswvgqr1.out
2026-05-14 01:42:47,447 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpyoz6hjm6.inp
2026-05-14 01:42:47,447 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp9fli2hlt.out
2026-05-14 01:42:47,447 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpai_tg06_.out
2026-05-14 01:42:47,447 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp8gi_8bvb.out
2026-05-14 01:42:47,447 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpa2iraclb.out
2026-05-14 01:42:47,447 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpyoz6hjm6.out
2026-05-14 01:42:51,212 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpv9kfivdy.out
2026-05-14 01:42:51,213 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:51,215 - pyradtran.interface - DEBUG - Simulation 10/14 completed successfully
2026-05-14 01:42:51,216 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpgnppzaol.out
2026-05-14 01:42:51,216 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp2g7pvjr0.out
2026-05-14 01:42:51,216 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:51,217 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:51,218 - pyradtran.interface - DEBUG - Simulation 7/14 completed successfully
2026-05-14 01:42:51,219 - pyradtran.interface - DEBUG - Simulation 1/14 completed successfully
2026-05-14 01:42:51,222 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpmpa7x0ns.out
2026-05-14 01:42:51,223 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:51,225 - pyradtran.interface - DEBUG - Simulation 2/14 completed successfully
2026-05-14 01:42:51,230 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmphrag9yi8.out
2026-05-14 01:42:51,230 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:51,232 - pyradtran.interface - DEBUG - Simulation 14/14 completed successfully
2026-05-14 01:42:51,251 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpai_tg06_.out
2026-05-14 01:42:51,252 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:51,255 - pyradtran.interface - DEBUG - Simulation 8/14 completed successfully
2026-05-14 01:42:51,722 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpyoz6hjm6.out
2026-05-14 01:42:51,723 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:51,726 - pyradtran.interface - DEBUG - Simulation 13/14 completed successfully
2026-05-14 01:42:51,928 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp3u6hwp8f.out
2026-05-14 01:42:51,929 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:51,931 - pyradtran.interface - DEBUG - Simulation 4/14 completed successfully
2026-05-14 01:42:52,278 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp_li6cr4k.out
2026-05-14 01:42:52,279 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:52,281 - pyradtran.interface - DEBUG - Simulation 3/14 completed successfully
2026-05-14 01:42:52,285 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpa2iraclb.out
2026-05-14 01:42:52,285 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:52,287 - pyradtran.interface - DEBUG - Simulation 12/14 completed successfully
2026-05-14 01:42:52,616 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp2jg6gbx5.out
2026-05-14 01:42:52,618 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:52,621 - pyradtran.interface - DEBUG - Simulation 5/14 completed successfully
2026-05-14 01:42:52,733 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmppswvgqr1.out
2026-05-14 01:42:52,734 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:52,737 - pyradtran.interface - DEBUG - Simulation 9/14 completed successfully
2026-05-14 01:42:52,768 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp9fli2hlt.out
2026-05-14 01:42:52,769 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:52,771 - pyradtran.interface - DEBUG - Simulation 6/14 completed successfully
2026-05-14 01:42:52,776 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp8gi_8bvb.out
2026-05-14 01:42:52,777 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:52,779 - pyradtran.interface - DEBUG - Simulation 11/14 completed successfully
2026-05-14 01:42:52,796 - pyradtran.interface - INFO - Batch execution completed: 14/14 simulations successful
2026-05-14 01:42:52,807 - pyradtran.interface - DEBUG - LibRadtran parameter override: sza 58.0
2026-05-14 01:42:52,809 - pyradtran.interface - INFO - Preparing 14 simulations from input dataset with dims ['time']
2026-05-14 01:42:52,998 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:52,999 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:52,999 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:52,999 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:52,999 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:52,999 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:53,000 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:53,000 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:53,000 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:53,000 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:53,001 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:53,000 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:53,001 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:53,001 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:53,001 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:53,001 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:53,001 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:53,000 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:53,001 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpvmczj2ph.inp
2026-05-14 01:42:53,001 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:53,002 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:53,002 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:53,002 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:53,002 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp7c0z2s4k.inp
2026-05-14 01:42:53,002 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp41iiitq0.inp
2026-05-14 01:42:53,002 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp7vad09zl.inp
2026-05-14 01:42:53,002 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpvmczj2ph.out
2026-05-14 01:42:53,002 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp17sue4ry.inp
2026-05-14 01:42:53,002 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmplmo08ary.inp
2026-05-14 01:42:53,002 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:53,002 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:53,002 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpmtnjsnch.inp
2026-05-14 01:42:53,002 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:53,002 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp7c0z2s4k.out
2026-05-14 01:42:53,003 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpgbqnwyo8.inp
2026-05-14 01:42:53,003 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp7vad09zl.out
2026-05-14 01:42:53,003 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp17sue4ry.out
2026-05-14 01:42:53,003 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmplmo08ary.out
2026-05-14 01:42:53,003 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp6q7wjf_1.inp
2026-05-14 01:42:53,003 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp41iiitq0.out
2026-05-14 01:42:53,003 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:53,003 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp_7kxt49e.inp
2026-05-14 01:42:53,003 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:53,003 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpn4pjjm99.inp
2026-05-14 01:42:53,003 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpmtnjsnch.out
2026-05-14 01:42:53,003 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:53,003 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpgbqnwyo8.out
2026-05-14 01:42:53,004 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp6q7wjf_1.out
2026-05-14 01:42:53,004 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp8woze5cm.inp
2026-05-14 01:42:53,004 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp_7kxt49e.out
2026-05-14 01:42:53,004 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpn4pjjm99.out
2026-05-14 01:42:53,004 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp2g6yl9yr.inp
2026-05-14 01:42:53,004 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmplj4o_7d_.inp
2026-05-14 01:42:53,004 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp8woze5cm.out
2026-05-14 01:42:53,004 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp2g6yl9yr.out
2026-05-14 01:42:53,004 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmplj4o_7d_.out
2026-05-14 01:42:56,764 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp41iiitq0.out
2026-05-14 01:42:56,766 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:56,768 - pyradtran.interface - DEBUG - Simulation 2/14 completed successfully
2026-05-14 01:42:56,797 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp_7kxt49e.out
2026-05-14 01:42:56,798 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:56,799 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpmtnjsnch.out
2026-05-14 01:42:56,800 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:56,801 - pyradtran.interface - DEBUG - Simulation 13/14 completed successfully
2026-05-14 01:42:56,802 - pyradtran.interface - DEBUG - Simulation 8/14 completed successfully
2026-05-14 01:42:56,809 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmplmo08ary.out
2026-05-14 01:42:56,810 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:56,810 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp7vad09zl.out
2026-05-14 01:42:56,811 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:56,812 - pyradtran.interface - DEBUG - Simulation 10/14 completed successfully
2026-05-14 01:42:56,812 - pyradtran.interface - DEBUG - Simulation 1/14 completed successfully
2026-05-14 01:42:56,815 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp8woze5cm.out
2026-05-14 01:42:56,815 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:56,817 - pyradtran.interface - DEBUG - Simulation 12/14 completed successfully
2026-05-14 01:42:56,975 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpgbqnwyo8.out
2026-05-14 01:42:56,976 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:56,979 - pyradtran.interface - DEBUG - Simulation 6/14 completed successfully
2026-05-14 01:42:57,181 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp2g6yl9yr.out
2026-05-14 01:42:57,182 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:57,184 - pyradtran.interface - DEBUG - Simulation 11/14 completed successfully
2026-05-14 01:42:57,897 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp7c0z2s4k.out
2026-05-14 01:42:57,898 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:57,900 - pyradtran.interface - DEBUG - Simulation 3/14 completed successfully
2026-05-14 01:42:58,186 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmplj4o_7d_.out
2026-05-14 01:42:58,187 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:58,189 - pyradtran.interface - DEBUG - Simulation 14/14 completed successfully
2026-05-14 01:42:58,305 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpn4pjjm99.out
2026-05-14 01:42:58,306 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:58,308 - pyradtran.interface - DEBUG - Simulation 7/14 completed successfully
2026-05-14 01:42:58,316 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpvmczj2ph.out
2026-05-14 01:42:58,317 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:58,320 - pyradtran.interface - DEBUG - Simulation 4/14 completed successfully
2026-05-14 01:42:58,319 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp6q7wjf_1.out
2026-05-14 01:42:58,320 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:58,322 - pyradtran.interface - DEBUG - Simulation 9/14 completed successfully
2026-05-14 01:42:58,348 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp17sue4ry.out
2026-05-14 01:42:58,349 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:42:58,352 - pyradtran.interface - DEBUG - Simulation 5/14 completed successfully
2026-05-14 01:42:58,372 - pyradtran.interface - INFO - Batch execution completed: 14/14 simulations successful
2026-05-14 01:42:58,383 - pyradtran.interface - DEBUG - LibRadtran parameter override: sza 62.0
2026-05-14 01:42:58,384 - pyradtran.interface - INFO - Preparing 14 simulations from input dataset with dims ['time']
2026-05-14 01:42:58,566 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:58,566 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:58,566 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:58,566 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:58,566 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:58,566 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:58,567 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:58,567 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:58,567 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:58,567 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:58,567 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:58,568 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:58,568 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:58,568 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:58,568 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:58,568 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:58,568 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:58,569 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:58,569 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpzvq5gx1j.inp
2026-05-14 01:42:58,569 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:58,568 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:42:58,569 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:58,569 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpd1bygsw5.inp
2026-05-14 01:42:58,569 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp361zaexj.inp
2026-05-14 01:42:58,569 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp40gnzv63.inp
2026-05-14 01:42:58,569 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:58,569 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:58,569 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:58,569 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:58,569 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpzvq5gx1j.out
2026-05-14 01:42:58,570 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp1h0j9wsn.inp
2026-05-14 01:42:58,569 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpuicso4cl.inp
2026-05-14 01:42:58,570 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpd1bygsw5.out
2026-05-14 01:42:58,569 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:58,570 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp4jad1kmb.inp
2026-05-14 01:42:58,570 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp361zaexj.out
2026-05-14 01:42:58,570 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp40gnzv63.out
2026-05-14 01:42:58,570 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp30i6xhf3.inp
2026-05-14 01:42:58,570 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp3toudico.inp
2026-05-14 01:42:58,570 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpa1d8s23q.inp
2026-05-14 01:42:58,570 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpidopgjj2.inp
2026-05-14 01:42:58,570 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpmg8b90b8.inp
2026-05-14 01:42:58,570 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp1h0j9wsn.out
2026-05-14 01:42:58,570 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpuicso4cl.out
2026-05-14 01:42:58,570 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:58,570 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:42:58,571 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp4jad1kmb.out
2026-05-14 01:42:58,571 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp30i6xhf3.out
2026-05-14 01:42:58,571 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp3toudico.out
2026-05-14 01:42:58,571 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpa1d8s23q.out
2026-05-14 01:42:58,571 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpidopgjj2.out
2026-05-14 01:42:58,571 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpmg8b90b8.out
2026-05-14 01:42:58,571 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpjgljeclu.inp
2026-05-14 01:42:58,571 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpkpbjrur2.inp
2026-05-14 01:42:58,572 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpjgljeclu.out
2026-05-14 01:42:58,572 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpkpbjrur2.out
2026-05-14 01:43:02,439 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp361zaexj.out
2026-05-14 01:43:02,440 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:02,440 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpa1d8s23q.out
2026-05-14 01:43:02,441 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:02,442 - pyradtran.interface - DEBUG - Simulation 2/14 completed successfully
2026-05-14 01:43:02,443 - pyradtran.interface - DEBUG - Simulation 8/14 completed successfully
2026-05-14 01:43:02,453 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp40gnzv63.out
2026-05-14 01:43:02,454 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpzvq5gx1j.out
2026-05-14 01:43:02,454 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:02,454 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:02,455 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpidopgjj2.out
2026-05-14 01:43:02,455 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:02,455 - pyradtran.interface - DEBUG - Simulation 4/14 completed successfully
2026-05-14 01:43:02,456 - pyradtran.interface - DEBUG - Simulation 5/14 completed successfully
2026-05-14 01:43:02,457 - pyradtran.interface - DEBUG - Simulation 10/14 completed successfully
2026-05-14 01:43:02,488 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp1h0j9wsn.out
2026-05-14 01:43:02,489 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:02,492 - pyradtran.interface - DEBUG - Simulation 3/14 completed successfully
2026-05-14 01:43:02,644 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp4jad1kmb.out
2026-05-14 01:43:02,645 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:02,648 - pyradtran.interface - DEBUG - Simulation 7/14 completed successfully
2026-05-14 01:43:03,300 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpd1bygsw5.out
2026-05-14 01:43:03,301 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:03,303 - pyradtran.interface - DEBUG - Simulation 6/14 completed successfully
2026-05-14 01:43:03,427 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp30i6xhf3.out
2026-05-14 01:43:03,429 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:03,431 - pyradtran.interface - DEBUG - Simulation 12/14 completed successfully
2026-05-14 01:43:03,502 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp3toudico.out
2026-05-14 01:43:03,503 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:03,505 - pyradtran.interface - DEBUG - Simulation 9/14 completed successfully
2026-05-14 01:43:03,892 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpjgljeclu.out
2026-05-14 01:43:03,893 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:03,894 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpkpbjrur2.out
2026-05-14 01:43:03,895 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:03,895 - pyradtran.interface - DEBUG - Simulation 13/14 completed successfully
2026-05-14 01:43:03,897 - pyradtran.interface - DEBUG - Simulation 14/14 completed successfully
2026-05-14 01:43:03,898 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpmg8b90b8.out
2026-05-14 01:43:03,899 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:03,900 - pyradtran.interface - DEBUG - Simulation 11/14 completed successfully
2026-05-14 01:43:03,906 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpuicso4cl.out
2026-05-14 01:43:03,907 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:03,908 - pyradtran.interface - DEBUG - Simulation 1/14 completed successfully
2026-05-14 01:43:03,927 - pyradtran.interface - INFO - Batch execution completed: 14/14 simulations successful
2026-05-14 01:43:03,938 - pyradtran.interface - DEBUG - LibRadtran parameter override: sza 66.0
2026-05-14 01:43:03,939 - pyradtran.interface - INFO - Preparing 14 simulations from input dataset with dims ['time']
2026-05-14 01:43:04,112 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:04,112 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:04,112 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:04,112 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:04,113 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:04,113 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:04,113 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:04,113 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:04,113 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:04,113 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:04,114 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:04,113 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:04,114 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:04,114 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:04,115 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:04,115 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:04,115 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:04,115 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:04,115 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:04,115 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:04,115 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:04,115 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:04,115 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:04,115 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp41sbf2v8.inp
2026-05-14 01:43:04,115 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp_41fap9a.inp
2026-05-14 01:43:04,115 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp5zn7kdg2.inp
2026-05-14 01:43:04,115 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:04,115 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpvn15jhin.inp
2026-05-14 01:43:04,115 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp_aadqwhq.inp
2026-05-14 01:43:04,115 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:04,116 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpkjislaur.inp
2026-05-14 01:43:04,116 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:04,116 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp0_9hj29l.inp
2026-05-14 01:43:04,116 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp_41fap9a.out
2026-05-14 01:43:04,116 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp4rjrdvfr.inp
2026-05-14 01:43:04,116 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:04,116 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp80mp3t75.inp
2026-05-14 01:43:04,116 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp41sbf2v8.out
2026-05-14 01:43:04,116 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp5zn7kdg2.out
2026-05-14 01:43:04,116 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:04,116 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpvn15jhin.out
2026-05-14 01:43:04,116 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp_aadqwhq.out
2026-05-14 01:43:04,116 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpt3qp1x3e.inp
2026-05-14 01:43:04,116 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpkz8scu_0.inp
2026-05-14 01:43:04,116 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpqobanjn9.inp
2026-05-14 01:43:04,116 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp0_9hj29l.out
2026-05-14 01:43:04,117 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp4rjrdvfr.out
2026-05-14 01:43:04,116 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpkjislaur.out
2026-05-14 01:43:04,117 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpqjqj8__l.inp
2026-05-14 01:43:04,117 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp80mp3t75.out
2026-05-14 01:43:04,117 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpt3qp1x3e.out
2026-05-14 01:43:04,117 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpkz8scu_0.out
2026-05-14 01:43:04,117 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpqobanjn9.out
2026-05-14 01:43:04,118 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpqjqj8__l.out
2026-05-14 01:43:04,119 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp61uscam6.inp
2026-05-14 01:43:04,120 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp61uscam6.out
2026-05-14 01:43:07,918 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp41sbf2v8.out
2026-05-14 01:43:07,919 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:07,921 - pyradtran.interface - DEBUG - Simulation 8/14 completed successfully
2026-05-14 01:43:07,921 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpqobanjn9.out
2026-05-14 01:43:07,922 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:07,922 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp_aadqwhq.out
2026-05-14 01:43:07,923 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:07,925 - pyradtran.interface - DEBUG - Simulation 12/14 completed successfully
2026-05-14 01:43:07,925 - pyradtran.interface - DEBUG - Simulation 2/14 completed successfully
2026-05-14 01:43:07,946 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp4rjrdvfr.out
2026-05-14 01:43:07,947 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:07,949 - pyradtran.interface - DEBUG - Simulation 4/14 completed successfully
2026-05-14 01:43:08,084 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpkjislaur.out
2026-05-14 01:43:08,085 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:08,088 - pyradtran.interface - DEBUG - Simulation 5/14 completed successfully
2026-05-14 01:43:08,318 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpvn15jhin.out
2026-05-14 01:43:08,319 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:08,321 - pyradtran.interface - DEBUG - Simulation 1/14 completed successfully
2026-05-14 01:43:08,457 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp0_9hj29l.out
2026-05-14 01:43:08,458 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:08,461 - pyradtran.interface - DEBUG - Simulation 7/14 completed successfully
2026-05-14 01:43:08,562 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp61uscam6.out
2026-05-14 01:43:08,563 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:08,566 - pyradtran.interface - DEBUG - Simulation 14/14 completed successfully
2026-05-14 01:43:08,650 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpqjqj8__l.out
2026-05-14 01:43:08,651 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:08,653 - pyradtran.interface - DEBUG - Simulation 11/14 completed successfully
2026-05-14 01:43:08,845 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpt3qp1x3e.out
2026-05-14 01:43:08,846 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:08,848 - pyradtran.interface - DEBUG - Simulation 13/14 completed successfully
2026-05-14 01:43:09,316 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpkz8scu_0.out
2026-05-14 01:43:09,317 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:09,318 - pyradtran.interface - DEBUG - Simulation 10/14 completed successfully
2026-05-14 01:43:09,396 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp_41fap9a.out
2026-05-14 01:43:09,398 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:09,400 - pyradtran.interface - DEBUG - Simulation 9/14 completed successfully
2026-05-14 01:43:09,474 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp80mp3t75.out
2026-05-14 01:43:09,475 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:09,477 - pyradtran.interface - DEBUG - Simulation 6/14 completed successfully
2026-05-14 01:43:09,535 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp5zn7kdg2.out
2026-05-14 01:43:09,536 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:09,539 - pyradtran.interface - DEBUG - Simulation 3/14 completed successfully
2026-05-14 01:43:09,556 - pyradtran.interface - INFO - Batch execution completed: 14/14 simulations successful
2026-05-14 01:43:09,567 - pyradtran.interface - DEBUG - LibRadtran parameter override: sza 70.0
2026-05-14 01:43:09,568 - pyradtran.interface - INFO - Preparing 14 simulations from input dataset with dims ['time']
2026-05-14 01:43:09,736 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:09,736 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:09,736 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:09,736 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:09,737 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:09,736 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:09,737 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:09,737 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:09,737 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:09,738 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:09,737 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:09,738 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:09,738 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:09,737 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:09,738 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:09,739 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:09,739 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:09,739 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp8di6a61p.inp
2026-05-14 01:43:09,739 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:09,739 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:09,739 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:09,739 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:09,739 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp0px95575.inp
2026-05-14 01:43:09,739 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpevf0pazg.inp
2026-05-14 01:43:09,739 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpy1qancjk.inp
2026-05-14 01:43:09,739 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:09,739 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmptfrnc097.inp
2026-05-14 01:43:09,739 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp8di6a61p.out
2026-05-14 01:43:09,739 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:09,739 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:09,740 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:09,740 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpevf0pazg.out
2026-05-14 01:43:09,740 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpwegolhmo.inp
2026-05-14 01:43:09,740 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpbg1gxtak.inp
2026-05-14 01:43:09,740 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpy1qancjk.out
2026-05-14 01:43:09,740 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp0px95575.out
2026-05-14 01:43:09,740 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmptfrnc097.out
2026-05-14 01:43:09,740 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:09,740 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp36srbl7k.inp
2026-05-14 01:43:09,740 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpbh389ml6.inp
2026-05-14 01:43:09,740 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:09,740 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:09,740 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp9efef0tc.inp
2026-05-14 01:43:09,740 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpsnmogcn4.inp
2026-05-14 01:43:09,740 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpwegolhmo.out
2026-05-14 01:43:09,741 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpbg1gxtak.out
2026-05-14 01:43:09,741 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpbh389ml6.out
2026-05-14 01:43:09,741 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpulp89zc7.inp
2026-05-14 01:43:09,741 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp36srbl7k.out
2026-05-14 01:43:09,741 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpa4baqkrl.inp
2026-05-14 01:43:09,741 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp9efef0tc.out
2026-05-14 01:43:09,741 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp872h58m3.inp
2026-05-14 01:43:09,741 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpsnmogcn4.out
2026-05-14 01:43:09,741 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpulp89zc7.out
2026-05-14 01:43:09,742 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpa4baqkrl.out
2026-05-14 01:43:09,742 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp872h58m3.out
2026-05-14 01:43:13,588 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp9efef0tc.out
2026-05-14 01:43:13,589 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:13,591 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpbh389ml6.out
2026-05-14 01:43:13,592 - pyradtran.interface - DEBUG - Simulation 9/14 completed successfully
2026-05-14 01:43:13,592 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:13,594 - pyradtran.interface - DEBUG - Simulation 8/14 completed successfully
2026-05-14 01:43:13,594 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp0px95575.out
2026-05-14 01:43:13,595 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:13,595 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp8di6a61p.out
2026-05-14 01:43:13,596 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:13,597 - pyradtran.interface - DEBUG - Simulation 6/14 completed successfully
2026-05-14 01:43:13,598 - pyradtran.interface - DEBUG - Simulation 3/14 completed successfully
2026-05-14 01:43:13,607 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpsnmogcn4.out
2026-05-14 01:43:13,607 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:13,610 - pyradtran.interface - DEBUG - Simulation 4/14 completed successfully
2026-05-14 01:43:13,614 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpwegolhmo.out
2026-05-14 01:43:13,615 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:13,617 - pyradtran.interface - DEBUG - Simulation 7/14 completed successfully
2026-05-14 01:43:13,953 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpulp89zc7.out
2026-05-14 01:43:13,954 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:13,957 - pyradtran.interface - DEBUG - Simulation 14/14 completed successfully
2026-05-14 01:43:14,139 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpa4baqkrl.out
2026-05-14 01:43:14,140 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:14,143 - pyradtran.interface - DEBUG - Simulation 12/14 completed successfully
2026-05-14 01:43:14,265 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpy1qancjk.out
2026-05-14 01:43:14,266 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:14,269 - pyradtran.interface - DEBUG - Simulation 2/14 completed successfully
2026-05-14 01:43:15,021 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpevf0pazg.out
2026-05-14 01:43:15,022 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:15,024 - pyradtran.interface - DEBUG - Simulation 1/14 completed successfully
2026-05-14 01:43:15,029 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp872h58m3.out
2026-05-14 01:43:15,030 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:15,033 - pyradtran.interface - DEBUG - Simulation 10/14 completed successfully
2026-05-14 01:43:15,038 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp36srbl7k.out
2026-05-14 01:43:15,039 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:15,041 - pyradtran.interface - DEBUG - Simulation 11/14 completed successfully
2026-05-14 01:43:15,051 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmptfrnc097.out
2026-05-14 01:43:15,052 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:15,054 - pyradtran.interface - DEBUG - Simulation 5/14 completed successfully
2026-05-14 01:43:15,089 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpbg1gxtak.out
2026-05-14 01:43:15,090 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:15,093 - pyradtran.interface - DEBUG - Simulation 13/14 completed successfully
2026-05-14 01:43:15,110 - pyradtran.interface - INFO - Batch execution completed: 14/14 simulations successful
2026-05-14 01:43:15,125 - pyradtran.interface - DEBUG - LibRadtran parameter override: sza 74.0
2026-05-14 01:43:15,126 - pyradtran.interface - INFO - Preparing 14 simulations from input dataset with dims ['time']
2026-05-14 01:43:15,300 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:15,300 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:15,300 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:15,301 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:15,300 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:15,301 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:15,301 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:15,301 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:15,301 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:15,302 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:15,302 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:15,303 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:15,303 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:15,302 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:15,303 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:15,302 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:15,302 - pyradtran.utils - DEBUG - Radiosonde base path does not exist or not provided: /path/to/radiosonde/data
2026-05-14 01:43:15,303 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:15,303 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:15,303 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:15,303 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:15,303 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpmfqtdd6c.inp
2026-05-14 01:43:15,303 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:15,303 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp6s46e7tp.inp
2026-05-14 01:43:15,303 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpquz9ifxz.inp
2026-05-14 01:43:15,304 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:15,304 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:15,304 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp9575ft06.inp
2026-05-14 01:43:15,304 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:15,304 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpmfqtdd6c.out
2026-05-14 01:43:15,304 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpwhnr5ma7.inp
2026-05-14 01:43:15,304 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpad6wfm0c.inp
2026-05-14 01:43:15,304 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp3mwahgrt.inp
2026-05-14 01:43:15,304 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:15,304 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpfdj5tyln.inp
2026-05-14 01:43:15,304 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpquz9ifxz.out
2026-05-14 01:43:15,304 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp6s46e7tp.out
2026-05-14 01:43:15,304 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp12wka4g_.inp
2026-05-14 01:43:15,304 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpuibo8khq.inp
2026-05-14 01:43:15,304 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp84r5pzwq.inp
2026-05-14 01:43:15,304 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp9575ft06.out
2026-05-14 01:43:15,305 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:15,305 - pyradtran.core - DEBUG - Running LibRadtran: /opt/libRadtran-2.0.6/bin/uvspec
2026-05-14 01:43:15,305 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpwhnr5ma7.out
2026-05-14 01:43:15,305 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpad6wfm0c.out
2026-05-14 01:43:15,305 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpvn454jux.inp
2026-05-14 01:43:15,305 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpfdj5tyln.out
2026-05-14 01:43:15,305 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpuibo8khq.out
2026-05-14 01:43:15,305 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp3mwahgrt.out
2026-05-14 01:43:15,305 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp12wka4g_.out
2026-05-14 01:43:15,305 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp84r5pzwq.out
2026-05-14 01:43:15,305 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpnq8vrsld.inp
2026-05-14 01:43:15,306 - pyradtran.core - DEBUG - Input file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp97cvdij1.inp
2026-05-14 01:43:15,306 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpvn454jux.out
2026-05-14 01:43:15,306 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpnq8vrsld.out
2026-05-14 01:43:15,306 - pyradtran.core - DEBUG - Output file: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp97cvdij1.out
2026-05-14 01:43:19,064 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp9575ft06.out
2026-05-14 01:43:19,065 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:19,067 - pyradtran.interface - DEBUG - Simulation 2/14 completed successfully
2026-05-14 01:43:19,077 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp84r5pzwq.out
2026-05-14 01:43:19,078 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:19,081 - pyradtran.interface - DEBUG - Simulation 9/14 completed successfully
2026-05-14 01:43:19,085 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpwhnr5ma7.out
2026-05-14 01:43:19,086 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpad6wfm0c.out
2026-05-14 01:43:19,086 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:19,086 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:19,088 - pyradtran.interface - DEBUG - Simulation 1/14 completed successfully
2026-05-14 01:43:19,089 - pyradtran.interface - DEBUG - Simulation 6/14 completed successfully
2026-05-14 01:43:19,089 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpfdj5tyln.out
2026-05-14 01:43:19,089 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:19,091 - pyradtran.interface - DEBUG - Simulation 5/14 completed successfully
2026-05-14 01:43:19,617 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpquz9ifxz.out
2026-05-14 01:43:19,617 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:19,619 - pyradtran.interface - DEBUG - Simulation 4/14 completed successfully
2026-05-14 01:43:19,679 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpmfqtdd6c.out
2026-05-14 01:43:19,680 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:19,683 - pyradtran.interface - DEBUG - Simulation 7/14 completed successfully
2026-05-14 01:43:19,754 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp97cvdij1.out
2026-05-14 01:43:19,755 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:19,758 - pyradtran.interface - DEBUG - Simulation 13/14 completed successfully
2026-05-14 01:43:19,893 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpnq8vrsld.out
2026-05-14 01:43:19,894 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:19,896 - pyradtran.interface - DEBUG - Simulation 14/14 completed successfully
2026-05-14 01:43:20,107 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp3mwahgrt.out
2026-05-14 01:43:20,108 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:20,111 - pyradtran.interface - DEBUG - Simulation 8/14 completed successfully
2026-05-14 01:43:20,161 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpvn454jux.out
2026-05-14 01:43:20,163 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:20,166 - pyradtran.interface - DEBUG - Simulation 12/14 completed successfully
2026-05-14 01:43:20,548 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmpuibo8khq.out
2026-05-14 01:43:20,549 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:20,552 - pyradtran.interface - DEBUG - Simulation 10/14 completed successfully
2026-05-14 01:43:20,563 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp12wka4g_.out
2026-05-14 01:43:20,564 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:20,567 - pyradtran.interface - DEBUG - Simulation 11/14 completed successfully
2026-05-14 01:43:20,732 - pyradtran.core - DEBUG - Simulation completed successfully: /home/josh/pyRadtran/book/notebooks/pyradtran_work/tmp6s46e7tp.out
2026-05-14 01:43:20,734 - pyradtran.io - DEBUG - Initialized parser with columns: ['zout', 'lambda', 'edir', 'eglo', 'edn', 'eup', 'enet', 'albedo']
2026-05-14 01:43:20,736 - pyradtran.interface - DEBUG - Simulation 3/14 completed successfully
2026-05-14 01:43:20,756 - pyradtran.interface - INFO - Batch execution completed: 14/14 simulations successful
<xarray.Dataset> Size: 6kB
Dimensions:  (sza: 7, albedo: 14)
Coordinates:
  * sza      (sza) float64 56B 50.0 54.0 58.0 62.0 66.0 70.0 74.0
    time     (albedo) datetime64[ns] 112B 2017-06-01T10:00:00 ... 2017-06-01T...
  * albedo   (albedo) float64 112B 0.3 0.35 0.4 0.45 0.5 ... 0.8 0.85 0.9 0.95
Data variables:
    zout     (sza, albedo) float64 784B 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0
    lambda   (sza, albedo) float64 784B 300.0 300.0 300.0 ... 300.0 300.0 300.0
    edir     (sza, albedo) float64 784B 6.038e+05 6.038e+05 ... 2.074e+05
    eglo     (sza, albedo) float64 784B 6.634e+05 6.658e+05 ... 2.585e+05
    edn      (sza, albedo) float64 784B 5.957e+04 6.202e+04 ... 5.108e+04
    eup      (sza, albedo) float64 784B 1.99e+05 2.33e+05 ... 2.456e+05
    enet     (sza, albedo) float64 784B 4.644e+05 4.328e+05 ... 1.293e+04
Attributes:
    point_id:             20170601_100000_81.00_10.00_0
    time:                 2017-06-01T10:00:00
    latitude:             81.0
    longitude:            10.0
    albedo:               0.3
    surface_temperature:  None
    surface_type:         None
    altitude:             None
    generated_by:         pyradtran
    pyradtran_version:    unified_system
    generation_date:      2026-05-14T01:42:47.237600

LUT shape  sza×albedo  =  FrozenMappingWarningOnValuesAccess({'sza': 7, 'albedo': 14})
# ── 4. Compute SW Cloud Radiative Forcing (both methods) ────────────────────
#
# Stapf et al. (2020) Eq. 9:
#
#   ΔF_sw(α_all) = F_net_obs – F_cf_clrsky(SZA, α_all)   ← traditional
#   ΔF_sw(α_cf)  = F_net_obs – F_cf_clrsky(SZA, α_cf)    ← surface-feedback-corrected
#
# where F_net = F_dn_sw × (1 – α).
#
# F_cf_clrsky(SZA, α) is interpolated from the LUT.
# F_net_obs = eglo_obs × (1 – α_all)  — we reconstruct this from the LUT downwelling
# at the observed SZA and α_all (i.e., the cloudy scene is approximated via α_all).
#
# Note: in the PANGAEA file this would be measured directly; here we use the LUT
# with α_all to approximate the clear-sky downwelling then attenuate it.

from scipy.interpolate import RegularGridInterpolator

# Build interpolators for enet  (F_net = edir+ediffuse - eup ≡ eglo*(1-α))
# and eglo (F_dn = total downwelling)
lut_sza_nodes = lut.sza.values
lut_alb_nodes = lut.albedo.values

def _make_interp(var):
    arr = lut[var].values / 1000 # shape (sza, albedo)
    return RegularGridInterpolator(
        (lut_sza_nodes, lut_alb_nodes),
        arr,
        method='linear',
        bounds_error=False,
        fill_value=None,     # extrapolate at edges
    )

interp_enet = _make_interp('enet') 
interp_eglo = _make_interp('eglo') 

# ── extract observation arrays ───────────────────────────────────────────────
obs_sza      = ds_obs['SZA'].values.ravel()
obs_alpha_all = ds_obs['alpha_all'].values.ravel()
obs_alpha_cf  = ds_obs['alpha_cf'].values.ravel()

# Clip to LUT bounds (±2° and ±0.03 albedo headroom)
sza_clipped  = np.clip(obs_sza,       lut_sza_nodes.min(), lut_sza_nodes.max())
aall_clipped = np.clip(obs_alpha_all, lut_alb_nodes.min(), lut_alb_nodes.max())
acf_clipped  = np.clip(obs_alpha_cf,  lut_alb_nodes.min(), lut_alb_nodes.max())

# ── clear-sky net irradiance ─────────────────────────────────────────────────
# F_cf_clrsky(SZA, α_all): the clear-sky net flux that would exist if the surface
#   had the observed (cloudy) albedo.  Used in the "traditional" CRF estimate.
F_cf_all = interp_enet(np.column_stack([sza_clipped, aall_clipped]))

# F_cf_clrsky(SZA, α_cf): the clear-sky net flux with the true (cloud-free) albedo.
#   Used in the "corrected" CRF estimate (accounts for spectral albedo shift).
F_cf_cf  = interp_enet(np.column_stack([sza_clipped,  acf_clipped]))

# ── observed net irradiance ──────────────────────────────────────────────────
# Approximate: use LUT eglo at (SZA, α_all) and modulate by α_all.
# (If the PANGAEA file is loaded, eglo/eup columns can be used directly instead.)
F_dn_lut = interp_eglo(np.column_stack([sza_clipped, aall_clipped]))
F_net_obs = F_dn_lut * (1.0 - obs_alpha_all)

# ── CRF ─────────────────────────────────────────────────────────────────────
CRF_sw_trad  = F_net_obs - F_cf_all   # traditional   (uses α_all for reference)
CRF_sw_corr  = F_net_obs - F_cf_cf    # corrected     (uses α_cf  for reference)
CRF_lw       = ds_obs['CRF_lw_paper'].values.ravel() if 'CRF_lw_paper' in ds_obs else None
CRF_tot_trad = CRF_sw_trad + (CRF_lw if CRF_lw is not None else 0.0)
CRF_tot_corr = CRF_sw_corr + (CRF_lw if CRF_lw is not None else 0.0)

# ── add back to observation dataset ─────────────────────────────────────────
obs_dim = list(ds_obs.dims)[0]
ds_obs['CRF_sw_trad']  = (obs_dim, CRF_sw_trad,  {'long_name': r'$\Delta F_{sw}(\alpha_{all})$', 'units': 'W m⁻²'})
ds_obs['CRF_sw_corr']  = (obs_dim, CRF_sw_corr,  {'long_name': r'$\Delta F_{sw}(\alpha_{cf})$',  'units': 'W m⁻²'})
if CRF_lw is not None:
    ds_obs['CRF_tot_trad'] = (obs_dim, CRF_tot_trad, {'long_name': r'$\Delta F_{tot}(\alpha_{all})$','units': 'W m⁻²'})
    ds_obs['CRF_tot_corr'] = (obs_dim, CRF_tot_corr, {'long_name': r'$\Delta F_{tot}(\alpha_{cf})$', 'units': 'W m⁻²'})

# ── summary ──────────────────────────────────────────────────────────────────
print(f"{'Quantity':<30}  {'Mean':>9}  {'Std':>9}")
print('-' * 52)
for label, arr in [
    (r'α_all',                       obs_alpha_all),
    (r'α_cf',                        obs_alpha_cf),
    (r'Δα (cloudy – cloud-free)',     obs_alpha_all - obs_alpha_cf),
    (r'CRF_sw traditional [W m⁻²]',  CRF_sw_trad),
    (r'CRF_sw corrected  [W m⁻²]',   CRF_sw_corr),
]:
    print(f"  {label:<28}  {np.nanmean(arr):+9.2f}  {np.nanstd(arr):9.2f}")
if CRF_lw is not None:
    for label, arr in [
        (r'CRF_lw             [W m⁻²]', CRF_lw),
        (r'CRF_tot traditional[W m⁻²]', CRF_tot_trad),
        (r'CRF_tot corrected  [W m⁻²]', CRF_tot_corr),
    ]:
        print(f"  {label:<28}  {np.nanmean(arr):+9.2f}  {np.nanstd(arr):9.2f}")

print(f"\nPaper (Table 1, sea-ice subset):")
print(f"  CRF_sw(α_all)  ≈ −32 W m⁻²")
print(f"  CRF_sw(α_cf)   ≈ −62 W m⁻²   (2× more negative when corrected)")
Quantity                             Mean        Std
----------------------------------------------------
  α_all                             +0.81       0.07
  α_cf                              +0.75       0.07
  Δα (cloudy – cloud-free)          +0.06       0.02
  CRF_sw traditional [W m⁻²]        +0.01       0.21
  CRF_sw corrected  [W m⁻²]        -28.80      12.00
  CRF_lw             [W m⁻²]       +68.84      16.09
  CRF_tot traditional[W m⁻²]       +68.85      16.09
  CRF_tot corrected  [W m⁻²]       +40.04      12.90

Paper (Table 1, sea-ice subset):
  CRF_sw(α_all)  ≈ −32 W m⁻²
  CRF_sw(α_cf)   ≈ −62 W m⁻²   (2× more negative when corrected)
# ── 5. Reproduce Fig. 10 of Stapf et al. (2020) ─────────────────────────────
#
# Three-panel figure:
#  (a) Histograms of α_all and α_cf — the surface albedo shift from clouds
#  (b) Shortwave CRF distributions using α_all (gray) and α_cf (red)
#      + longwave CRF (blue)
#  (c) Total (SW+LW) CRF distributions
#
# Vertical dashed lines mark campaign means;
# shaded band shows 1σ spread around the mean.

import matplotlib.patches as mpatches
from matplotlib.ticker import MultipleLocator

fig, axes = plt.subplots(1, 3, figsize=(15, 5))
kw_hist  = dict(density=True, histtype='stepfilled', alpha=0.45, bins=35, edgecolor='none')
kw_mean  = dict(lw=2.0, ls='--')

# ─── (a) Surface albedo ──────────────────────────────────────────────────────
ax = axes[0]
ax.hist(obs_alpha_all, color='steelblue', **kw_hist, label=r'$\alpha_{all}$ (observed, cloudy)')
ax.hist(obs_alpha_cf,  color='tomato',    **kw_hist, label=r'$\alpha_{cf}$ (estimated, cloud-free)')
mean_aall = np.nanmean(obs_alpha_all)
mean_acf  = np.nanmean(obs_alpha_cf)
ax.axvline(mean_aall, color='steelblue', **kw_mean)
ax.axvline(mean_acf,  color='tomato',    **kw_mean)
ax.text(mean_aall + 0.01, ax.get_ylim()[1] * 0.85,
        f'{mean_aall:.3f}', color='steelblue', fontsize=9)
ax.text(mean_acf  - 0.055, ax.get_ylim()[1] * 0.85,
        f'{mean_acf:.3f}', color='tomato', fontsize=9)
ax.set_xlabel('Broadband surface albedo', fontsize=11)
ax.set_ylabel('Probability density', fontsize=11)
ax.set_title(r'(a) $\alpha_{all}$ vs $\alpha_{cf}$', fontsize=12)
ax.legend(fontsize=9)
ax.text(0.05, 0.95,
        f'Paper: {0.80:.2f} vs {0.74:.2f}',
        transform=ax.transAxes, fontsize=8, va='top',
        bbox=dict(boxstyle='round', fc='lightyellow', alpha=0.8))

# ─── (b) SW and LW CRF ──────────────────────────────────────────────────────
ax = axes[1]
ax.hist(CRF_sw_trad, color='gray',      **kw_hist, label=r'$\Delta F_{sw}(\alpha_{all})$ trad.')
ax.hist(CRF_sw_corr, color='tomato',    **kw_hist, label=r'$\Delta F_{sw}(\alpha_{cf})$ corrected')
if CRF_lw is not None:
    ax.hist(CRF_lw,  color='royalblue', **kw_hist, label=r'$\Delta F_{lw}$')

mean_sw_trad = np.nanmean(CRF_sw_trad)
mean_sw_corr = np.nanmean(CRF_sw_corr)
ax.axvline(mean_sw_trad, color='gray',   **kw_mean)
ax.axvline(mean_sw_corr, color='tomato', **kw_mean)
ylim_b = ax.get_ylim()[1]
ax.text(mean_sw_trad - 3, ylim_b * 0.88, f'{mean_sw_trad:.0f}',
        color='gray', fontsize=9, ha='right')
ax.text(mean_sw_corr + 2, ylim_b * 0.88, f'{mean_sw_corr:.0f}',
        color='tomato', fontsize=9)
if CRF_lw is not None:
    ax.axvline(np.nanmean(CRF_lw), color='royalblue', **kw_mean)
ax.axvline(0, color='k', lw=0.8, ls=':')
ax.set_xlabel(r'CRF  [W m$^{-2}$]', fontsize=11)
ax.set_ylabel('Probability density', fontsize=11)
ax.set_title('(b) SW and LW CRF', fontsize=12)
ax.legend(fontsize=9, loc='upper left')
ax.text(0.05, 0.95,
        f'Paper: {-32:.0f} vs {-62:.0f} W m⁻²',
        transform=ax.transAxes, fontsize=8, va='top',
        bbox=dict(boxstyle='round', fc='lightyellow', alpha=0.8))

# ─── (c) Total CRF ──────────────────────────────────────────────────────────
ax = axes[2]
if CRF_lw is not None:
    ax.hist(CRF_tot_trad, color='gray',   **kw_hist, label=r'$\Delta F_{tot}(\alpha_{all})$ trad.')
    ax.hist(CRF_tot_corr, color='tomato', **kw_hist, label=r'$\Delta F_{tot}(\alpha_{cf})$ corrected')
    mean_tot_trad = np.nanmean(CRF_tot_trad)
    mean_tot_corr = np.nanmean(CRF_tot_corr)
    ax.axvline(mean_tot_trad, color='gray',   **kw_mean)
    ax.axvline(mean_tot_corr, color='tomato', **kw_mean)
    ylim_c = ax.get_ylim()[1]
    ax.text(mean_tot_trad + 2, ylim_c * 0.88, f'{mean_tot_trad:.0f}', color='gray',   fontsize=9)
    ax.text(mean_tot_corr - 3, ylim_c * 0.88, f'{mean_tot_corr:.0f}', color='tomato', fontsize=9, ha='right')
    ax.text(0.05, 0.95,
            f'Paper: +37 vs +6 W m⁻²',
            transform=ax.transAxes, fontsize=8, va='top',
            bbox=dict(boxstyle='round', fc='lightyellow', alpha=0.8))
else:
    ax.text(0.5, 0.5, 'No LW CRF data available\n(PANGAEA file needed)',
            ha='center', va='center', transform=ax.transAxes, fontsize=10)
ax.axvline(0, color='k', lw=0.8, ls=':')
ax.set_xlabel(r'CRF  [W m$^{-2}$]', fontsize=11)
ax.set_ylabel('Probability density', fontsize=11)
ax.set_title('(c) Total (SW+LW) CRF', fontsize=12)
ax.legend(fontsize=9, loc='upper left')

# shared styling
for ax in axes:
    ax.spines[['top', 'right']].set_visible(False)
    ax.xaxis.set_minor_locator(MultipleLocator(0.02 if ax is axes[0] else 5))

data_label = 'PANGAEA ds 909289 (Stapf et al. 2019)' if not FALLBACK else 'Synthetic fallback (paper statistics)'
fig.suptitle(
    f'Cloud radiative forcing over Arctic sea ice  |  pyRadtran clear-sky LUT\n'
    f'{data_label}',
    fontsize=11, y=1.02,
)
plt.tight_layout()
plt.show()
print("Figure saved → output/stapf2020_fig10_reproduction.png")
../_images/4b811791323e88cc8ea642a59a8cd9552c8aa930aa3ca002981fdd641308f6c7.png
Figure saved → output/stapf2020_fig10_reproduction.png