El propósito de esta entrada es mostrar como se puede trabajar con los distintos sistemas de coordenadas astronómicas utilizando las librerías de Python adecuadas.
En esta entrada, como en la mayoría de las siguientes, se utilizará el notebook de IPython
Autor: Eduardo Martín Calleja
Importaciones y referencias¶
%matplotlib inline
from __future__ import division
# Importación de la librería PyEphem
import ephem
import astropy
#Esto suprime algunos deprecation warnings que molestan
import warnings
warnings.filterwarnings('ignore')
# Generar un cuadro con versiones de las librerías utilizadas en este notebook
#https://github.com/jrjohansson/version_information
%load_ext version_information
%version_information ephem, astropy
1. Coordenadas esféricas ecuatoriales¶
Vienen definidas por una ascensión recta (ra), una declinación (dec) y un epoch.
La ra viene representada normalmente como un string de la forma "hh:mm:ss"
La dec se representa normalmente como un string de la forma "+/-º:':''"
El epoch por defecto es J2000.0
Sus elementos son:
- El origen es el cento de la Tierra (es decir, son coordenadas geocéntricas)
- El plano fundamental es la proyección del ecuador terrestre en la esfera celeste
- La dirección primaria es la del equinoccio de primavera en una fecha determinada (el epoch)
- El convenio de dirección es que la ra se mide positivamente hacia el este y hacia el norte.
Las coordenadas ecuatoriales de un objeto se representan en ephem como instancias de la clase Equatorial
ra, dec y epoch son atributos del objeto
# vamos a definir las coordenadas ecuatoriales de un objeto
eq=ephem.Equatorial('13:24:42.5','-60:15:59.4')
# Internamente se almacenan en radianes, para facilitar los cálculos
eq.ra, eq.dec, eq.epoch
# Sin embargo se imprimen como strings
print eq.ra, '\t', eq.dec, '\t', eq.epoch
# Podemos obtener una tupla (ra,dec) utilizando el método get()
print eq.get()
# Indica en qué constelación se situa una tupla de coordenadas
ephem.constellation((eq.ra,eq.dec))
También podemos utilizar otro epoch diferente del J2000:
eq50=ephem.Equatorial('13:24:42.5','-60:15:59.4',epoch=ephem.B1950)
print eq50.ra, '\t', eq50.dec, '\t', eq50.epoch
2. Coordenadas galácticas¶
Tambien se trata de un sistema de coordenadas esféricas. Sus elementos son:
- El centro se situa en el Sol (son coordenadas heliocénticas)
- El plano fundamental es aproximadamente el plano de nuestra galaxia (la Vía Lactea)
- La dirección primaria apunta aproximadamente al centro de nuesta galaxia
- El convenio es que las direcciones son positivas hacia el norte y hacia el este en el plano fundamental.
Las coordenadas son longitud (lon / l) y latitud(lat / b), ambas expresadas en grados, no en horas
# Definición de las coordenadas galácticas de un objeto
ga=ephem.Galactic('1:59:55.9','+89:59:59.9')
print ga.lon, ga.lat
# Longitud y latitud utilizando el método get(). Se muestran en radianes
print ga.get()
3. Conversión entre sistemas de coordenadas¶
Las coordenadas pueden ser convertidas entre un sistema y otro pasando un objeto del primer tipo como imput a una clase del segundo tipo:
# Conversión de coordenadas ecuatoriales entre epochs
eq1 = eq=ephem.Equatorial('13:24:42.5','-60:15:59.4')
eq2 = ephem.Equatorial(eq1,epoch=ephem.B1950)
print eq1.get()
print eq2.get()
# Conversión de coordenadas galácticas a ecuatoriales
# En realidad esta declaración de epoch se puede omitir
ga1 = ephem.Galactic('0','90',epoch=ephem.J2000)
eq1 = ephem.Equatorial(ga1)
print eq1.ra, eq1.dec
4. Obtener las coordenadas de un objeto por su nombre¶
Para esto se utilizará el módulo SkyCoord de la librería astropy.coordinates con el sufijo from_name, el cual obtiene las coordenadas a partir del servidor SESAME
from astropy.coordinates import SkyCoord
El "International Celestial Reference System" (ICRS) es el sistema de referencia celeste adoptado como estándar en la actualidad por la Unión Astronómica Internacional (IAU). Estas coordenadas coinciden con mucha aproximación con las coordenadas ecuatoriales J2000.0. Las coordenadas ICRS se pueden obtener dando el nombre del objeto en cualquiera de los catálogos utilizados por el servicio SESAME
# Galaxia Remolino
SkyCoord.from_name("M51") # "icrs" es la opción por defecto
# El mismo objeto en coordenadas galácticas
SkyCoord.from_name("M51", frame='galactic')
Para acceder a los valores de los ángulos (longitud y latitud en este caso) hay varias opciones:
c = SkyCoord.from_name("M51", frame='galactic')
# se puede acceder internamente a longitud y latitud con c.l y c.b
# La representación interna de los ángulos es en grados
# Sin embargo, con estos valores no se puede operar directamente
c.l, c.b
Y para obtener valores numéricos de los ángulos con los que operar, proceder como sigue:
# Ángulos en radianes
print c.l.radian, c.b.radian
# Ángulos en grados
print c.l.degree, c.b.degree
# Ejemplo de operación matemática
c.l.degree + 90
En el caso de las coordenadas ICRS los ángulos coordenados son ra y dec
c = SkyCoord.from_name("M51", frame='icrs')
# Se trata de una representación en forma de string no apta para operar
print c
# proporciona una tupla "horas", "minutos", "segundos"
print c.ra.hms
# valores en grados
print c.dec.degree
# Por supuesto se pueden expresar en otros tipos de unidades
print c.ra.radian, c.dec.radian
Otro sistema de coordenadas proporcionado por la librería astropy es FK5. Es un sistema de coordenadas ecuatoriales basado en el Epoch J2000, que coincide prácticamente con las coordenadas ICRS
# Coordenadas ICRS
c = SkyCoord.from_name("M51", frame='icrs')
# Coordenadas FK5
c5 = SkyCoord.from_name("M51", frame='fk5')
# En este ejemplo se puede apreciar la similitud entre ambas
print 'coordenadas ICRS: ',c.ra.hms, c.dec.degree
print 'coordenadas FK5: ', c5.ra.hms, c5.dec.degree
5. Conversión entre sistemas de coordenadas con astropy¶
# Obtengamos las coordenadas galácticas de un astro
# Elegimos una estrella del hemisferio sur
c = SkyCoord.from_name('Achernar', frame='galactic')
c
# Pasemoslas a coordenadas ecuatoriales FK5:
c.fk5
# Y recíprocamente, a partir de las coordenadas ICRS obtengamos las galácticas:
c = SkyCoord.from_name('Achernar', frame='icrs')
c.galactic
No hay comentarios:
Publicar un comentario