Source code for pycif.plugins.obsoperators.standard.transforms.utils.propagate_parameters
import copy
[docs]
def propagate_parameters(all_transforms, mapper):
"""Propagate a fixed set of scalar parameters backward through the pipe.
For ``force_loadin``, ``loadin_perturb_full_vertical`` and
``surface_level``, sweeps the pipe backwards (from the last to the
first transform): whenever an output value differs from its default,
it is copied to the matching input, and then to the corresponding
precursors' outputs.
Args:
all_transforms: Namespace holding all registered transform instances,
ordered as they appear in the pipe.
mapper: Dictionary mapping each transform id to its inputs/outputs/
precursors metadata, mutated in place.
"""
parameters2propagate = {
"force_loadin": False,
"loadin_perturb_full_vertical": True,
"surface_level": 0
}
# Propagates backwards to precursors
for transform in all_transforms.attributes[::-1]:
transf = getattr(all_transforms, transform)
transf_mapper = mapper[transform]
# Propagate outputs to inputs
for trid in transf_mapper["inputs"]:
if trid in transf_mapper["outputs"]:
for p2prop, default_val in parameters2propagate.items():
parameter_out = \
transf_mapper["outputs"][trid].get(p2prop, default_val)
if parameter_out != default_val:
transf_mapper["inputs"][trid][p2prop] = parameter_out
# Loop over precursors to propagate info to them
precursors = transf_mapper["precursors"]
for trid in precursors:
for p2prop, default_val in parameters2propagate.items():
parameter_ref = \
transf_mapper["inputs"][trid].get(p2prop, default_val)
for tr in precursors[trid]:
if parameter_ref != default_val:
mapper[tr]["outputs"][trid][p2prop] = \
parameter_ref