pycif.plugins.transforms.complex.conc2ratio — API reference

pycif.plugins.transforms.complex.conc2ratio — API reference#

Configuration reference: conc2ratio plugin

pycif.plugins.transforms.complex.conc2ratio.adjoint.adjoint(transform, inout_datastore, controlvect, obsvect, mapper, di, df, mode, runsubdir, workdir, onlyinit=False, **kwargs)[source]#

Propagate per-mil ratio sensitivities back to isotopologue concentration sensitivities.

The adjoint of forward(). In onlyinit mode, initialises the input datastore from the concatenated output datastores (needed so that downstream adjoint transforms can access the correct observation metadata) and records parameter_ref on transform.metadata[ddi] for later forward retrieval.

In the full adjoint pass, reloads the forward concentrations from disk (chain/conc2ratio/), then applies the chain rule:

  • Adjoint w.r.t. reference concentrations (denominators): \(\partial\delta / \partial[ref] = -[iso] / [ref]^2 \cdot 1000 / R_{std}\)

  • Adjoint w.r.t. isotopologue concentrations (numerators): \(\partial\delta / \partial[iso] = 1 / [ref] \cdot 1000 / R_{std}\)

The adj_out field of each input tracer DataFrame is updated in-place.

Parameters:
  • transform (Plugin) – conc2ratio plugin instance; model.adj_refdir is used to locate the saved forward data.

  • inout_datastore (dict) – mutable datastore.

  • controlvect – unused.

  • obsvect – unused.

  • mapper (dict) – transform mapper.

  • di (datetime) – sub-simulation start date.

  • df (datetime) – sub-simulation end date.

  • mode (str) – 'adj'.

  • runsubdir (str) – sub-simulation run directory.

  • workdir (str) – unused.

  • onlyinit (bool) – if True, only initialise metadata without computing sensitivities.

  • **kwargs – unused.

pycif.plugins.transforms.complex.conc2ratio.forward.forward(transform, inout_datastore, controlvect, obsvect, mapper, di, df, mode, runsubdir, workdir, onlyinit=False, **kwargs)[source]#

Convert isotopologue concentrations to per-mil isotopic ratios.

For each δ-value output declared in the mapper, computes:

\[\delta = \left(\frac{\sum_{iso}[iso]}{\sum_{ref}[ref]} \cdot \frac{1}{R_{std}} - 1\right) \times 1000\]

The total concentration output is the sum of all input isotopologues. In TL mode the same linear formula is applied to increments.

The input concentrations at the current date are saved to chain/conc2ratio/ so the adjoint can reload them.

Supports ensemble (batch sampling) runs: __sample#N tracers are grouped and processed together to avoid memory bloat.

Parameters:
  • transform (Plugin) – conc2ratio plugin instance (carries parameters_out with standard, refs, and isotopologues attributes per signature, and metadata for parameter-name tracking).

  • inout_datastore (dict) – mutable datastore.

  • controlvect – unused.

  • obsvect – unused.

  • mapper (dict) – transform mapper.

  • di (datetime) – sub-simulation start date.

  • df (datetime) – sub-simulation end date.

  • mode (str) – 'fwd' or 'tl'.

  • runsubdir (str) – sub-simulation run directory (used to locate the chain/ directory for saving forward data).

  • workdir (str) – root working directory.

  • onlyinit (bool) – if True, return immediately.

  • **kwargs – forwarded to downstream operations.

pycif.plugins.transforms.complex.conc2ratio.utils.propagate_incompatible_input_dates(self, trans_mapper, trid_in, mode='backward')[source]#

Synchronise the input-date grid with the union of all output-date grids.

When conc2ratio inputs and outputs have incompatible sub-simulation schedules (e.g. outputs are split by observation window while inputs cover the full period), this function re-assigns input_dates of trid_in to the union of all output date windows and rebuilds the subsimus dict accordingly.

Parameters:
  • self (Plugin) – conc2ratio plugin instance.

  • trans_mapper (dict) – the transform mapper; 'inputs' and 'outputs' are modified in-place.

  • trid_in (tuple) – (component, parameter) key of the input tracer whose date grid should be updated.

  • mode (str) – propagation direction (currently unused; kept for API consistency).