¿Para qué necesitamos de las efemérides?
Cualquier aficionado a la astronomía sabe de la importancia de contar con datos relativos a la salida, puesta, tránsito u otros fenómenos de los astros que le interesa observar. Estos datos los podemos obtener, habitualmente, de revistas, páginas web especializadas...

o más raramente los podemos calcular nosotros mismos. El cálculo de efemérides astronómicas es un campo bastante complejo. Cualquiera que haya echado un ojo a las "Efemérides Astronómicas" o al "Almanaque Naútico" editado por el Real Observatorio de la Armada u otras publicaciones análogas se habrá podido hacer una vaga idea. Si habeís tenido la suerte tener en vuestras manos el excelentísimo "Astronomical Algorithms" de Jean Meeus, os habréis dado cuenta de que, definitivamente, no es un hobby al alcance de cualquiera y los algoritmos, aún primorosamente explicados, no son fáciles de implementar. Afortunadamente, alguien se ha tomado la molestia de hacerlo por nosotros, y ha puesto a nuestro alcance una herramienta que permite a alguien con modestos conocimientos de programación calcular efemérides con una precisión más que suficiente para el aficionado. Se trata del módulo pyephem http://rhodesmill.org/pyephem/index.html para Python.
Aunque tanto el módulo como el propio lenguage Python son multiplataforma, las indicaciones que os daré aquí están pensadas para ser aplicadas en entornos GNU/Linux, que tiene la ventaja (entre otros cientos de millones de ellas) de que el intérprete de Python viene instalado por defecto en la gran mayoría de distribuciones, por lo que no es necesario instalar prácticamente nada para funcionar.
¿Por dónde empezar?
Existen en la red multitud de tutoriales y libros de iniciación sobre Python que os pueden servir, como a mí, para iniciaros en la programación en este lenguaje. Os diré que mis inicios en Python fueron, precisamente, ante la necesidad que tenía de preparar las efemérides astronómicas para la antigua web de la Agrupación Astronómica de San Fernando y os puedo asegurar que en una tarde tenía el script que permitía elaborar todas las efemérides planetarias para el mes y las de orto/ocaso solar y lunar, lo que os puede dar una idea de la sencillez del lenguaje, al menos para tareas simples.
El propio pyephe, en su página web, dispone de unos sencillos tutoriales y una guía de referencia rápida que os servirá para iniciaros sin problemas.
Pasos previos
Lo primero que tendremos que hacer es instalar el paquete pyephem. Tenemos la suerte de que es posible hacerlo sin mayores complicaciones usando easy_install (disponible en el paquete setuptools), operación que haremos como superusuarios mediante la orden:
easy_install pyephem
o bien, si preferimos pip:
pip install pyephem
Una vez instalado el programa, podremos pasar a calcular efemérides desde el intérprete de python o desde un script que hayamos preparado.
Como algunos sabréis, python es un lenguaje de programación orientado a objetos. Eso quiere decir que trabaja con elementos (clases de objetos) que comparten ciertas características (propiedades) y que disponen de ciertas funciones para manipularlos (normalmente se les llama métodos)
¡Manos a la obra!
En nuestro caso, la librería pyephem pone a nuestra disposición dos clases de objetos, principalmente:

  • Los objetos de tipo body, o sea, cuerpos celestes. Pyemhem predefine unos cuantos: Los planetas, que tienen clase propia (Mercury(), Venus(), Mars()...) y un pequeño catálogo de estrellas, a las que nos referiremos como star('Antares'), por ejemplo.
  • Los objetos de tipo observer, es decir, un objeto que define un lugar y hora de observación.

La documentación es mucho más prolija que yo definiendo los métodos y propiedades de estos objetos, que pueden ser bastante complejos, de manera que yo me voy a limitar a describiros el proceso de generación de efemérides sencillo.
Un advertencia previa: python distingue entre mayúsculas y minúsculas ¡¡Ojito!!
Lo primero que tenemos que hacer, por supuesto, es abrir el intérprete de python, de una manera tan simple como abriendo un terminal y escribiendo
python
La consola nos dirá que python está preparado para recibir órdenes mediante el símbolo >>>.
a continuación, lo primero que debemos hacer es importar el módulo mediante
>>>import ephem
Si queremos evitarnos tener que usar el nombre del módulo cada vez que damos una orden, teclearemos:
>>>from ephem import *

Primeros cálculos
Supongamos que queremos calcular las efemerides de Saturno. Pues creamos un objeto para tal fin. A nuestro objeto le podemos poner el nombre que queramos, pero lo mejor es uno original como:
>>>saturno=Saturn() Ahora, para poder consultar las propiedades de ese objeto, hemos de decirle a nuestro ordenador que las calcule mediante la orden compute. Si no pasamos una fecha a este método, toma la hora del sistema por defecto, lo cual no es de gran ayuda. Le tenemos que pasar una fecha o una fecha más una hora de la sigiente manera:
>>>saturno.compute('2012/06/24 12:00:00')
Es preciso indicar las fechas en formato AAAA/MM/DD.
Ahora dispondremos de un buen número de efemérides disponibles, entre las que cabría citar:
>>>print saturno.ra
>>>print saturno.dec
>>>print saturno.phase
>>>print saturno.mag

Para obtener la ascensión recta, declinación, fase y magnitud de Saturno, respectivamente. Hay muchas otras propiedades disponibles, consulta la documentación del módulo.
Avanzando: Cálculo de orto, ocaso y tránsito
De todos modos, esto tampoco nos es de gran ayuda para planificar nuestra observación. Para obtener ortos y ocasos tenemos que hacer uso de otro objeto: observer, esto es, el observador del fenómeno a calcular. Dispondremos entonces de un grupo de funciones especializadas para el objeto de tipo observador que realizan este tipo de cálculos.
Crear un objeto de tipo observador es muy sencillo. Por ejemplo, si consideramos San Fernando como un observador, sería:
>>>sanFernando=Observer()
Ahora le indicamos, como mínimo, los parámetros de fecha, hora y latitud/longitud para definirlo correctamente. Es posible, no obstante, especificar detalles más profundos como época, temperatura ambiente o altitud.
>>>sanFernando.lat='36:28:00'
>>>sanFernando.lon='-6:12:00'
>>>sanFernando.date='2012/06/28 23:23:00'
Habrás observado que es preciso indicar las coordenadas y ángulos con un formato un tanto peculiar. Esta es una característica del módulo pyephem un tanto incómoda, pero fácil de acostumbrarse a ella. El formato es grados:minutos:segundos, tanto para la latitud y la longitud como para otras medidas angulares (RA, Dec, etc.) y se lo debemos pasar como cadena, o sea, entre comillas.
Si necesitas convertir una coordenada decimal en una sexagesimal, es preciso hacer lo siguiente: Se toma la parte entera de la coordenada, que serán los grados. La parte decimal (mantisa) la multiplicaremos por 60, con lo que tendremos otro número del que tomaremos su parte entera como los minutos y haremos la misma operación para obtener, finalmente los segundos, por ejemplo:
36.46789º  = 36 grados
0.46789x60 = 28.0734 minutos = 28 minutos
0.0734x60  = 4.404 segundos.
En nuestro caso, una vez convertido correctamente la coordenada sería '36:28:04' Para calcular el tránsito, orto y ocaso de los objetos, procederemos de la siguiente manera, suponiendo que ya tenemos el observador creado y el objeto celeste también:
Para el orto:
observador.next_rising(cuerpo celeste)
Para el tránsito:
observador.next_transit(cuerpo celeste)
Para el ocaso:
observador.next_setting(cuerpo celeste)
Nuestro primer script con pyephem
Ahora, lo podemos poner todo junto y crear un pequeño script para calcular el orto, tránsito y ocaso de, por ejemplo, Saturno, el 2 de junio de 2012 en San Fernando(Cádiz). El script quedaría así: #!/usr/bin/env python
import ephem #yo prefiero importar así el módulo por claridad
Saturno=ephem.Saturn() #Creamos el objeto celeste
sanFernando=ephem.Observer()    # Creamos el observador como objeto
sanFernando.lat='36:20:00'      #Especificamos su latitud
sanFernando.lon='-6:12:00'      #Especificamos su latitud (Ojo, latitudes oeste son negativas)
sanFernando.date='2012/06/02'   #Especificamos la fecha de observación
print 'Orto: ' , sanFernando.next_rising(Saturno)
print 'Tránsito: ', sanFernando.next_transit(Saturno)
print 'Ocaso: ', sanFernando.next_setting(Saturno)

Sólo nos queda guardar el script en un fichero con la extensión .py (por conveniencia, realmente no es necesario), por ejemplo efemerides.py y darle los permisos de ejecución necesarios:
chmod +x efemerides.py
Ejecutamos el script y obtenemos (Todas las horas son UT):
Orto:  2012/6/2 13:01:58
Tránsito:  2012/6/2 20:23:51
Ocaso:  2012/6/2 03:49:52
Datos, que, si los comparáis con los que os proporciones un almanaque o alguna web de efemérides, comprobaréis que son bastante exactos. Es preciso señalar que puede haber diferencias, pues es posible especificar, para el observador, parámetros de altitud sobre el nivel del mar, presión atmosférica, etc., que pueden variar de un motor de cálculo a otro. Aparte de esto, habitualmente las efecmérides se presentan redondeadas al minuto, con lo cual puede existir pequeñas diferencias. Pero, en definitiva, se trata de un método suficientemente preciso para las necesidades del aficionado.
En futuros artículos intentaremos sacarle algo más de partido a pyephem y a lo que hemos aprendido hoy... ¡Hasta la próxima!

Facebook
Twitter