From cbd9b7e7215b179bdbf6ef3937f2569f593c9c02 Mon Sep 17 00:00:00 2001 From: "chown.5" Date: Fri, 3 Apr 2026 11:46:00 -0400 Subject: [PATCH] adjust lv3 blotting functionality --- docs/steps/lv3.rst | 34 +++++++---- pjpipe/lv3/lv3_step.py | 128 ++++++++++++++++++----------------------- 2 files changed, 77 insertions(+), 85 deletions(-) diff --git a/docs/steps/lv3.rst b/docs/steps/lv3.rst index e478cb1..0c152ae 100644 --- a/docs/steps/lv3.rst +++ b/docs/steps/lv3.rst @@ -8,28 +8,38 @@ For more details, see the `official documentation = len(crf_files): + if len(i2d_files) > 1: log.warning( - "_blot_to_detector_frame: ref_index %d out of range (%d exposures)", - ref_index, len(crf_files), + "_blot_to_detector_frame: found %d i2d files, using %s", + len(i2d_files), os.path.basename(i2d_files[0]), ) - return log.info( - "Blotting %d resampled exposures to detector frame of %s", - len(single_files), os.path.basename(crf_files[ref_index]), + "Blotting i2d mosaic to %d exposure detector frames", + len(crf_files), ) - with datamodels.open(crf_files[ref_index]) as ref_model: - blot_wcs = ref_model.meta.wcs - blot_shape = ref_model.data.shape + with datamodels.open(i2d_files[0]) as i2d_model: + mosaic_data = i2d_model.data.astype(np.float32) + mosaic_wcs = i2d_model.meta.wcs - ref_pixflux_area = ref_model.meta.photometry.pixelarea_steradians - blot_wcs.array_shape = blot_shape - ref_pixel_area = compute_image_pixel_area(blot_wcs) - pix_ratio = np.sqrt(ref_pixflux_area / ref_pixel_area) + for crf_file in crf_files: + with datamodels.open(crf_file) as crf_model: + blot_wcs = crf_model.meta.wcs + blot_shape = crf_model.data.shape + + pixflux_area = crf_model.meta.photometry.pixelarea_steradians + blot_wcs.array_shape = blot_shape + pixel_area = compute_image_pixel_area(blot_wcs) + pix_ratio = np.sqrt(pixflux_area / pixel_area) - for single_file in single_files: - with datamodels.open(single_file) as single_model: blotted = gwcs_blot( - median_data=single_model.data.astype(np.float32), - median_wcs=single_model.meta.wcs, + median_data=mosaic_data, + median_wcs=mosaic_wcs, blot_shape=blot_shape, blot_wcs=blot_wcs, pix_ratio=pix_ratio, fillval=self.blot_fillval, ) - out_name = single_file.replace("_i2d_single.fits", "_blot_det.fits") - blot_model = datamodels.ImageModel(data=blotted) - blot_model.update(ref_model) - blot_model.meta.wcs = copy.deepcopy(blot_wcs) - save_file(blot_model, out_name=out_name, dr_version=self.dr_version) - blot_model.close() - - log.info( - " %s -> %s", - os.path.basename(single_file), - os.path.basename(out_name), - ) + out_name = crf_file.replace("_crf.fits", "_i2d_blot.fits") + blot_model = datamodels.ImageModel(data=blotted) + blot_model.update(crf_model) + blot_model.meta.wcs = copy.deepcopy(blot_wcs) + save_file(blot_model, out_name=out_name, dr_version=self.dr_version) + blot_model.close() + + log.info( + " mosaic -> %s", + os.path.basename(out_name), + ) gc.collect()