EXTRACTION DEPUIS UN CATALOGUE

Table des matières

1 Origine du document

1.1 Informations sur ce document

1.1.1 Auteurs

Rocio Kiman, Lia Corrales, Zé Vinícius, Kelle Cruz, Stephanie T. Douglas

1.1.2 Intentions

  • Emploi d'astroquery pour charger des données depuis Vizir.
  • Apprentissage rapide de quelques fonctions.
  • Génération de quelques graphiques.

1.2 Initialisation

import numpy as np
import matplotlib.pyplot as plt
from astropy.modeling import models, fitting
from astroquery.vizier import Vizier
import scipy.optimize

WARNING: WrongDBMModuleWarning: Existing astropy cache is in an unsupported format, either install the appropriate package or use astropy.utils.data.clear_download_cache() to delete the whole cache; db type is dbm.gnu, but the module is not available [astropy.utils.data]

2 S'adapter à un modèle linéaire : trois étapes pour adapter les données en utilisant astropy.modelling

Objectif : montrer comment adapter une représentation linéaire à des données réelles (voir the paper Bhardwaj et al. 2017). Il s'agit d'un catalogue de Cépéides de type II, (variables dont la période varie de 1 à 50 jours). Les Céphéides ont une relation entre la période et la luminosité : plus la période est logue et plus l'étoile est lumineuse.

2.1 Importation des données

Importation des données depuis un catalogue de la base Vizier, en utilisant la bibliothèque astroquery.

catalog = Vizier.get_catalogs('J/A+A/605/A100')

Dans ce catalogue, seuls les champs 'Period' et __Ksmag__ sont considérés. Le champ 'e__Ksmag__' correspond à l'incertitude dans la mesure de la magnitude.

period = np.array(catalog[0]['Period'])
log_period = np.log10(period)
k_mag = np.array(catalog[0]['__Ksmag_'])
k_mag_err = np.array(catalog[0]['e__Ksmag_'])

Générons un graphique à partir de ces données, en faisant intervenir l'incertitude de mesure.

import matplotlib.pyplot as plt
plt.errorbar(log_period, k_mag, k_mag_err, fmt='k.')
plt.xlabel(r'$\log_{10}$(Period [days])')
plt.ylabel('Ks')
plt.savefig('uu1.png')
'uu1.png'

uu1.png

Il semble y avoir une relation linéaire entre log period et la magnitude. Pour le prouver, nous allons tenter un fit to the data. C'est là que astropy.modeling est utile. Nous allons essayer de comprendre comment trois lignes de code peuent toute sorte de "fit" à la demande. Mais, auparavant, essayons de comprendre ce que sont un modèle et un "fitter".

2.2 Les modèles d'astropy

Models in Astropy are known parametrized functions. With this format they are easy to define and to use, given that we do not need to write the function expression every time we want to use a model, just the name. They can be linear or non-linear in the variables. Some examples of models are:

  • Gaussian1D
  • Trapezoid1D
  • Polynomial1D
  • Sine1D
  • Linear1D
  • et la liste continue…

2.3 Les "Fitter" d'astropy

Fitters in Astropy are the classes resposable for making the fit (réaliser la correspondance). They can be linear or non-linear in the parameters (no the variable, like models). Some examples are:

  • LevMarLSQFitter() Levenberg-Marquardt algorithm and least squares statistic.
  • LinearLSQFitter() A class performing a linear least square fitting.
  • SLSQPLSQFitter() SLSQP optimization algorithm and least squares statistic.
  • SimplexLSQFitter() Simplex algorithm and least squares statistic.
  • Plus de détails ici.

Et maintenant, allons de l'avant.

2.3.1 Étape 1 : choix d'un modèle

Quel modèle choisir en premier en fonction de nos données ? À première vue, d'après le graphique, on pouvait penser à une relation linéaire.

model = models.Linear1D()

2.3.2 Étape 2 : choix d'un "fitter"

En fait celui-ci servira à "accorder" les données et le modèle choisi. (Des compléments à lire ici et ici.

fitter = fitting.LinearLSQFitter()

2.3.3 Étape 3 : associer avec les données.

Finally, we give to our fitter (method to fit the data) the model and the data to perform the fit. Note that we are including weights: This means that values with higher error will have smaller weight (less importance) in the fit, and the contrary for data with smaller errors. This way of fitting is called Weighted Linear Least Squares and you can find more information about it here or here.

Ce qui doit signifier que l'on pondère les valeurs en fonction de l'incertitude de la mesure.

Il n'y a plus qu'à évaluer l'accord à notre axe x particulier en faisant un best fitx().

best_fit = fitter(model, log_period, k_mag, weights=1.0/k_mag_err**2)
print(best_fit)
Model: Linear1D
Inputs: ('x',)
Outputs: ('y',)
Model set size: 1
Parameters:
           slope            intercept     
    ------------------- ------------------
    -2.0981402472526414 13.418358848810097

C'est fait !

import matplotlib.pyplot as zz
zz.errorbar(log_period,k_mag,k_mag_err,fmt='k.')
zz.plot(log_period, best_fit(log_period), color='g', linewidth=3)
zz.xlabel(r'$\log_{10}$(Period [days])')
zz.ylabel('Ks')
zz.savefig("uu2.png")
"uu2.png"

uu2.png

2.4 Résumé

Se souvenir que l'on peut accorder les données avec un modèle avec trois lignes de code.

  1. Choisir un modèle.
  2. Choisir un fitter
  3. Associer les deux avec les données pour réaliser l'accord.

Auteur: Leraut Alain

Created: 2020-04-23 jeu. 09:16

Validate