Source code for punchbowl.level3.low_noise

import numpy as np
from ndcube import NDCube

from punchbowl.data.meta import NormalizedMetadata
from punchbowl.prefect import punch_task


[docs] @punch_task def create_low_noise_task(inputs: list[NDCube]) -> NDCube: """Create a low noise image from a set of inputs.""" num_images = np.nansum([np.logical_not(np.isnan(c.data)) for c in inputs], axis=0) new_data = np.nanmean([c.data for c in inputs], axis=0) combined_uncertainty = np.sqrt(np.nansum(np.square([c.uncertainty.array for c in inputs]), axis=0)) final_uncertainty = combined_uncertainty / np.sqrt(num_images) new_code = inputs[0].meta.product_code[0] + "A" + inputs[0].meta.product_code[2] new_meta = NormalizedMetadata.load_template(new_code, "3") for old_key, old_value in inputs[0].meta.items(): new_meta[old_key] = old_value return NDCube(data=new_data, uncertainty=final_uncertainty, wcs=inputs[0].wcs, meta=new_meta)