Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

R2 update photutils #1934

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ number of the code change for that issue. These PRs can be viewed at:
==================

- Added new header keywords and match requirements for relative fitting. [#1860]

- Further changes/tuning to improve the alignment results after deprecated Photutils
functionality was upgraded. [#nnnn]


3.9.0 (16-Dec-2024)
Expand Down
27 changes: 12 additions & 15 deletions drizzlepac/haputils/astrometric_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
sigma_clipped_stats, SigmaClip)
from astropy.visualization import SqrtStretch
from astropy.visualization.mpl_normalize import ImageNormalize
from astropy.modeling.fitting import LevMarLSQFitter
from astropy.modeling.fitting import LMLSQFitter
from astropy.time import Time
from astropy.utils.decorators import deprecated

Expand Down Expand Up @@ -833,10 +833,12 @@
kernel_fwhm = fwhm
kernel = build_gaussian_kernel(fwhm, npixels=source_box)

log.info(f"Finished build_auto_kernel")

return (kernel, kernel_psf), kernel_fwhm


def find_fwhm(psf, default_fwhm):
def find_fwhm(psf, default_fwhm, log_level=logutil.logging.INFO):
"""Determine FWHM for auto-kernel PSF

This function iteratively fits a Gaussian model to the extracted PSF
Expand All @@ -858,43 +860,38 @@
Value of the computed Gaussian FWHM for the PSF

"""
fwhm = 0.0

# Default 1.0 * default_fwhm (default_fwhm is detector-dependent)
aperture_radius = 1.5 * default_fwhm
source_group = SourceGrouper(min_separation=8)
mmm_bkg = MMMBackground()
# LocalBackground: Inner and outer radius of circular annulus in pixels
base = int(math.ceil(aperture_radius))
local_bkg = LocalBackground(base + 1, base + 3, mmm_bkg)
iraffind = DAOStarFinder(threshold=2.5 * mmm_bkg(psf), fwhm=default_fwhm)
fitter = LevMarLSQFitter()
# LevMarLSQFitter is in disfavor and will be deprecated
fitter = LMLSQFitter()
sigma_psf = gaussian_fwhm_to_sigma * default_fwhm
gaussian_prf = IntegratedGaussianPRF(sigma=sigma_psf)
gaussian_prf.sigma.fixed = False
try:
itr_phot_obj = IterativePSFPhotometry(finder=iraffind,
grouper=source_group,
localbkg_estimator=local_bkg,
psf_model=gaussian_prf,
aperture_radius=aperture_radius,
fitter=fitter,
fit_shape=(11, 11),
maxiters=2)

phot_results = itr_phot_obj(psf)
except Exception:
log.error("The find_fwhm() failed due to problem with fitting.")
except Exception as x_cept:
log.warn(f"The find_fwhm() failed due to problem with fitting. Trying again. Exception: {x_cept}")
return None

# Check the phot_results table was generated successfully
if isinstance(phot_results, (type(None))):
log.warn("The PHOT_RESULTS table was not generated successfully. Trying again.")
return None

# Check the table actually has rows
if len(phot_results['flux_fit']) == 0:
return None

# Check the 'flags' column has at least one row with a flag value of zero
if (phot_results['flags'] == 0).sum() == 0:
log.warn("The PHOT_RESULTS table has no rows. Trying again.")

Check warning on line 894 in drizzlepac/haputils/astrometric_utils.py

View check run for this annotation

Codecov / codecov/patch

drizzlepac/haputils/astrometric_utils.py#L894

Added line #L894 was not covered by tests
return None

# Insure none of the fluxes determined by photutils is np.nan
Expand Down
10 changes: 3 additions & 7 deletions drizzlepac/haputils/product.py
Original file line number Diff line number Diff line change
Expand Up @@ -495,21 +495,17 @@ def align_to_gaia(
headerlet_filenames=headerlet_filenames, fit_label=fit_label
)
else:
log.warning("No satisfactory fit found for any catalog.")
log.warning("No satisfactory fit found for any catalog. No correction to absolute astrometric frame applied.\n")
raise ValueError

except Exception:
# Report a problem with the alignment
if fit_label.upper().strip() == "SVM":
log.warning(
"EXCEPTION encountered in align_to_gaia for the FilteredProduct.\n"
)
"EXCEPTION encountered in align_to_gaia for the FilterProduct. Proceeding with previous best solution.\n")
else:
log.warning(
"EXCEPTION encountered in align_to_gaia for the SkyCellProduct.\n"
)
log.warning("No correction to absolute astrometric frame applied.\n")
log.warning("Proceeding with previous best solution.\n")
"EXCEPTION encountered in align_to_gaia for the SkyCellProduct. Proceeding with previous best solution.\n")

# Only write out the traceback if in "debug" mode since not being able to
# align the data to an absolute astrometric frame is not actually a failure.
Expand Down
Loading