Interactive Data Language _IDL_ by hcj

VIEWS: 3 PAGES: 16

									INTERACTIVE DATA LANGUAGE
          (IDL)




 This PPT includes some materials downloaded from Internet,
            please don’t circulate it out of the LAB
WHAT IS IDL?
Interactive Data Language (IDL) is a programming language that
   is a popular data analysis language among scientists.

IDL is the trusted scientific programming language used across
  disciplines to create meaningful visualizations out of complex
  numerical data (ITT).

• 1970 – IDL’s predecessor, Laboratory for Atmospheric and
  Space Physics, CO

• Used by
   -   NASA
   -   Lockheed-Martin
   -   Medical Imaging Fields
   -   Remote sensing
WHAT IS IDL???

A More Powerful MATLAB, also more expensive.


A great tool for hyperspectral imaging!

A fast tool for processing large images!!

A great GREAT tool for ENVI programming!!!
OVERVIEW OF IDL
   A high-level interpreted programming language with vector and array
    primitives
   Modern programming language
      Flow control
      Data structures
      Objects
   All operators and most functions work on scalar, vector or array data of
    any data type.
   Data visualization tool, advanced built-in graphics
      2-D plots
      Contour plots
      Surface plots
      Shaded surfaces
      Gray scale/color images
      Volume rendering, …
   Multi-platform support
         Unix: Sun, Hewlett Packard, Silicon Graphics, IBM
         Linux, Microsoft Windows, Mac                                        4
  HOW TO LEARN
• Online Help

• Google
  http://www.idlcoyote.com/

• Practice & Practice
BASIC VARIABLE TYPES
•   Integers
      - 1 byte – byte data type (0..256)
                    IDL> a=bindgen(1)
      - 2 bytes – integers data type (0..2562-1)
                    IDL> b=indgen(1) & print,5/3      1
      - 4 bytes – long integers (0..2564-1)
                    IDL> c=lindgen(1)
      - 8 bytes – 64-bit long integers (0..2568-1)

•   Floating data types
      - 4 bytes – floats (exponent from-38 to 38)
                     IDL>print,5./3. & y=float(3)/float(2) 1.66667
                     IDL> a=1.23456789
                     IDL> print,a,format=‘(f20.10)’
      - 8 bytes – double-precision
                     IDL> print,5d/3d                                1.6666667
                     IDL> a=1.23456789d0 & print,a,format=‘(f20.10)’
                     IDL> xyouts,xloc,yloc,string(a,format=‘f(20.10)’)
•   Strings (Text)
                   IDL>x=‘Hi there!!!’
ASSIGNMENT STATEMENTS
    A=B+1
   A has the same structure as B, with a data type equal to that of the most
    precise operand in the expression on the right hand side. In this case it could
    be any type except string.
   If B is a vector or array then 1 is added to each element.
     A = 0 ; A is a 16 bit integer
     A = A * 0.5     ; A is now a 32 bit float
     B = A(*,3)      ; B is equal to the 4th row of A
     A(*,3) = 0      ; Set all elements in 4th row of A equal to 0

   Examples:
     image = fltarr(512, 512)        ; zero filled array
     b = image(0:127, 0:127) ;       b is 128x128 array
     image(*,100) = findgen(512)     ; replace row 100
     plot, image(*,100)              ; plot row 121
     ; Display the power spectrum as an image
     tvscl, alog(abs(fft(image, 1)))                                                  7
NAMING VARIABLES
•   Assign ‘readable’ variable names that make sense

•   Variable names must start with a letter
    - NO: 6a=“gamma”      OK: a6=“gamma”

•   Variable names may not have spaces in them
    - NO: A 6=5                 OK: A_6=5

•   Some characters are illegal or have special meanings
    - NO: a@=5, a.b=5 (used for structures), A+=5, A#=5
ORGANIZATIONAL STRUCTURES
•   Scalars
          IDL> x=3.

•   Vectors
       IDL> a=[0,1,2,3] & print,a[1]       1

•   Arrays (see IDL help for matrices) (index from zero)

intarr(), fltarr(), dblarr(), strarr().indgen()

IDL> q=intarr(2,2)                    0           0
                                                  0   0
          IDL> m=indgen(2,2)                      0   1
                                                  2   3
          IDL> print,m(0,1)                           2
          IDL> a=findgen(100,100)
          IDL> print,a[1,0]                1.00000
          IDL> b=a[23:25,67:69]
          IDL> indx=where(a gt 10.)
          IDL> jndx=where(a[indx] le 100.)
          IDL> b=a[indx[ jndx]]
ARRAY OPERATIONS
•   Simple math operations (* by scalar, +, -); A 3-column by 2-row array:
       IDL> A = [ [0, 1, 2],[3, 4, 5] ,[5,6,7]]
       IDL>B=2*A                      0           2   4
       IDL>print, B                   6           8   10
                                     10       12      14
•   More complex math
        #, Multiply an array by another IDL> C=A#B

        N_elements: Total number of elements in array

                                  IDL> n=n_elements(A)
        Total(array): computes a sum of all elements

        Min(array): outputs the min value; also Max

        Minmax(array): outputs the min then max

        Rebin: Resize array      IDL> C=Rebin(A,6,6)
        Eigenvec: finds eigenvectors
BASIC PROGRAMMING
   IF-THEN BLOCK
       IF (logical-statement) THEN something

       IF (logical-statement) THEN BEGIN
          Something

          Other thing

       ENDIF

       IF (logical-statement) THEN BEGIN
          Something

          Other thing

       ENDIF ELSE some-other-thing
BASIC PROGRAMMING
   CASE
       CASE name OF
         Match_1: do-something
         Match_2: do-other thing

         ELSE: do-things not-matched

       ENDCASE
BASIC PROGRAMMING
   DO-loop
       FOR n=0, number DO a[n] = fix(n)

       FOR n=0, number DO BEGIN
         a[n] = fix(n)
         B[n] = 2.0*a[n]^2 + 4.0*a[n] + 6.0 $

               + 8.0*a[n]^(-2.5)
       ENDFOR

       NOTE: $ is for continuation.
FILES AND INPUT/OUTPUT
Write data to a file, formatted
  OPENW, 1, ‘original.dat’
  OPENW, 2, ‘noisy.dat’
  PRINTF, 1, original
  PRINTF, 2, noisy
  CLOSE, 1
  CLOSE, 2
PLOT AND PROCESSING
   Making a New Dataset
    noisy = ((RANDOMU(SEED, 200) - .5) / 2)
    original = SIN((FINDGEN(200)/35)^2.5)

   Plot
    PLOT, noisy

   Plot them together
    PLOT, original, THICK = 3, XTITLE = "Time",
      YTITLE ="Amplitude“
    OPLOT, original+noisy
 IDL EXAMPLES
IDL> a = sin(findgen(100)/99. * 2 * !pi)
IDL> help, a
IDL> plot, a




IDL> a = shift(alog(abs(fft(dist(256),1))),128,128)
IDL> isurface, a




                                                      1
                                                      6

								
To top