REDUCCI´ON ESPECTROSC´OPICA EN IRAF Índice 1

Transcripción

REDUCCI´ON ESPECTROSC´OPICA EN IRAF Índice 1
REDUCCIÓN ESPECTROSCÓPICA EN IRAF
SEBASTIÁN BRUZZONE
Resumen. El propósito de este trabajo fue realizar la reducción espectroscópica sobre imágenes tomadas en un turno de observación del CASLEO del asteroide 1355 Magoeba utilizando como herramientas las tareas del entorno
IRAF.
Índice
1. Introducción
1.1. Imágenes de Espectros
1.2. El entorno IRAF
1.3. Ejecutando tareas
2. Los pasos a seguir
2.1. Reducción
2.2. Extracción y Calibración de espectros
3. Reducción
3.1. Secciones de Trim y Bias
3.2. Configurando las tareas
3.3. Primer paso por CCDPROC
3.4. Procesando por Flats
3.5. Segundo paso por CCDPROC
4. Extracción y Calibración del Espectro
4.1. Parámetros para la ventana de extracción
4.2. Parámetros para las ventanas de cielo
4.3. Parámetros de la Traza
4.4. Parámetros para la suma y la resta de cielo
4.5. Parámetros para el formato de salida
4.6. A modo de resumen
4.7. Usando apall
4.8. Identificación de la lı́neas de emisión
4.9. Calibración en Longitud de Onda
4.10. Normalización
5. Resultados Preliminares
6. Filtros Espaciales
6.1. Mascaras (filtros)
6.2. Aplicacion: Filtro de Mediana en el Espectro de 1355 Magoeba
7. Resultados y Análisis Cualitativo
Referencias
8. Apendice. Codigo de scripts desarrollados
8.1. Procesamiendo Básico por Lotes
1
3
3
4
4
5
5
7
8
8
11
11
16
21
21
22
22
23
23
24
24
25
26
29
32
33
35
35
36
39
42
43
43
2
SEBASTIÁN BRUZZONE
8.2.
Filtros de Medianas, Máximos y Mı́nimos
52
PROCESAMIENTO DE ESPECTROS
3
Figura 1. Espectro del asteroide 1355 Magoeba
1.
Introducción
La Astronomı́a del Sistema Solar es la rama de la astronomı́a que agrupa a las
disciplinas encargadas del estudio de los fenómenos relacionados con la creación y
evolución del sistema solar, tanto desde un punto de vista teórico, como observacional. Una de estas importantes disciplinas, de especial integres en este trabajo es
la espectroscopia de cuerpos menores del sistema solar. Con una gran relevancia
desde el punto de vista de la cosmogonı́a de nuestro sistema, nos permite llevar a
cabo un estudio de la composición de los cuerpos menores, asteroides y cometas
del sistema solar. Mediante el estudio de la composición de los mismos es posible el
encontrar respuestas a diversas interrogantes dinámicas sobre su comportamiento
o abordar otros temas de interés como el origen del agua en la Tierra o los procesos presentes en la creación del Sistema Planetario. El proceso fı́sico encargado
de la generación de espectros es bien conocido por todos. La identificación de las
diversas lı́neas presentes en los espectros de absorción de cada cuerpo nos indican
que elementos presentes hay en éste. Debido a la naturaleza de todo este proceso, en nuestro espectro recibiremos la luz reflejada del Sol en el objeto a estudio,
trayendo como consecuencia la presencia de lı́neas espectrales propias de la fuente
original, es decir, lineas espectrales generadas por la absorción de ciertas longitudes
de onda debido a diferentes elementos en la atmósfera solar, fotósfera, cromósfera.
Nuestro objetivo será identificar las lı́neas espectrales del asteroide o cometa, teniendo cuidado de no identificar alguna de estas con las presentes en un espectro
solar. Para evadir este obstáculo solo precisaremos el espectro una estrella cuya
clase espectral sea lo mas próxima a la Solar. Dichas estrellas las denominaremos
Análogas Solares.
1.1. Imágenes de Espectros. En las imágenes de espectros definimos el eje
de dispersión, y el eje espacial. Ambos pueden ser según filas o columnas en el
chip CCD. El eje de dispersión será el eje al cual es paralelo el espectro(o en la
misma dirección), según su dirección veremos la variación en longitudes de onda
del espectro. Mientras tanto el eje espacial será el eje perpendicular al primero. En
la Figura1 tenemos que el eje de dispersión es según las filas y el eje espacial según
las columnas.
4
SEBASTIÁN BRUZZONE
En las secciones siguientes veremos en detalle el procedimiento y el procesamiento
necesario en las imágenes para poder obtener debidamente nuestros espectros.
1.2. El entorno IRAF. El sistema lenguaje interpretado IRAF Image Reduction and Analysis Faclity es una plataforma especialmente diseñada para asistir en
el procesamiento y análisis de imágenes astronómicas. Esta plataforma cuenta con
una gran y variada cantidad de herramientas que mediante una linea de comandos,
el interpretador de comandos CL, pueden ser utilizadas sobre las imágenes para su
procesamiento.
El interpretador de comandos permite además la elaboración de scripts para
la ejecución de las tareas. Los comandos, llamados Tareas, son ejecutados para
realizar las varias funciones requeridas. Las tareas pueden ser ejecutadas de dos
maneras, desde la lı́nea de comandos utilizando el interpretador CL o editando
el respectivo archivo de parámetros de la tarea. Cada tarea posee un archivo de
parámetros que puede ser modificado por el usuario para cambiar el comportamiento de la tarea, o sea su salida. En orden de poder ejecutar cualquier tarea deben ser
especificados los parámetros en un orden establecido. Estos parámetros de dividen
en dos grupos, los parámetros posicionales o requeridos y los ocultos. Los primeros,
son los parámetros de entrada de la tarea. Si estos no son especificados la tarea
solicita en la linea de comandos su ingreso. A diferencia de los anteriores los ocultos
vienen especificados por defecto en cada tarea, de no ser ingresados por el usuario
desde la lı́nea de comandos la tarea asumirá el valor de éstos definidos por defecto.
Una vez modificados los parámetros ocultos en una tarea, son aprendidos por ésta
y son guardados como predeterminados para futuras sesiones (modo :ql, quit and
learn). Por el contrario al ejecutarse desde la lı́nea de comandos los parámetros
ocultos no son aprendidos.
Por ejemplo podemos ver que tipos de parámetros tenemos en una tarea viendo el
archivo de configuración de ésta. Los parámetros ocultos aparecen entre paréntesis.
Evidentemente al ejecutar cualquier tarea desde la lı́nea de comandos veremos los
parámetros requeridos por ésta. Para el comienzo, luego de haber instalado IRAF,
nos ubicamos en ese directorio y en una terminal ejecutamos mkiraf, esto creará el
archivo login.cl y el subdirectorio uparm. Se configuran las terminales. Luego ubicado en este directorio que contiene al login.cl y desde una terminal xterm o xgterm
ingresamos cl. Para salir de una sesión de IRAF, nos despedimos de cada paquete
con bye y luego logout. En el archivo login.cl podemos modificar a gusto el directorio donde se alojaran las imágenes .pix, impresoras, editores de texto, paquetes
cargados al inicio de sesión, opciones para el display de las imágenes, etc.
1.3. Ejecutando tareas. Como habı́amos visto para ejecutar una tarea debemos o bien hacerlo desde la lı́nea de comandos o modificando su archivo de parámetros. Desde la lı́nea de comando debemos seguir un orden, se ingresa la tarea, sus
argumentos y sus valores. Los argumentos se asocian a los parámetros posicionales
y los valores a los parámetros ocultos.
linea de comandos
cl> tarea posicional oculto
cl> imhead archivo1 l+
cl> hedit archivo1 archivo2 archivo3 BIASSEC "value" add+ up+ ver-
PROCESAMIENTO DE ESPECTROS
5
Se ejecuta la tarea image header al archivo1 (parámetro posicional) con valor
long=yes. Vemos el header de archivo1 en formato largo. Se ejecuta la tarea header
edit con parámetros posicionales archivo1-3, BIASSEC, value y luego add=yes, verbose=no como ocultos. Editamos el header de las imágenes archivo1-3 agregándole
el campo BIASSEC con valor value, lo agrega, lo actualiza y que no salga a pantalla.
Para la restante opción precisamos los comandos para listar y editar los parámetros
de las tareas, estos son lpar y epar respectivamente
listar y editar parámetros
cl> lpar tarea
cl> epar tarea
Se lista y se editan los parámetros de la tarea. Estas tareas pueden ejecutarse
cambiando el modo :ql (quit and learn) por :go (sale ejecutando) o simplemente una
vez ubicados en el paquete donde la tarea se encuentra, la llamamos ingresando su
nombre. Recordar que si no queremos guardar los cambios ingresar :q! en el editor.
Para borrar todos los cambios desde la lı́nea de comando ingresar unlearn tarea.
Las tareas están contenidas en paquetes, agrupadas según su similitud dentro de
cada paquete. Para poder correr una tarea se debe cargar el paquete en el que ésta
se encuentra. Para hacer esto basta escribir el nombre del paquete. Una serie de
paquetes son cargados cada vez que se inicia una sesión en IRAF, siendo posible
modificar cuales queremos al inicio de la sesión simplemente modificando el archivo
login.cl. Para salir de un paquete se ingresa bye. Para ver los paquetes cargados
cl> ?.
2.
Los pasos a seguir
2.1. Reducción. Aquı́ presentamos los pasos a seguir en el proceso de reducción. Asumimos que las imágenes han sido convertidas al formato IRAF, con sus
respectivos archivos .imh y .pix y al formato real.
Regiones de BIASSEC y TRIMSEC Identificar la región de la imagen que contiene buena información y la región correspondiente al overscan. Examinando una imagen flat utilizando la tarea implot podemos
graficar cortes según lı́neas o columnas para encontrar dichas regiones. Es
imprescindible definir correctamente éstas regiones para el procesamiento.
La región del overscan viene definida por el campo BIASSEC en el header de la imagen. Esta región será la que contenga buena información del
valor de pedestal que será removido en todas la imágenes. Es decir, queremos tener la relación cero luz cero cuentas en nuestras imágenes. La región que contiene buena información, tendrá a nuestro espectro, y esto
será una parte de la imagen, entonces cortaremos y conservaremos dicha
parte.
Esta región está definida por el campo TRIMSEC en el header de cada
imagen.
Configurar setinstrument Seleccionar el tipo de instrumento utilizado,
el tipo de imagen con la que las tareas van a trabajar. Corriendo la tarea
setinstrument esto es posible, además se definen parámetros por defecto
dentro de los paquetes imred y ccdred. En este paso tenemos que asegurarnos que las tareas en lo sucesivo comprendan los campos en el header
6
SEBASTIÁN BRUZZONE
de las imágenes, que tipo de imagen es, Flatfield, Bias, sus filtros (0,1,2 )
el formato,etc. Para verificar lo anterior corremos ccdlist a las imágenes
cl> ccdlist *.imh.
Combinar las imágenes Bias Utilizando la tarea Zerocombine combinar las imágenes Bias para obtener una imagen combinada promediada
zerocombine bias*.imh
Primer pasaje por la tarea ccdproc
Remover la región del overscan, recortar la imagen o triming y procesar
por la imagen Bias promediada Zero
cl> ccdproc *.imh overscan+ trim+ zerocor+ darkcorflatcor-illum- fring- zero=Zero.
Notar que no se procesa por Flat, por corriente oscura Darks ni fringes.
Se ajusta la región del overscan, se recorta la imagen y se remueve el valor
de pedestal en las imágenes.
Máscara de Bad Pixels. Básicamente consiste en interpolar sobre pı́xeles
defectuosos o malos , es decir, pı́xeles cuya respuesta no sea lineal. Esto
requiere de imágenes Flat de cúpula o proyector con un muy buen nivel
de cuentas e imágenes del mismo tipo con muy pocas cuentas. No tenemos
imágenes con muy pocas cuentas de este tipo por lo que no nos ocuparemos
de este caso.
Procesar por corriente oscura. No nos ocuparemos de este caso debido
a que procesaremos únicamente por Bias ya que rara vez es significativa la
corriente oscura y se corre el riesgo en estos casos de ingresar ruido en el
procesamiento.
Combinar Flats Con la tarea Flatcombine combinamos las imágenes Flat
cl> flatcombine flat*imh scale=mode
reject=crreject gain=gain rdnoise=drnoise
Combinamos las imágenes Flat usando de escala la moda, con el algoritmo
de rechazo crreject que rechaza pı́xeles positivos utilizando los valores de
ruido de lectura del chip CCD. Leerá los valores gain y read noise del header
de las imágenes. Recordar: será bueno en este paso analizar las imágenes
de Flat utilizadas, comparar cortes según lı́neas y columnas de los diversos
tipos de Flat. Esperamos que nuestras imágenes al ser procesadas por Flats
queden achatadas, si no es ası́ debemos corregirlo.
Normalizar si es necesario los Flats en la dirección del eje de dispersión. Si
nuestras imágenes presentan un gradiente según el eje de dispersión, éste es
el momento de corregirlo. Esto es posible utilizando response ubicada en
el paquete twodspec.longslit. Se divide el flat combinado por un ajuste a
bajo orden
Segundo pasaje por ccdproc
Hacemos la corrección por Flat.
ccdproc ccdtype="" flatcor+ flat=Flat*.imh
PROCESAMIENTO DE ESPECTROS
7
Corrigiendo otra vez por Flats.
Es necesario verificar de que el procesamiento por Flats anterior hizo
un buen trabajo achatando las imágenes. Para esto es necesario estudiar el
perfil del espectro para ver si existen variaciones a lo largo del eje espacial.
(según el eje de dispersión podı́amos corregirlo con response). Para esto
se examinan las imágenes con un favorable número de cuentas, por ejemplo
exposiciones con bastante cielo y se realiza un corte espacial para ver si el
perfil del espectro es uniforme. Normalmente la lámpara introduce efectos
de iluminación en sus flats.
Corrección de Iluminación
Combinar los Flats de cielo en un archivo Flatcielo usando imcombine
con escala y peso como moda.
Correr la tarea illum en el paquete twodspec.longslit. Esto ajustará el perfil por una función de bajo orden.
Para terminar, habilitamos la corrección por iluminación en ccdproc
y definimos como imagen de iluminación a la imagen de salida de la tarea
illum. Al procesar por iluminación, la tarea se encargará del problema de
la iluminación al normalizar las imágenes por la función de ajuste.
2.2. Extracción y Calibración de espectros. Comentemos ahora brevemente
los pasos requeridos para la extracción y procesamiento de los espectros.
Ventanas de extracción y de cielo. Aquı́ definimos las ventanas de extracción y de cielo, regiones en pı́xeles definidas a ambos lados del centro
del perfil espacial del espectro de donde se extraerá el perfil del objeto y los
valores de fondo de cielo respectivamente.
Traza. Se debe relacionar el centro del perfil espacial del objeto en función
del eje de dispersión. Es decir definir la traza realizada por el objeto a lo largo
de la imagen. Notar que aunque se asuma que el eje espacial está exactamente
según filas o columnas, el espectro no será perpendicular al anterior. Es decir
que se asume que el eje espacial no será perpendicular con la traza.
Sumar el espectro y restar el valor del cielo. Se suma el espectro
dentro de la ventana de extracción y se le resta el fondo de cielo de sus
respectivas ventanas. Nuevamente es crucial en este paso que el eje espacial esté exactamente según filas o columnas para una correcta operación.
Luego de estos pasos obtuvimos una imagen unidimensional, el espectro, a
partir de las imágenes bidimensionales. La tarea encargada de esto es apall.
Repetimos los pasos anteriores para extraer el espectro de la Análoga Solar
st2001.imh y el espectro de comparación hear.imh con los mismos valores
de traza y apertura utilizados en la extracción del objeto a calibrar. Las
salidas de esta tarea serán imagen.ms.imh para cada imagen.imh.
Remover el Espectro Solar Se deben remover todas las caracterı́sticas del
espectro solar en las imágenes, esto se logra dividiendo el espectro extraı́do
entre el espectro extraı́do de una Análoga Solar previamente observada
imarith mago.ms.imh st2001.ms.imh result=mago01_asolar.ms.imh
Solución de dispersión. Se determina la solución de dispersión para el
espectro extraı́do de comparación hear.ms.imh. Con esta solución se pone
al espectro del objeto en una relación lineal en longitud de onda. La tarea
encargada de esto es identify
8
SEBASTIÁN BRUZZONE
Calibración de Flujo o Normalización Se pasa a unidades de flujo relativas o absolutas si se observaron estrellas fotométricas estándar o se normaliza
el espectro para que el valor base sea la unidad. Haremos lo último con la
ayuda de la tarea continuum
Lo que haremos. Luego de la reducción básica de las imágenes, extraeremos el
espectro del asteroide mago01.imh, el de una estrella Análoga Solar st2001.imh y el
de comparación hear.imh con la tarea apall habiendo definido las ventanas de extracción y de cielo y habiendo configurado una larga lista de parámetros adecuadamente. Con esto hecho, nos ocupamos del espectro de comparación hear.ms.imh.
Con la tarea identify identificamos las lı́neas en este espectro y asignándole sus
valores de longitud de onda, lo calibramos. Paso seguido, luego de dividir el espectro extraı́do del asteroide entre el de la análoga solar pasamos a asignarle a este
nuevo espectro una relación lineal en longitud de onda. La tarea encargada de esto
ultimo es dispcor. Como último paso normalizaremos este espectro procesado con
continuum.
3.
Reducción
En esta sección detallamos todos los pasos contenidos en el procesamiento de
las imágenes. Comenzando con la reducción, siguiendo en detalle todos los procedimientos hasta llegar ası́ a la extracción de los espectros. Las imágenes se encuentran en el directorio /root/imagenes/280203. Son imágenes correspondientes a un
turno de observación a cargo de Carvano en el CASLEO. Comenzamos por pasar
las imágenes al formato IRAF. Creamos una lista con las nuevas imágenes con extensión *.imh, list y las convertimos a formato real. Esto permitirá una correcta
operación aritmética de las tareas sobre las imágenes. Pero antes definimos donde
estará el directorio con los archivos .pix
Directorio con los archivos .pix
cl> set imdir="/root/imagenes/280203/"
creo lista
cl> !ls *.fit > lista
Paso al formato IRAF en forma segura y global(que lo repita)
cl> !sed ’s/.fit/.imh/g’ lista>list
Convertimos formato entero al real
cl> chpixtype @lista @list real
3.1. Secciones de Trim y Bias. Comenzamos analizando las imágenes, antes
que nada veamos cuan bien estaba alineada la rendija con el chip CCD, es decir,
cuan inclinado está el espectro. Para el proceso de extracción del espectro, es crucial
que la rendija esté alineada y contenida, en este caso, en una columna. Visualizando
las imágenes es claro que hay presente una pequeña inclinación del espectro, lo
graficamos con implot.
Según la Figura2 tenemos una diferencia de 5 pı́xeles a lo largo de 417 filas.
¿Pero qué sucede con la rendija y las columnas? Para esto hacemos cortes sucesivos
según 3 lı́neas en la imagen conteniendo el espectro de comparación, hear.imh.
Buscamos si la lı́neas de emisión están alineadas con las columnas del chip CCD.
Vemos que hay una diferencia de aproximadamente 0,24 pı́xeles de punta a punta
de la imagen, la lı́neas se mantienen dentro de las columnas y por lo tanto tenemos
PROCESAMIENTO DE ESPECTROS
9
Figura 2. Inclinación de st2001.imh
Figura 3. Inclinación de las lı́neas en hear.imh
que las columnas del chip CCD están alineadas con la rendija. Definamos entonces
las regiones donde estará la información útil en nuestras imágenes y la región del
overscan que usaremos para ajustar los valores del bias en ellas.
En una rápida inspección notamos que las imágenes carecen de los campos BIASSEC y TRIMSEC. Estos deben de estar presentes en ellas para la reducción.
¿Por que es necesaria la región del overscan?
10
SEBASTIÁN BRUZZONE
Esta región existe para poder monitorear los cambios presentes del valor base
o pedestal, de un par de cientos de ADUs, al cambiar de imagen. Determinemos
la región correcta del overscan. Tomamos la imagen ffcup01.imh y con implot
realizamos cortes según las columnas para determinar en principio la región del
overscan. Figura4
Figura 4. Cortes según columnas de un flat de cúpula
Vemos claramente que la región del overscan estará aproximadamente entre las
filas 400 y 425. Para ver en detalle nos paramos con el cursor cerca de esa posición
y presionamos e dos veces, esto expandirá la imagen y veremos con más precisión
donde comienza la zona del overscan.(imagen a la derecha) Tenemos entonces que la
región del overscan se encuentra entre las filas 417 y 425 y según todas las columnas
en principio. Determinemos ahora qué región de la imagen contiene buena información. De forma similar pero esta vez cortando según las filas encontramos que la
imagen no posee un buen comportamiento desde el origen hasta su segundo pı́xel
y a partir del último pı́xel hasta el final según las columnas. Por ende la región del
overscan será [2 : 515, 417 : 425], según columnas y filas. Para decidir con qué región
de las imágenes nos quedaremos, analizamos una imagen con el ds9 o nuevamente
utilizando implot. Es claro que la región que contiene la información está contenida entre [2 : 515, 50 : 150] según columnas y filas respectivamente. Esto considera
el desalineamiento de la rendija con respecto al chip CCD. Tenemos entonces las
regiones de BIASSEC y TRIMSEC, falta ingresar estos campos en el header de
las imágenes. Antes notamos que no hay un campo con información sobre los filtros usados, FILTERS, ccdproc se fija en esta campo para procesar por separado
imágenes según sus tipos de filtros, cuando procesamos por Flats los tenemos por
cada filtro. Las imágenes fueron obtenidas sin filtros, el valor correspondiente es 0.
Ingresemos estos campos:
Agregamos los campos con sus valores, que lo ingrese y que no imprima en
pantalla
cl> hedit *.imh BIASSEC "[2:515,417:425]" add+ up+ vercl> hedit *.imh TRIMSEC "[2:515,50:150]" add+ up+ vercl> hedit *.imh FILTERS "0" add+ up+ ver-
PROCESAMIENTO DE ESPECTROS
11
Figura 5. Opciones para setinstrument
3.2. Configurando las tareas. Debemos cerciorarnos que las tareas encargadas
de la reducción identifiquen los campos definidos en el header de las imágenes de
forma correcta y configurar valores por defecto en estas. Para esto se debe ejecutar
la tarea setintrument en el paquete ccdred. Cargamos los siguientes paquetes
noao, imred y ccdred y corremos setinstrument.
Nuestra respuesta es specphot, vamos a trabajar con espectros entonces es
razonable esta elección, seguimos y consideramos como correctos los valores por
defecto en imred como en ccdred. Revisemos si se han pasado correctamente los
campos en el header de las imágenes, es decir si son interpretados por las tareas.
cl> ccdlist *.imh
3.3. Primer paso por CCDPROC. Habiendo aceptado los parámetros por
defecto en las tareas imred y ccdred podemos comenzar con el procesamiento
para sustraer el valor de base determinado por la región del overscan. Es decir
queremos llegar a la relación cero luz cero cuentas, sacar ese valor de base presente
en las imágenes. Para hacer esto posible primero debemos combinar las imágenes
Bias con Zerocombine. Veamos y modifiquemos los parámetros de esta tarea,
cc> lpar zerocombie.
Se promediaran todos menos una de las imágenes ignorando el valor máximo en
cada pı́xel. Con esto preparado corremos zerocombine y combinamos las imágenes.
Veamos y modifiquemos los parámetros de ccdproc.
Como estamos en la primera corrida por ccdproc queremos solamente una corrección por Bias, es decir quitar el valor de base en las cuentas, que se encuentra en la
región del overscan, recortar y corregir esta región. No queremos corregir por Flats,
Iluminación ni por corriente oscura Darks o fringes. Desde cc> epar ccdproc configuramos la tarea.
Queremos corregir por Bias
zerocor=yes
Recortar la imagen y ajustar la región de overscan
trimcor=yes overscan=yes
Lea según columnas
readaxis= column
12
SEBASTIÁN BRUZZONE
bias1.imh[516,426][real][zero][0]: bias10.imh[516,426][real][zero][0]:
bias2.imh[516,426][real][zero][0]: bias3.imh[516,426][real][zero][0]:
bias4.imh[516,426][real][zero][0]: bias5.imh[516,426][real][zero][0]:
bias6.imh[516,426][real][zero][0]: bias7.imh[516,426][real][zero][0]:
bias8.imh[516,426][real][zero][0]: bias9.imh[516,426][real][zero][0]:
burck01.imh[516,426][real][object][0]:3447 burckhalter
ffcup01.imh[516,426][real][object][0]:flatdome
ffcup02.imh[516,426][real][object][0]:flatdome
ffcup03.imh[516,426][real][object][0]:flatdome
ffcup04.imh[516,426][real][object][0]:flatdome
ffcup05.imh[516,426][real][object][0]:flatdome
ffcup06.imh[516,426][real][object][0]:flatdome
ffcup07.imh[516,426][real][object][0]:flatdome ffl1.imh[516,426][real][flat][0]:flat
lampara ffl10.imh[516,426][real][flat][0]:flat lampara
ffl2.imh[516,426][real][flat][0]:flat lampara ffl3.imh[516,426][real][flat][0]:flat
lampara ffl4.imh[516,426][real][flat][0]:flat lampara
ffl5.imh[516,426][real][flat][0]:flat lampara ffl6.imh[516,426][real][flat][0]:flat
lampara ffl7.imh[516,426][real][flat][0]:flat lampara
ffl8.imh[516,426][real][flat][0]:flat lampara ffl9.imh[516,426][real][flat][0]:flat
lampara hear.imh[516,426][real][comp][0]: hear03.imh[516,426][real][comp][0]:
hear04.imh[516,426][real][comp][0]: mago01.imh[516,426][real][object][0]:1355
Magoeba pdr001.imh[516,426][real][object][0]:ltt3864
pdr002.imh[516,426][real][object][0]:ltt3864
pdr003.imh[516,426][real][object][0]:ltt3864
skyf01.imh[516,426][real][object][0]:skyflat
skyf02.imh[516,426][real][object][0]:skyflat
skyf03.imh[516,426][real][object][0]:skyflat
skyf04.imh[516,426][real][object][0]:skyflat
skyf05.imh[516,426][real][object][0]:skyflat
st2001.imh[516,426][real][object][0]:hd76151
st2002.imh[516,426][real][object][0]:hd76151
st2003.imh[516,426][real][object][0]:hd76151
Figura 6. salida de ccdlist
Que lea los campos TRIMSEC y BIASSEC de los headers
trimsec=image, biassec=image
Salida de zerocombine
zero=Zero
Los demás parámetros, como por ejemplo, el tipo de función para el ajuste y su
orden o el tipo de iteraciones podemos dejarlos sin modificar y aceptar los valores
por defecto. Es claro que se debe ingresar el nombre de las imágenes a procesar,
podemos ingresarlo como una lista @list o simplemente todas las imagenes *.imh.
Con esto ya configurado corremos ccdproc. Una vez hecho esto se nos preguntara si
PROCESAMIENTO DE ESPECTROS
13
Figura 7. Parámetros de zerocombine
Figura 8. Salida de zerocombine
deseamos hacer un ajuste interactivo de la región del overscan, con yes ingresamos
en esta opción. La aplicación interactiva es icfit, o Interactive Curve Fiting. Algunos
comandos útiles:
? imprime opciones
f ajusta con una función
:fuction tipo de función de ajuste
:order orden de la función para el ajuste
:niterate número de iteraciones
r vuelve a graficar
14
SEBASTIÁN BRUZZONE
Figura 9. Parámetros de ccdproc
d borra un punto cerca del cursor
u desborra un punto borrado
o grafica sin refrescar la terminal
:vshow(archivo) sale a archivo con información del ajuste, errores, RMS,etc
q Sale del modo interactivo
En la mayorı́a de los chips CCD, el valor base presente en la región del overscan
es muy bien ajustado por un valor constante, inclusive en casos excepcionales de
chips CCD grandes con gradientes de unas pocas ADU’s de de un extremo a otro,
un ajuste de bajo orden, digamos primer orden será suficiente. Como vemos en la
Figura3.3 un valor constante ajusta bastante bien. Con q salimos y nuevamente se
nos pregunta si queremos ajustar interactivamente la región del overscan para la
siguiente imagen. Podemos responder yes y ajustar nuevamente, el tipo de función y
el orden, como otras opciones son aprendidas por la tarea desde su última aplicación
y se usarán en las restantes imágenes. Salimos entonces y luego de ver un par de
imágenes podemos contestar NO, salimos del ajuste interactivo y no se nos pregunta
PROCESAMIENTO DE ESPECTROS
15
Figura 10. Ajuste interactivo de overscan
Figura 11. Parte de la salida de ccdproc
más. La tarea se encarga de ajustar las regiones en las imágenes restantes. Con esto
hecho terminamos nuestra primera corrida por ccdproc.
Pasemos ahora a ocuparnos de los Flats
16
SEBASTIÁN BRUZZONE
Figura 12. Cortes según filas y columnas de un flat de cielo procesado por Flat0.imh
Figura 13. Cortes según filas y columnas de un flat de lámpara.
3.4. Procesando por Flats. Antes que nada, hagamos cortes según filas y
columnas con implot para ver como se comportan. Empezamos con los flats de
cielo, con skyf01.imh por ejemplo. Tenemos que hay un gradiente según el eje de
dispersión pero según el sentido espacial la respuesta es bastante buena, sigue un
perfil bastante achatado según las columnas. Haciendo lo mismo con uno de los
flats de lámpara, ffl1.imh, encontramos un gradiente similar al anterior según las
lı́neas pero la vemos que según el sentido espacial la respuesta no es la esperada
para un flat. Esto habrá que tenerlo presente al procesar por flats con ccdproc.
Debemos combinar los Flats con flatcombine. Nuestros candidatos son, los flats
de cúpula, de cielo y de lámpara. Los flats de lámpara poseen la mejor SNR e ingresan menor ruido al proceso por lo que utilizaremos estos. Veamos los parámetros
de flatcombine
Los algoritmos para el rechazo de pı́xeles tienen varias opciones. Como algoritmo de rechazo se utilizará crreject, que rechazará los máximos valores positivos en
las imágenes según los parámetros del ruido del chip CCD. Una elección plausible
similar a ésta serı́a avsigclip, que a diferencia del anterior se basa en la determinación de la desviación estándar de los valores a partir de las imágenes en vez de
PROCESAMIENTO DE ESPECTROS
17
Figura 14. Parametros de flatcombine
Figura 15. Salida de flatcombine
las caracterı́sticas conocidas del detector. Promediamos las imágenes ffl*.imh entonces con flatcombine con salida Flat0. Procesemos ahora por esta imagen por
ccdproc, epar ccdproc y modifiquemos el parámetro para la corrección por la
imagen promediada Flat0.imh. Claro que también lo podemos hacer desde la lı́nea
de comando si tenemos más confianza
cc> ccdproc @list ftatcor+ flat=Flat0
Veamos si el flat promediado hizo bien las cosas. La idea de procesar por Flats es
quitar efectos aditivos en las imágenes y achatar las mismas.
18
SEBASTIÁN BRUZZONE
Figura 16. Cortes según filas y columnas de un flat de cielo procesado por Flat0.imh
¿Las imágenes serán uniformes? Como utilizamos los flats de lámpara ya sabemos
que no sera ası́. De la mano de implot analizamos según filas y columnas un flat
de cielo skyf01.imh.
Habı́amos visto que los flats de cielo presentaban una buena respuesta según el
eje espacial, pero luego de procesar por Flat0.imh cambiamos las cosas.
Es claro que no tenemos perfiles uniformes según lineas ni columnas, por lo
tanto Flat0.imh no esta haciendo un buen trabajo. Lo que sucede es que la lampara
agrega su color a las imágenes, es decir que ésta presenta un gradiente según el eje de
dispersión y según el eje espacial. Estas anisotropias pueden estar relacionadas con
la dependencia según longitud de onda de la luz reflejada en donde incide la lámpara,
la diferencia en temperatura de ésta con la de las fuentes de estudio u propiedades
de transmisión de los filtros utilizados con la lámpara de ser éste el caso. Debemos
entonces corregir estos inconvenientes. Las tareas response e illumination nos
ayudarán a resolver los problemas de respuesta según el eje de dispersión y de
iluminación en el eje espacial respectivamente. La tarea response se encuentra
en twodspec.longslit, ası́ que cargamos dichos paquetes. Esta tarea nos permite
ajustar interactivamente el perfil del espectro según el eje de dispersión. Donde la
salida de la tarea es la imagen original dividida por esta función de ajuste, por lo
que tendremos una imagen de salida nFlat0.imh normalizada según la dispersión.
Esto se encargará de las estructuras dependientes con la longitud de onda en el
espectro.
Es evidente que la lámpara presenta una curva suave según el eje de dispersión,
un ajuste a bajo orden será más que suficiente, no es necesario ajustes de alto orden,
buscamos ajustar a grandes rasgos la curva de respuesta en el eje de dispersión. Una
curva de respuesta suave en el eje de dispersión nos indica que no será crucial una
corrección según dicho eje en las imágenes. Igual lo hicimos.
Nos ocuparemos ahora de corregir el efecto de iluminación en las imágenes. La
tarea encargada de esto es illumination que se encuentra en twodspec.longslit.
Lo que se hará es promediar las imágenes de Flat de cielo para luego mediante la
tarea illumination ajustar una función en el eje espacial. Para comenzar combinamos las imágenes correspondientes a un Flat de cielo ya procesadas por Flat0 en
ccdproc con la tarea imcombine.
Combinamos los flats de cielo
PROCESAMIENTO DE ESPECTROS
19
Figura 17. Parametros de response
Figura 18. Ajuste por response
lo> imcombine sfyf*.imh flatsky reject=avsigclip scale=mode
weight=mode subsetsVeamos los parámetros de illumination
Notar que se han modificado los parámetros low-reject y high-reject a 3,0. La
tarea precisa un campo en el header de las imágenes para saber como se encuentra
alineado el espectro, si es según lı́neas o columnas. Este campo es DISPAXIS y
sus valores son 1 para espectros con ejes de dispersión según lı́neas y 2 para espectros según columnas. De no encontrarse el campo DISPAXIS en el header de las
imágenes, la tarea nos preguntara como está orientado el espectro, con la misma
notación para las opciones. Una vez ingresado este campo con el valor 1, corremos
la tarea entrando en un modo interactivo para seccionar el espectro mediante la
ubicación de marcadores en la dirección de la dispersión, según lı́neas. Estos marcadores o bins podemos ubicarlos a gusto e inclusive modificar la cantidad que
20
SEBASTIÁN BRUZZONE
Figura 19. Parámetros de illumination
Figura 20. Ubicación de los bins
queremos utilizar. La cantidad de marcadores se ajusta al tipo de iluminación en
el espectro, con un mı́nimo de 5 estarı́a bien. Buscamos un ajuste de bajo orden
pues queremos ajustar la respuesta del sistema a la iluminación producida por la
lámpara. Al terminar de correr la tarea, podemos hacer cortes según las columnas
para ver el perfil de la imagen de salida flatillum.imh, como ésta es la función de
ajuste, deberá ser igual a la unidad en el sentido espacial.
Ahora con hedit flatillum MKILLUM "illum" add+ up+ ver- agregamos en
el header de la imagen que se trata de una imagen de iluminación. Ya tenemos
entonces la imagen necesaria flatillum.imh para corregir la iluminación lo que nos
lleva al siguiente paso por ccdproc
PROCESAMIENTO DE ESPECTROS
21
Figura 21. Ajuste en el séptimo bin
Figura 22. Corte espacial de skyf01.imh luego de procesar por illum
3.5.
Segundo paso por CCDPROC. Ahora bien, corrijamos la iluminación.
lo> ccdproc *.imh illumcor+ illum=flatillum
4.
Extracción y Calibración del Espectro
Habiendo hecho el procesamiento básico de las imágenes, nos ocuparemos ahora
de los espectros. Todo el proceso de extracción del espectro puede ser logrado a
través de la tarea apall. Por lo tanto vamos a configurar los parámetros fundamentales de esta tarea, que son unos cuantos. Hay diferentes versiones de la tarea, con
sutiles diferencias en los paquetes kpnoslit, ctioslit, kpnocuode. Para nuestros
propósitos, cualquiera de estas nos servirá, por lo que cargamos noao, imred, y
luego uno de los paquetes antes mensionados, digamos kpnocoude. Al momento
de procesar se creará un directorio database en donde se guardará la identificación
de las lı́neas del espectro de comparación que serán usadas por otras tareas para
asignar las longitudes de onda para nuestros espectros. Como habı́amos visto antes,
22
SEBASTIÁN BRUZZONE
la configuración del espectrógrafo es la correcta, las columnas en este caso, están
alineadas con la rendija por lo que ya nos ocuparemos de los parámetros para la
extracción del espectro.
4.1. Parámetros para la ventana de extracción. Los parámetros fundamentales que controlan la extracción son los siguientes:
line Es la linea de dispersión utilizada para encontrar el centro del perfil
espacial. Eligiendo INDEF se usará el medio del eje de dispersión.
nsum Es el número de lı́neas de dispersión sumadas alrededor de line utilizadas para encontrar un centro del perfil espacial. Un valor de 10 mejorará la señal ruido del corte utilizado para el centrado.
width El ancho del perfil es el valor del ancho de la base en el perfil estelar.
Este valor será utilizado en el algoritmo de centrado. Como vimos tenemos
un ancho tı́pico de entre 8 y 14 pı́xeles, por lo que utilizaremos en valor de
14.
lower El valor inferior del lı́mite de la apertura relativo al centro.
upper El valor superior del lı́mite de la apertura relativo al centro.
resize Podemos definir el valor de la apertura de extracción en función de
algún valor fraccional del perfil espacial, digamos un valor fraccional del valor
máximo del perfil espacial. Para habilitar esta caracterı́stica se debe utilizar
resize=yes.
ylevel Habiendo habilitado resize debemos definir el valor fraccional del
máximo del perfil espacial utilizado para ajustar el tamaño de la apertura.
Este valor será ylevel.
Utilizaremos los siguientes valores para la extracción
line=INDEF
nsum=10
width= 14
lower= -7
upper= +7
resize=no
4.2. Parámetros para las ventanas de cielo. Revisemos los parámetros para
definir y operar con las ventanas de cielo.
b− sample Elegimos donde ubicaremos las ventanas de cielo en la imagen a
cada lado del centro del perfil espacial. Cabe recordar que podemos redefinir
interactivamente estas regiones.
b− naver Especifica la cantidad de números adyacentes de puntos utilizados
dentro de cada ventana para determinar el valor de ajuste del cielo. Ingresando un número negativo indica que se empleará la media para el valor del
ajuste.
b− f unc Tipo de función para el ajuste del valor del cielo en la ventana.
b− order Orden de la función antes mencionada.
Elegimos:
b_sample= -22:12,12:22
b_naver=-11
b_func= chebyshev
b_order= 1
PROCESAMIENTO DE ESPECTROS
4.3.
23
Parámetros de la Traza.
t− nsum Número de lı́neas de dispersión sumadas antes de buscar el pico del
perfil espacial.
t− step Tamaño del paso según el eje de dispersión que va a ser usado para
determinar la traza.
t− f unc Función para el ajuste
t− order Orden de la función de ajuste
t− niter Es el número de iteraciones para descartar puntos automáticamente
que se apartan mas de 3σ del valor medio, donde el σ se determina para
toda la traza.
Utilizaremos los siguientes
t_sum= 12
t_step= 10
t_func= legendre
t_order= 2
t_niter= 1
4.4. Parámetros para la suma y la resta de cielo. Podemos elegir entre dos
tipos distintos de extracción. En la primera opción, se suman todos los valores de
cielo dentro de la ventana sin ningún peso, mientras que en la segunda opción un
algoritmo de extracción óptima con un peso que es inversamente proporcional a la
incertidumbre estadı́stica de los puntos.
background Para extraer el cielo ingresamos fit
weights Para la extracción óptima debe ser configurado en variance. Si no
deseamos agregar un peso a los puntos ingresamos none clean Si deseamos
”limpiar”puntos que se desvı́en mucho de la media ingresamos yes de lo
contrario no.
Si deseamos implementar el algoritmo para la extracción óptima.
saturation Es el nivel de saturación del chip CCD. Nuestra cámara es
de 16bits lo que nos da un valor de 65535ADU’s Al haber procesado las
imágenes, éstas han sido liberadas del valor de pedestal, están en cero luz,
cero cuentas. El valor medio base era aproximadamente de 295ADU’s, lo que
nos deja un valor de saturación de 65240ADU’s.
rednoise Valor del ruido de lectura del chip CCD. Este valor esta estipulado
en el header de las imágenes.
gain Valor de ganancia del chip CCD, también en el header de las imágenes
lsigma El menor valor de σ para el rechazo de puntos por su desviación. 3
o 4 son valores razonables.
usigma El mayor valor de σ.
Nos quedaremos con
background= fit
weights= variance
clean= yes
saturation= 652400
rednoise=image
gain= image
lsigma= 4
24
SEBASTIÁN BRUZZONE
usigma= 4
4.5. Parámetros para el formato de salida. Tenemos dos tipos de formatos
para la imagen de salida de apall. Estos son onesdpec y multispec. Esta ultima
opción nos entrega mas información, primero tenemos el espectro extraı́do en forma óptima. En otra dimensión de la imagen tenemos el espectro que hubiésemos
obtenido sin una extracción óptima, el espectro del cielo y un espectro mostrando la
variación del espectro óptimo extraı́do. Todo esto usando extras=yes. La imagen
tendrá tres dimensiones, en la primera, el eje x será el eje de dispersión, el eje y
sera el eje de apertura y el eje z tendrá los extras. En esta dimensión encontraremos
en z =1 el espectro óptimo, en z =2 el espectro extraı́do sin haber sido optimizado,
z =3 albergará al espectro de cielo mientras que en z =4 encontraremos un espectro
con el σ del espectro óptimo. Vamos a elegir.
format= multispec
extas= yes
4.6. A modo de resumen. . La tarea buscará en el medio del eje de dispersión el
centro del perfil espacial. Sumara 10 lineas alrededor del medio del eje de dispersión
para encontrar este centro espacial. La ventana de extracción será de 14 pı́xeles,
7 pı́xeles a cada lado del centro del perfil espacial. El ancho del perfil usado en el
algoritmo de centrado será de 14 pı́xeles donde se rechazarán puntos cuyos valores
se alejen de 4σ de la media. Las ventanas de cielo se ubicarán a cada lado del perfil
espacial y serán dos regiones definidas respecto de este centro, entre los [−22 :
−12, 12 : 22] pı́xeles, es decir, con centro en el perfil se delimitan dos regiones
de 10 de pı́xeles de amplitud empezando a los 12 pı́xeles a cada lado del centro.
El valor del cielo en cada ventana será aproximado en primera instancia por la
media de los valores de los 11 pı́xeles dentro de cada una de éstas y luego por un
ajuste mediante polinomios de chebyshev de orden 1. Se toma la media en cada
ventana para luego ajustar una función, constante, a esos dos valores. Respecto
a la traza, una vez encontrado el centro del perfil espacial en algún punto a lo
largo del eje de dispersión, lo buscará de nuevo t_steps adelante en dicho eje
habiendo sumado t_nsum lı́neas de dispersión. En este caso, buscará el centro del
perfil cada 10 pı́xeles según el eje de dispersión en ambas direcciones habiendo
sumado 12 lineas. Lo hará hasta encontrar el fin de la imagen. Luego el conjunto
de posiciones del centro del perfil espacial según el eje de dispersión se ajustará con
una función t_func de orden t_order donde se especifica el promedio en el error
del ajuste. En este caso se usarán polinomios de legendre de orden 2 para el ajuste
y se rechazarán los puntos que se alejen mas de 4σ del mismo. Esto será posible
si hemos seleccionado t_niter con un valor mayor de 1, que son el número de
iteraciones para rechazar puntos que se desvı́en en el ajuste. Como queremos restar
el cielo ingresamos background= fit. Sobre la resta del cielo, hemos seleccionado la
implementación de un algoritmo para optimizar el proceso. Habiendo seleccionado
weigths= variance un algoritmo se encarga de rechazar puntos que se desvı́en
mucho de la media. Este algoritmo tomará los datos de la saturación, ruido de
lectura y ganancia del chip CCD en el header de las imágenes. Con estos datos
calculará la desviación estándar σ de los valores en la imagen y rechazará aquellos
con valores mayores de 4σ. Una forma de computar el valor de σ a partir de las
PROCESAMIENTO DE ESPECTROS
25
caracterı́sticas del chip viene dada por la siguiente formula:
p
(1)
σ = GxI + r2 /G
Donde G es la ganancia del chip, I es la intensidad en un pı́xel y r es el ruido de
lectura del chip Como estamos asumiendo que el arribo de los fotones al detector
es en forma aleatoria, este arribo se rige siguiendo una estadı́stica de Poisson, y
por lo tanto sumamos entonces el ruido cuadraticamente. Este σ estará en ADU’s.
Cabe aclarar que no tenemos conocimiento del ruido de cuantización ni el ruido de
truncamiento. Por lo anterior hemos especificado la saturación de 65240ADU’s, el
ruido de lectura y ganancia del header de las imágenes y como último ingrediente
el múltiplo de σ para el rechazo de valores como 4σ.
4.7. Usando apall. Ya tenemos todo como para correr apall. Listemos los
parámetros de esta tarea.
Al correr la tarea se nos pregunta si deseamos encontrar y editar las aperturas,
respondiendo afirmativamente a esto ingresamos en el editor de apertura, donde
podremos reubicarnos en el espectro y definir a gusto interactivamente la ubicación
y tamaño de la ventana de extracción. En Figura4.7 mostramos una breve reseña
de las opciones del editor, para la versión detallada ingresar ? en el editor. Una
opción que no aparece listada es de vital importancia. Esta es la opción Interrupt,
I la cual nos permite interrumpir el proceso en cualquier etapa sin escribir en el
directorio database
Ya ubicados en el editor, nos encontramos con que la imagen del espectro no es
la mejor que esperábamos para centrar la ventana de apertura, por lo que probamos
viendo el espectro en otra sección de la imagen, ingresamos :line 100 y nos encontramos con un perfil más amigable. Ubicados con el cursor cerca del centro del
perfil, ingresamos m y definimos entonces el centro de la ventana de extracción
manteniendo los valores anteriores de su tamaño, lower= -7 y upper= +7. Con
esto hecho, nos ocupamos de las ventanas de cielo con el comando b. Nos encontramos con una ventana donde se muestra un ajuste de los valores del cielo dentro
de las ventanas y la ubicación de las mismas. Ya no nos encontramos en apextract
sino que estamos en el icfit con sus conocidas opciones. Contentos con el ajuste
mostrado y la posición y tamaño de las ventanas de cielo, salimos con q y volvemos
al editor de apertura.
Contentos con estas ventanas y con el ajuste, con q pasamos a ocuparnos de
la traza. De nuevo en icfit podemos modificar el ajuste de la traza seleccionando
el tipo de función para el ajuste, su orden y número de iteraciones para el rechazo de puntos entre otras cosas. Conformes con el ajuste y con un RMS de 0,047
pı́xeles salimos con q. Respondiendo yes a las preguntas que nos hace la tarea,
se escribe en el directorio database los valores de los parámetros para la apertura, el fondo y la traza. Además se extrae el espectro y podemos visualizarlo. Con
splot podemos visualizar las otras dimensiones de la imagen. La salida de apall
es mago.ms.imh. Debemos aplicar el mismo procedimiento para el espectro de
la estrella. Luego conservando los mismos parámetros seleccionados anteriormente
para el asteroide, aperturas, ventanas de cielo, etc, extraemos el espectro de comparación hear.imh. En esta etapa no precisamos el modo interactivo. Corremos la
tarea con los siguientes parámetros.
Para el espectro de comparación
apall hear.imh ref=mago.ms.imh recen- trace- back- intera-
26
SEBASTIÁN BRUZZONE
Figura 23. Parámetros de apall parte 1
Notar que no haremos resta de cielo en el espectro de comparación. Ya tenemos
entonces los espectros extraidos mago.ms.imh, st2001.ms.imh y hear.ms.imh.
4.8. Identificación de la lı́neas de emisión. Para hacer esto contamos con la
tarea identify.
PROCESAMIENTO DE ESPECTROS
27
Figura 24. Parámetros de apall parte 2
Hemos elegido linelists\$ctiohear.dat que contiene las lı́neas más prominentes de las lámparas de Helio Argón de comparación del CTIO. Además ingresamos el ancho tı́pico de una lı́nea de emisión, con valor 9 pı́xeles. Marcando con
m unas cuatro lı́neas de emisión e ingresando su valor aproximado, ingresamos
f para que se haga un ajuste. Ingresamos en la rutina icfit, podemos graficar la
parte no lineal y los residuos del ajuste para ver si se precisa borrar algún punto,
etc. Conformes con el ajuste salimos con q y volvemos a donde empezamos. Con
el ajuste hecho y los valores de las lı́neas leı́dos del archivo de longitudes de onda linelists\$ctiohear.dat ingresamos l para que se identifiquen nuevas lı́neas
según el ajuste. Una vez hecho esto, ingresamos f para un nuevo ajuste. Como
28
SEBASTIÁN BRUZZONE
Figura 25. Opciones del editor de apertura apextract
PROCESAMIENTO DE ESPECTROS
29
Figura 26. Ventana de extracción y ventana de cielo
Figura 27. Ajuste de los valores del cielo
antes, modificamos este ajuste para que sea el mejor posible mirando los residuos o
la parte no lineal. Una vez satisfechos salimos de la tarea ingresando dos veces q.
4.9. Calibración en Longitud de Onda. Ya estamos cerca de terminar. Es
buen momento de deshacernos de todo tipo de caracterı́sticas del espectro solar
en el espectro de nuestro asteroide. Esto podemos hacerlo simplemente dividiendo
el espectro de nuestro asteroide entre el espectro de la estrella Análoga Solar. La
salida es mago_asolar.ms.imh
Dividimos los espectros
imarith mago.ms.imh st2001.ms.imh result=mago_asolar.ms.imh
Ahora seguimos para calibrar a este nuevo espectro. Precisamos antes ingresar en
el header de la imagen el campo REFSPEC1 con valor hear.ms.imh,
hedit mago_asolar.ms.imh REFSPEC1 hear.ms.imh add+ up+ verAsı́ la próxima tarea sabrá cual sera el espectro de referencia. Precisamos ahora
de los servicios de la tarea dispcor. Teniendo configurados los parámetros, corremos
30
SEBASTIÁN BRUZZONE
Figura 28. Traza del espectro del asteroide
Figura 29. Espectro extraı́do por apall
dispcor y calibramos nuestro espectro. Lo que haremos es cambiar las asignación
de las longitudes de onda, ingresando en la primera pregunta que nos hace la tarea
un yes. Nos preguntara un comienzo para las coordenadas en longitud de onda,
tomamos un valor muy próximo al sugerido. También debemos ingresar un valor
máximo en longitud de onda, pongamos INDEF. Queremos que haya un incremento
de un Ångstrom por pı́xel, ingresemos 1.0. Como ultimo se nos pregunta un número
de salida de pı́xeles, INDEF parece razonable pues no nos preocupa esto. Una vez
hecho esto respondemos con NO a la pregunta
change wavelength coordinate assigments?: NO
Ya estamos por finalizar el procesamiento, miremos como se ve nuestro espectro
calibrado.
PROCESAMIENTO DE ESPECTROS
31
Figura 30. Parámetros de identify
Figura 31. Identificación de lı́neas de emisión (izq) y ajuste de
la parte no lineal con identify (der.)
Notar que se han identificado 11 lineas de emisión en el espectro de comparación.
Esperábamos que la tarea encontrase más en el archivo linelists\$ctiohear.dat.
Quizás cambiando este archivo por otro tendrı́amos una mayor cantidad de lı́neas
identificadas. Probar con page linelists\$README para ver todos los archivos
disponibles.
32
SEBASTIÁN BRUZZONE
Figura 32. Parámetros de dispcor
Figura 33. Salida de dispcor
4.10. Normalización. Quizás nos guste más tener como resultado del procesamiento un espectro normalizado, cuyo valor continuo sea la unidad. Bueno, la
tarea continuum nos da una mano con esto. Vemos los parámetros de esta tarea y
la ejecutamos. En la siguiente página tenemos la salida de continuum y el espectro
normalizado. Hemos terminado!!!
PROCESAMIENTO DE ESPECTROS
33
Figura 34. Espectro calibrado
Figura 35. Parámetros de continuum
5.
Resultados Preliminares
Presentamos los espectros del asteroide 1355 Magoeba extraidos y procesados
en la Figura36 y Figura37. Resulta claro que el espectro obtenido está seriamente
contaminado de ruido, hechando por tierra las posibilidades de tener datos confiables del mismo. Diversos son los motivos para obtener espectros tán afectados de
34
SEBASTIÁN BRUZZONE
Figura 36. Espectro calibrado del 1355 Magoeba
Figura 37. Espectro normalizado del 1355 Magoeba
ruido como este, siendo uno de los mas evidentes la pobre SNR del asteroide observado. Presentaremos a continuación un método alternativo para el procesamiento
del espectro basado en el uso de filtros espaciales con el fin de mejorar dentro de lo
posible el espectro del asteroide.
PROCESAMIENTO DE ESPECTROS
6.
35
Filtros Espaciales
Las imágenes pueden ser consideradas como funciones bidimensionales en un
dominio espacial definido, con limites especificados en un detector CCD, con una
amplitud asociada al brillo o intensidad de la misma. Normalmente suele referirse
como espacio muestral a su dominio mientras que su amplitud como cuantización o
profundidad de bits. Pensando a las imágenes como colecciones de valores sobre un
determinado dominio, podemos efectuar entonces diversas operaciones aritméticas
sobre estas con infinitos usos. Las operaciones aritméticas que podremos definir
sobre cada pı́xel son la suma, resta, division y multiplicación. Pensados como escalares, tenemos total libertad de agrupar estos elementos con sus valores en arrays
o conjuntos de pı́xeles y sobre ellos efectuar operaciones mas complejas basadas en
la aritmética de elementos finitos.
6.1. Mascaras (filtros). Una forma práctica de operar sobre las imágenes es
mediante el uso de máscaras o arrays de valores que relacionan el valor de un
determinado pı́xel, con el de sus pixeles contiguos o próximos. Podemos ver como
ejemplo en la Figura38 una máscara con 9 elementos que serán, una vez aplicada
sobre una imágen, los valores sobre 9 pı́xeles con ciertos pesos asociados αi .
α1
α4
α7
α2
α5
α8
α3
α6
α9
Figura 38. Máscara con 9 elementos
Los tipos de filtros espaciales, u operaciones de máscara, pueden ser definidos variando la asignación en los pesos de sus componentes y variando el tamaño o extesión
de estos filtros. Por enumerar los de mayor simplicidad:
Filtro pasa-bajos Son los encargados de atenuar las altas frecuencias espaciales en las imágenes. Es decir, atenuará los objetos con cierta extensión
menor o igual que la extensión del filtro mediante el promedio de los pı́xeles
vecinos. Esto creará la pérdida de detalles en las imágenes
Filtro de mediana De forma similar al fltro pasa-bajo, este filtro empleará el
cálculo de la mediana de los pı́xeles vecinos eliminando ası́ las componentes
de ruido. La mediana será definida como el valor que está estadı́sticamente
a la mitad o 50 % del rango en los valores.
Filtro pasa-alto A diferencia de los anteriores, este filtro atenuará todos los
detalles en extensiones mayores que el filtro, generando ası́ un realce en el
contraste. Suelen escribirse como un array con pesos cuya suma es 0 con un
valor o peso central positivo rodeado con valores negativos para alcanzar el
requerimiento de una suma nula.
Filtro de alto rango Podemos generar un filtro de alto rango sumando a la
imagen original, la imagen original luego de operarse sobre ella un filtro pasabajo producto con ciertas constante positiva. Lo que tendremos será un realce
en las altas frecuencias únicamente generando un incremento en el contraste.
36
SEBASTIÁN BRUZZONE
-1
0
1
-1
0
1
-1
0
1
-1 0
-1 0
-1 0
1
1
1
Figura 39. Operador de Prewitt como derivada en dirección vertical y horizontal respectivamente
Figura 40. Imagen original y luego de correr un filtro de alto
rango de 3x3
Filtros derivativos Estos filtros simulan las operaciones de derivación sobre
las imágenes. Un ejemplo de ello son los operadores de Prewitt que implementas las derivadas primeras en ambas direcciones que se muestran en la
Figura39.Estos filtros aumentarán los bordes en las imágenes. La Figura40
muestra una ejemplo de este operador.
6.2. Aplicacion: Filtro de Mediana en el Espectro de 1355 Magoeba.
Rápidamente pasemos a aplicar los conceptos introducidos anteriormente en nuestro
caso de interés. Habiéndonos encontrado con un espectro severamente contaminado
de ruido, tratemos de mejorar la calidad del mismo, por lo menos en un espı́ritu de
experimentación y prueba con las herramientas a nuestra disposición. Procederemos
de la siguiente forma:
1. Identificar los detalles a remover en la imagen del espectro
2. Definir las máscaras a emplear en función de la extensión espacial de cada
detalle en particular
3. Remover las bandas de emisión del cielo en la imágen
4. Sustraer el cielo del espectro empleando filtros adecuados
5. Implementar un script para automatizar el proceso
6. Recalibrar el espectro y comparar resultados cualitativamente
Lo primero que desearemos remover son las lı́neas de emisı́on del cielo. Estas
lı́neas presentan un ancho tı́pico de 5 pı́xeles en la imagen. Por lo tanto emplearemos una máscara de mediana para removerlas. Un detalle importante a tener en
cuenta es que tenemos que remover detalles o elementos en las imágenes que son
perpendiculares entres sı́, éstos son, el continuo del asteroide y las lineas de emisión.
PROCESAMIENTO DE ESPECTROS
1
0
0
0 0
0 0
1 0
1
0
0
0
0
1
1
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
37
0
1
0
0
0
0
0
0
1
Figura 41. Dos filtros de ejemplo, uno horizontal(3x5) y uno vertical(9x3)
Por lo que no podremos usar deliberadamente máscaras cuadradas. Utilizaremos
máscaras rectangulares con el siguiente detalle:(ver FIgura4)
1. Máscaras rectangulares de 3x5, 3x9 y 3x15 pı́xeles. No referiremos a éstas
como filtros horizontales. Estos filtros serán útiles para remover las lı́neas de
emisión perpendiculares al eje de dispersión.
2. Máscaras de 9x3. 15x3. 63x3 y 83x3 pı́xeles. Estos filtros verticales harán lo
suyo para eliminar el continuo del asteroide a lo largo del eje de dispersión.
3. Los valores para estos filtros, contemplarán ser un balance entre extensión
y forma. Los más extensos provienen de una mayor extensión del espectro
del asteroide manteniendo la relación de 3 o 4 veces la extensión del detalle
a eliminar. La forma deberá permanecer rectangular y no exceder de cierto
valor, estimado en 5 pı́xeles en nuestro caso, un valor de 3 permite algo de
flexibilidad dentro de los lı́mites.
4. Ultimo pero no menos importante, las máscaras no contendrán elementos ya
sea, en la misma fila o misma columna del pı́xel a remplazar(o pı́xel central)
en cada filtro horizontal o vertical respectivamente. Esto pretende evitar
operar sobre columnas o lı́neas defectuosas.
6.2.1.
cielo.
Los Pasos. A modo de resumen los pasos a seguir para la sustracción del
1. Comenzamos por identificar las lı́neas de emisión con un ancho tı́pico de 5
pı́xeles. Entonces empleamos un filtro horizontal de 3x15 pı́xeles. Al permanecer efectos artificiales verticales, provenientes del propio filtro de mediana por ser sensible con los bordes de los detalles, optamos por un segundo
paso, esta vez de un filtro menor de 3x5 pı́xeles, ver Figura45.
2. Procedemos a remover el espectro del asteroide. Empleamos un filtro vertical
de 63x3pı́xeles. Al permanecer efectos de nuevo por la sensibilidad del filtro
de mediana a los bordes de los detalles, se pasa un nuevo filtro de 83x3
pı́xeles, en Figura45 y Figura45.
3. Con lo anterior hacemos la resta del cielo y la multiplicamos por una constante igual a 4. Figura42
38
SEBASTIÁN BRUZZONE
Figura 42. Imagen del espectro del 1355 Magoeba Original y con
cielo substraido
Habiendo restado el cielo y las lı́neas de emisión, pasamos a calibrar el espectro.
Procedemos de igual forma a la extracción del espectro y a la calibración en longitud
de onda como lo hicimos antes.
PROCESAMIENTO DE ESPECTROS
7.
39
Resultados y Análisis Cualitativo
Presentamos en la Figura43 el espectro del asteroide 1355 Magoeba siguiendo
dos procesos de extracción de cielo diferentes.
Figura 43. Espectro original y espectro con cielo reducido y
procesado con filtros sin extractión de cielo en apall
40
SEBASTIÁN BRUZZONE
Lo primero que puede apreciarse es una notoria atenuación de las frecuencias
altas, o componentes de ruido en el espectro procesado mediante filtros de mediana. Aparece un escalón artificial producto de ciertos valores de cielo que no fueron
correctamente extraı́dos, por una ligera diferencia en el ancho ventana de extracción del espectro. Lamentablemente carecemos de información sobre la naturaleza
del espectro o de las lı́neas conocidas en el mismo para este objeto. Correspondiendo a la clase Taxonómica espectral Tholen no es posible por el momento indicar
propiedades especificas en este espectro objenido.
En Sı́ntesis, el paquete de procesamiento IRAF comprende una extensiva y muy
versátil herramienta de trabajo que nos ha permitido procesar las imágenes de
forma transparente, elaborar filtros para post procesar las imágenes, crear scripts
para realizar los pasos de forma más sencilla y hasta automatizar por completo el
proceso de reducción básico de imágenes en grandes lotes
PROCESAMIENTO DE ESPECTROS
Figura 44. Detalle del espectro del 1355 Magoeba en el proceso
de filtrado.
Figura 45. En sentido horario, abajo derecha filtro hoz3x15, filtro
hoz3x15 2do paso, filtro hoz9x3,filtro hox3x5 (centro), filtro hoz3x5
2do paso (abajo centro), filtro ver63x3 (abajo der.), filtro ver83x3,
espectro st2001 y espectro st2001 con filtros
41
42
SEBASTIÁN BRUZZONE
Referencias
[1] . W. Sulentic, ‘OPTIMAL ENHANCEMENT OF FEATURES IN DIGITAL SPECTRA’,
AJ90
[2] .Secker,’A RING MEDIAN FILTERFOR DIGITAL IMAGES’, 1995PASP..107..496s
[3] Gil-Hutton ’NOTAS DEL CURSO TECNICAS AVANZADAS DE OBSERVACION’, 2006.
[4] .Gonzalez, ’DIGITAL IMAGE PROCESSING’,ISBN 0201180758.
PROCESAMIENTO DE ESPECTROS
8.
8.1.
43
Apendice. Codigo de scripts desarrollados
Procesamiendo Básico por Lotes.
procedure cas pro ( f i l , lect ura , bin )
#−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
# By S e b a s t i a n Bruzzone 2008 −2009
# c o n t a c t : s b r u z z o n e @ f i s i c a . edu . uy
# Los M o l i n o s O b s e r v a t o r y IAU c o d e 844
# Departamento de Astronomia , F a c u l t a d de C I e n c i a s , Montevideo , Uruguay
#
#F i n a l v e r s i o n August 14
# T h i s s c r i p t p e r f o r m s b a s i c image c a l i b r a t i o n on i m a g e s t a k e n w i t h t h e Roper
# 1300B CCD camera a t CASLEO . The s c r i p t would l o o k f o r o b j e c t and c a l i b r a t i o n
i m a g e s in e a c h b i n n i n g ( b i n ) f a c t o r ,
# r e a d i n g f r e q u e n c y ( l e c t u r a ) and f i l t e r ( f i l ) , a l l o f t h e s e , p r o v i d e d by t h e u s e r .
# Also , t h e r e i s a s e l e c t i o n f o r b i a s p r o c e s s i n g o r o v e r s c a n r e g i o n p r o c e s s i n g .
# Dome f l a t s and sky f l a t s a r e s e a r c h e d and a n a l y s e d to s e l e c t only non−s a t u r a t e d
# f r a m e s and t h o s e w i t h i n t h e l i n e a r i t y o f t h e CCD d e t e c t o r .
# A f t e r p r o c e s s i n g t h e images , c a l i b r a t i o n f o l d e r s a r e c r e a t e d f o r e a c h f i l t e r ,
b i n f a c t o r and f r e q u e n c y
# The i m a g e s a r e a l s o c o n v e r t e d to f i t s format
# P l e a s e n o t e GAIN and RDNOISE v a l u e s . AVSIGCLIP i s u s e d to p e r f o r m t h e m a s t e r F l a t frame .
# Optional , run Maxim header v1a to e n a b l e MaximDL c o m p a t i b i l i t y .
# Summary :
#
1 . Images a r e c o n v e r t e d to . imh f i l e format , g e n e r a t i n g a l s o t h e . p i x f i l e s
#
stored at the imdir d i r e c t o r y
#
2 . Header keywords a r e e d i t e d f o r t h e s e l e c t e d bin , l e c t u r a and f i l t e r d e s i r e d
#
by t h e u s e r .
#
2a . L i s t s created :
b i n l i s t a 1 , b i n l i s t a 2 ( bin f a c t o r images used )
#
b i a s l i s t ( z e r o images )
#
l i s t R l i s t V ( f i l t e r e d i m a g e s e . g . R o r V)
#
k l i s t , M l i s t ( . imh i m a g e s w i t h s e l e c t e d f r e q )
#
k l i s t a , M l i s t a ( . f i t s images with s e l e c t e d f r e q )
#
f l t a s b u e n o s ( good f l a t s )
#
f l a t s m a l o s ( bad f l a t s )
#
f l a t l i s t ( f l a t images )
#
o b j e c t l i s t ( o b j e c t images )
#
s a l i d a b i a s c o r s t a t ( s t a t i s t i c s of calibrated f i l e s )
#
s a l i d a o s c a n c o r s t a t ( s t a t i s t i c s of c a l i b r a t e d , via oscan f i l e s )
#
salida flat stat ( flats statistics )
#
3 a . D o m ef l at and s k y f l a t i m a g e s a r e c h e c k e d f o r l i n e a r i t y
and non s a t u r a d e d f i l e s , t h e good f l a t s
#
are selected , those
s a t u r a t e d f l a t s a r e moved to a
c r e a t e d d i r e c t o r y , t h e JUNK d i r e c t o r y .
#
3b . Also , i m a g e s w i t h n e g a t i v e v a l u e s , and non−s a t u r a t e d , a r e c o n v e r t e d i n t o
#
p o s i t i v e v a l u e s by a d d i n g t h e o f f s e t by t h i s s i g n e d b i t s ,
t h o s e i m a g e s a r e renamed a s m i n u s f i l e , where f i l e s t a n d s f o r t h e o r i g i n a l f i l e .
#
4 . The s c r i p t prompts f o r a b i a s c o r r e c t i o n o r o v e r s c a n s u b s t r a c t i o n method .
#
5 . For t h e s e l e c t e d o p t i o n , b i a s o r o s c a n s u b s t r a c t i o n i s p e r f o r m e d , a l s o
#
w i t h t h e s e l e c t e d good f l a t s , a f l a t c a l i b r a t i o n i s a l s o p e r f o r m e d .
#
6 . The c a l i b r a t e d i m a g e s a r e moved to a f o l d e r , t h e PRO f o l d e r w i t h
#
i n f o r m a t i o n about t h e c a l i b r a t i o n method used ,
the l i s t of the o b j e c t f i l e s , # the l i s t of c a l i b r a t i o n
i m a g e s u s e d and t h e m a s t e r images , Z e r o and F l a t
#
7 . . imh f i l e s and l i s t s a r e DELETED upon s t a r t o f t h e s c r i p t .
#
8 . Optional , w i t s c o u l d be u s e d to c o n v e r t t h e . imh f i l e s to t h e s t a n d a r . f i t s format
#−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
i n t bin
string f i l
{ prompt= ’HEDIT CASLEO : B i n n i n g f a c t o r o f
images (1 o 2 ) :
{ prompt= ’ HEDIT CASLEO : F i l t e r (R, V ) : ’ }
’}
44
SEBASTIÁN BRUZZONE
string lectura
}
bool
resp
{ prompt= ’HEDIT CASLEO : Reading Frequency , 100 khz ( k ) o r 1Mhz(M) :
’
{ prompt=”Would you l i k e t o c o n t i n u e ? ” , mode=”q” }
struct ∗ list3
struct ∗ list2
struct ∗ l i s t
begin
s t r i n g f i l t r o , read
bool resp2
real w
i n t dummy, inum , inumf , inumobj , inumbias , b i n n i n g ,
f i l t r o=f i l
read=l e c t u r a
b i n n i n g=b i n
j
#......................
i m d e l ( ” ∗ . imh” )
del (” list R ”)
del (” list V ”)
del (” b i a s l i s t ”)
del (” b i n l i s t a 2 ”)
del (” b i n l i s t a 1 ”)
del (” list R ”)
del (” k l i s t ”)
del (” k l i s t a ”)
del (” f l a t l i s t ”)
del (” flats buenos ”)
del (” flats malos ”)
del (” flats negativos ”)
del (” o b j e c t l i s t ”)
del (” s a l i d a b i a s c o r s t a t ”)
del (” salida oscancor stat ”)
del (” s a l i d a f l a t s t a t ”)
del (” M list ”)
del (” M lista ”)
del (” f l a t s ”)
del (” all imh ”)
del (” a l l f i t s ”)
del (” pro object ”)
del (” p r o f l a t s ”)
clear
print ( ” ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ” )
print ( ” ” )
print ( ” S c r i p t f o r b a s i c r e d u c t i o n o f i m a g e s from CASLEO’ s Roper 1300 b CCD Camera” )
print ( ” T h i s s c r i p t would e d i t image h e a d e r s and p e r f o r m b a s i c
z e r o l e v e l and f l a t f i e l d c o r r e c t i o n s ” )
print ( ” I n p u t i m a g e s s h o u l d be i n . f i t o r . f i t s f o r m a t . Images
would be c o n v e r t e d and h a n d l e d a s . imh f i l e s ” )
print ( ” P l a c e t h e s c r i p t a l o n g w i t h t h e d e s i r e d i m a g e s i n t h e
same f o l d e r . User would be a s k e d t o p r o c e e d ” )
print ( ” w i t h c a l i b r a t i o n b e f o r e s t a r t i n g ” )
print ( ” R e q u i r e d f i e l d s d e f i n e d : LECTURA, BIN , FILTER01 ,
w i t h v a l u e s 100Khz o r 1Mhz f o r LECTURA” )
print ( ” e . g . LECTURA= ’100Khz ’ , BIN = ’ 2 ’ , FILTER01=’R’ ” )
print ( ” I n p u t : Raw f i t o r f i t s i m a g e s by :
B i n n i n g f a c t o r ( b i n ) , r e a d i n g f r e q u e n c y (LECTURA) and f i l t e r ( f i l ) ” )
print ( ” Output : P r o c e s s e d i m a g e s i n . imh f o r m a t and . f i t s f o r m a t ” )
print ( ” P l e a s e c h e c k t h a t t h e o b j e c t i m a g e s have t h e IMAGETYP=’ o b j e c t ’
f i e l d d e f i n e d . I f not , e d i t i t ” )
PROCESAMIENTO DE ESPECTROS
45
print ( ” ” )
print ( ” Images would be f i l t e r e d by b i n n i n g f a c t o r ,
f i l t e r and t h e n f r e q u e n c y (LECTURA) ” )
print ( ” p a c k a g e s noao . o b s u t i l imred . c c d r e d s h o u l d be l o a d e d ” )
print ( ” ” )
print ( ”TRIMSEC and BIASSEC s e c t i o n s , f o r b i n 1 i m a g e s :
[1:1340 ,1:1299] , [1:1340 ,1300:1309] ”)
print ( ”TRIMSEC and BIASSEC s e c t i o n s , f o r b i n 2 i m a g e s :
[1:670 ,1:649] , [1:670 ,651:654] ”)
print ( ” IF you don ’ t a g r e e w i t h t h i s r e g i o n s , p l e a s e e d i t them i n t h e s c r i p t ” )
print ( ” ” )
print ( ” ” )
print ( ” S e b a s t i a n Bruzzone 2009
”)
print ( ” c o n t a c t : s b r u z z o n e @ f i s i c a . edu . uy ” )
print ( ” Los M o l i n o s O b s e r v a t o r y IAU c o d e 844 Departamento
de Astronomia , Fac de C i e n c i a s ” )
print ( ” ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ” )
i f ( resp ){
print ( ” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ” )
print ( ” P r o c e s s i n g u s i n g f i l t e r : ” , ( f i l t r o ) )
print ( ” w i t h b i n n i n g f a c t o r : ” , ( b i n n i n g ) )
print ( ” a t : ” , ( read ) )
print ( ” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ” )
switch ( binning ) {
#. S w i t c h b i n n i n g 1 ( case 1 )
case 1 :
{
h s e l e c t ( ” ∗ . f i t ” , ” $ I ” , ”BIN=1” , > ” b i n l i s t a 1 ” )
h s e l e c t ( ” @ b i n l i s t a 1 ” , ” $ I ” , ”FILTER01?= ’ ” // f i l t r o // ” ’ ” , > ” l i s t ” // f i l t r o )
h e d i t ( ” @ l i s t ” // f i l t r o , ”BIASSEC” , ” [ 1 : 1 3 4 0 , 1 3 0 0 : 1 3 0 9 ] ” , add+, a d d o n l y +,up+, ver −)
h e d i t ( ” @ l i s t ” // f i l t r o , ”TRIMSEC” , ” [ 1 : 1 3 4 0 , 1 : 1 2 9 9 ] ” , add+, a d d o n l y +,up+, v er −)
# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . b e g i n o f n e s t e d s w i t c h @bin1
s w i t c h ( s t r i d x ( read , ”k” ) )
{
case 1 :
{
print ( ” ” )
print ( ” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ” )
print ( ” U si ng b i n 1 i m a g e s a t 100Khz ” )
print ( ” P r e s s any key t o c o n t i n u e ” )
print ( ” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ” )
h s e l e c t ( ” @ b i n l i s t a 1 ” , ” $ I ” , ”IMAGETYP ?= ’ z e r o ’&&(LECTURA= ’100 khz ’ |
|LECTURA= ’100kHZ ’ | | LECTURA= ’100Khz ’ ) ” , > ” k l i s t a ” )
h s e l e c t ( ” @ l i s t ” // f i l t r o , ” $ I ” , ”LECTURA= ’100 khz ’ | | LECTURA= ’100kHZ ’ |
|LECTURA= ’100Khz ’ ” , >> ” k l i s t a ” )
! s e d ’ s / . f i t / . imh/g ’ k l i s t a > k l i s t
r f i t s ( ” @ k l i s t a ” , ” ∗ ” , ” @ k l i s t ” , d a t a t y p e=u )
c h p i x t y p e ( ” @ k l i s t ” , ” @ k l i s t ” , n e w p i x t y=” r e a l ” )
h e d i t ( ” @ k l i s t ” , ”FILTERID” , f i l t r o , add+,up+, ver −)
h s e l e c t ( ” @ k l i s t ” , ” $ I ” , ”IMAGETYP?= ’ z e r o ’ ” ,> ” b i a s l i s t ” )
h s e l e c t ( ” @ k l i s t ” , ” $ I ” , ”IMAGETYP ?= ’ o b j e c t ’ ” , > ” o b j e c t l i s t ” )
h s e l e c t ( ” @ k l i s t ” , ” $ I ” , ”IMAGETYP ?= ’ f l a t ’ ” ,> ” f l a t l i s t ” )
h s e l e c t ( ” @ k l i s t ” , ” $ I ” , ”IMAGETYP ?= ’ sky ’ ”,>> ” f l a t l i s t ” )
h e d i t ( ” @ k l i s t ” , ”RDNOISE” , ” 5 ” , add+, up+, ver −)
h e d i t ( ” @ k l i s t ” , ”GAIN” , ” 2 ” , add+, up+, ver −)
}
case 0 :
46
SEBASTIÁN BRUZZONE
{
print ( ” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ” )
print ( ” Us in g b i n 1 i m a g e s a t 1Mhz” )
print ( ” P r e s s any key t o c o n t i n u e ” )
print ( ” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ” )
h s e l e c t ( ” @ b i n l i s t a 1 ” , ” $ I ” , ”IMAGETYP ?= ’ z e r o ’&&LECTURA = ’1Mhz ’ ” ,
> ” M lista ”)
h s e l e c t ( ” @ l i s t ” // f i l t r o , ” $ I ” , ”LECTURA= ’1Mhz ’ ” , >> ” M l i s t a ” )
! s e d ’ s / . f i t / . imh/g ’ M l i s t a > M l i s t
r f i t s ( ” @ M l i s t a ” , ” ∗ ” , ” @ M l i s t ” , d a t a t y p e=u )
c h p i x t y p e ( ” @ M l i s t ” , ” @ M l i s t ” , n e w p i x t y=” r e a l ” )
h e d i t ( ” @ M l i s t ” , ”FILTERID” , f i l t r o , add+,up+, ver −)
h s e l e c t ( ” @ M l i s t ” , ” $ I ” , ”IMAGETYP?= ’ z e r o ’ ” ,> ” b i a s l i s t ” )
h s e l e c t ( ” @ M l i s t ” , ” $ I ” , ”IMAGETYP?= ’ o b j e c t ’ ” , > ” o b j e c t l i s t ” )
h s e l e c t ( ” @ M l i s t ” , ” $ I ” , ”IMAGETYP?= ’ f l a t ’ ” ,> ” f l a t l i s t ” )
h s e l e c t ( ” @ M l i s t ” , ” $ I ” , ”IMAGETYP?= ’ sky ’ ”,>> ” f l a t l i s t ” )
h e d i t ( ” @ M l i s t ” , ”RDNOISE” , ” 7 ” , add+, up+, ver −)
h e d i t ( ” @ M l i s t ” , ”GAIN” , ” 2 ” , add+, up+, ver −)
}
default :
print ( ” I n p u t e r r o r ” )
}
# . . . . . . . . . . . end o f n e s t e d s w i t c h @bin1
}
case 2 :
{
#. S w i t c h b i n n i n g 2 ( case 2 )
h s e l e c t ( ” ∗ . f i t ” , ” $ I ” , ”BIN=2” , > ” b i n l i s t a 2 ” )
h s e l e c t ( ” @ b i n l i s t a 2 ” , ” $ I ” , ”FILTER01?= ’ ” // f i l t r o // ” ’ ” , > ” l i s t ” // f i l t r o )
h e d i t ( ” @ l i s t ” // f i l t r o , ”BIASSEC” , ” [ 1 : 6 7 0 , 6 5 1 : 6 5 4 ] ” , add+, a d d o n l y +,up+, ver −)
h e d i t ( ” @ l i s t ” // f i l t r o , ”TRIMSEC” , ” [ 1 : 6 7 0 , 1 : 6 4 9 ] ” , add+, a d d o n l y +,up+, ver −)
# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . b e g i n o f n e s t e d s w i t c h @bin2
s w i t c h ( s t r i d x ( read , ”k” ) )
{
case 1 :
#Gain v a l u e o f 1 . 4 9 and RDNOISE 2 . 6 @ b i n 2 and 100 khz w i t h f i n d g a i n
{
print ( ” ” )
print ( ” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ” )
print ( ” U si ng b i n 2 mages a t 100Khz” )
print ( ” P r e s s any key t o c o n t i n u e ” )
print ( ” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ” )
h s e l e c t ( ” @ b i n l i s t a 2 ” , ” $ I ” , ”IMAGETYP ?= ’ z e r o ’&&(LECTURA= ’100 khz ’ | |
LECTURA= ’100kHZ ’ | | LECTURA= ’100Khz ’ ) ” , > ” k l i s t a ” )
h s e l e c t ( ” @ l i s t ” // f i l t r o , ” $ I ” , ”LECTURA= ’100 khz ’ | | LECTURA= ’100kHZ ’ | |
LECTURA= ’100Khz ’
” , >> ” k l i s t a ” )
! s e d ’ s / . f i t / . imh/g ’ k l i s t a > k l i s t
r f i t s ( ” @ k l i s t a ” , ” ∗ ” , ” @ k l i s t ” , d a t a t y p e=u )
c h p i x t y p e ( ” @ k l i s t ” , ” @ k l i s t ” , n e w p i x t y=” r e a l ” )
h e d i t ( ” @ k l i s t ” , ”FILTERID” , f i l t r o , add+,up+, ver −)
h s e l e c t ( ” @ k l i s t ” , ” $ I ” , ”IMAGETYP?= ’ z e r o ’ ” ,> ” b i a s l i s t ” )
h s e l e c t ( ” @ k l i s t ” , ” $ I ” , ”IMAGETYP ?= ’ o b j e c t ’ ” , > ” o b j e c t l i s t ” )
h s e l e c t ( ” @ k l i s t ” , ” $ I ” , ”IMAGETYP ?= ’ f l a t ’ ” ,> ” f l a t l i s t ” )
h s e l e c t ( ” @ k l i s t ” , ” $ I ” , ”IMAGETYP ?= ’ sky ’ ” ,> ” f l a t l i s t ” )
h e d i t ( ” @ k l i s t ” , ”RDNOISE” , ” 5 ” , add+, up+, ver −)
h e d i t ( ” @ k l i s t ” , ”GAIN” , ” 2 ” , add+, up+, ver −)
}
case 0 :
{
print ( ” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ” )
PROCESAMIENTO DE ESPECTROS
47
print ( ” Us in g b i n 2 i m a g e s a t 1Mhz ” ) #en b i n 2
print ( ” P r e s s any key t o c o n t i n u e ” )
print ( ” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ” )
h s e l e c t ( ” @ b i n l i s t a 2 ” , ” $ I ” , ”IMAGETYP ?= ’ z e r o ’&&LECTURA= ’1Mhz ’ ” , > ” M l i s t a ” )
h s e l e c t ( ” @ l i s t ” // f i l t r o , ” $ I ” , ” ( (LECTURA= ’1MHz ’ ) | | ( LECTURA= ’1Mhz ’ ) ) ” ,
>> ” M l i s t a ” )
! s e d ’ s / . f i t / . imh/g ’ M l i s t a > M l i s t
r f i t s ( ” @ M l i s t a ” , ” ∗ ” , ” @ M l i s t ” , d a t a t y p e=u )
c h p i x t y p e ( ” @ M l i s t ” , ” @ M l i s t ” , n e w p i x t y=” r e a l ” )
h e d i t ( ” @ M l i s t ” , ”FILTERID” , f i l t r o , add+,up+, ver −)
h s e l e c t ( ” @ M l i s t ” , ” $ I ” , ”IMAGETYP?= ’ z e r o ’ ” ,> ” b i a s l i s t ” )
h s e l e c t ( ” @ M l i s t ” , ” $ I ” , ”IMAGETYP?= ’ o b j e c t ’ ” , > ” o b j e c t l i s t ” )
h s e l e c t ( ” @ M l i s t ” , ” $ I ” , ”IMAGETYP?= ’ f l a t ’ ” ,> ” f l a t l i s t ” )
h s e l e c t ( ” @ M l i s t ” , ” $ I ” , ”IMAGETYP?= ’ sky ’ ”,>> ” f l a t l i s t ” )
h e d i t ( ” @ M l i s t ” , ”RDNOISE” , ” 7 ” , add+, up+, ver −)
h e d i t ( ” @ M l i s t ” , ”GAIN” , ” 2 ” , add+, up+, ver −)
}
}
}
# . . . . . . . . . . . . . . . . . . . . . . . . . . . end o f n e s t e d s w i t c h @bin2
default :
print ( ” I n p u t E r r o r ” )
}
# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Case 2 e n d i n g ,
#
# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . counting objects ,
main s w i t c h
f l a t s and b i a s i m a g e s
i n u m b i a s=0
i f ( access ( ” b i a s l i s t ” ) ) {
count ( ” b i a s l i s t ” ) | scan ( inumbias )
}
i f ( inumbias >0){
print ( ” ” )
print ( ” ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ” )
print ( ” B i a s F i l e s @” // read // ” : ” , ( i n u m b i a s ) )
print ( ” ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ” )
print ( ” ” )
}
else {
print ( ” ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ” )
print ( ” There were NO B i a s Images ” )
print ( ” Check IMAGETYP key i n you i m a g e s ” )
print ( ” B i a s f i l e s s h o u l d have IMAGETYP=’ z e r o ’
”)
print ( ” ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ” )
}
inumobj=0
i f ( access ( ” o b j e c t l i s t ” ) ) {
c o u n t ( ” o b j e c t l i s t ” ) | s c a n ( inumobj )
}
i f ( inumobj >0){
print ( ” ” )
print ( ” ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ” )
print ( ” O b j e c t f i l e s @100” // read // ” hz : ” , ( inumobj ) )
print ( ” ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ” )
}
else {
print ( ” ” )
print ( ” ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ” )
print ( ”THERE ARE NO OBJECT FILES” )
print ( ” ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ” )
48
SEBASTIÁN BRUZZONE
}
#................
print ( ” . . . l o o k i n g f o r Non−s a t u r a t e d F l a t s ” )
print ( ” . . . . . . . . ” )
c o u n t ( ” f l a t l i s t ” ) | s c a n ( inum )
print ( ” ” )
print ( ” ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ” )
print ( ” F l a t f i l e s , inum=” , ( inum ) )
print ( ” ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ” )
i f ( inum >0) {
#.. looking f o r saturated f l a t s
l i s t =” f l a t l i s t ”
while ( f s c a n ( l i s t , s 1 ) !=EOF) {
i m s t a t ( s 1 // ” [ 1 0 0 : 6 0 0 , 1 0 0 : 5 0 0 ] ” , f i e l d s =”mean” , format −, c a c h e +) | s c a n (w)
i f ( w < 40000 && w > 2000 ) {
f i l e s ( s1 ,>>” f l a t s b u e n o s ” )
}
e l s e i f (w>−32768 && w<−24768){
i m a r i t ( s1 , ’+ ’ , 6 5 5 3 5 , s 1 )
# . . . adding
65535 adu ’ s .
#S e e Note 1 a t t h e end o f t h e s c r i p t
imrename ( s1 , ” m i n u s ”// s 1 )
f i l e s ( ” m i n u s ”// s1 ,>>” f l a t s b u e n o s ” )
p r i n t (” Negative f l a t found ”)
p r i n t ( ” Renaming t h i s f i l e
” , s1 , ” a s m i n u s ”// s 1 )
}
else
f i l e s ( s1 ,>>” f l a t s m a l o s ” )
}
i f ( a c c e s s (” f l a t s b u e n o s ”)){
c o u n t ( ” f l a t s b u e n o s ” ) | s c a n ( inumf )
print (””)
p r i n t (”∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗”)
p r i n t ( ” Good F l a t s : ” , inumf )
p r i n t (”∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗”)
}
else{
p r i n t (”∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗”)
p r i n t ( ” There a r e no GOOD f l a t s
”)
p r i n t (”∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗”)
}
}
else{
print ( ” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ” )
p r i n t ( ” Therea a r e NO f l a t s ” )
print ( ” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ” )
}
# . . . . . . . . . . . . . . . . . . . . . . . . . . . movig bad f l a t s
i =0
i f ( a c c e s s (” f l a t s m a l o s ”)) {
count (” f l a t s m a l o s ”) | scan ( i )
}
i f ( i >0){
print ( ” . . . . . . . . . . . . . . . . . . . . . ” )
p r i n t ( ” Bad F l a t s : ” , ( i ) )
print ( ” . . . . . . . . . . . . . . . . . . . . . . . ” )
mkdir ( ”JUNK” )
imcopy ( ” @ f l a t s m a l o s ” , ”JUNK” , v e r +)
}
t o t h e JUNK d i r e c t o r y
# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B i a s o r Oscan s e l e c t i o n
print (””)
print (””)
PROCESAMIENTO DE ESPECTROS
49
print ( ” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ” )
p r i n t ( ” Choose between Overscan c o r r e c t i o n ( ’ y e s ’ ) ” )
p r i n t ( ” o r B i a s c o r r e c t i o n ( ’ no ’ )
”)
p r i n t ( ” I f ( ’ y e s ’ ) , t h e i n t e r a c t i v e c u r v e f i t i n g mode would be e n a b l e d ” )
p r i n t (” to f i t the overscan p r o f i l e ”)
print (””)
p r i n t ( ” Would you l i k e t o run t h e Overscan c o r r e c t i o n mode ? ” )
print ( ” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ” )
print (””)
#...............................................
! cat ” o b j e c t l i s t ” ” f la t s b u e no s ” >
” objetos mas flats ”
#m er g in g t h e
lists
o f o b j e c t s and f l a t s
dummy=s c a n ( r e s p 2 )
i f ( resp2 ){
############
#Oscan C o r r e c t i o n # . . . . . . . . . . . .
############
print (””)
p r i n t ( ” ∗ ∗ ∗ ∗ Overscan C o r r e c t i o n ∗ ∗ ∗ ∗ ” )
print (””)
# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 s t run on c c d p r o c
c c d p r o c ( ” @ o b j e t o s m a s f l a t s ” , o u t p u t =”” , o v e r s c a+ , t r i m+ , z e r o c o r −
, d a r k c o r − , f l a t c o r − , r e a d a x i =”column ” , b i a s s e c =”image ” ,
t r i m s e c =”image ” , i n t e r a c t +, f u n c t i o =” s p l i n e 3 ” , o r d e r =6 , n i t e r a t e =2)
# . . . . . . . . . . . . . . . . . . . . . . looking for f l a t s
inumf=0
i f ( a c c e s s (” f l a t s b u e n o s ”)) {
c o u n t ( ” f l a t s b u e n o s ” ) | s c a n ( inumf )
}
#There s h o u l d be a t l e a s t , 3 f l a t s
i f ( inumf >3) {
print ( ” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ” )
p r i n t ( ” Good f l a t s : ” , inumf )
print ( ” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ” )
# . . . . . . . . . . . . . . . . . . . . . . Creating the Flat
imcombine ( ” @ f l a t s b u e n o s ” , o u t p u t=” F l a t . imh ” , combine=”median ”
, r e j e c t =” a v s i g c l i p ” , s c a l e =”mode ” )
i m s t a t ( ” @ f l a t s b u e n o s ”,> ” s a l i d a f l a t s t a t ” )
}
else{
print ( ” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ” )
p r i n t ( ” There wasn ’ t enough f l a t s i m a g e s ” )
print (” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ”)
}
imstat ( ” @ o b j e c t l i s t ” , > ” s a l i d a o s c a n c o r s t a t ” )
# . . . . . . . . . . . . . . . . . . . . . . . . . 2 nd run on c c d p r o c F l a t c o r r e c t i o n
c c d p r o c ( ” @ o b j e c t l i s t ” , o u t p u t=” ” , o v e r s c a −, t r i m +, z e r o c o r −,
d a r k c o r −, f l a t c o r +, f l a t =” F l a t . imh” , i l l u m −, f r i n g e −, r e a d a x i=” column ” ,
b i a s s e c=” image ” , t r i m s e c=” image ” , i n t e r a c t −, f u n c t i o=” s p l i n e 3 ” , o r d e r =6)
# . . . . . . . . . . . . . . . . . . s a v i n g f i t s f i l e s u s i n g w f i t s a t t h e PROC f o l d e r
mkdir ( ” PROC oscan ” // f i l t r o // ” ” // r e a d )
l i s t 2 =” o b j e c t l i s t ”
w h i l e ( f s c a n ( l i s t 2 , s 2 ) != EOF) {
imrename ( s2 , ” p r o ” // s 2 )
f i l e s ( ” p r o ” // s2 ,>>” p r o o b j e c t ” )
}
50
SEBASTIÁN BRUZZONE
l i s t 3 =” f l a t s b u e n o s ”
w h i l e ( f s c a n ( l i s t 3 , s 2 ) != EOF) {
imrename ( s2 , ” p r o ” // s 2 )
f i l e s ( ” p r o ” // s2 ,>>” p r o f l a t s ” )
}
! cat ” pro object ” ” p r o f l a t s ” > ” all imh ”
! l s F l a t . imh >> ” a l l i m h ”
! l s Z e r o . imh >> ” a l l i m h ”
! s e d ’ s / . imh / . f i t s /g ’ a l l i m h > a l l f i t s
w f i t s ( ” @all imh ” , ” @ a l l f i t s ” )
imcopy ( ” @ a l l f i t s ” , ” PROC oscan ” // f i l t r o // ” ” // read , v e r +)
cp ( ” s a l i d a o s c a n c o r s t a t ” , ” PROC oscan ” // f i l t r o // ” ” // r e a d )
cp ( ” s a l i d a f l a t s t a t ” , ” PROC oscan ” // f i l t r o // ” ” // r e a d )
cp ( ” o b j e c t l i s t a ” , ” PROC oscan ” // f i l t r o // ” ” // r e a d )
cp ( ” o b j e c t l i s t ” , ” PROC oscan ” // f i l t r o // ” ” // r e a d )
cp ( ” f l a t s b u e n o s ” , ” PROC oscan ” // f i l t r o // ” ” // r e a d )
# . . . . . . . . . . . . . . . . . . v i e w i n g t h e m a s t e r F l a t ( c o u l d be i g n o r e d )
d i s p l a y ( ” F l a t . imh” , 1 )
# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . deleting
i m d e l ( ” ∗ . imh” )
del (” l i s t a ”)
del (” l i s t ”)
del (” list R ”)
del (” list V ”)
del (” b i a s l i s t ”)
del (” f l a t l i s t ”)
del (” flats buenos ”)
del (” flats malos ”)
del (” o b j e c t l i s t ”)
del (” s a l i d a b i a s c o r s t a t ”)
del (” salida oscancor stat ”)
del (” s a l i d a f l a t s t a t ”)
files
#.........................
p r i n t ( ” ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ” )
p r i n t ( ” O b j e c t i m a g e s p r o c e s s e d : ” , ( inumobj ) )
p r i n t ( ” F l a t i m a g e s p r o c e s s e d : ” , ( inum ) )
p r i n t ( ” Images s a v e d a t PROC
folder ”)
p r i n t ( ” in f i t s format u s i n g w f i t s ” )
p r i n t ( ”End o f S c r i p t ” )
p r i n t ( ” ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗CAS PRO” )
}
else{
###########
# Bias Correction # . . . . . . . . . . . . . . . . . . . . . . .
###########
p r i n t ( ”” )
p r i n t ( ” ∗∗∗ B i a s C o r r e c t i o n ∗∗∗ ” )
p r i n t ( ”” )
# . . . . . . . . Combining B i a s f r a m e s and 1 s t run on c c d p r o c
imcombine ( ” @ b i a s l i s t ” , o u t p u t=” Z e r o . imh” , combine=” a v e r a g e ”
, r e j e c t=”minmax” , s c a l e=”none” , nlow =0 , n h i g h =1 , g a i n=” image ” , r d n o i s e=” image ” )
PROCESAMIENTO DE ESPECTROS
51
c c d p r o c ( ” @ o b j e t o s m a s f l a t s ” , o u t p u t=” ” , o v e r s c a −, t r i m +, z e r o c o r +,
z e r o=” Z e r o . imh” , d a r k c o r −, f l a t c o r −, i l l u m −, f r i n g e −, r e a d a x i=” column ”
, t r i m s e c=” image ” , i n t e r a c t −, f u n c t i o=” c h e b y s h e v ” , o r d e r =1)
# . . . . . . . . . . . . . . . looking
f o r good f l a t s
inumf=0
i f ( access (” flats buenos ” )) {
c o u n t ( ” f l a t s b u e n o s ” ) | s c a n ( inumf )
}
# . . . . . . . . . . . . . . . . . . . . . . t h e r e s h o u l d be more than 3 f l a t s
i f ( inumf >3) {
print (” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ”)
p r i n t ( ”Good F l a t s : ” , inumf )
print (” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ”)
# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C r e a t i n g t h e F l a t image
imcombine ( ” @ f l a t s b u e n o s ” , o u t p u t=” F l a t . imh” , combine=” median ”
, r e j e c t=” a v s i g c l i p ” , s c a l e=”mode” , r d n o i s e=” r d n o i s e ” , g a i n=” g a i n ” )
i m s t a t ( ” @ f l a t s b u e n o s ” ,> ” s a l i d a f l a t s t a t ” )
}
else {
print (” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ”)
p r i n t ( ” ∗∗∗ There wasn ’ t n o t enough f l a t i m a g e s ∗ ∗ ∗ ” )
print ( ” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ” )
}
imstat (” @ o b j e c t l i s t ” , > ” s a l i d a b i a s c o r s t a t ”)
# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 nd run on c c d p r o c , F l a t c o r r e c t i o n
c c d p r o c ( ” @ o b j e c t l i s t ” , o u t p u t =”” , o v e r s c a −, t r i m +, z e r o c o r +, z e r o =”Z e r o . imh ” ,
d a r k c o r −, f l a t c o r +, f l a t =” F l a t . imh ” , i l l u m −, f r i n g e −,
r e a d a x i =”column ” , t r i m s e c =”image ” , i n t e r a c t −, f u n c t i o =”c h e b y s h e v ” , o r d e r =1)
# . . . . . . . . . . . s a v i n g i m a g e s i n f i t s f o r m a t a t t h e PROC f o l d e r
mkdir ( ” PROC bias ”// f i l t r o //” ”// r e a d )
l i s t 2 =” o b j e c t l i s t ”
w h i l e ( f s c a n ( l i s t 2 , s 2 ) != EOF) {
imrename ( s2 , ” p r o ”// s 2 )
f i l e s ( ” p r o ”// s2 ,>>” p r o o b j e c t ” )
}
l i s t 3 =” f l a t s b u e n o s ”
w h i l e ( f s c a n ( l i s t 3 , s 2 ) != EOF) {
imrename ( s2 , ” p r o ”// s 2 )
f i l e s ( ” p r o ”// s2 ,>>” p r o f l a t s ” )
}
! l s F l a t . imh >> ” a l l i m h ”
! l s Z e r o . imh >> ” a l l i m h ”
! cat ” pro object ” ” p r o f l a t s ” > ” all imh ”
! s e d ’ s / . imh / . f i t s / g ’ a l l i m h > a l l f i t s
w f i t s (” @all imh ” , ” @ a l l f i t s ”)
imcopy ( ” @ a l l f i t s ” , ” PROC bias ”// f i l t r o //” ”// read , v e r +)
cp ( ” s a l i d a b i a s c o r s t a t ” , ” PROC bias ”// f i l t r o //” ”// r e a d )
cp ( ” s a l i d a f l a t s t a t ” , ” PROC bias ”// f i l t r o //” ”// r e a d )
cp ( ” f l a t s b u e n o s ” , ” PROC bias ”// f i l t r o //” ”// r e a d )
! s e d ’ s / . imh / . f i t s / g ’ o b j e c t l i s t > o b j e c t l i s t a
cp ( ” o b j e c t l i s t a ” , ” PROC bias ”// f i l t r o //” ”// r e a d )
cp ( ” o b j e c t l i s t ” , ” PROC bias ”// f i l t r o //” ”// r e a d )
52
SEBASTIÁN BRUZZONE
# . . . . . . . . . . . . . . . . . . . . . . . viewing the Flat images ( i t
d i s p l a y ( ” F l a t . imh ” , 1 )
# . . . . . . . . . . . . . . . . . . . . . . deleting
i m d e l ( ” ∗ . imh ” )
del (” l i s t a ”)
del (” l i s t ”)
del (” l i s t R ”)
del (” l i s t V ”)
del (” b i a s l i s t ”)
del (” f l a t l i s t ”)
c o u l d be i g n o r e d )
files .
#.............................................
p r i n t (”∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗”)
p r i n t ( ” O b j e c t i m a g e s p r o c e s s e d : ” , ( inumobj ) )
p r i n t ( ” F l a t i m a g e s p r o c e s s e d : ” , ( inum ) )
p r i n t ( ” Images s a v e d a t PROC
f o l d e r ”)
p r i n t (” in f i t s format using w f i t s ”)
p r i n t ( ” End o f S c r i p t ” )
p r i n t (”∗∗ ∗∗ ∗∗ ∗∗ ∗∗ ∗∗ ∗∗ ∗∗∗ ∗∗ ∗∗ ∗∗ ∗∗ ∗∗ ∗∗∗ ∗∗ ∗∗ ∗∗ ∗CAS PRO” )
}
}
end
#Note
#The n e g a t i v e v a l u e d i m a g e s a p e a r e d i n t h e l a s t run a t
C a s l e o , a l s o v e r y s a t u r a t e d images , due maybe b e c a u s e o f
#i n t h e c c d d e t e c t o r .
8.2.
residual charges
Filtros de Medianas, Máximos y Mı́nimos.
#t e m p l a t e de s c r i p t p a r a f i l t r o e s p a c i a l de 3 x3
#s e i n g r e s a con l a imagen i n i c i a l y nombre imagen f i n a l
#como argumentos d e l p r o c e d i m i e n t o
p r o c e d u r e M a s c a r a 1 ( i m a g e i n , imageout , f i l , op )
##s e d e f i n e n
l o s parametros del
script
s t r i n g i m a g e i n { prompt=” Imagen de e n t r a d a ” }
s t r i n g i m a g e o u t { prompt=” imagen de s a l i d a ” }
s t r i n g f i l { ” median ” , prompt=” Tipo de f i l t r o ( max | min | median ) ” }
i n t op { prompt=” I n g r e s e o p c i o n ( | 1 . : ( 3 x3 ) | 2 : ( 3 x5 )
| 3 : ( 3 x9 ) | 4 : ( 9 x3 ) | 5 : ( 1 5 x3 ) | 6 : ( 3 x15 ) | 7 : ( 6 3 x3 ) | 8 : ( 8 3 x3 ) | ) ” }
begin
s t r i n g in , out , f i l t r o
i n t v i n f , vsup , o p c i o n
real constant
#d e f i n i m o s l a s v a r i a b l e s
in=i m a g e i n
out=i m a g e o u t
o p c i o n=op
f i l t r o=f i l
c o n s t a n t = −30000.
PROCESAMIENTO DE ESPECTROS
print ( ” ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ” )
print ( ” Programa M a s c a r a 1 ” )
print ( ” El u s u a r i o puede s e l e c c i o n a r e n t r e d i v e r s a s m a s c a r a s ” )
print ( ” p a r a a p l i c a r s o b r e una imagen a e l e c c i o n ” )
print ( ” Los f i l t r o s d i s p o n i b l e s son max , min y mediana ” )
print ( ” Las m a s c a r a s comprenden una mascara c u a d r a d a de 3 x3 p i x ” )
print ( ”y c u a t r o m a s c a r a s r e c t a n g u l a r e s de 3 x5 , 3 x9 , 3 x15 ,
9 x3 , 15 x3 , 63 x3 y 83 x3 p i x e l e s ” )
print ( ” ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ” )
#usando mascara de 3 x3
#implemento una mascara v e r t i c a l o r e c t a n g u l a r
switch ( opcion ){
case 1 :
{
#uso i m s h i f t p a r a c r e a r 8 i m a g e n e s que t e n g a n c e n t r a d o
#cada v e c i n o en e l p i x e l c e n t r a l . La imagen ” f 3 x 3 . 5 ” e s i m a g e i n
i m s h i f t ( in , ” f 3 x 3 . 1 ” , 1 . , 1 . , boundary= ’ c o n s t a n t ’ )
i m s h i f t ( in , ” f 3 x 3 . 2 ” , 0 . , 1 . , boundary= ’ c o n s t a n t ’ )
i m s h i f t ( in , ” f 3 x 3 . 3 ” , − 1 . , 1 . , boundary= ’ c o n s t a n t ’ )
i m s h i f t ( in , ” f 3 x 3 . 4 ” , 1 . , 0 . , boundary= ’ c o n s t a n t ’ )
i m s h i f t ( in , ” f 3 x 3 . 6 ” , − 1 . , 0 . , boundary= ’ c o n s t a n t ’ )
i m s h i f t ( in , ” f 3 x 3 . 7 ” , 1 . , − 1 . , boundary= ’ c o n s t a n t ’ )
i m s h i f t ( in , ” f 3 x 3 . 8 ” , 0 . , − 1 . , boundary= ’ c o n s t a n t ’ )
i m s h i f t ( in , ” f 3 x 3 . 9 ” , − 1 . , − 1 . , boundary= ’ c o n s t a n t ’ )
i f ( f i l t r o == ”max” ) {
v i n f =8
vsup=0
} e l s e i f ( f i l t r o == ”min” ) {
v i n f =0
vsup=8
} e l s e i f ( f i l t r o == ” median ” ) {
v i n f =4
vsup=4
}
}
case 2 :
#3x5
{
#s e c u e n t a en s e n t i d o a n t i h o r a r i o
i m s h i f t ( in , ” f 3 x 3 . 1 ” , − 2 . , 1 . , boundary= ’ c o n s t a n t ’ )
i m s h i f t ( in , ” f 3 x 3 . 2 ” , − 1 . , − 1 . , boundary= ’ c o n s t a n t ’ )
i m s h i f t ( in , ” f 3 x 3 . 3 ” , 2 . , − 1 . , boundary= ’ c o n s t a n t ’ )
i m s h i f t ( in , ” f 3 x 3 . 4 ” , 1 . , 1 . , boundary= ’ c o n s t a n t ’ )
i f ( f i l t r o == ”max” ) {
v i n f =4
vsup=0
} e l s e i f ( f i l t r o == ”min” ) {
v i n f =0
vsup=4
} e l s e i f ( f i l t r o == ” median ” ) {
v i n f =2
vsup=2
}
}
case 3 :
#3x9
{
#s e c u e n t a en s e n t i d o a n t i h o r a r i o
i m s h i f t ( in , ” f 3 x 3 . 1 ” , − 4 . , 1 . , boundary= ’ c o n s t a n t ’ )
i m s h i f t ( in , ” f 3 x 3 . 2 ” , − 3 . , − 1 . , boundary= ’ c o n s t a n t ’ )
i m s h i f t ( in , ” f 3 x 3 . 3 ” , 4 . , − 1 . , boundary= ’ c o n s t a n t ’ )
i m s h i f t ( in , ” f 3 x 3 . 4 ” , 3 . , 1 . , boundary= ’ c o n s t a n t ’ )
i f ( f i l t r o == ”max” ) {
v i n f =4
53
54
SEBASTIÁN BRUZZONE
} else
} else
vsup=0
( f i l t r o == ”min” ) {
v i n f =0
vsup=4
i f ( f i l t r o == ” median ” ) {
v i n f =2
vsup=2
if
}
}
case 4 :
{
i m s h i f t ( in
i m s h i f t ( in
i m s h i f t ( in
i m s h i f t ( in
#9x3
#s e c u e n t a en s e n t i d o a n t i h o r a r i o
, ” f 3 x 3 . 1 ” , − 1 . , 4 . , boundary= ’ c o n s t a n t ’ )
, ” f 3 x 3 . 2 ” , − 1 . , − 3 . , boundary= ’ c o n s t a n t ’ )
, ” f 3 x 3 . 3 ” , 1 . , − 4 . , boundary= ’ c o n s t a n t ’ )
, ” f 3 x 3 . 4 ” , 1 . , 3 . , boundary= ’ c o n s t a n t ’ )
i f ( f i l t r o == ”max” ) {
v i n f =4
vsup=0
} e l s e i f ( f i l t r o == ”min” ) {
v i n f =0
vsup=4
} e l s e i f ( f i l t r o == ” median ” ) {
v i n f =2
vsup=2
}
}
case 5 : #15x3
{
i m s h i f t ( in , ” f 3 x 3 . 1 ”
i m s h i f t ( in , ” f 3 x 3 . 2 ”
i m s h i f t ( in , ” f 3 x 3 . 3 ”
i m s h i f t ( in , ” f 3 x 3 . 4 ”
s e c u e n t a en s e n t i d o a n t i h o r a r i o
, − 1 . , 7 . , boundary= ’ c o n s t a n t ’ )
, − 1 . , 6 . , boundary= ’ c o n s t a n t ’ )
, 1 . , − 7 . , boundary= ’ c o n s t a n t ’ )
, 1 . , 6 . , boundary= ’ c o n s t a n t ’ )
i f ( f i l t r o == ”max” ) {
v i n f =4
vsup=0
} e l s e i f ( f i l t r o == ”min” ) {
v i n f =0
vsup=4
} e l s e i f ( f i l t r o == ” median ” ) {
v i n f =2
vsup=2
}
}
case 6 : #3x15
{
#s e c u e n t a en s e n t i d o a n t i h o r a r i o
i m s h i f t ( in , ” f 3 x 3 . 1 ” , − 7 . , 1 . , boundary= ’ c o n s t a n t ’ )
i m s h i f t ( in , ” f 3 x 3 . 2 ” , − 6 . , − 1 . , boundary= ’ c o n s t a n t ’ )
i m s h i f t ( in , ” f 3 x 3 . 3 ” , 7 . , − 1 . , boundary= ’ c o n s t a n t ’ )
i m s h i f t ( in , ” f 3 x 3 . 4 ” , 6 . , 1 . , boundary= ’ c o n s t a n t ’ )
i f ( f i l t r o == ”max” ) {
v i n f =4
vsup=0
} e l s e i f ( f i l t r o == ”min” ) {
v i n f =0
vsup=4
} e l s e i f ( f i l t r o == ” median ” ) {
v i n f =2
vsup=2
}
PROCESAMIENTO DE ESPECTROS
55
}
case 8 : #83x3
{
#s e c u e n t a en s e n t i d o a n t i h o r a r i o
i m s h i f t ( in , ” f 3 x 3 . 1 ” , − 1 . , 4 1 . , boundary= ’ c o n s t a n t ’ )
i m s h i f t ( in , ” f 3 x 3 . 2 ” , − 1 . , − 4 0 . , boundary= ’ c o n s t a n t ’ )
i m s h i f t ( in , ” f 3 x 3 . 3 ” , 1 . , − 4 1 . , boundary= ’ c o n s t a n t ’ )
i m s h i f t ( in , ” f 3 x 3 . 4 ” , 1 . , 4 0 . , boundary= ’ c o n s t a n t ’ )
i f ( f i l t r o == ”max” ) {
v i n f =4
vsup=0
} e l s e i f ( f i l t r o == ”min” ) {
v i n f =0
vsup=4
} e l s e i f ( f i l t r o == ” median ” ) {
v i n f =2
vsup=2
}
}
case 7 : #63x3
{
#s e c u e n t a en s e n t i d o
i m s h i f t ( in , ” f 3 x 3 . 1 ” , − 1 . , 3 1 . , boundary= ’ c o n s t a n t ’ )
i m s h i f t ( in , ” f 3 x 3 . 2 ” , − 1 . , − 3 0 . , boundary= ’ c o n s t a n t ’ )
i m s h i f t ( in , ” f 3 x 3 . 3 ” , 1 . , − 3 1 . , boundary= ’ c o n s t a n t ’ )
i m s h i f t ( in , ” f 3 x 3 . 4 ” , 1 . , 3 0 . , boundary= ’ c o n s t a n t ’ )
i f ( f i l t r o == ”max” ) {
v i n f =4
vsup=0
} e l s e i f ( f i l t r o == ”min” ) {
v i n f =0
vsup=4
} e l s e i f ( f i l t r o == ” median ” ) {
v i n f =2
vsup=2
}
}
default :
print ( ’ E r r o r de e n t r a d a , s e l e c c i o n e ( 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 ) ’ )
}
#combina l a s i m a g e n e s
imcombine ( ” f 3 x 3 . ∗ , ” // in , out , comb=
” a v e r a g e ” , r e j e c t=”minmax” , nlow=v i n f , n h i g h=vsup )
#i m a r i t ( in , ’− ’ , out , out )
#b o r r a l a s i m a g e n e s i n t e r m e d i a s
i m d e l ( ” f 3 x 3 . ∗ ” , ver −)
end
#f i n d e l s c r i p t
Departamento de Astronomı́a Instituto de Fı́sica
E-mail address: [email protected]
antihorario

Documentos relacionados