de:praktikum:photometrie_python

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
de:praktikum:photometrie_python [2024/02/25 16:33] – [Isochronen plotten] jmkubatde:praktikum:photometrie_python [2025/04/01 11:16] (aktuell) – [Definieren einiger Variablen] rhainich
Zeile 35: Zeile 35:
 === Überblick verschaffen - Bilder ansehen === === Überblick verschaffen - Bilder ansehen ===
  
-Als erstes steht das Einloggen im [[de:praktikum:zugang| Praktikumspool]] an. Anschließend folgt das Kopieren der Beobachtungsdaten (FITS-Files), inklusive Flatfield- und Bias/Darkframe-Aufnahmen aus dem Verzeichnis ''~/data/<datum>'' ins eigene Verzeichnis ''~/data_reduction/''. Es gibt verschiedene Tools, um die im FITS-Format abgelegten zweidimensionalen CCD-Bilder (Images) zu betrachten. Beispielsweise mittels //ds9//:+Als erstes steht das Einloggen im [[de:praktikum:zugang| Praktikumspool]] an. Anschließend folgt das Kopieren der Beobachtungsdaten (FIT-Files), inklusive Flatfield- und Bias/Darkframe-Aufnahmen aus dem Verzeichnis ''~/data/<datum>'' ins eigene Verzeichnis ''~/data_reduction/''. Es gibt verschiedene Tools, um die im FIT-Format abgelegten zweidimensionalen CCD-Bilder (Images) zu betrachten. Beispielsweise mittels //ds9//:
    ds9 filename.fit     ds9 filename.fit 
 öffnet das Bild ''filename.fit'' mit //ds9//. Nach dem Öffnen einer Aufnahme, kann man durch Bewegen des Cursors bei gedrückter rechter Maustaste die Helligkeit und den Kontrast variieren. Weitere Optionen (Zoom, Falschfarbendarstellungen, Drehen, öffnet das Bild ''filename.fit'' mit //ds9//. Nach dem Öffnen einer Aufnahme, kann man durch Bewegen des Cursors bei gedrückter rechter Maustaste die Helligkeit und den Kontrast variieren. Weitere Optionen (Zoom, Falschfarbendarstellungen, Drehen,
Zeile 61: Zeile 61:
    workon ost_photometry    workon ost_photometry
  
-erfolgen. Dies ist auch nötig wenn man sich, z.B. nach einer Unterbrechung der Arbeit, erneut mit a12 verbindet und die Datenauswertung fortsetzen möchte. +erfolgen. Dies ist auch nötig wenn man sich, z.B. nach einer Unterbrechung der Arbeit, erneut mit columba verbindet und die Datenauswertung fortsetzen möchte. 
  
 Die OST-Photometrie-Pipeline kann anschließend in dem terminal mittels //pip// wie folgt installiert werden kann: Die OST-Photometrie-Pipeline kann anschließend in dem terminal mittels //pip// wie folgt installiert werden kann:
Zeile 72: Zeile 72:
 Um auch mit einer größeren Menge von Daten zurecht zu kommen, gibt es eine //Python//-Routine, die pro Filter die Korrekturen für Darkframe und Flatfield durchführt, anschließend die Bilder pro Filter aufaddiert und zueinander ausrichtet. Die Routine nimmt keine Qualitätskontrolle der Bilder vor, unbrauchbare Beobachtungen müssen also auf jeden Fall vorher aussortiert werden, sonnst kann es zu Problemen bei der Ausrichtung kommen. Um auch mit einer größeren Menge von Daten zurecht zu kommen, gibt es eine //Python//-Routine, die pro Filter die Korrekturen für Darkframe und Flatfield durchführt, anschließend die Bilder pro Filter aufaddiert und zueinander ausrichtet. Die Routine nimmt keine Qualitätskontrolle der Bilder vor, unbrauchbare Beobachtungen müssen also auf jeden Fall vorher aussortiert werden, sonnst kann es zu Problemen bei der Ausrichtung kommen.
  
-Man kopiert sich zunächst das //Python//-Skript ''1_add_images.py'' aus dem Verzeichnis ''~/scripts/n2/'' in sein lokales Arbeitsverzeichnis. Danach sollte man diese mit einem beliebigen Texteditor öffnen, um die Pfadangaben für die Bilder entsprechend anzupassen. Um eine größere Menge von Bildern bequem einlesen und verifizieren zu können, erwartet das Programm eine Trennung der Daten in verschiedene Unterverzeichnisse (Variablen: ''bias'', ''darks'', ''flats'', ''imgs''). Es sollte jeweils ein Verzeichnis für die Aufnahmen des Sternhaufens, der Flatfields und der Darkframes existiere. Eine mögliche Verzeichnisstruktur wäre:+Man kopiert sich zunächst das //Python//-Skript ''1_add_images.py'' aus dem Verzeichnis ''~/scripts/n2/'' in sein lokales Arbeitsverzeichnis. Danach sollte man diese mit einem beliebigen Texteditor öffnen, um die Pfadangaben für die Bilder entsprechend anzupassen. Um eine größere Menge von Bildern bequem einlesen und verifizieren zu können, erwartet das Programm eine Trennung der Daten in verschiedene Unterverzeichnisse (Variablen: ''bias'', ''darks'', ''flats'', ''images''). Es sollte jeweils ein Verzeichnis für die Aufnahmen des Sternhaufens, der Flatfields und der Darkframes existiere. Eine mögliche Verzeichnisstruktur wäre:
      
   /bias/   /bias/
   /darks/   /darks/
   /flats/   /flats/
-  /imgs/+  /images/
      
-Das //Python//-Skript erkennt automatisch die verwendeten Filter und Belichtungszeiten. Darauf aufbauend ordnet sowie klassifiziert es die Dateien automatisch ohne das weiteres Zutun nötig ist. Ist man sich sicher, dass alle ''FITS-Header'' Schlüsselwörter korrekt gesetzt sind können alle Datei versuchsweise auch in einem einzigen Verzeichnis abgelegt werden. In diesem Fall muss in dem Skript nur der Pfad  ''rawfiles'' gesetzt werden. Anderenfalls müssen die Pfade zu den Unterordnern bei den entsprechenden Variablen angegeben werden. +Das //Python//-Skript erkennt automatisch die verwendeten Filter und Belichtungszeiten. Darauf aufbauend ordnet sowie klassifiziert es die Dateien automatisch ohne das weiteres Zutun nötig ist. Ist man sich sicher, dass alle ''FIT-Header'' Schlüsselwörter korrekt gesetzt sind können alle Datei versuchsweise auch in einem einzigen Verzeichnis abgelegt werden. In diesem Fall muss in dem Skript nur der Pfad  ''raw_files'' gesetzt werden. Anderenfalls müssen die Pfade zu den Unterordnern bei den entsprechenden Variablen angegeben werden. 
  
 /* /*
Zeile 89: Zeile 89:
   ##########################  Individual folders  ############################   ##########################  Individual folders  ############################
   ### Path to the bias -- If set to '?', bias exposures are not used.   ### Path to the bias -- If set to '?', bias exposures are not used.
-  bias = '?'+  bias: str = '?'
      
   ### Path to the darks   ### Path to the darks
-  darks = '?'+  darks: str = '?'
      
   ### Path to the flats   ### Path to the flats
-  flats = '?'+  flats: str = '?'
      
   ### Path to the images   ### Path to the images
-  imgs  = '?'+  images: str  = '?'
      
   #######################  Simple folder structure  ##########################   #######################  Simple folder structure  ##########################
-  rawfiles = '?'+  raw_files: str = '?'
  
 Wurden die Pfandangaben und der Name des Sternhaufens angepasst, kann anschließend das Skript mittels Wurden die Pfandangaben und der Name des Sternhaufens angepasst, kann anschließend das Skript mittels
Zeile 147: Zeile 147:
    from astroquery.vizier import Vizier    from astroquery.vizier import Vizier
        
-   from ost_photometry.analyze.analyze import main_extract +   from ost_photometry.analyze.analyze import main_extract  
-   from ost_photometry.utilities import find_wcs_astrometry, calculate_field_of_view, Image+   from ost_photometry.analyze.plots import starmap, scatter 
 +   from ost_photometry.utilities import 
 +       find_wcs_astrometry, 
 +       Image
 +   ) 
 +   from ost_photometry.analyze.utilities import ( 
 +       clear_duplicates, 
 +   )
  
    import warnings    import warnings
Zeile 165: Zeile 172:
        
    #   Images    #   Images
-   V_path = 'output/combined_trimmed_filter_V.fit' +   V_path = 'output/combined_filter_V.fit' 
-   B_path = 'output/combined_trimmed_filter_B.fit'+   B_path = 'output/combined_filter_B.fit'
  
 Hinweis: Die hier und im weiteren angegeben Variablennamen sind nur beispielhaft und können durch jede beliebige andere Bezeichnung ersetzt werden.   Hinweis: Die hier und im weiteren angegeben Variablennamen sind nur beispielhaft und können durch jede beliebige andere Bezeichnung ersetzt werden.  
Zeile 174: Zeile 181:
 ==== Einlesen der Bilder ==== ==== Einlesen der Bilder ====
  
-Wir öffnen die FITS-Dateien mit Aufnahmen mittels der Funktion ''image'', die über die OST-Bibliothek bereit gestellt wird. Dies hat den Vorteil, dass wir uns nicht um die Details des Einleseprozesses kümmern müssen und gleichzeitig für jedes Bild ein //Python//-Objekt zur Verfügung steht, in dem die Ergebnisse der folgenden Schritte sortiert abgelegt werden können. Die ''image''-Funktion hat folgende Argumente: 1. Index des Bildes (kann hier auf ''0'' gesetzt werden), 2. Filterbezeichnung, 3. Name des Objektes, 4. Pfad zur Bilddatei und 5. Pfad zum Output-Verzeichnis: +Wir öffnen die FIT-Dateien mit Aufnahmen mittels der Funktion ''image'', die über die OST-Bibliothek bereit gestellt wird. Dies hat den Vorteil, dass wir uns nicht um die Details des Einleseprozesses kümmern müssen und gleichzeitig für jedes Bild ein //Python//-Objekt zur Verfügung steht, in dem die Ergebnisse der folgenden Schritte sortiert abgelegt werden können. Die ''image''-Funktion hat folgende Argumente: 1. Index des Bildes (kann hier auf ''0'' gesetzt werden), 2. Filterbezeichnung, 3. Pfad zur Bilddatei und 4. Pfad zum Output-Verzeichnis: 
  
    #   Load images    #   Load images
-   V_image = Image(0, 'V', name, V_path, out_path) +   V_image = Image(0, 'V', V_path, out_path) 
-   B_image = Image(0, 'B', name, B_path, out_path)+   B_image = Image(0, 'B', B_path, out_path)
  
 ==== World Coordinate System ==== ==== World Coordinate System ====
Zeile 184: Zeile 191:
 Die vom OST erstellten Aufnahmen werden in der Regel ohne ein sogenanntes WCS ausgeliefert. WCS steht für World Coordinate System und ermöglicht es jedem Pixel im Bild eigene Himmelskoordinaten zuzuweisen. In //ds9// werden diese dann z.B. auch beim zeigen mit dem Mauszeiger auf bestimmten Pixel bzw. auf bestimmte Objekte in dem Koordinatenfenster von //ds9// angezeigt. Dies ist sehr hilfreich wenn man z.B. die Positionen von Sternen im eigen Bild mit denen in Sternenkatalogen abgleichen will. Dies könnte bei der späteren Kalibrierung der Sternmagnituden durchaus hilfreich sein ;-).   Die vom OST erstellten Aufnahmen werden in der Regel ohne ein sogenanntes WCS ausgeliefert. WCS steht für World Coordinate System und ermöglicht es jedem Pixel im Bild eigene Himmelskoordinaten zuzuweisen. In //ds9// werden diese dann z.B. auch beim zeigen mit dem Mauszeiger auf bestimmten Pixel bzw. auf bestimmte Objekte in dem Koordinatenfenster von //ds9// angezeigt. Dies ist sehr hilfreich wenn man z.B. die Positionen von Sternen im eigen Bild mit denen in Sternenkatalogen abgleichen will. Dies könnte bei der späteren Kalibrierung der Sternmagnituden durchaus hilfreich sein ;-).  
  
-Für die Bestimmung des WCS fehlen uns allerdings noch ein paar Voraussetzungen. Die ungefähren zentralen Koordinaten des abgebildeten Himmelsausschnitt sind zwar bereits in den Header der FITS-Dateien hinterlegt, das genau Gesichtsfeld und die Pixel-Skala der erstellten Aufnahmen müssen allerdings noch ermittelt werden. Dies erzielen wir mit der Funktion ''cal_fov'', der als Argument das bereits angelegt ''image''-Objekt übergeben wird:+/* 
 +Für die Bestimmung des WCS fehlen uns allerdings noch ein paar Voraussetzungen. Die ungefähren zentralen Koordinaten des abgebildeten Himmelsausschnitt sind zwar bereits in den Header der FIT-Dateien hinterlegt, das genau Gesichtsfeld und die Pixel-Skala der erstellten Aufnahmen müssen allerdings noch ermittelt werden. Dies erzielen wir mit der Funktion ''cal_fov'', der als Argument das bereits angelegt ''image''-Objekt übergeben wird:
  
    #   Calculate FOV    #   Calculate FOV
Zeile 192: Zeile 200:
 Das Gesichtsfeld und die Pixel-Skala wird automatisch im ''image''-Objekt hinterlegt. Das Gesichtsfeld und die Pixel-Skala wird automatisch im ''image''-Objekt hinterlegt.
  
-Anschließend kann mittels der Funktion ''find_wcs_astrometry'' die Bestmmung des WCS gestartet werden:+Anschließend kann mittels  
 +*/ 
 + 
 +Mittels der Funktion ''find_wcs_astrometry'' kann die Bestimmung des WCS gestartet werden:
  
    #   Find the WCS solution for the images    #   Find the WCS solution for the images
Zeile 208: Zeile 219:
 === Finden der Sterne === === Finden der Sterne ===
  
-Die Identifikation der Sterne in den beiden Bildern erfolgt mittels der Funktion ''main_extract''. Diese Funktion nimmt als erstes Argument wiederum das ''image''-Objekt. Das zweite Argument charakterisiert die Größe der Beugungsscheibchen. Dieses Sigma kann an Hand der Bilder bestimmt werden. Liegt aber in der Regel um den Wert ''3.0''. Als optionales Argument kann dann noch die Extraaktionsmethode ausgewählt werden (''photometry''). Hier spezifizieren wir '''APER''', und wählen so Apertur-Photometrie aus, bei der der Fluss der einzelnen Objekte und der zugehörigen Himmelshintergründe innerhalb einer fest definierten (hier kreis- bzw. ringförmigen) Apertur ausgelesen wird. Um diese Apertur zu spezifizieren geben wir noch den Radius für die kreisförmige Objektapertur (''rstars'') sowie die beiden Radien für die ringförmige Hintergrundapertur (''rbg_in'' und ''rbg_out'') an. Bewährt haben sich hier ''4'' sowie ''7'' und ''10''. Die Radien sind jeweils in Bogensekunden. +Die Identifikation der Sterne in den beiden Bildern erfolgt mittels der Funktion ''main_extract''. Diese Funktion nimmt als erstes Argument wiederum das ''image''-Objekt. Als optionales Argument kann dann noch die Extraaktionsmethode ausgewählt werden (''photometry''). Hier spezifizieren wir '''APER''', und wählen so Apertur-Photometrie aus, bei der der Fluss der einzelnen Objekte und der zugehörigen Himmelshintergründe innerhalb einer fest definierten (hier kreis- bzw. ringförmigen) Apertur ausgelesen wird. Um diese Apertur zu spezifizieren geben wir noch den Radius für die kreisförmige Objektapertur (''rstars'') sowie die beiden Radien für die ringförmige Hintergrundapertur (''rbg_in'' und ''rbg_out'') an. Bewährt haben sich hier ''4'' sowie ''7'' und ''10''. Die Radien sind jeweils in Bogensekunden. 
  
    #   Extract objects    #   Extract objects
    main_extract(    main_extract(
        V_image,        V_image,
-       sigma, 
        photometry_extraction_method='APER',        photometry_extraction_method='APER',
        radius_aperture=4.,        radius_aperture=4.,
Zeile 221: Zeile 231:
    main_extract(    main_extract(
        B_image,        B_image,
-       sigma, 
        photometry_extraction_method='APER',        photometry_extraction_method='APER',
        radius_aperture=4.,        radius_aperture=4.,
Zeile 264: Zeile 273:
  
    #   Correlate results from both images    #   Correlate results from both images
-   id_V, id_B, _, _ = matching.search_around_sky(coords_V, coords_B, 2.*u.arcsec)+   id_V, id_B, d2, _ = matching.search_around_sky(coords_V, coords_B, 2.*u.arcsec)
  
-Die erfolgreich zugeordneten Sterne bekommen jeweils einen Eintrag in ''id_V'' und ''id_B''. Diese beiden Listen (genauer gesagt Numpy arrays) enthalten die Indexwerte, die diese Sterne in den ursprünglich unsortierten Datensätzen hatten. Das heißt wir können diese Indexwerte nutzen, um die ursprünglichen Tabellen mit den Flüssen und Sternpositionen so zu sortieren, dass sie nur noch Sterne enthalten die in beiden Aufnahmen detektiert wurden und das die Reihenfolge der Sterne in beiden Datensätzen die Gleiche ist. Diese Zuordnung ist essentiell für das weitere Vorgehen. +Die erfolgreich zugeordneten Sterne bekommen jeweils einen Eintrag in ''id_V''''id_B'' und ''d2''. Diese beiden ersten Listen (genauer gesagt Numpy arrays) enthalten die Indexwerte, die diese Sterne in den ursprünglich unsortierten Datensätzen hatten. Das heißt wir können diese Indexwerte nutzen, um die ursprünglichen Tabellen mit den Flüssen und Sternpositionen so zu sortieren, dass sie nur noch Sterne enthalten die in beiden Aufnahmen detektiert wurden und das die Reihenfolge der Sterne in beiden Datensätzen die Gleiche ist. Diese Zuordnung ist essentiell für das weitere Vorgehen. 
  
-Das Sortieren erfolgt einfach indem man die Arrays mit den Indexwerten in die Tabellen einsetztWir selektieren und gleichzeitig sortieren so die in beiden Aufnahmen identifizierten Sterne.+Bevor dies jedoch geschehen kann, müssen noch potentielle Mehrfachidentifikationen aussortiert werden. Es ist nämlich möglich, dass ''matching.search_around_sky()'' z.B. Objekt 3 aus ''coords_V'' sowohl Objekt 2 als auch Objekt 4 aus ''coords_B'' zuordnet. Das Aussortieren dieser Duplikate erfolgt mit: 
 + 
 +   #   Identify and remove duplicate indices 
 +       id_V, d2, id_B = clear_duplicates( 
 +           id_V, 
 +           d2, 
 +           id_B, 
 +       ) 
 +       id_B, _, id_V = clear_duplicates( 
 +           id_B, 
 +           d2, 
 +           id_V, 
 +       ) 
 + 
 +Anschließend können die Tabellen mit den photometrischen Werten sortiert werden, indem die Arrays mit den Indexwerten in die entsprechenden Tabellen eingesetzt werdenAuf diese Weise selektieren und sortieren wir gleichzeitig die Sterne, die in den beiden Aufnahmen identifiziert wurden.
  
    #   Sort table with extraction results and SkyCoord object    #   Sort table with extraction results and SkyCoord object
Zeile 305: Zeile 328:
    v = Vizier(columns=columns, row_limit=1e6, catalog=catalog)    v = Vizier(columns=columns, row_limit=1e6, catalog=catalog)
  
-Im nächsten Schritt können wir den Download ausführen. Hierbei nutzen wir die Funktion ''.query_region''. Dieser müssen wir noch die Koordinaten und die Größe des abzufragenden Himmelsbereiches übergeben. Glücklicherweise ist beides bereits bekannt. Die Koordinaten kennen wir aus den FITS-Header der Sternhaufenaufnahmen und für den Radius des abzufragenden Bereichs nehmen wir einfach das Gesichtsfeld, was wir uns bereits oben ausgerechnet haben. Beide Größen können wir z.B. dem ''V_image''-Objekt entnehmen.+Im nächsten Schritt können wir den Download ausführen. Hierbei nutzen wir die Funktion ''.query_region''. Dieser müssen wir noch die Koordinaten und die Größe des abzufragenden Himmelsbereiches übergeben. Glücklicherweise ist beides bereits bekannt. Die Koordinaten kennen wir aus den FIT-Header der Sternhaufenaufnahmen und für den Radius des abzufragenden Bereichs nehmen wir einfach das Gesichtsfeld, was wir uns bereits oben ausgerechnet haben. Beide Größen können wir z.B. dem ''V_image''-Objekt entnehmen.
  
-   calib_tbl = v.query_region(V_image.coord, radius=V_image.fov*u.arcmin)[0]+   calib_tbl = v.query_region(V_image.V_image.coordinates_image_center, radius=V_image.field_of_view_x*u.arcmin)[0]
  
 Die Tabelle ''calib_tbl'' enthält nun alle in dem **APASS**-Katalog enthaltenen Objekte mit ihren ''B''- und ''V''-Magnituden, welche sich in unserem Gesichtsfeld befinden. Die Tabelle ''calib_tbl'' enthält nun alle in dem **APASS**-Katalog enthaltenen Objekte mit ihren ''B''- und ''V''-Magnituden, welche sich in unserem Gesichtsfeld befinden.
Zeile 333: Zeile 356:
  
    #   Correlate extracted object position with calibration table    #   Correlate extracted object position with calibration table
-   ind_fit, ind_lit, _, _ = matching.search_around_sky(+   ind_fit, ind_lit, d2, _ = matching.search_around_sky(
        coords_objs,        coords_objs,
        coord_calib,        coord_calib,
        2.*u.arcsec,        2.*u.arcsec,
 +       )
 +       
 +Wie ebenfalls oben beschrieben, müssen nun noch die Dubletten aussortiert werden: 
 +
 +   #   Identify and remove duplicate indexes
 +       ind_fit, d2, ind_lit = clear_duplicates(
 +           ind_fit,
 +           d2,
 +           ind_lit,
 +       )
 +       ind_lit, _, ind_fit = clear_duplicates(
 +           ind_lit,
 +           d2,
 +           ind_fit,
        )        )
  
Zeile 366: Zeile 403:
 Eine Möglichkeit, die  Validität der Kalibrationssterne zu prüfen ist diese sich auf einer Starmap darzustellen (ähnlich zu dem was die ''main_extract'' oben automatisch macht). In diesem Fall wollen wir aber die heruntergeladenen Sternpositionen als auch die Sterne darstellen, die dann später auch wirklich für die Kalibrierung verwendet wurden. Hierfür bietet die OST-Bibliothek eine geeignete Funktion (''starmap'') an, die solche Plots erstellen kann. Diese Funktion kann über  Eine Möglichkeit, die  Validität der Kalibrationssterne zu prüfen ist diese sich auf einer Starmap darzustellen (ähnlich zu dem was die ''main_extract'' oben automatisch macht). In diesem Fall wollen wir aber die heruntergeladenen Sternpositionen als auch die Sterne darstellen, die dann später auch wirklich für die Kalibrierung verwendet wurden. Hierfür bietet die OST-Bibliothek eine geeignete Funktion (''starmap'') an, die solche Plots erstellen kann. Diese Funktion kann über 
  
-   from ost_photometry.analyze.plot import starmap+   from ost_photometry.analyze.plots import starmap
  
 eingebunden werden. Da diese Funktion als Eingabe eine Astropy-Tabellen, mit den darzustellenden Daten erwartet, müssen wir zuerst diese erstellen, bevor wir die Starmap plotten können. Die Position der Kalibrationssterne liegen bisher nicht in Pixelkoordinaten vor, da wir diese Information von der Simbad- bzw. Vizier-Datenbank bezogen haben. Daher müssen wir zuerst diese erzeugen. An dieser Stelle ist es wieder praktisch, dass wir zuvor ein ''SkyCoord''-Objekt für diese Sterne erzeugt haben. Mittels ''.to_pixel()'' unter Angabe des WCS des Bildes lassen sich hieraus ganz einfach Pixelkoordinaten erzeugen: eingebunden werden. Da diese Funktion als Eingabe eine Astropy-Tabellen, mit den darzustellenden Daten erwartet, müssen wir zuerst diese erstellen, bevor wir die Starmap plotten können. Die Position der Kalibrationssterne liegen bisher nicht in Pixelkoordinaten vor, da wir diese Information von der Simbad- bzw. Vizier-Datenbank bezogen haben. Daher müssen wir zuerst diese erzeugen. An dieser Stelle ist es wieder praktisch, dass wir zuvor ein ''SkyCoord''-Objekt für diese Sterne erzeugt haben. Mittels ''.to_pixel()'' unter Angabe des WCS des Bildes lassen sich hieraus ganz einfach Pixelkoordinaten erzeugen:
Zeile 399: Zeile 436:
        label_2='Identified calibration stars',        label_2='Identified calibration stars',
        rts='calibration',        rts='calibration',
-       nameobj=name, 
     )     )
  
-Hierbei ist das erste Argument unser Ausgabeverzeichnis, das zweite Argument das eigentlich Bild (als //Numpy//-Array), das dritte Argument die Filterbezeichnung, das vierte Argument die erste Tabelle, ''label'' das Label zum ersten Datensatz, ''tbl_2'' die zweite Tabelle, ''label_2'' das Label zum zweiten Datensatz''rts'' eine Beschreibung des Plots und ''nameobj'' der Name des Sternhaufens.+Hierbei ist das erste Argument unser Ausgabeverzeichnis, das zweite Argument das eigentlich Bild (als //Numpy//-Array), das dritte Argument die Filterbezeichnung, das vierte Argument die erste Tabelle, ''label'' das Label zum ersten Datensatz, ''tbl_2'' die zweite Tabelle, ''label_2'' das Label zum zweiten Datensatz und ''rts'' eine Beschreibung des Plots.
  
 **Alternativ** kann man die Starmap auch direkt über ''pyplot'' aus dem ''matplotlib''-Modul erstellen. Dies ist nicht viel aufwendiger bietet aber mehr Möglichkeiten zur Anpassung des Plots. Geladen wird ''pyplot'' mittels: **Alternativ** kann man die Starmap auch direkt über ''pyplot'' aus dem ''matplotlib''-Modul erstellen. Dies ist nicht viel aufwendiger bietet aber mehr Möglichkeiten zur Anpassung des Plots. Geladen wird ''pyplot'' mittels:
Zeile 414: Zeile 450:
 erstellt. Anschließend kann das eigentliche Bild geladen werden: erstellt. Anschließend kann das eigentliche Bild geladen werden:
  
-   plt.imshow(image, origin='lower')+   plt.imshow(V_image, origin='lower')
  
 ''image'' sind hierbei die eigentlichen Bilddaten und ''origin=lower'' stellt sicher, dass das mit dem überplotten der Koordinaten auch klappt. Daraufhin können die Symbole, die die Sternposition kennzeichnen geplottet werden: ''image'' sind hierbei die eigentlichen Bilddaten und ''origin=lower'' stellt sicher, dass das mit dem überplotten der Koordinaten auch klappt. Daraufhin können die Symbole, die die Sternposition kennzeichnen geplottet werden:
Zeile 566: Zeile 602:
      
    ---    ---
-   ### 
    #   PARCES isochrones (CMD 3.6)    #   PARCES isochrones (CMD 3.6)
        
    #   Files    #   Files
-   isos = '~/scripts/python/n2/iso/parsec_iso/3p6/solar_0p2Gyr/iso_parsec_0p2Gyr.dat' +   # isochrones: '~/isochrone_database/parsec_iso/3p6/solar_0p2Gyr/iso_parsec_0p2Gyr.dat' 
-   #isos = '~/scripts/python/n2/iso/parsec_iso/3p6/solar_0p5Gyr/iso_parsec_0p5Gyr.dat' +   # isochrones: '~/isochrone_database/parsec_iso/3p6/solar_0p5Gyr/iso_parsec_0p5Gyr.dat' 
-   #isos = '~/scripts/python/n2/iso/parsec_iso/3p6/solar_1Gyr/iso_parsec_1Gyr.dat'+   isochrones: '~/isochrone_database/parsec_iso/3p6/solar_1Gyr/iso_parsec_1Gyr.dat'
        
    #   Type    #   Type
-   isotype = 'file'+   isochrone_type: 'file'
        
-   #   Type of the second filter used in CMD plots +   #   Type of the filter used in CMD plots 
-   ISOcolumntype = {'B':'single'} +   #   Format: 
-    +   #     'filter name': 
-   #   Number of the columns in the isochrone data filecontaining the magnitudes +   #       - column type (single or color) 
-   ISOcolumn = {'V':31,'B':30} +   #       - ID of the filter if the column type is color, e.g., if the filter is 
-    +   #         R and the color is V-R, the filter ID would be 1. If column-type is 
-   #   Age column +   #         single, the ID will be 0. 
-   ISOcolumn['AGE'] = 3+   #       - name of the second filter, in the example above it would be V. If 
 +   #         column-type is single, the name can be set to '-'
 +   isochrone_column_type: 
 +       'U':  
 +         - 'single' 
 +         - 0 
 +         - '-' 
 +       'B':  
 +         'single' 
 +         - 0 
 +         - '-' 
 +       'V':  
 +         - 'single' 
 +         - 0 
 +         - '-' 
 +       'R':  
 +         - 'single' 
 +         - 0 
 +         - '-' 
 +     
 +   #   ID of the columns in the isochrone data file containing the magnitudes 
 +   #   and the age 
 +   isochrone_column: 
 +       'U': 29 
 +       'B': 30 
 +       'V': 31 
 +       'R': 32 
 +       'AGE':
 +        
 +   #   Keyword to identify a new isochrone 
 +   isochrone_keyword: '# Zini'
        
    #   Logarithmic age    #   Logarithmic age
-   logAGE = True +   isochrone_log_age: true
-    +
-   #   Keyword to identify a new isochrone +
-   keyword = '# Zini'+
        
    #   Plot legend for isochrones?    #   Plot legend for isochrones?
-   IsoLabels = True+   isochrone_legend: true
    ...    ...
  
-''isos'' zeigt in diesem Fall auf die Datei mit den Isochronen. ''isotype'' ist hier auf ''file'' gesetzt, was dem Skript sagt, dass alle Isochronen in einer Datei zu finden sind. Als alternative Option steht ''directory'' zur Auswahl. In diesem Fall erwartet das Skript, dass die Isochronen in einzelnen Datei in einem speziellen Verzeichnis zu finden sind und das ''isos'' auf dieses Verzeichnis zeigt. Über ''ISOcolumn'' können die gewünschten bzw. benötigten Spaltennummer spezifiziert werden. Also die beiden Spalten mit den Magnituden in den Filtern die man braucht sowie das Alter. ''ISOcolumntype'' wiederum spezifiziert, ob es sich bei der zweiten Magnitude, bereits um eine Farbe oder um eine "einzelne" Magnitude handelt und ob die Farbe also noch berechnet werden muss oder nichtZur Auswahl stehen hier ''single'' und ''color''Über ''logAGE'' kann angegeben werden, ob die Werte in der Altersspalte logarithmiert sind oder nicht. Zur Auswahl stehen hier ''True'' or ''False''Sind die Isochronen alle in einer Datei wird von dem Skript noch ein Schlüsselwort benötigtüber das es erkennen kann, wann eine Isochrone endet und wann die nächste anfängt. Dies kann über die Variable ''keyword'' spezifiziert werden. Dann kann man noch entscheiden, ob man sich eine Legende für die Isochronen plotten lassen möchte. Dies wird über die Variable ''IsoLabels'' geregelt+''isochrones'' verweist auf die Datei mit den Isochronen. Hier ist ''isochrone_type'' auf ''file'' gesetzt, was dem Skript sagt, dass alle Isochronen in einer Datei zu finden sind. Eine Alternative ist ''directory''. In diesem Fall erwartet das Skript, dass die Isochronen in einzelnen Dateien in einem bestimmten Verzeichnis zu finden sind und dass die Variable ''isochrones'' auf dieses Verzeichnis zeigt. Mit ''isochrone_column'' kann man die gewünschten Spaltennummern angeben. ''isochrone_column_type'' gibt an, ob die Größen als Farben oder als "einzelne" Magnituden angegeben werden. Weitere Informationen findet man in der obigen Formatbeschreibung. Die grundlegenden Optionen sind hier ''color'' und ''single''Mit ''isochrone_log_age'' kann man angeben, ob die Werte in der Altersspalte logarithmiert sind oder nicht. Man kann zwischen ''True'' und ''False'' wählenWenn sich die Isochronen alle in einer Datei befinden, benötigt das Skript ein Schlüsselwort, um zu erkennen, wann eine Isochrone endet und die nächste beginnt. Dies kann mit der Variablen ''isochrone_keyword'' angegeben werden. Schließlich kann man entscheiden, ob eine Legende für die Isochronen gezeichnet werden soll. Dies wird durch die Variable ''isochrone_legend'' gesteuert
  
-**Tip:** Zumeist gibt es Isochronen aus einer Quelle in unterschiedlichen zeitlichen Auflösungen und für unterschiedliche Metallizitäten. Diese finden sich dann in der Regel in anderen Dateien bzw. Ordnern, je nachdem was für ''isotype'' gesetzt werden muss. Es kann sich also lohnen, in der Datenbank nachzuschauen und den Eintrag für ''isos'' anzupassen. +**Tip:** Zumeist gibt es Isochronen aus einer Quelle in unterschiedlichen zeitlichen Auflösungen und für unterschiedliche Metallizitäten. Diese finden sich dann in der Regel in anderen Dateien bzw. Ordnern, je nachdem was für ''isochrone_type'' gesetzt werden muss. Es kann sich also lohnen, in der Datenbank nachzuschauen und den Eintrag für ''isochrones'' anzupassen. 
  
 Hinweis: Ein paar zusätzliche Informationen zu den einzelnen Variablen findet sich noch im //YAML//-Template. Hinweis: Ein paar zusätzliche Informationen zu den einzelnen Variablen findet sich noch im //YAML//-Template.
  • de/praktikum/photometrie_python.1708878813.txt.gz
  • Zuletzt geändert: 2024/02/25 16:33
  • von jmkubat