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

Aus Wiki Physik und ihre Didaktik
1>Treinsch
Die Seite wurde neu angelegt: „Kategorie:Astronomie <div class="row"> <div class="large-12 columns> In Arbeit. __INHALTSVERZEICHNIS__ </div> <div class="large-0 columns> </div> </div> {| https://i.creativecommons.org/l/by-nc-sa/3.0/de/88x31.png Universität Stuttgart, 5. Physikalisches Institut, AG Physik und ihre Didaktik, lizenziert unter [https://creativecommons.org/licenses/by-nc-sa/4.0/deed.de CC BY-NC-SA 4.0] |}“
 
1>Treinsch
Keine Bearbeitungszusammenfassung
Zeile 11: Zeile 11:
   </div>
   </div>
</div>
</div>
= Codebeispiel =
<syntaxhighlight lang=python>
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)
</syntaxhighlight>





Version vom 1. September 2022, 13:58 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