MANEJO BSICO DE Javier Peralta Calvillo Ph D
MANEJO BÁSICO DE Javier Peralta Calvillo, Ph. D.
1ª PARTE: Ingredientes para un buen programa
Ingredientes para un buen programa: Ø Programa bien estructurado. Ø Un editor adecuado. Ø División en subprogramas. Ø Bucles y Condicionales anidados “con márgenes”. Ø Comandos en “mayúsculas”. Ø Arrays con corchetes en vez de paréntesis. Ø COMENTARIOS!! • “Descripción” del programa • Definición de Variables • Lectura de los Datos • Procesado y/o Cálculo • Visualización de Resultados • Escritura de Resultados • Fin del programa • Subprograma 1 • Subprograma 2 • … FOR j=0, 19 DO BEGIN FOR i=0, 30 DO BEGIN IF a EQ 0 THEN BEGIN PRINT, ’Hola’ ENDIF ENDFOR
2ª PARTE: Lectura y Escritura de Datos
Lectura y Escritura de datos (I): Tipos de variables en IDL: • ALFANUMÉRICAS O “STRINGS” • NUMÉRICAS • Números enteros (FIX) • Números Racionales de Precisión Simple (FLOAT) • Números Raciones de Precisión Doble (DOUBLE) • Números Complejos (COMPLEX) Tipos de separadores de datos: • COMAS (, ) • TABULACIONES ( • ESPACIOS ( ) )
Lectura y Escritura de datos (II): Escritura y Lectura de Datos separados por comas (, ): • ESCRITURA: Data = STRTRIM(dato 1, 1) + ‘, ’ + STRTRIM(dato 2, 1) + ‘, ’ + … PRINTF, 1, Data • LECTURA: READF, 1, Data = STRSPLIT(Data , ‘, ’ , /EXTRACT) Data = FLOAT(Data)
Lectura y Escritura de datos (III): Escritura y Lectura de Datos con Formato (pag. 140): FORMAT = ‘(F 5. 2)’ = 3. 1415927 Para varias columnas: PRINT, !PI, FORMAT=‘(D 5. 2)’ 3. 14 FORMAT = ‘ 3(F 5. 2, 4 x)’ PRINT, !PI, FORMAT=‘(D 5. 3)’ 3. 142 PRINT, A 1, A 2, A 3, FORMAT = ‘ 3(F 5. 2, 4 x)’ PRINT, !PI, FORMAT=‘(D 5. 4)’ ***** OJO: Tanto en la Lectura como en la Escritura MISMO FORMATO!!
Lectura y Escritura de datos (IV): Escritura y Lectura de Arrays Multidimensionales (TIFF): Los ficheros de imagen TIFF son óptimos para almacenamiento: Ø Cómoda Lectura y Escritura de Datos. Ø Permiten guardar nºs Racionales de precisión simple (FLOAT) Ø Compresión sin pérdida de datos. • ESCRITURA: WRITE_TIFF, File. Name, Data, /FLOAT, COMPRESSION=1 OTRA POSIBILIDAD!! Ficheros HDF (pág. 161) Permiten: • Múltiples Formatos de Datos • LECTURA: Data = READ_TIFF(File. Name) • Etiquetar Datos • Multiplataforma
Lectura y Escritura de datos (V): Manipulación de Ficheros: • DIALOG_PICKFILE • FILE_SEARCH • FILE_BASENAME / FILE_DIRNAME • FILE_COPY • FILE_MOVE • FILE_DELETE • FILE_MKDIR • …
Lectura y Escritura de datos (VI): Búsqueda de Datos en una Cabecera: FOR k=0, N_ELEMENTS(header)-1 DO BEGIN Manipulando Strings: IF STRMATCH(header[k]), ‘*DECLINATION*’) THEN BEGIN ; Extract the Temperature • STRMATCH data = STRCOMPRESS(header[k], /REMOVE_ALL) • STRCOMPRESS pos • STRPOS = STRPOS(data, ‘=‘) Temp = STRMID(data, pos+1) • STRMID ; Take out RETURN from String • STRLEN Temp = STRMID(Temp, 0, STRLEN(Temp)-1) Temp = FLOAT(Temp) ENDIF ENDFOR
3ª PARTE: Representación Gráfica con IDL
Representación Gráfica con IDL (I): Gráficas simples: • PLOT y OPLOT, X, Y, XRange=[X 1, X 2], /Xs, YRange=[Y 1, Y 2], /Ys, … • PSYM (para definido por usuario PSYM=8 y USERSYM) • XYOUTS • /DATA (coordenadas de la gráfica) • /DEVICE (píxeles de la ventana gráfica) • /NORMAL (coordenadas normalizadas de la ventana gráfica) • COLOR 24 (rutina de David Fanning!)
Representación Gráfica con IDL (II): Caracteres Especiales: Ver Herschey Fonts (símbolos griegos y matemáticos) Los caracteres especiales de IDL permiten: • Llevar a cabo tareas de “Códigos de Control” • Imprimir símbolos especiales (cambiando la fuente) • Con un poco de práctica… ¡hasta podemos escribir ecuaciones! NOTA: Existe un programa de IDL que permite reconocer comandos de La. Te. X (Te. Xto. IDL). http: //physweb. mnstate. edu/mcraig/textoidl/
Representación Gráfica con IDL (III): Gráficas múltiples: • Gráficas múltiples mediante !P. MULTI = [0, 2, 2, 0, 0] • !P. MULTI[0] – Indica el nº de gráficas quedan por dibujar • !P. MULTI[1] – Indica el nº de columnas de la ventana • !P. MULTI[2] – Indica el nº de filas de la ventana • !P. MULTI[3] – Indica en qué hueco de la vertical Z dibujamos (sólo 3 D) • !P. MULTI[4] – Indica el orden en que se van a rellenar los huecos • Gráficas múltiples mediante POSITION = [Xi, Yi, Xf, Yf]
4ª PARTE: Truquillos y Advertencias con IDL
Truquillos y Advertencias con IDL (I): ¿Hartos de definir unidades para ficheros y ventanas? • VENTANAS WINDOW, /FREE, TITLE=’Libertaaaaaaad!!’ • FICHEROS GET_LUN, unit OPENR, unit, filename … CLOSE, unit FREE_LUN, unit
Truquillos y Advertencias con IDL (II): ¿Cómo hacer que nuestro programa “sepa” dónde está ejecutándose? HELP, name = 'Mi_programa', /source, /procedure, output=Output Path = STRMID(Output[1] , STRPOS(output[1] , ': ') - 1) Path = STRMID(Output[1] , STRPOS(output[1] , ' /') - 1) Directory = FILE_DIRNAME(Path) IF (STRPOS(Directory, '') EQ -1) THEN Directory=Directory+'/' ELSE Directory=Directory+'' ¿Qué hacer cuando no sabemos la extensión de un fichero de datos? WHILE NOT (EOF(unit) EQ 1) DO BEGIN … ENDWHILE
Truquillos y Advertencias con IDL (III): ¿Cómo añadir filas y/o columnas a un array? • Añadir Columnas A=0 A = [A , 1] PRINT, A 0 1 • Añadir Filas B = [2 , 3] A = [ [A] , [B] ] PRINT, A 0 1 2 3 • Añadir una Dimensión más C = [ [4 , 5] , [6 , 7] ] A = [ [ [A] ] , [ [C] ] ] HELP, A A INT = Array[2, 2, 2]
Truquillos y Advertencias con IDL (IV): ¡Cuidado con los bucles!! A = FLTARR(50000) FOR i= 0 , N_ELEMENTS(A)-1 DO C = A[ i ] Loop limit expression too large for loop variable type. <LONG ( 49999)>. Solución: FOR i= ULONG(0) , N_ELEMENTS(A)-1 DO C = A[ i ]
Truquillos y Advertencias con IDL (V): ¿Cómo hacer un volcado de la ventana gráfica? WSET, 1 Image = TVRD(True=1) WRITE_PNG, Image_Name, Image CLOSE, 1 ¿Cómo escoger y/o modificar valores de forma selectiva? Array = [ 1 , 67 , 23 , 5 , -43 , -8 , 299 , -400 ] idx_neg = WHERE( Array LT 0 , N_idx , COMPLEMENT=idx_pos) Array [idx_neg] = 0 PRINT, Array 1 67 23 5 0 0 299 0
Truquillos y Advertencias con IDL (VI): ¿Cómo cambiar las dimensiones de una matriz? B = REFORM(A, d 1, d 2, d 3, …) Regla: (d 1 + d 2 + d 3 + …) = N_ELEMENTS(A) ¿Para qué nos puede servir usar REFORM? • Muchas rutinas de ajustes o interpolación exigen los datos como arrays 1 D. • Para que un sub-array tenga las dimensiones adecuadas. A = FLTARR(10, 10) B = A[0, *, *] HELP, B B FLOAT = Array[1, 10] B = REFORM(A[0, *, *])
Truquillos y Advertencias con IDL (VII): Interrumpir un programa para hacer un “debugging” AXIOMAS DE LOS ERRORES: • En el 99. 99% de las ocasiones, si hay un error en tu programa es porque …. ¡¡ TE HAS EQUIVOCADO !!! (Asúmelo) • [Nº de Errores] = cte · [Nº de líneas sin compilar] CORREGIR ERRORES: • Para verificar, usar: PRINT y HELP • Interrupción Incondicional: STOP • Interrupción Condicional: READ, a
Bibliografía y Enlaces de Interés: LIBROS: • “IDL Programming Techniques”, David W. Fanning, ISBN 0 -9662383 -2 -X. WEBS CON PAQUETES DE IDL Y TUTORIALES: • Paquetes “Coyote” de D. W. Fanning: http: //www. dfanning. com/ • “A guide to IDL for Astronomers”: http: //www. astro. virginia. edu/class/oconnell/astr 511/IDLguide. html • Colección de enlaces de NASA: http: //idlastro. gsfc. nasa. gov/other_url. html SOY ANTI-SISTEMA Y SÓLO USO SOFTWARE LIBRE: • “GDL” – Compilador GNU compatible con IDL: http: //gnudatalanguage. sourceforge. net/
- Slides: 23