Modul 1 » Auswahl der Sterne von M4 mit Python

Jetzt wollen wir aus diesem Katalog katalog_um_M4.tsv die Sterne auswählen, die tatsächlich zu M4 gehören. Dazu schauen wir uns zunächst die Eigenbewegungen an, mit einem matplotlib-Diagramm. Wie wir die Daten einlesen können, ist dir ja schon aus der Einleitung bekannt. Kopiere folgenden Skript in eine Datei pm_plot.py

import numpy as np
import matplotlib.pyplot as plt

# Wir laden den Katalog so wie in der Einleitung gezeigt:
katalog = np.genfromtxt("katalog_um_M4.tsv", delimiter="\t", names=True)

# Und erstellen ein Diagram mit Matplotlib, folgendes wird gleich besprochen.
plt.plot(katalog["pmra"], katalog["pmdec"],
    marker=".", markersize=1, linestyle="None")

plt.title("Gaia-Eigenbewegungen im Himmelsauschnitt um M4")
plt.xlabel("Eigenbewegung in RA [welche Einheit?]")
plt.ylabel("Eigenbewegung in Dec [welche Einheit?]")

plt.show()

Wie du bemerkst, haben wir in dem Befehl plt.plot einige neue optionale Parameter angegeben. Die ersten zwei Argumente des Befehls sind wie immer die Arrays mit den Werten, die als Koordinaten in dem Diagram verwendet werden sollen. Das sind katalog["pmra"] für die x-Achse, und katalog["pmdec"] für die y-Achse. Dann folgen optionale Parameter, die das Erscheinungsbild des Diagrams etwas besser steuern, als das was wir in der Einleitung gezeigt haben. Die Option marker="." bestimmt, das jede Zeile (also jeder Stern) mit einem Punkt dargestellt werden soll. Die Option markersize=1 erlaubt es, die Größe dieser Punkte zu steuern, und die Option linestyle="None" gibt an, dass wir in unserem Diagram keine Linien zwischen den Punkten haben wollen. Vielleicht ist dir aufgefallen, dass diese letzten optionalen Parameter in einer weiteren Zeile stehen, unter dem Beginn von plt.plot. Es ist tatsächlich in Python erlaubt, eine lange Zeile mit Parametern jeweils hinter einem Komma auf diese Weise zu unterbrechen, damit der Skript schön übersichtlich bleibt.

Führe den Skript jetzt aus, und zoome dann in den Bereich der Häufungen ein. Kannst du mehrere Häufungen der Eigenbewegungen erkennen? Es ist plausibel, dass eine der beiden Eigenbewegungshäufungen die Sterne von M4 enthält, da diese ja alle eine sehr ähnliche Eigenbewegung haben müssen.

Die zwei Eigenbewegungshäufungen mit Matplotlib

Wenn du die Farbe auch bestimmen möchtest, kannst du zusätzlich noch ein color="red" in die optionalen Parameter von plt.plot einfügen. Pass dabei auf, nicht das Komma zu vergessen, dass die Parameter trennen muss!

Um herauszufinden, welche der beiden Eigenbewegungshäufungen die Sterne von M4 enthält, wollen wir uns die Verteilung dieser Sterne am Himmel ansehen, also praktsich eine "Himmelskarte" zeichnen. Wir wählen also aus dem Katalog die Zeilen aus, die zu einer der Eigenbewegungshäufungen passen, und plotten dann nur mit diesen Zeilen ein anderes Diagram, diesmal mit den Himmelskoordinaten der Spalten "ra" und "dec".

Um das zu machen, erstelle eine neue Skript-Datei pm_haufen_auswahl.py, und kopiere in diese den Inhalt von pm_plot.py, als Grundlage. Das einzig wirklich neue, was wir nun in unserem neuen Skript pm_haufen_auswahl.py einbauen müssen, ist diese Auswahl der Sterne. Diese müssen wir zwischen dem Einlesen der Daten (np.genfromtxt) und vor dem plt.plot durchführen. Füge nun an diese Stelle diese zwei Zeilen ein:

pmra_min = -5 # Der Wert ist nur ein Beispiel
katalog = np.extract(katalog["pmra"] > pmra_min , katalog)

In der zweiten Zeile passiert das interessante. Wir nutzen die Funktion np.extract um aus unserem Katalog die Zeilen auszuschneiden, die eine bestimmte Bedingung erfüllen. Die Funktion np.extract hat zwei Argumente: das erste ist die Bedingung (in diesem Fall katalog["pmra"] > pmra_min), gefolgt von dem Array, aus dem der Ausschnitt genommen werden soll (in diesem Fall ganz einfach katalog). Das Ergebnis der Funktion np.extract sind diese ausgeschnittenen Zeilen die die angegebene Bedingung erfüllen, und wir nennen diese hier einfach wieder katalog. Deswegen fängt die Zeile mit "katalog =" an. Somit hat diese Zeile den Inhalt der Variable katalog tatsächlich verändert.

Führe nun den Skript nochmal aus, mit diesen 2 Zeilen. Du solltest sofort sehen können, das dieses Prinzip klappt, und sich der Katalog tatsächlich verändert hat.

Mache nun folgendes:

  1. Führe nochmal den Skript pm_plot.py aus, um die Häufungen der Eigenbewegungen zu sehen.
  2. Such dir eine der zwei Häufungen aus.
  3. Betrachte die ausgewählte Häufung, und wähle zwei "Schranken" (also ein Minimalwert und ein Maximalwert) in pmra und zwei in pmdec, mit denen du die Häufung ausschneiden kannst.
  4. Schreibe diese 4 ausgewählten Werte in den Skript pm_auswahl.py, als pmra_min, pmra_max, pmdec_min, und pmdec_max.
  5. Nutze nun mehrmals die Funktion np.extract, wie im Beispiel gezeigt, um diese 4 "Schnitte" durchzuführen. Danach kannst du den Skript auch nochmal ausführen, um Anhand des Eigenbewegungs-Diagrams zu überprüfen, ob deine Schnitte geklappt haben.
  6. Ändere nun die Erstellung des Diagrams in pm_auswahl.py, indem du in plt.plot statt katalog["pmra"] und katalog["pmdec"] die Himmelskoordinaten der Sterne katalog["ra"] und katalog["dec"] angibst. Wir wollen damit sehen, wie sich die ausgewählten Sterne am Himmel verteilen.
  7. Passe den Titel und die Beschreibung der Achsen und Einheiten an.

Führe pm_auswahl.py nun aus, und betrachte die Verteilung der ausgewählten Sterne am Himmel. Entspricht deine Auswahl eher den Sternen eines Kugelsternhaufens, oder den sogenannten "Feldsternen" der Milchstraße, die zwar in diesem Feld zu sehen sind, aber nichts mit dem Kugelsternhaufen zu tun haben? Um sicher zu sein, erstelle das Diagramm nochmal, und wähle diesmal die andere Eigenbewegungshäufung aus. Behalte dabei die bisherigen pmra_min, pmra_max, pmdec_min, und pmdec_max als Kommentar (also mit #), und ersetze einfach nur diese 4 Zeilen. Der Vergleich dieser Diagramme sollte nun eine eindeutige Antwort liefern.

Zu guter Letzt wollen wir Kataloge mit den auserwählten Sternen von M4 und den Feldsternen in zwei Dateien abspeichern, damit wir diese in den nächsten Schritten leicht nutzen können, ohne diese ganze Auswahl immer wiederholen zu müssen. Das können wir mit folgender numpy-Funktion machen:

np.savetxt("dateiname.tsv", katalog, delimiter='\t', header='\t'.join(katalog.dtype.names))

Eine Datei, die auf diese Weise geschrieben wird, kann dann in späteren Skripten mit np.genfromtxt wieder eingelesen werden, genau so wie wir es bisher gemacht haben. Die etwas kompliziert aussehende Option header=... sorgt dafür, dass die Namen der Spalten in die erste Zeile der Datei geschrieben werden.

Füge also diese Zeile in pm_auswahl.py ein, am besten bevor das Diagram erstellt wird (aber natürlich nach der Auswahl). Nutze diesen Skript nun einmal mit jeder Eigenbewegungshäufung und speichere so die 2 Kataloge "katalog_M4.tsv" und "katalog_feldsterne_um_M4.tsv" (du musst also den Dateinamen in der Funktion np.savetxt() durch diese ersetzen).

Alternativ kannst du auch den Skript pm_auswahl.py duplizieren, einmal als pm_auswahl_M4.py und einmal als pm_auswahl_feldsterne_um_M4.py, damit diese 2 Skripte ohne weitere Änderungen direkt die richtigen Kataloge mit den richtigen Dateinamen abspeichern.


Letzte Aktualisierung: 2022-01-13 10:19