IRAF (Image Reduction and Analysis Facility) es una colección de software escrito en el Observatorio Nacional de Astronomía Óptica (NOAO) orientado a la reducción de imágenes astronómicas y espectros en forma de matriz de píxeles. Se trata principalmente de datos tomados de detectores de matriz de imágenes como CCD . Está disponible para todos los principales sistemas operativos para mainframes y computadoras de escritorio. IRAF fue diseñado para ser multiplataforma, compatible con VMS y sistemas operativos similares a UNIX . Su uso en Microsoft Windows fue posible gracias a Cygwin en versiones anteriores, y hoy se puede hacer con el Subsistema de Windows para Linux . Hoy en día, se utiliza principalmente en macOS y Linux .
Los comandos IRAF (conocidos como tareas) están organizados en estructuras de paquetes. Se pueden agregar paquetes adicionales a IRAF. Los paquetes pueden contener otros paquetes. Hay muchos paquetes disponibles de NOAO y desarrolladores externos que a menudo se centran en una rama de investigación o instalación en particular.
La funcionalidad disponible en IRAF incluye la calibración de los flujos y posiciones de los objetos astronómicos dentro de una imagen, la compensación de las variaciones de sensibilidad entre los píxeles del detector, la combinación de múltiples imágenes o la medición de los desplazamientos al rojo de las líneas de absorción o emisión en un espectro .
Aunque IRAF sigue siendo muy popular entre los astrónomos, se detuvo el desarrollo y el mantenimiento institucionales. IRAF ahora se mantiene como software comunitario. [1] [2]
El proyecto IRAF comenzó en el otoño de 1981 en el Observatorio Nacional de Kitt Peak. En 1982, se completó un diseño preliminar y la primera versión del lenguaje de comandos (CL). Se fundó el Grupo IRAF. El diseñador del sistema IRAF y programador jefe fue Doug Tody. En 1983, el Instituto de Ciencia del Telescopio Espacial seleccionó IRAF como el entorno para su sistema de análisis de datos SDAS y adaptó el sistema a VMS. La primera versión interna de IRAF se publicó en 1984. Después de una distribución limitada en algunos sitios externos, la primera versión pública se publicó en 1987. [3]
A mediados de los años 90, se inició el proyecto "Open IRAF" para abordar los problemas que se observaban en ese momento. Esto incluía enlaces de lenguaje, una forma de usar componentes IRAF sin el entorno IRAF completo, nuevos tipos de datos y código de usuario cargable dinámicamente. [4] Este proyecto nunca se completó.
A finales de los años 90, el desarrollo de IRAF se ralentizó considerablemente, ya que el sistema se consideraba maduro. El soporte a los usuarios se trasladó a un foro web en 2005 y el nuevo desarrollo del sistema central se redujo oficialmente a un nivel muy bajo. [5] Sin embargo, el trabajo voluntario de los desarrolladores de IRAF continuó y distribuyeron algunas versiones intermedias no oficiales. [6]
Entre 2006 y 2009, se realizó un primer esfuerzo para portar IRAF a 64 bits en el Instituto de Ciencias Espaciales y Astronáuticas de Japón. [7] Si bien este esfuerzo no evolucionó hasta convertirse en una nueva versión oficial de IRAF, contribuyó con partes significativas al puerto de 64 bits de NOAO.
NOAO reanudó sus esfuerzos de desarrollo en 2007, [8] adaptando el sistema a 64 bits y agregándole capacidades de Observatorio Virtual. Esta fase finalizó en 2013 con el lanzamiento de la versión 2.16.1.
En 2017, el código fuente se transfirió a GitHub . En un esfuerzo por empaquetar el software IRAF para Debian , se limpió del código fuente no libre restante y, desde entonces, lo mantiene únicamente la comunidad. Después de algunos lanzamientos previos, se lanzó la versión 2.17 a principios de 2022. [9]
En 2023, NOIRLab (sucesor de NOAO) reanudó parte del desarrollo y creó su propia versión 2.18 con un alcance limitado para respaldar el antiguo proceso de reducción de datos de Gemini . [10] Los cambios relevantes se fusionaron posteriormente en la versión comunitaria 2.18. [11]
La licencia de IRAF generalmente sigue el esquema de licencias MIT . Las versiones anteriores contenían algún software no libre. En particular, el código gráfico NCAR restringía la redistribución de IRAF antes de que fuera eliminado en la versión 2.16. [13] Además, las versiones anteriores usaban código tomado del libro Numerical Recipes bajo una licencia diferente. Este código fue eliminado o reemplazado por código abierto en versiones posteriores a la 2.16.1. [14] Esto permitió la distribución de paquetes de IRAF en distribuciones de Linux convencionales como Debian [15] o Ubuntu.
Cuatro componentes básicos conforman el sistema IRAF en tiempo de ejecución: [16]
Sólo el HSI es dependiente del sistema. Todos los demás componentes son portables mediante el uso de las funciones proporcionadas por el HSI. De esta manera, la portabilidad a un nuevo sistema requiere sólo cambios en este componente. Sin embargo, el diseño inicial se basaba implícitamente en el uso universal de tipos de datos de 32 bits y, por lo tanto, la portabilidad a 64 bits requirió grandes esfuerzos no sólo en el HSI sino en todos los componentes del sistema.
Los paquetes de aplicación se estructuran recursivamente en subpaquetes y tareas. Se pueden dividir en dos clases: utilidades generales de sistema y de procesamiento de datos básicos, y paquetes específicos para la reducción y el análisis de datos astronómicos. Las tareas se escriben predominantemente en SPP y CL.
Los paquetes del sistema se encuentran en el paquete base de IRAF y proporcionan herramientas para el CL, utilidades útiles del sistema operativo y utilidades científicas básicas, por ejemplo, para el procesamiento de imágenes:
Los paquetes noao se utilizan para el análisis de datos astronómicos ópticos. La mayoría de estas tareas son generales, pero el paquete imred también contiene tareas de reducción de datos para instrumentos específicos. Algunos de los paquetes importantes son:
Una de las fortalezas de IRAF era la existencia de varios paquetes externos que resolvían problemas específicos o implementaban canales especializados de reducción de datos. Entre los paquetes se encuentran:
Sin embargo, muchos de estos paquetes ya no reciben mantenimiento. [17] La migración a 64 bits también requirió un esfuerzo significativo y no todos los paquetes externos fueron trasladados y, por lo tanto, solo se pueden usar en un entorno de 32 bits.
IRAF permite a los usuarios escribir sus propias tareas de dos formas principales. Una es escribiendo scripts de procedimientos no compilados (lenguaje de comandos, CL). La segunda es a través de programas de preprocesador de subconjuntos compilados (SPP). Existen documentos tutoriales para ambos métodos. [18]
El lenguaje de comandos (CL) sirve como interfaz de soporte de comandos y tiempo de ejecución entre el usuario en su terminal de computadora y los programas de aplicación que está ejecutando. El usuario escribe sus comandos en el CL y este realiza todas las tareas y manipulaciones de archivos que sean necesarias para ejecutar los comandos. En versiones posteriores, el CL original se amplió a ECL, que tiene una línea de comandos editable como su principal ventaja. También se desarrolló una versión que permitía el acceso directo al Observatorio Virtual (VOCL).
El CL sirve principalmente como un shell y organiza el trabajo con el sistema y las aplicaciones. Hay tres tipos de tareas que el CL puede ejecutar: tareas nativas, que son parte de ejecutables IRAF compilados, scripts (tareas CL que son tareas escritas en CL) y tareas foráneas, programas externos o scripts que son ejecutados por el CL. Para cada tarea, puede existir un archivo de parámetros. Contiene una descripción de cada uno de los parámetros utilizados por la tarea que el CL debe conocer y administrar. [19]
Aquí hay un script simple de Hola Mundo en CL:
{ print ( ' Hola , mundo !! ' ) }
Los scripts CL normalmente tienen el sufijo .cl
, lo que puede causar conflictos con los archivos de código Common Lisp .
El lenguaje de preprocesador de subconjuntos (SPP) implementa un subconjunto del lenguaje de preprocesador IRAF que se planeó en los primeros días de IRAF. El lenguaje SPP se basa en el lenguaje Ratfor . La forma léxica, los operadores y las construcciones de flujo de control son idénticos a los proporcionados por Ratfor. Las principales diferencias son los tipos de datos, la forma de un procedimiento, la adición de cadenas en línea y constantes de caracteres, el uso de corchetes para matrices y la declaración de tarea . Las facilidades de entrada/salida proporcionadas son bastante diferentes. [20]
El programa xc , proporcionado con IRAF, traduce programas SPP a Fortran 66 , y desde allí con f2c a código C.
El preprocesador se complementa con mkpkg , una herramienta de automatización de compilación similar a make , generic , una herramienta para traducir tipos genéricos en código fuente dependiente del tipo, y xyacc , un yacc modificado para producir salida SPP.
Aquí hay un programa simple de Hola Mundo en SPP:
tarea hola # procedimiento de tarea invocable CL hola () # procedimiento común inicio llamada printf ( "hola, mundo \n " ) fin
Los programas SPP normalmente tienen el sufijo .x
, aquellos que necesitan ser preprocesados con la herramienta genérica.gx
tienen .
Un entorno de trabajo IRAF completo normalmente requiere otras dos aplicaciones: una ventana xterm extendida con una ventana gráfica (llamada xgterm y distribuida en un paquete x11iraf independiente) y un programa de visualización de imágenes denominado "servidor de imágenes". Los dos servidores de imágenes más populares son SAOImageDS9 (de SAO ) y ximtool (NOAO, también distribuido en el paquete x11iraf). [21]
Como alternativa a xgterm y al lenguaje de comandos, se puede utilizar el paquete PyRAF de Python , que es capaz de traducir scripts de CL a scripts de Python. También proporciona una ventana gráfica (basada en Tk o en Matplotlib ). Como shell de comandos, se puede utilizar el shell de comandos de Python o IPython , o un modo especial que se asemeje en gran medida al shell de comandos de CL. [22]