I need to calculate the FWHM of all the stars detected via the DaoStarFinder package/any other package by performing PSF fitting in Python. Here is the code for my detection.

hdulist = fits.open('F:/TRGB project/2214868p/ccd39.fits')
data = hdulist[0].data

# Load the WCS information from the FITS header
image_wcs = WCS(hdulist[0].header)

pixelscale = np.mean(wcs.utils.proj_plane_pixel_scales(image_wcs) * u.degree).to('arcsec')

# Find the sources using DaoFinder

from photutils import DAOStarFinder
from astropy.stats import sigma_clipped_stats

mean, median, std = sigma_clipped_stats(data, sigma=3.0, maxiters=5)    
fwhm=1.5 / float(pixelscale/u.arcsec)
sigma_detection = 5.0
daofind = DAOStarFinder(fwhm=fwhm, threshold=sigma_detection*std)    
sources = daofind(hdulist[0].data - median) 

Now I need to calculate the FWHM of the stars, take their average, and then use this value as a parameter in SExtractor to distinguish between stars and galaxies. How do I calculate the FWHM of the stars by using PSF fitting method? Here is what I tried by selecting a particular star.

# Median bkg subtracted image
bkg_subtracted_image = data - median

flux_counts = []
pixel_distance = []

x_cen = int(source['x'])
y_cen = int(source['y'])

# Pixels around detection loop
analysis_radius = 50
for x in range(x_cen - analysis_radius, x_cen + analysis_radius):
    for y in range(y_cen - analysis_radius, y_cen + analysis_radius):
        flux_counts.append(((bkg_subtracted_image[y][x]) / source['peak']))
        pixel_distance.append(np.linalg.norm((source['x'] - x, source['y'] - y)))

from astropy.modeling import models, fitting

model = 'moffat'

if model == 'gaussian':
    # Fit the data using a Gaussian
    fwhm_best_guess = 1.5
    model_init = models.Gaussian1D(amplitude=1.0, mean=0, stddev=fwhm_best_guess)
elif model == 'moffat':
    # Fit the data using a Moffat
    model_init = models.Moffat1D(amplitude=1.0, x_0=0, gamma=2., alpha=3.5)
    raise Exception("Unknown model type: %s. Must be gaussian or moffat." % model)

fitter = fitting.SimplexLSQFitter()
fitted_model = fitter(model_init, pixel_distance, flux_counts)

# FHWM conversion
if model == 'gaussian':
    iFWHM = 2.355 * fitted_model.stddev * pixelscale.value
elif model == 'moffat':
    iFWHM = fitted_model.gamma * 2 * np.sqrt(2 ** (1. / fitted_model.alpha) - 1) * pixelscale.value
    raise Exception("Unknown model type: %s. Must be gaussian or moffat." % model)

print ("FWHM estimated: ", iFWHM)

I also need to display the PSF-fitted star.



You must log in to answer this question.

Browse other questions tagged .