Source code for punchbowl.level3.polarization

from datetime import UTC, datetime

import astropy.units as u
import numpy as np
from ndcube import NDCollection, NDCube
from prefect import get_run_logger
from solpolpy import resolve

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


[docs] @punch_task def convert_polarization( input_data: NDCube) -> NDCube: """Convert polarization from MZP to BpB.""" logger = get_run_logger() logger.info("convert2bpb started") collection_contents = [(label, NDCube(data=input_data[i].data, wcs=input_data.wcs.dropaxis(2), meta={"POLAR": angle})) for (label, i, angle) in zip(["M", "Z", "P"], [0, 1, 2], [-60 * u.deg, 0 * u.deg, 60 * u.deg], strict=False)] data_collection = NDCollection(collection_contents, aligned_axes="all") resolved_data_collection = resolve(data_collection, "bp3", imax_effect=False) new_data = np.stack([resolved_data_collection["B"].data, resolved_data_collection["pB"].data, resolved_data_collection["pBp"].data], axis=0) new_wcs = input_data.wcs.copy() output_meta = NormalizedMetadata.load_template("PTM", "3") output_meta["DATE"] = datetime.now(UTC).strftime("%Y-%m-%dT%H:%M:%S.%f")[:-3] output_meta["DATE-AVG"] = input_data.meta["DATE-AVG"].value output_meta["DATE-OBS"] = input_data.meta["DATE-OBS"].value output_meta["DATE-BEG"] = input_data.meta["DATE-BEG"].value output_meta["DATE-END"] = input_data.meta["DATE-END"].value output = NDCube(data=new_data, wcs=new_wcs, meta=output_meta) output = set_spacecraft_location_to_earth(output) logger.info("convert2bpb finished") output.meta.history.add_now("LEVEL3-convert2bp3", "Convert MZP to B-pB-pBp") return output