slv.inversion.mdm.multiplicative_scale#

slv.inversion.mdm.multiplicative_scale(obs, scale_on, *, prior, jacobian, constant)[source]#

Per-obs scale [ppm] for a multiplicative MDM term.

scale_on="obs" gives |obs - background|, the observed enhancement: the actual signal, so extreme shallow-PBL days the prior under-predicts still get a large error. scale_on="prior" gives |H x_prior|, the prior-modeled enhancement; it under-scales where the EPA prior is low, exactly the over-leveraged days. Obs lacking the needed term get 0 (floor-only error). scale_on="footprint" gives |H| * mean(x_prior), the footprint strength in enhancement units. It down-weights extreme shallow-PBL days by how much air they integrate, independent of the obs (no circularity) or the EPA pattern, so it eases both the low-obs winter dips and the high-obs spikes, which share an extreme |H|.

Parameters:
  • obs (pd.Series) – The obs, indexed by (obs_location, obs_time).

  • scale_on ({"footprint", "obs", "prior"}) – The scale.

  • prior (pd.Series) – The flux prior, as get_prior() gives it.

  • jacobian (Operator) – The flux Jacobian, as get_flux_jacobian() gives it (rows: receptors; columns: cells and times).

  • constant (pd.Series) – The background of each obs, as get_constant() gives it.

Return type:

ndarray