230 likes | 402 Vues
MANEJO BÁSICO DE. Javier Peralta Calvillo, Ph.D. 1ª PARTE: Ingredientes para un buen programa. Ingredientes para un buen programa:. “Descripción” del programa Definición de Variables Lectura de los Datos Procesado y/o Cálculo Visualización de Resultados Escritura de Resultados
E N D
MANEJO BÁSICO DE Javier Peralta Calvillo, Ph.D.
Ingredientes para un buen programa: • “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 • … • 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!! FOR j=0,19 DO BEGIN FOR i=0,30 DO BEGIN IF a EQ 0 THEN BEGIN PRINT,’Hola’ ENDIF ENDFOR ENDFOR
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(dato1, 1) + ‘,’ + STRTRIM(dato2, 1) + ‘,’ + … • PRINTF, 1, Data • LECTURA: • READF, 1, Data • Data = STRSPLIT(Data , ‘,’ , /EXTRACT) • Data = FLOAT(Data)
Lectura y Escritura de datos (III): Escritura y Lectura de Datos con Formato (pag.140): FORMAT = ‘(F5.2)’ = 3.1415927 PRINT, !PI, FORMAT=‘(D5.2)’ 3.14 PRINT, !PI, FORMAT=‘(D5.3)’ 3.142 PRINT, !PI, FORMAT=‘(D5.4)’ ***** OJO: Tanto en la Lectura como en la Escritura MISMO FORMATO!! Para varias columnas: FORMAT = ‘3(F5.2, 4x)’ PRINT, A1, A2, A3, FORMAT = ‘3(F5.2, 4x)’
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, FileName, Data, /FLOAT, COMPRESSION=1 • LECTURA: • Data = READ_TIFF(FileName) • OTRA POSIBILIDAD!! • Ficheros HDF (pág. 161) • Permiten: • Múltiples Formatos de Datos • 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 IFSTRMATCH(header[k]), ‘*DECLINATION*’) THEN BEGIN ; Extract the Temperature data = STRCOMPRESS(header[k], /REMOVE_ALL) pos = STRPOS(data, ‘=‘) Temp = STRMID(data, pos+1) ; Take out RETURN from String Temp = STRMID(Temp, 0, STRLEN(Temp)-1) Temp = FLOAT(Temp) ENDIF ENDFOR • Manipulando Strings: • STRMATCH • STRCOMPRESS • STRPOS • STRMID • STRLEN
Representación Gráfica con IDL (I): • Gráficas simples: • PLOT y OPLOT • PLOT, X, Y, XRange=[X1,X2], /Xs, YRange=[Y1,Y2], /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) • COLOR24 (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 LaTeX (TeXtoIDL). • http://physweb.mnstate.edu/mcraig/textoidl/
Representación Gráfica con IDL (III): • Gráficas múltiples: • Gráficas múltiples mediante !P.MULTI • !P.MULTI = [0, 2, 2, 0, 0] • !P.MULTI[0] – Indica el nº de gráficas que 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 3D) • !P.MULTI[4] – Indica el orden en que se van a rellenar los huecos • Gráficas múltiples mediante POSITION • POSITION = [Xi, Yi, Xf, Yf]
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, d1, d2, d3, …) • Regla: (d1 + d2 + d3 + …) = N_ELEMENTS(A) • ¿Para qué nos puede servir usar REFORM? • Muchas rutinas de ajustes o interpolación exigen los datos como arrays 1D. • Para que un sub-array tenga las dimensiones adecuadas. • A = FLTARR(10, 10, 10) • B = A[0, *, *] • HELP, B • B FLOAT = Array[1, 10, 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/astr511/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/