Parameters & Validation#
All runtime parameters go through one mapping: params. Any libRadtran
option can be a key; the value decides how it is applied.
The params mapping#
A key can be:
A uvspec option (
albedo,sza,zout,wc_modify,ic_properties, … — anything your libRadtran accepts)A dotted config path (
simulation_defaults.wavelength_nm) — applied to the configuration instead of the input file
The value can be:
A literal — same value for every simulated point
Var("name")— resolved per point from the variablenamein your input dataset
from pyradtran import Var
ds_sim = ds.pyradtran.run(
config_path='config/solar.yaml',
params={
'albedo': Var('surface_albedo'), # per-point from the dataset
'mol_modify O3': 320.0, # same for every point
'wc_modify': ['tau550 set 12'], # repeatable option: list
'aerosol_default': True, # flag option: bare keyword
},
)
Points where a Var value is NaN simply omit that parameter (the config
default applies); NaN coordinates or a missing/NaT time skip the
whole point and record status=2 in the result.
Flag options take True (emit the bare keyword) or False (emit
nothing — useful to switch a config-supplied flag off for one run).
Numeric zout values are sorted and de-duplicated automatically:
uvspec hard-errors on unsorted output altitudes.
Validated against your libRadtran#
libRadtran ships a machine-readable description of every option. On
first use pyRadtran extracts it from your local installation (cached
under ~/.pyradtran/), so every entry is checked against the exact
binary you run — before any simulation starts:
params={'albdeo': 0.3}
# ValidationError: 'albdeo' is not a known uvspec option of the local
# libRadtran install; did you mean albedo / albedo_map?
params={'ic_properties': 'granite'}
# ValidationError: 'ic_properties': 'granite' is not one of
# ['baum', 'baum_v36', 'echam4', 'fu', 'hey', 'key', ...]
params={'cloudcover wc': 1.5}
# ValidationError: 'cloudcover wc' value 1.5 outside [0.0, 1.0]
Need an option your schema does not know (patched uvspec build)? Wrap it
in Raw to bypass validation:
from pyradtran import Raw
params={'my_custom_option': Raw('anything goes')}
Explore all options from Python#
import pyradtran
print(pyradtran.describe('wc_modify'))
# wc_modify <gg|ssa|tau|tau550> <set|scale> <float>
# group: Water and ice clouds (repeatable)
# requires: wc_file
# ... full documentation ...
pyradtran.search_options('optical thickness')
# ['aerosol_modify', 'ic_modify', 'wc_modify', ...]
describe() shows the usage signature, valid choices and ranges, option
dependencies, and the full documentation text — for the libRadtran
version you actually have installed.
Preview before you run#
explain() renders the exact input file for one point — without running
anything — and tags every line with the layer that produced it:
print(ds.pyradtran.explain(
params={'albedo': Var('surface_albedo')},
config_path='config/solar.yaml',
))
# rte_solver disort # config
# albedo 0.85 # dataset-var
# mol_modify O3 320.0 DU # params-literal
# ...
The The Parameter System: A Deep Dive notebook walks through all of this hands-on.
Note
The old parameter_overrides=, albedo_var=, surface_temperature_var=,
surface_type_var= and altitude_var= keyword arguments still work but
are deprecated: albedo_var="x" → params={"albedo": Var("x")},
parameter_overrides={...} → params={...}.