Python pour l’astronomie et la spectroscopie : Analyse rapide d’un spectre

Posted on
Keyboard - Programming screen

Cet article expose une introduction sur l’utilisation du langage Python pour l’astronomie et la spectroscopie, en vue d’effectuer l’analyse rapide d’un spectre de l’étoile gam Cas.

Afin de pouvoir utiliser Python pour afficher un spectre d’étoile généré par ISIS 1, Demetra 2, VSpec 3, (…), il est nécessaire de connaître quelques bases de la programmation. Je ne détaillerai pas dans cet article les rudiments du développement logiciel afin de se concentrer uniquement sur une utilisation du langage orienté vers l’astronomie, en restant sur une introduction et une présentation des outils, à partir de leurs documentations officielles. Toutefois, il existe de nombreuses ressources qui vous permettront de démarrer et d’intégrer les bases de la programmation, en Python. Des ouvrages, liens et vidéos sont listés à la fin de cet article en tant que ressources.

Cet article présente ainsi différentes librairies qui permettent de récupérer des informations sur l’objet de l’étude, consulter des catalogues officiels, et visualiser les données spectroscopiques en vue d’en faire une analyse simple.

Les sources du code et le jeu de données utilisé sont disponibles via les liens présents à la fin de l’article.


Au programme

Coordonnées de gam CasPortrait visuelVisualisation des imagesSpectre de gamCasAffichage multispectresRessources


Pour reprendre et exécuter le code tel que présenté ici, il est recommandé d’utiliser un « Jupyter Notebook » 4. Ces calepins numériques permettent ainsi de bénéficier d’un environnement d’exécution dans plusieurs langages, y compris Python. Leur force est de pouvoir à la fois exécuter du code et présenter du texte, dit en markdown 5, le tout dans un style agréable et léger. Ils sont très utilisés en astronomie et en Data Science.

Il existe plusieurs plateformes en lignes qui proposent d’en éxécuter sans installer tout l’environnement nécessaire sur votre machine :

Colab
Plateforme basée sur Jupyter Notebook de Google. Gratuit, nécessite uniquement un compte Google.


Cocalc
Permets de créer des Notebooks sans s’enregistrer

Binder
Permets d’exécuter des Notebook disponible sur Github ou Gitlab. Le code présenté sur cette page est disponible en téléchargement à la fin de cet article. Il est ainsi possible de l’exécuter dans Binder en le collant cette adresse.

Toutefois, pour une utilisation courante et avancée il est préférable d’installer Python sur sa machine, avec la suite Anaconda par exemple, qui permet de disposer de Python et d’instancier des Jupyter Notebooks. La suite logicielle est disponible ici : https://www.anaconda.com/products/individual

Portrait de gamma Cassiopeiae

Pour démarrer, il peut être intéressant de rechercher les informations concernant notre cible notamment sa position. Une des librairies la plus utilisée et dédiée à l’astronomie est Astropy. Cette librairie, au-delà de l’utilisation sommaire qui est faite ici, comporte de nombreux modules internes très poussés. C’est un projet open source avec de nombreuses contributions régulières qui a démarré en 2011 et qui est très utilisé dans le monde professionnel.6, 7

Si certaines librairies ne sont pas installées sur votre machine, ou dans votre environnement virtuel (plus d’infos sur les environnements virtuels ici), installez les au début de votre notebook, en précédent la commande avec un point d’exclamation ou dans un terminal, avec pip comme dans l’exemple ci-dessous :

pip install astropy

Sans plus attendre, lançons un Jupyter Notebook, et allons-y !

Par ailleurs, il est également possible d’interroger les différents catalogues avec la librairie Astroquery, comme dans l’exemple ci-dessous avec avec une requête vers SIMBAD8, qu’il s’agisse d’un objet du ciel ou d’une région entière. La liste des modules catalogues est disponible ici : https://astroquery.readthedocs.io/en/latest/

De plus, l’ajout du champ « sptype » dans la requête VOTable permet également de récupérer le type spectral de l’étoile. La liste des critères possibles est disponible ici.

Pour rajouter un côté un peu plus visuel et visualiser notre cible sous différentes couleurs ou gammes spectrales, il existe même un Widget Aladin. Attention, cela nécessite d »activer les widgetsnbextension de notre notebook. L’activation de ce widget est détaillé sur le github à cette adresse : https://github.com/cds-astro/ipyaladin

Voici le rendu et le code associé.

Rendu du widget Aladin pour Jupyter Notebook
Rendu du widget Aladin pour Jupyter Notebook

Il existe d’autres modules de visualisation tout aussi intéressants, mais pour ne pas rallonger cet article, voici les liens officiels :

PyESASky : https://www.cosmos.esa.int/web/esdc/pyesasky
PyWWT : https://pywwt.readthedocs.io/en/stable/installation.html


Portrait visuel – Visualiser ses images

Après avoir récupéré les coordonnées de notre cible, nous pouvons afficher une image prise lors d’une session d’astrophotographie précédemment, toujours avec la librairie Astropy9, mais également Matplotlib10, 11.

Ce bloc de métadonnées, le header, ainsi que le second bloc contenant la matrice de l’image en elle-même va nous permettre de visualiser l’image en faisant varier plusieurs paramètres si nécessaire.


Positionnement céleste – Astrométrie sur l’image acquise

Lors du traitement de l’image avec le logiciel Siril 12, une résolution astrométrique a été faite et le résultat a été ajouté au header de l’image fit. Il est possible de projeter ces coordonnées sur notre affichage ((ax = plt.subplot(projection=wcs_for_plot)) avec Matplotlib après l’instanciation d’un objet WCS du module du même nom provenant d’Astropy 13. Il est également possible de dessiner les contours des objets, selon les différents niveaux détectés dans la matrice.

Parfois, il peut arriver que notre image ne contienne pas les informations d’astrométrie dans son en-tête. L’utilisation du service en ligne astrometry.net peut alors s’avérer utile. Les deux méthodes sont décrites ci-dessous.


Spectroscopie

Après avoir fait un tour de la libraire Astropy pour afficher les informations des nos images, nous pouvons l’utiliser, via son module SpecUtils, pour afficher des spectres réalisés avec un Alpy600.

À noter que la partie de réduction du spectre 2D vers 1D n’est pas évoquée ici. Il est considéré que ce traitement est effectué avec les logiciels courants (i.e. ISIS1, Demetra2, VSpec3, SpcAudace14, etc.).

Il est bien entendu possible d’afficher notre spectre réduit en utilisant uniquement la librairie Matplotlib, en exposant les valeurs sur un graphique classique, vous trouverez un exemple ici sur la documentation de Matplotlib : https://matplotlib.org/3.1.0/gallery/lines_bars_and_markers/spectrum_demo.html.

SpecUtils

Toutefois, il existe depuis 4 ans une librairie spécialement dédiée à la spectroscopie dans Astropy. Cette librairie se nomme SpecUtils15, voici sa description générale telle qu’affichée sur la documentation :

specutils is a Python package for representing, loading, manipulating, and analyzing astronomical spectroscopic data. The generic data containers and accompanying modules provide a toolbox that the astronomical community can use to build more domain-specific packages. For more details about the underlying principles, see APE13, the guiding document for spectroscopic development in the Astropy Project.

source : https://specutils.readthedocs.io/en/stable/

Ainsi, un certain nombre d’outils de manipulation et d’analyses sont déjà incluts dans le package, évitant de devoir coder nous même toutes ces parties. L’exemple ci-dessous part d’un spectre classique de notre cible pour afficher le spectre et faire une analyse rapide de la raie Halpha.

Après cette visualisation, les outils présents dans la librairie rendent possible la manipulation du spectre et l’analyse.


Comparaison de spectres

Lorsque l’on fait l’acquisition de plusieurs spectres dans le temps sur une même cible, il est intéressant de les visualiser sur le même graphique pour pouvoir les comparer. Les portions de codes précédents peuvent ainsi être réutilisées. Pour l’exemple ci-après, j’ai doublé les deux fichiers de spectres de gam Cas qui ont été faits le même soir pour que ce soit plus visible.


Librairies complémentaires

Il existe de nombreuses autres librairies très utilisées qui sont complémentaires à cette introduction. Par exemple, il y a des ensembles de modules pour visualiser ou ajouter de l’interactivité aux données exposées dans les graphiques en DataScience. Ces librairies, comme Plotly, Bokeh, Seaborn sont également associées à d’autres modules de manipulation de jeux de données volumineux avec Pandas par exemple.

J’ai déjà évoqué une de ces librairies, à savoir Bokeh ( via cet article ) pour générer des spectres interactifs qu’il est possible d’insérer dans une page web, comme l’exemple ci-dessous, ainsi qu’un générateur de spectre en ligne à partir de cette dernière, à cette adresse : https://specbok.stellartrip.net/

Pour en savoir plus sur son utilisation, vous retrouverez le code sur mon espace Gitlab ici : https://gitlab.com/chronosastro/aspyt , ainsi que la documentation officielle par ici.


Et après ?

Le langage Python, comme tous les langages de programmation, nous offre des possibilités quasiment sans limites sur l’exploitation de nos données et il y a de nombreuses librairies et utilisations à parcourir encore. Cette introduction pose ainsi une base qui sera probablement étoffée dans de futurs articles pour faire évoluer la « boîte à outils » d’astronome avec des modules tout aussi intéressants comme astroquery pour la consultation de catalogue en vue de récupérer des jeux de données, mais aussi reproject, aplpy, (…).

Merci d’avoir pris le temps de lire jusqu’ici ! 🙂

Ressources

Le Jupyter Notebook qui contient tous les codes utilisés dans cet article est disponible à l’adresse suivante :

Ouvrages, Liens, vidéos sur l’apprentissage de Python

Pour les plus pressées ayant des notions de programmation

Pour les plus patients ayant peu de notion de programmation

Sources et informations complémentaires

Sources

Faites comme moi, partagez !