Source code for pycif.plugins.transforms.basic.background.forward

import numpy as np


[docs] def forward( transform, inout_datastore, controlvect, obsvect, mapper, di, df, mode, runsubdir, workdir, onlyinit=False, save_debug=True, **kwargs ): xmod_in = inout_datastore["inputs"] xmod_out = inout_datastore["outputs"] # Skip if empty output if type(xmod_out[("concs", transform.spec)][di]) == dict \ or type(xmod_in[("concs", transform.spec)][di]) == dict: return concs = xmod_in[("concs", transform.spec)][di].set_index( [("metadata", "date"), ("metadata", "station")]) bkg = xmod_in[("background", transform.spec)][di].set_index( [("metadata", "date"), ("metadata", "station")]) # Drop duplicate stations bkg = bkg[~bkg.index.duplicated(keep='first')] # Reindex background to concentration resolution for stat in concs.index.get_level_values(1).unique(): mask_stat_conc = concs.index.get_level_values(1) == stat mask_stat_bkg = bkg.index.get_level_values(1) == stat xmod_out[("concs", transform.spec)][di].loc[ mask_stat_conc, ("maindata", "spec")] = \ bkg.loc[mask_stat_bkg].reindex( concs.loc[mask_stat_conc].index, method="ffill" )[("maindata", "spec")].values \ + concs.loc[mask_stat_conc, ("maindata", "spec")].values if mode == "tl": xmod_out[("concs", transform.spec)][di].loc[ mask_stat_conc, ("maindata", "incr")] = \ bkg.loc[mask_stat_bkg].reindex( concs.loc[mask_stat_conc].index, method="ffill" )[("maindata", "incr")].values \ + concs.loc[mask_stat_conc, ("maindata", "incr")].values # Propagate info from previous transforms if saving debug info if save_debug: outputs = xmod_out[("concs", transform.spec)][di] for input_type in ["concs", "background"]: data_in = xmod_in[(input_type, transform.spec)][di] for c in data_in.columns: if c[0] not in ["metadata", "maindata"]: outputs[c] = np.nan outputs.loc[:, c] = data_in[c].values