"FORMATO FITS"


  1. Introducción
  2. Representación de la información
  3. Encabezado FITS
  4. Parámetros ópcionales
  5. Ejemplo de encabezado FITS

INTRODUCCION

El uso de instrumentación electrónica en las observaciones astronómicas, como la radio astronomía, los arreglos CCD, etc. a obligado a tener imágenes digitales y en consecuencia, a desarrollar procesos computacionales para su análisis.

Estas imágenes generalmente viajan entre institutos y observatorios, donde los equipos de cómputo varian, así como la manera de grabar la información digital. Además cada instituto desarrolla una gran cantidad de software basado en su propio formato. Esto implicaría tener un formato estándar para el traspaso de imágenes digitales y obligaría a cada instituto a realizar dos programas, uno para leer el formato estándar y pasarlo al formato local y otro para realizar la tarea inversa, pero si esto lo multiplicamos por el número de institutos que tienen alguna relación, se convertiria en una serie de programas de dificil uso.

En 1977 la "Workshop on Standars for Image Pattern Recognition", después de revisar una gran variedad de formatos, concluyó que ninguno de ellos era simple, flexible y general, pero acordó el diseño de uno nuevo. De esta manera nacio el formato FITS - Flexible Image Transport System.

REPRESENTACION DE LA INFORMACION

FITS es un formato para escribir imágenes digitales sobre cinta magnética de 7 y 9 pistas, las propiedades físicas de la cinta son especificadas conforme al ANSI - American National Standars Institute.

Cada registro físico sobre la cinta contiene uno y sólo un registro lógico, los registros tienen una longitud de 23,040 bits (2,880 bytes de 8 bits), esta longitud siempre es divisible por cada byte y longitud de palabra de cualquier computadora comercial, esto es de 6, 8, 12, 16, 18, 24, 32, 36, 48, 60 y 64 bits.

Cada imagen se deposita en un archivo de cinta, el cual inicia con uno o más registros lógicos que contienen el encabezado de los datos que son 36 tarjetas de 80 carácteres de 8 bits. El código empleado es el ASCII, usando los primeros 7 bits únicamente.

El primer registro del arreglo de datos aparece inmediátamente después del último registro del encabezado. El primer valor de pixel de la imagen aparece en la primera posición del primer registro del arreglo de datos. El primer pixel de cada fila siempre se pondrá dentro de la siguiente posición de pixel disponible en el registro lógico corriente. Y el residuo del último registro del arreglo de datos después del último pixel de la imagen será llenado con ceros.

El formato soporta tres tipos de información, que son:

  1. Entero binario de 8 bits sin signo
  2. Entero binario con signo en complemento a dos de 16 bits
  3. Entero binario con signo en complemento a dos de 32 bits
Se requiere que los 2 o 4 bytes de 16 o 32 bits por pixel respectivamente, se escriban sobre la cinta en orden decreciente. El byte que incluye el bit de signo, será el primero y el byte que tiene el bit 1 de los 16 o 32 bits del pixel será el último. Así, usuarios de la serie DEC PDP-11 estan obligados a corregir la acción de lectura por byte-swap. Por último, el archivo de registros de datos representante de la imagen, es terminado con una marca de cinta.

ENCABEZADO FITS

Los registros de encabezado describen la estructura y el sistema de coordenadas del arreglo de datos, llevando además, parámetros auxiliares y comentarios. El encabezado como ya se dijo, es escrito en código ASCII para ser interpretado facilmente por el usuario. Cada línea de descripción se le llama tarjeta y consta de 80 columnas, pueden existir tarjetas de comentarios con cantidades ilimitadas de texto, inclusive se puede transportar un programa fuente. No existe un límite en el número de tarjetas para el encabezado, únicamente la última tarjeta deberá tener la llave END. La gramática básica de cada tarjeta en un encabezado FITS es dada por:

llave = valor / comentario

Donde llave es una cadena ASCII de 8 caracteres, de la columna 1 a la 8, justificada a la izquierda. El signo = aparece en la columna 9, la columna 10 es un blanco. Con algunas restricciones, valor se escribe siguiendo las reglas del ANSI FORTRAN 77, y se requiere el uso de un formato fijo para todos los parámetros. El slash (/) indica que lo siguiente es un comentario y que puede aparecer en alguna columna después del valor del parámetro con al menos un carácter blanco de por medio. Se suguieren letras minúsculas en el comentario para hacer distinción con las llaves o sus valores.

El formato de las variables es el siguiente, para el tipo:

Lógico:
T o F en la columna 30.
Entero:
Justificado a la derecha de las columnas 11 a la 30; si hay parte imaginaria, justificada a la derecha de las columnas 31 a la 50.
Real:
Con punto decimal; justificada a la derecha (si se usa notación exponencial) de la columna 11 a la 30; si hay parte imaginaria, justificada a la derecha (si se usa notación exponencial) de las columnas 31 a la 50.
Caracter:
A lo más 8 caracteres, aunque se permiten cadenas más largas. Se inicia con el signo (') en la columna 11 y termina la cadena con el signo (') antes de la columna 20.

ENCABEZADO MINIMO FITS

Para decodificar fácilmente una cinta normal FITS en cualquier sistema de cómputo, se define un conjunto mínimo de llaves para describir la imagen, estas llaves ocupan un orden y un formato fijo en los registros del encabezado. Las llaves son SIMPLE, BITPIX, NAXIS, NAXISn y END. Las primeras cuatro aparecen en ese orden, como las cuatro tarjetas de imagen en el primer registro del encabezado de cada archivo de cinta. Su descripción es la siguiente:

SIMPLE
Variable lógica que indica si el archivo conforma el estándar básico de FITS.
BITPIX
Variable entera que especifica el número de bits usados para representar el valor del pixel.
NAXIS
Variable entera que especifica el número de ejes coordenados en la imagen.
NAXIS1
Variable entera que especifica el número de pixeles a lo largo del eje que varia más rápidamente en el arreglo
NAXIS2
Variable entera que especifica el número de pixeles a lo largo del segundo eje que varia rápidamente en el arreglo.
La llave fundamental SIMPLE se requiere que este en la primera tarjeta del primer registro del encabezado de la imagen.

SIMPLE = T

Indica que el archivo presente conforma el estándar básico FITS, esto es, que el arreglo de datos esta escrito en 8 bits sin signo o 16, o 32 bits para entero binario en complemento a dos en el orden del byte canónico. Que el arreglo es n-dimensional, espaciado regularmente y que los requerimientos de parámetros de las llaves son dados en las localidades específicas del primer registro del encabezado. Notar que la presencia de registros adicionales que sigan a los registros de datos de la imagen y/o el uso de cero como el tamaño de la imagen, no es una violación de la llave SIMPLE = T.

El número de parámetros NAXISn, únicamente se especifica a traves del valor de NAXIS y el limite es NAXIS999. La palabra clave END ocupa la última tarjeta del último registro del encabezado antes de los ASCIIs blancos.

Por ejemplo, supongamos que se necesita exportar una imagen de una cámara CCD de 190x244, que tiene únicamente 12 bits significativos por pixel.
La primera posición en el arreglo es la que varía más rápidamente, teniendo 190 posibles valores, en otras palabras, la forma de declararlo en Fortran como matriz será Z(190,244). Puede usarse 16 bits en complemento a dos para transmitir datos.

El encabezado mínimo FITS de este ejemplo tendría 6 tarjetas en el siguiente orden.

		|		Número de columna
	________________________________________________________
	Tarjeta | 1	  9			  30
	________________________________________________________
	   1	| SIMPLE  =			  T / comentario
	   2	| BITPIX  =			 16 / comentario
	   3	| NAXIS   =			  2 / comentario
	   4	| NAXIS1  =			190 / comentario
	   5	| NAXIS2  =			244 / comentario
	   6	| END

Las restantes 30 tarjetas de este único registro de encabezado se llenan de blancos.

Después de escribir el registro del encabezado, la matriz de los datos se escriben en un registro de 1440 bytes de 16 bits por pixel. El primer valor del pixel Z(1,1) se pone en los primeros dos bytes del registro con los bits más significativos en el primer byte. Entonces los bits más significativos del segundo pixel Z(2,1) son puestos en el tercer byte y los menos significativos en el cuarto byte. El proceso continúa de manera similar, teniendo que los bits más significativos del primer pixel en la segunda fila Z(1,2) ocupan el byte 381 del registro y el valor del pixel número 110 de la fila 8 se encuentra en los bytes 2879 y 2880 del registro. Así, el registro se escribe y los bits más significativos de Z(111,8) son puestos en el primer byte del registro siguiente.
El registro 33 y último registro del arreglo de datos, contiene solamente 280 pixeles y los restantes son llenados con cero. Tomando en cuenta el encabezado, el archivo de cinta magnética contiene 34 registros y se termina con una marca de cinta. Claro está que se puede escribir más de un archivo sobre la cinta y después del último archivo se recomienda escribir una marca de cinta extra.

La utilización de SIMPLE = F implica que la información en la cinta no reune las reglas básicas del formato. Algunas de las razones pueden ser el número de bits por pixel o que la representación del pixel no es estándar. También puede ser usado para almacenar o intercambiar datos con una institución o entre usuarios con intereses similares. FITS esta deliberadamente diseñado para tener esta flexibilidad y ésta se confía al buen sentido común de los usuarios.

PARAMETROS OPCIONALES

Por causa de las dificultades históricas encontradas en el intercambio de imágenes FITS, sobre todo cuando no se proporciona información adicional, como serían las coordenadas, intensidad, etc. Se presenta en esta tabla, un conjunto de llaves con su descripción de uso, estas llaves se consideran opcionales, pero muy recomendables.

Nota: El tipo de las llaves es: (f) Punto flotante; (e) Entero;
      (c) Carácter; y (n) Ninguno.

BSCALE		(f)	Factor de escala, usado para convertir el
			valor del pixel aun valor real
			(real=[tipo*BSCALE]+BZERO)
BZERO		(f)	Desplazamiento aplicado al valor verdadero
			del pixel.
BUNIT		(c)	Unidades de brillo, que pueden ser:
			'K	 '   Kelvins
			'JY/BEAM '   Jy por unidad área del haz
			'JY/PIX	 '   Jy por pixel
			'MAG/PIX '   Magnitud por pixel
			'M/SEC	 '   Metros por segundo (campos de
					velocidad)
			'DEGREES '   Angulo en grado (ángulo de
					polarización)
			'	 '   Sin unidad (ejem. profundidad
					óptica, índice espectral)
BLANK		(e)	Valor asignado a pixeles indefinidos
OBJECT		(c)	Nombre de la imagen
DATE		(c)	Fecha de escritura del archivo ('dd/mm/aa')
DATE-OBS	(c)	Fecha de adquisición de los datos ('dd/mm/aa')
ORIGIN		(c)	Forma en que se escriben los datos
INSTRUME	(c)	Instrumento de adquisición
TELESCOP	(c)	Telescopio empleado
OBSERVER	(c)	Nombre/Identificación del observador
BLANK		(c)	Columna 9 a la 80 para comentario
COMMENT		(c)	Columna 9 a la 80 para comentario
HISTORY		(c)	Columna 9 a la 80 para comentario
CRVALn		(f)	Tipo de coordenada física en el n-ésimo eje
			Consistente con el sistema de unidades
			internacionales (SI), o añadir grados para
			ángulos, o añadir Janskys para flujo.
			Por ejemplo, distancia en metros, masa en
			kilogramos, tiempo en segundos y temperatura
			en grados Kelvin
CRPIXn		(f)	Localización de la referencia del arreglo
			de pixeles a lo largo del eje n
CDELTn		(f)	Incremento de la coordenada física a lo
			largo del eje n
CTYPEn		(c)	Tipo de coordenada física sobre el eje n
			Por ejemplo:
			'RA	 '   Ascención recta en grados
			'DEC	 '   Declinación en grados
			'LL	 '   Plano tangente (E-W) en grados
			'MM	 '   Plano tangente (N-S) en grados
			'GLON	 '   Longitud galáctica en grados
			'GLAT	 '   Latitud galáctica en grados
			'ELON	 '   Longitud eclíptica en grados
			'ELAT	 '   Latitud eclíptica en grados
			'TIME	 '   Tiempo en segundos
			'FREQ	 '   Frecuencia en Hertz
			'LAMBDA	 '   Longitud de onda en metros
			'VELO	 '   Velocidad en metros/segundo
			'VELO-LSR'   Velocidad respecto al estándar
					local de reposo
			'VELO-HEL'   Velocidad respecto a la del sol
			'VELO-OBS'   Velocidad del observador
			'PIXEL	 '   Sin unidad
			'STOKES	 '   Sin unidad
			'COMPLEX '   Valor complejo, 1=real y
					2=imaginario
			'DISTANCE'   Distancia en el cielo entre dos
					puntos. Es usado para
					sistemas de coordenadas que
					no son estándar
			'ANGLE	 '   Angulo sobre el cielo en grados
CROTAn		(f)	Angulo de rotación del n-ésimo eje del tipo
			de coordenadas establecido
DATAMAX		(f)	Valor máximo de los datos en el archivo
DATAMIN		(f)	Valor mínimo de los datos en el archivo
EPOCH		(f)	Epoca del sistema de coordenadas (años)

EJEMPLO DE ENCABEZADO FITS

El ejemplo de encabezado FITS para imagen directa mostrado aqui, abarca dos registros. Las primeras 7 tarjetas dan el mapa de la imagen, las tarjetas 8, 13, 34 y 36 son comentarios equivalentes a COMMENT o HISTORY. Las tarjetas 9 a la 12 definen la escala de brillo y el nombre de la imagen, las tarjetas 14 a la 33 proveen información sobre los ejes coordenados y las tarjetas restantes documentan a la imagen. La tarjeta END es la sexta tarjeta del segundo registro del encabezado, las restantes 30 tarjetas son llenadas con blancos.

               1         2         3         4         5         6         7         8
tarj. 12345678901234567890123456789012345678901234567890123456789012345678901234567890
________________________________________________________________________________
1/ 1: SIMPLE  =                    T / basic format from NRAO(CV)
1/ 2: BITPIX  =                   16 / 2-byte twos-compl integers
1/ 3: NAXIS   =                    4 / number of axes
1/ 4: NAXIS1  =                  512 / # pixeles/row (RA)
1/ 5: NAXIS2  =                  512 / # rows        (DEC)
1/ 6: NAXIS3  =                    1 / # frequencies
1/ 7: NAXIS4  =                    2 / # stokes (BEAM, I,Q,U,V)
1/ 8:
1/ 9: BSCALE  =         1.278419E-07 / real = tape*BSCALE+BZERO
1/10: BZERO   =                  0.0 / no bias added
1/11: BUNIT   = 'JY/BEAM '           / units of brightness
1/12: OBJECT  = '0810+665'           / source name
1/13:
1/14: CRVAL1  =          122.5419617 / ref point value degrees
1/15: CRPIX1  =               256.00 / ref point pixel location
1/16: CTYPE1  = 'LL      '           / coord type: value is RA
1/17: CDELT1  =        -6.944167E-05 / coord val incremt with count degr
1/18: CROTA1  =                  0.0 / ccw rotates -RA into +DEC
1/19: CRVAL2  =           66.5995040 / ref point value degrees
1/20: CRPIX2  =               256.00 / ref point pixel location
1/21: CTYPE2  = 'MM      '           / coord type: value is DEC
1/22: CDELT2  =        -6.944167E-05 / coord val incremt with count degr
1/23: CROTA2  =                  0.0 / ccw rotates +DEC into +RA
1/24: CRVAL3  =        4.8856000E+09 / ref point value Hz
1/25: CRPIX3  =                  1.0 / ref point pixel location
1/26: CTYPE3  = 'FREQ    '           / coord type: value is Hz
1/27: CDELT3  =                  0.0 / coord val incremt with count degr
1/28: CROTA3  =                  0.0 / ref rotation undefined
1/29: CRVAL4  =                  0.0 / ref point value stokes #
1/30: CRPIX4  =                  1.0 / ref point pixel location
1/31: CTYPE4  = 'STOKES  '           / coord type: value is #
1/32: CDELT4  =                  1.0 / coord val incremt with count ST #
1/33: CROTA4  =                  0.0 / stokes rotation undefined
1/34:
1/35: INSTRUME= 'VLA     '           /NRAO(CV) VLA mapping, programs
1/36:
2/ 1: DATE-MAP= '16/10/78'           / map creation date dd/mm/yy
2/ 2: DATE    = '27/05/79'           / map writing date dd/mm/yy
2/ 3: ORIGIN  = 'NRAO(CV) PGM=DEC2FITS(V1)'
2/ 4: HISTORY VLACV MAP   METHOD='FFT' DATA='OBS, VISIBILITY'
2/ 5: HISTORY VLACV MAP   WCONU=  0.00000E+00 WCONV= 0.00000E+00 TCONU=0
2/ 6: END

DESCRIPCION DETALLADA

Con respecto al ejemplo anterios, la primera tarjeta informa que el archivo de cinta conforma el formato básico. La matriz consta de 16 bits por pixel, entero binario en complemento a dos (tarjeta 2), y es de cuatro dimensiones (tarjeta 3), las siguientes tarjetas aparecen en orden creciente y muestran que la matriz es de dos arreglos de 512x512. El tercer eje es de dimensión uno y se usa con los diversos ejes coordenados especificando un parámetro asociado con el dato, en este caso, es la frecuencia de observación (CTYPE3 = 'FREQ', CRVAL3 = 4.8856E+9 o 4.8856 GHZ). La cuarta dimensión es un tipo particular de eje, definido en los parametros opcionales.

Los parámetros BSCALE y BZERO se usan para convertir los pixeles a valores reales, la fórmula dada en el comentario es parte del estándar FITS. La palabra BUNIT y OBJECT dan la unidad usada para luminosidad de la imagen y su nombre respectivamente. Una llave que no se usa es BLANK y es el valor entero asignado a pixeles indefinidos, para 16 bits por pixel el valor usual es -32768.

La especificación de coordenadas esta basado sobre el concepto de pixel de referencia, dando su localidad a lo largo del eje (CRPIXn), el valor de la coordenada física para tal pixel (CRVALn) y el espaciado de las coordenadas físicas entre pixeles (CDELTn). El valor de localización del pixel de referencia se basa en un contador que inicia de 1 hasta NAXISn para cada eje, CRPIXn es además, una variable de punto flotante y la localización del pixel de referencia no tiene que corresponder con el pixel actual. Los valores tales como 129.5 o -3 son perfectamente aceptables y CDELTn es el incremento en la coordenada física. Este pixel de referencia aparece próximo al centro del arreglo (respecto a las primeras dos coordenadas) y tiene un valor de 08H 10M 10.07S, +66°35'58".2 .

El signo de CDELT1 y CDELT2 declara que el valor del primer pixel que se encuentra sobre la cinta aparece sobre la esquina noroeste del mapa. Los parámetros CTYPEn muestran que el sistema de coordenadas es el (L, M) a menudo usado en mapeo sintetizado. Los parámetros de rotación CROTAn describen un sistema de coordenadas normales. El tercer eje como tiene dimensión 1, es usado simplemente para especificar la frecuencia de observación. El cuarto eje es una coordenada arbitraria llamada Stokes que es definido para tener valores 0, 1, 2, 3 y 4 que significa que emite parámetros de polarización de Stokes I, Q, U y V.

El primer arreglo de 512x512 es un mapeo de la emisión sintetizada y el segundo es un mapeo de los campos de radiación no polarizada del objeto. El orden de las tarjetas de definición de coordenadas es arbitrario. El valor de INSTRUME, TELESCOP, OBSERVER y ORIGIN son usados para documentar las observaciones, el tipo de telescopio, el científico que las efectuo y la institución que procesa la cinta. Notar que las dos palabras llave más largas INSTRUME y TELESCOP son nombres truncados a sus primeros ocho carácteres. Aunque HISTORY esta definido solamente para ser un comentario, se propone usarse para documentar los pasos de procesado, que tienen que ser aplicados a los datos. La llave que inicia con la cadena genérica DATE, se usa para documentar varios días relevantes, notar que la cadena del valor del día se codifica de la forma 'dd/mm/aa' y los comentarios son esenciales cuando se usan llaves no estándar (tal como DATE-MAP).

En este encabezado, se presenta una serie de barridos de microdensitómetro de una larga endidura espectral de la galaxia NGC 4258, con 1024 puntos en el primer eje, el segundo eje indica que son 32 puntos a lo largo de la endidura de barrido (separada por 0.2 mm). Los datos pueden ser almacenados de forma logarítmica para permitir un gran rango dinámico, permitido con 32 bits. Este método puede ser usado para almacenar algunos valores que tengan un rango excedido con respecto a los bits disponibles, el campo del comentario puede usarse para dar información de la endidura y la orientación sobre el cielo.

               1         2         3         4         5         6         7         8
tarj. 12345678901234567890123456789012345678901234567890123456789012345678901234567890
________________________________________________________________________________
1/ 1: SIMPLE  =                    T /
1/ 2: BITPIX  =                   32 / 4-byte twos-compl integers
1/ 3: NAXIS   =                    4 / NR. of axes
1/ 4: NAXIS1  =                 1024 / NR. pts per spectrum
1/ 5: NAXIS2  =                   33 / NR. samples along the slit
1/ 6: NAXIS3  =                    1 / RA. of center sample
1/ 7: NAXIS4  =                    1 / DEC of center sample
1/ 8:
1/ 9: BSCALE  =              1.0E-06 / real = tape*BSCALE+BZERO
1/10: BZERO   =                    0 / arbitrary ordinate
1/11: BUNIT   = 'LOG F   '           / flux scale
1/12: OBJECT  = 'NGC 4258'           / name of object
1/13:
1/14: CRVAL1  =         4861.342E-10 / H beta wavelength
1/15: CRPIX1  =                 37.5 / location of H beta line
1/16: CRTYPE1 = 'LAMBDA  '           / name of axis
1/17: CRDELT1 =              3.2E-10 / resolution between points
1/18:
1/19: CRVAL2  =                  0.0 /
1/20: CRPIX2  =                   17 / center is NR. 9
1/21: CRTYPE2 = 'DISTANCE'           / along the slit on the plate
1/22: CRDELT2 =               0.0002 / 2mm between samples along slit
1/23:
1/24: COMMENT               The RA. of the slit center is 184.1225 deg.
1/25: COMMENT               The DEC of the slit center is 47.58139 deg.
1/26:
1/27: COMMENT               The slit is oriented at an angle of
1/28: COMMENT               35.4 degrees. Rotation is clockwise N thru W
1/29:
1/30: COMMENT
1/31: COMMENT
1/32:
1/33: COMMENT  THE DISPERSION WAS 40x10E-10 M PER 10E-3 METER
1/34:
1/35: INSTRUME= 'ABC CAMERA'
1/36: TELESCOP= '90 INCH '
2/ 1: OBSERVER= 'SMITH   '
2/ 2: ORIGIN  = 'KPNO-PDS'
2/ 3: DATE    = '27/10/78'
2/ 4: HISTORY DATA CORRECTED FOR DARK FIELD BUT NO ABSOLUTE INTENSITY CAL
2/ 5: COMMENT  SEEING 2 ARC SECOND
2/ 6: END


Astronomy & Astrophysics Supplement Series. June 1981, page 363.
FITS: A Flexible Image Transport System. D.C. Wells, E.W. Greisen y R.H. Harten