Tarea 1, parte 1

Pregunta 1

NGC 121 es un cúmulo estelar que se encuentra en la dirección de la constelación de Tucana (RA 00 26 49.0; DEC -71 32 10), en la Pequeña Nube de Magallanes. Fue descubierto en 1835 por John Herschel. Su módulo de distancia es de $(M-m)=18.94$, que corresponde a una distancia de $61KPc$. Es poco extendido, con un radio de $53.7Pc$ y su edad se estima en 10 mil millones de años.

Fuentes:

  1. IPAC
  2. NASA
  3. Simbad

Pregunta 2


Se utilizarán los dos resultados al consultar la Hubble Legacy Archive por imágenes de nivel 2 obtenidas usando ACS/HRC. ACS es la Advanced Camera for Surveys, que contiene tres cámaras; la HRC, High Resolution Camera (0.025''/px), es una de ellas (actualmente se encuentra inoperable). Las imágenes fueron tomadas en las bandas correspondientes a los filtros amplios (150nm de ancho aproximadamente) F555W, centrado en el verde de 530.8nm; y F814W, centrado en 802.4nm, infrarrojo. Los filtros del sistema fotométrico más cercanos serían justamente el V, centrado en 551nm y el I, centrado en 806nm. Cada archivo FITS incluye las extensiones:
  1. PRIMARY, que contiene información en el header pero no contiene imagen.
  2. SCI (science), que contiene la imagen de ciencia.
  3. WHT (weight), que contiene una imagen que representa un mapa con el peso relativo de cada píxel según el inverso de la varianza.
  4. CTX (context), que contiene una imagen que representa un mapa de cuáles imágenes (antes de combinarlas) contribuyen en cada píxel de la imagen final combinada.
  5. HDRTAB (header table), que guarda registro de los valores que cambian en el header de una imagen combinada tras agregar una nueva imagen.
  6. EXP (exposure), que indica el peso por píxel dado por el tiempo de exposición que tuvo su imagen original.

Se requiere guardar cada imagen de ciencia y el mapa de pesos en un archivo separado. Para ello, se utiliza el módulo astropy.io.fits:


In [1]:
from astropy.io import fits

f555w = fits.open('hst_10396_a4_acs_hrc_f555w_drz.fits')
f814w = fits.open('hst_10396_a4_acs_hrc_f814w_drz.fits')

f555w[1].writeto('sci_f555w_n121.fits',clobber=True)
f555w[2].writeto('invar_f555w_n121.fits',clobber=True)

f814w[1].writeto('sci_f814w_n121.fits',clobber=True)
f814w[2].writeto('invar_f814w_n121.fits',clobber=True)

f555w.close()
f814w.close()

Por último, se puede comprobar que las imágenes están bien alineadas con ayuda de DS9 si se eligen algunas estrellas y se compara su posición.


Pregunta 3


Para esta pregunta se utilizó SExtractor (SE). Los parámetros de base se tomaron de las configuraciones por defecto de SE (archivo default.sex) pero se cambiaron las opciones de acuerdo a lo requerido, para cada imagen, según información disponible en la web del Space Telescope Science Institute: Y también en Sirianni et al. (2005).

Se ejecutó de la siguiente manera:

sextractor sci_f555w_n121.fits -c f555w.sex
sextractor sci_f814w_n121.fits -c f814w.sex

Como resultado se obtuvieron catálogos que incluyen las columnas MAG_APER, MAGERR_APER, ALPHA_J2000 y DELTA_J2000.

Se obtuvieron 6144 objetos para la imagen en el filtro f555w y 4801 para la imagen en el filtro f814w. Los archivos de configuración y los catálogos obtenidos están en este repositorio.


Pregunta 4

Una vez obtenidos los catálogos para ambos filtros, se realiza una comparación y match entre ambos para obtener las fuentes comunes. Esto se hace con el módulo de python astropy.coordinates:


In [2]:
from astropy import units as u
from astropy.coordinates import SkyCoord
from astropy.io import fits
import numpy as np
import os

# Se cargan listas con RA y DEC para cada imagen
RAf555w = np.loadtxt('f555w.cat',usecols=(3,))
DEf555w = np.loadtxt('f555w.cat',usecols=(4,))

RAf814w = np.loadtxt('f814w.cat',usecols=(3,))
DEf814w = np.loadtxt('f814w.cat',usecols=(4,))

# Match por parte de astropy
catalog = SkyCoord(ra=RAf555w*u.degree, dec=DEf555w*u.degree)  
c = SkyCoord(ra=RAf814w*u.degree, dec=DEf814w*u.degree)  
idx = c.match_to_catalog_sky(catalog)

# Del catalogo f555w.cat se extraen las filas que indica el match
matches = list(idx[0])
f555w = np.loadtxt('f555w.cat')
f814w = np.loadtxt('f814w.cat')
out = []

j = 0
for i in matches:
	out.append(np.concatenate([f555w[i],f814w[j]]))
	j = j+1

# Salida a archivo
np.savetxt('n121_match.cat',out,
	fmt='%d\t%.4f\t%.4f\t%.7f\t%.7f\t%d\t%.4f\t%.4f\t%.7f\t%.7f',
	header='f555wN\tf555wMAG\tf555wMAGERR\tf555wALPHA\tf555wDELTA\tf814wN\tf814wMAG\tf814wMAGERR\tf814wALPHA\tf814wDELTA')

De esta forma se obtiene un catálogo de 4801 objetos que se logran emparejar en ambas imágenes. Si se observa que de la imagen en filtro f814w se obtuvieron exactamente 4801 fuentes, entonces se evidencia que para cada estrella en dicha imagen se encontró un par en el filtro f555w. Esto demuestra que las imágenes están bien alineadas. Sin embargo, a distintas fuentes del filtro f814w se les emparejó con la misma fuente en f555w por parte de astropy.

Las coincidencias entre ambos catálogos sin contar estas duplicidades son de alrededor del 92% . Se permitieron estas duplicidades mientras se avanzó en la construcción del CMD, en vista de que el error generado no afecta en medida significativa el resultado.

El siguiente paso es calibrar las magnitudes. Se utiliza el sistema VEGAMAG, en donde la magnitud de Vega en cualquier filtro se define como 0. Se ajusta el zeropoint en este sistema, que se define como la magnitud de un objeto que produce una cuenta por segundo para un tiempo de exposición determinado. Como el Zeropoint fue un parámetro de entrada para SE, ya se calibró esta parte.

También hay que considerar la aperture correction para la HRC. Dado que al hacer fotometría se utilizan aperturas pequeñas para mejorar la relación señal a ruido (SNR), solo una parte de la energía proveniente de la fuente logra medirse. Se incluye una corrección para "recuperar" las cuentas de diferencia que se obtendrían de utilizar una apertura "infinita". Estos ajustes están presentes en Sirianni et al. (2005). Para aplicar esta correción (dada en unidades de magnitud) basta con restar el valor de ajuste a la magnitud que ya se tenía, para cada filtro. Se utilizó $0.468$ para el filtro f555w y $0.715$ para el f814w, para una apertura de $0.025 \frac{''}{px} \times 6px / 2 = 0.075''$ (En el paper, se entrega el radio de apertura, no el diámetro).

Por último, hay que tener en cuenta el reddening, que se refiere a la absorción y dispersión de luz por parte del polvo interestelar, que afecta más a la luz azul que a la roja, por lo que las fuentes se enrojecen. Esto depende, etonces, de la banda en que se observe y del objeto. Otra vez de Sirianni, se toman los valores magnitud $A(P)/E(B-V)$ de $3.180$ y $1.803$ (que corresponden a objetos del tipo G2) para los filtros f555w y f814w, respectivamente. De NED, se obtiene que $E(B-V)=0.133$ y se calcula la corrección. Estos números se restan de las magnitudes anteriores, de modo que se obtiene una magnitud que representa un objeto más brillantes de lo que se observa.


In [3]:
from astropy.io import ascii
import matplotlib
import matplotlib.pyplot as plt
%matplotlib inline

red555 = 3.180*0.133
red814 = 1.803*0.133

# Corrige por apertura y reddening E(B-V) = 0.133
tbl = ascii.read('n121_match.cat') 
tbl["f555wMAG"] = tbl["f555wMAG"] - 0.468 - red555
tbl["f814wMAG"] = tbl["f814wMAG"] - 0.715 - red814
ascii.write(tbl,output='n121_match.cat',delimiter='\t')

# Genera plot calibrado
plt.figure(figsize=(10,10))
plt.plot(tbl["f555wMAG"] - tbl["f814wMAG"], tbl["f555wMAG"],'k.',ms=3)
plt.xlim(-0.5, 1.5)
plt.ylim(24,16)
plt.xlabel("$F555W-F814W$", fontsize=20)
plt.ylabel("$F555W$", fontsize=20)
plt.savefig('cmd_n121', dpi=None, facecolor='w', edgecolor='w',
        orientation='portrait', papertype=None, format=None,
        transparent=False, bbox_inches=None, pad_inches=0.1,
        frameon=None)

plt.show()
plt.close()