Aktionen

PF

Sterne eines Sternhaufens automatisch zählen: Unterschied zwischen den Versionen

Aus Physik und ihre Didaktik Wiki

Zeile 44: Zeile 44:
     std = bkgrms(image)
     std = bkgrms(image)
# Bei kleineren Bildausschnitten ist eine kleinere Standardabweichung über Rauschen nötig, da bei größeren Bildern mehr Nicht-Stern-Hintergrund sichtbar ist
# Bei kleineren Bildausschnitten ist eine kleinere Standardabweichung über Rauschen nötig, da bei größeren Bildern mehr Nicht-Stern-Hintergrund sichtbar ist
iraffind = IRAFStarFinder(threshold=2.2*std,
    iraffind = IRAFStarFinder(threshold=2.2*std, fwhm=sigma_psf * gaussian_sigma_to_fwhm, minsep_fwhm=0.01, roundhi=5.0, roundlo=-5.0, sharplo=0.0, sharphi=2.0)
    fwhm=sigma_psf *
    daogroup = DAOGroup(2.0 * sigma_psf *gaussian_sigma_to_fwhm)
,→ gaussian_sigma_to_fwhm,
    mmm_bkg = MMMBackground()
minsep_fwhm=0.01,
    fitter = LevMarLSQFitter()
roundhi=5.0, roundlo=-5.0,
    psf_model = IntegratedGaussianPRF(sigma=sigma_psf)
sharplo=0.0, sharphi=2.0)
    # Für B- oder V-Bilder benutze bereits existierende Sternpositionen aus Clear
daogroup = DAOGroup(2.0 * sigma_psf *
    if fixedStars:
,→ gaussian_sigma_to_fwhm)
        psf_model.x_0.fixed = True
mmm_bkg = MMMBackground()
        psf_model.y_0.fixed = True
fitter = LevMarLSQFitter()
        photometry = BasicPSFPhotometry(group_maker=daogroup,
psf_model = IntegratedGaussianPRF(sigma=sigma_psf)
        bkg_estimator=mmm_bkg,
# Für B- oder V-Bilder benutze bereits existierende
        psf_model=psf_model,
,→ Sternpositionen aus Clear
        fitter=LevMarLSQFitter(),fitshape=(7, 7))
if fixedStars:
    # Finde die Sternpositionen im Clear-Fall
psf_model.x_0.fixed = True
    else:
psf_model.y_0.fixed = True
        photometry = IterativelySubtractedPSFPhotometry(finder=iraffind, group_maker=daogroup, bkg_estimator=mmm_bkg, psf_model=psf_model,fitter=LevMarLSQFitter(), niters=1, fitshape=(7, 7))
photometry = BasicPSFPhotometry(group_maker=daogroup,
    if fixedStars:
bkg_estimator=mmm_bkg,
        return image, photometry(image=image, init_guesses=pos)
psf_model=psf_model,
    else:
fitter=LevMarLSQFitter(),
        return image, photometry(image=image)
fitshape=(7, 7))
# Finde die Sternpositionen im Clear-Fall
else:
photometry =
,→ IterativelySubtractedPSFPhotometry(finder=iraffind,
group_maker=daogroup,
bkg_estimator=mmm_bkg,
psf_model=psf_model,
fitter=LevMarLSQFitter(),
niters=1,
fitshape=(7, 7))
if fixedStars:
return image, photometry(image=image, init_guesses=pos)
else:
return image, photometry(image=image)
# Bilder laden und Ergebnisse speichern
# Bilder laden und Ergebnisse speichern
img1, res1 = photometry('30_06/M13/clear_final.fit', False)
img1, res1 = photometry('30_06/M13/clear_final.fit', False)
res1.write('clear.csv', format='csv', overwrite=True)
res1.write('clear.csv', format='csv', overwrite=True)
img2, res2 = photometry('30_06/M13/b_final.fit', True)
img2, res2 = photometry('30_06/M13/b_final.fit', True)
res2.write('b.csv', format='csv', overwrite=True)
res2.write('b.csv', format='csv', overwrite=True)
img3, res3 = photometry('30_06/M13/v_final.fit', True)
img3, res3 = photometry('30_06/M13/v_final.fit', True)
res3.write('v.csv', format='csv', overwrite=True)
res3.write('v.csv', format='csv', overwrite=True)

Version vom 1. September 2022, 14:08 Uhr


In Arbeit.


Codebeispiel

from astropy.io import fits
from astropy.table import Table
from photutils.detection import IRAFStarFinder
from photutils.psf import IntegratedGaussianPRF, DAOGroup
from photutils.background import MMMBackground,MADStdBackgroundRMS
from astropy.modeling.fitting import LevMarLSQFitter
from astropy.stats import gaussian_sigma_to_fwhm
from photutils.psf import IterativelySubtractedPSFPhotometry
from photutils.psf import BasicPSFPhotometry
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import const # Lädt die Konstanten XMIN, XMAX, YMIN, YMAX
,(relevanter Bildausschnitt)
def photometry(file, fixedStars):
    image = fits.open(file)[0].data[const.YMIN:const.YMAX,const.XMIN:const.XMAX]

# Auslesen der Clear-Sterndaten für B- und V-Bilder
    if fixedStars:
        clear = pd.read_csv("clear.csv")
        clear = clear[clear['x_fit'] < const.XMAX - const.XMIN]
        clear = clear[clear['y_fit'] < const.YMAX - const.YMIN]
        clear = clear[clear['x_fit'] >= 0]
        clear = clear[clear['y_fit'] >= 0]
    
        pos = Table(names=['x_0', 'y_0'], data=[clear['x_fit'],clear['y_fit']])
    sigma_psf = 2.0
    bkgrms = MADStdBackgroundRMS()
    std = bkgrms(image)
# Bei kleineren Bildausschnitten ist eine kleinere Standardabweichung über Rauschen nötig, da bei größeren Bildern mehr Nicht-Stern-Hintergrund sichtbar ist
    iraffind = IRAFStarFinder(threshold=2.2*std, fwhm=sigma_psf * gaussian_sigma_to_fwhm, minsep_fwhm=0.01, roundhi=5.0, roundlo=-5.0, sharplo=0.0, sharphi=2.0)
    daogroup = DAOGroup(2.0 * sigma_psf *gaussian_sigma_to_fwhm)
    mmm_bkg = MMMBackground()
    fitter = LevMarLSQFitter()
    psf_model = IntegratedGaussianPRF(sigma=sigma_psf)
    # Für B- oder V-Bilder benutze bereits existierende Sternpositionen aus Clear
    if fixedStars:
        psf_model.x_0.fixed = True
        psf_model.y_0.fixed = True
        photometry = BasicPSFPhotometry(group_maker=daogroup,
        bkg_estimator=mmm_bkg,
        psf_model=psf_model,
        fitter=LevMarLSQFitter(),fitshape=(7, 7))
    # Finde die Sternpositionen im Clear-Fall
    else:
        photometry = IterativelySubtractedPSFPhotometry(finder=iraffind, group_maker=daogroup, bkg_estimator=mmm_bkg, psf_model=psf_model,fitter=LevMarLSQFitter(), niters=1, fitshape=(7, 7))
    if fixedStars:
        return image, photometry(image=image, init_guesses=pos)
    else:
        return image, photometry(image=image)
# Bilder laden und Ergebnisse speichern
img1, res1 = photometry('30_06/M13/clear_final.fit', False)
res1.write('clear.csv', format='csv', overwrite=True)

img2, res2 = photometry('30_06/M13/b_final.fit', True)
res2.write('b.csv', format='csv', overwrite=True)

img3, res3 = photometry('30_06/M13/v_final.fit', True)
res3.write('v.csv', format='csv', overwrite=True)


88x31.png Universität Stuttgart, 5. Physikalisches Institut, AG Physik und ihre Didaktik, lizenziert unter CC BY-NC-SA 4.0