Document Sample
IDL Powered By Docstoc
					                        Making friends with IDL
 IDL = interactive data language
    interactive environment
    immediate access to all variables
    excellent for visualizing, analyzing, editing, and displaying numerical data sets
    optimized array operations
    versatile built-in plotting and graphics routines
    data structures
    possible interface with C and Fortran routines
     on line help (?)


IDL is an interpreted rather than a compiled language. This means that large IDL programs
can execute less rapidly than equivalent compiled programs written in FORTRAN or C.

IDL is a proprietary system (need licence)
                    Making friends with IDL

create variables
    > name = ‘Maxwell’                  creates a string
    > z = 1.0e-8                        creates a scalar
    > testdata = fltarr(512,512)        creates a 512x512 2-D array with zero entries
    > a = [1,2,3]                       creates a vector
    > a = [a,4]                         expands a vector


    If you redefine a variables during your work, you lose the previous values

    Avoid operation with different variables types.
        For example using float and integer these could be different
        > print, 3.456 * 1
        > print, 3.456 * 1.
 Variable names can have letters, numbers and underscores in them.
 They are NOT case-sensitive: aaa, Aaa and AAA are all the same variable.

                                        One dimension array of 6 elements
                                        = Array[6]
IDL> a=[3, 5, 6, 2.5, 100, 27.7]
                                                         Array index START FROM 0!!!!
IDL> a= [[ 2,3,4],[10,20,30]]
                                      Array of 2 rows and 3 columns
IDL> a=float(b)                       = Array[3,2]
IDL> a=fltarr(n_elements(b),4,2)
                         Array manipulations
   > a = [1,2,3]      > print,a+1                (a b c)# (g h) = (ag+dh bg+ch cg+fh)
   > b = [4,5]        > print,b*2                (d e f) (i j)    (ai+dj bi+ej ci+fj)
   > print, a#b       > print,a+b                         (k l)    (cg+fh ci+fj ck+fl)
   > print, b#a
   > print, a##b                                 (a b c)## (g h) = (ag+bi+ck ah+bj+cl)
   > print,a*b                                   (d e f)   (i j)   (dg+ei+fk dh+ej+fl)
                                                           (k l)

 INVERT - Computes the inverse of a square array.
 MAX - Returns the value of the largest element of Array.
 MEDIAN - Returns the median value of Array or applies a median filter.
 MEAN – Return the mean value (also first element of MOMENT).
 MIN - Returns the value of the smallest element of an array.
 MOMENT – compute the first 4 moments (mean, variance…)
 REFORM - Changes array dimensions without changing the total number of elements.
 REVERSE- Reverses the order of one dimension of an array.
 SIZE- Returns array size and type information.
 TOTAL - Sums of the elements of an array.
 TRANSPOSE - Transposes an array.
 WHERE- Returns subscripts of nonzero array elements.
Try to avoid loops                                              t=total(a)
                     for i=0,n_elements(a)-1 do t=t+a(i)
                               looking for help

? name              Open a help on line windows and search for ‘name’

         print,max(a); print,min(a); print,max(a); print,mean(a); print,variance(a);
print    print,median(a); print,moment(a): print various statistical properties of image
         array. (moment prints first four moments.)

help            help,variable : print variable informations.
                help,A,/str : print structure info
                help,/rou : prints list for all compiled procedures. Lists procedure and
                 functions separately.
                help,/sy : prints current values of all "system variables", which are
                 special variables known to all routines. Names of these begin with a
                 "!", e.g. !dir, !path, etc.
                help,/rec : prints contents of command recall buffer in reverse order
                help,/dev : prints parameter settings for current graphics device
                help,/mem : lists current memory usage
                       Saving data (and time!)
                   Safety idea: save your data!!!

                   Be prepared: 99% of time you will have to redo plots.
                   Usual sequence:
                   1) Make plot                         make a routine!
                   2) Save data (and exit from idl)
                   3) Meeting
                   4) Restore data
                   5) Redo plot
                   It will help also have your code saved in a routines.

save      > save,variable1,variable2,variable3,filename=‘~elisa/idl/data.sav’

          Keyword: ALL => save all common block, system variable and local variable from
          the current IDL session.

          > save,/all,filename=‘datatemp.sav’’

restore   restore, filename=‘~elisa/idl/data.sav’

          > restore,filename=‘datatmp.sav’
                                   IDL routines (.pro)
 As you type, each line is interpreted and immediately executed
                                         .pro file requirement                  How to call it
 main routine
         for (loop), if, case...         ...
                                         end                                    > .r filename

                                                                                          without .pro

 procedures or subroutines               pro NAME, VARIABLES                    > name, variables
     parameters and keywords             end
      optional and can be in any order                    keyword2=value2, /Keyword3....

 functions                                function NAME,VARIABLES               > a = name (variables)

     One of the best ways to learn how to write and use IDL programs is to look the existing IDL
                    Program execution (and other)
Values of keywords are usually determined by assignment statements:
in the case of switches, keywords can be set to a value of 1 by using the following syntax:
     all IDL procedures/functions are assumed to be in files with the explicit extension '.pro'.

Run from IDL prompt
 >.r or .run [name]           compiles the IDL procedure(s) or function(s) in the file [name].pro.
                              If this is a main program, also executes it.

WARNING!!!!         IDL will locate the first file with this name in the IDL path or current directory

Inside a
                           Compile the
  @file_name               Useful if the file mane is different from the procedure name

  stop                     for debugging!! ... print... plot... to continue > .c or .con

  ; comment           Don’t forget the comments!!! Comments begin with ‘;’

     > retall          if you wont to come back to the first level
  A structure can be thought of as a user-defined data type or groups of different data
  IDL allows you to put lots of variables into a single ‘structure’
For example satellite data can be load as a structure containing:
Instrument name, data and time, pixels radiances, coordinates and observing angles of the
                                   A structure (e.g. dsat) is an ensamble of other,
Define a structure:                previously defined, variables (and structures)
dsat={aod550:aot,$                   ; mean AOD
    stdaod550:sigma,$                ; standard deviation
    n:num,$                          ; number of points
    latc:latitude,$                  ; central lat of the boxes
    lonc:longitude}                  ; central longitude of the boxes
> help, dsat,/str                                        To access the variables of a structure
   AOD550              DOUBLE        Array[720, 360]     Use: mone_str.nome_var
   STDAOD550           DOUBLE        Array[720, 360]
   N                   LONG          Array[720, 360]
   LATC                DOUBLE        Array[360]              > print,dsat.aod550(good)
   LONC                DOUBLE        Array[720]
      Routine that read satellite data usually load a structure for any image/orbit
     keep related variables together
     pass/return a lot of variables with only one name
                                Basic plots
   x=findgen(10)                      window,0,xsize=300,ysize=200
IDL> print,x                          n=32
  0.000 1.000 2.000 3.000 4.000       x=randomu(seed,n)
  5.000 6.000 7.000 8.000 9.000       y=randomu(seed,n)
    x2=2*!PI/100*findgen(100)         plot,x,y,psym=1,title='Random XY Points'
  IDL> plot,sin(x2)
                             Others useful things
 cut of data                 where             Logical operator

good = where (time eq 1000.,count)                   and            ; and ...
                                                     or           ; or
if (count eq 1 ) then begin...                       gt           ; greater than (similarly lt)
                                                     ge            ; gt or equal to (similarly le)
If (count gt 1) then begin                           eq            ; equal to
plot, x(good), y(good)
                                                     ne            ; not equal to

 print on postscript .ps file           set_plot, 'ps'
                                        device, filename='‘
                                        …                                    plotting commands
                                        close, /device
                                        set_plot, 'x'

  save a window like .jpg               Smaller file, good to make presentations and movies,
                                        NOT good for reports and papers !!!
  a = tvrd(true=3)
  write_jpeg, 'namefile.jpg',a,true=3
                                  routines at AOPP
            ASK!!!                      /home/crun/eodg/idl/
 Linear fit when both x and y have errors (y = A + B x)

 Plots data points, with defined latitudes and longitudes

 Interpolate data (with the associated lat,lon) onto a
 regular lat lon grid, and plot the image

Using the same some fast                                                   ncol=4
regridding code (RAL)                                                      nrow=4
                  avgrid,lat,lon,aod                                       !P.MULTI= [0,ncol,nrow,0,0]
Load txt file in columns
         loadxy loadxyz                          Nlevels=100,range=range,symsize=0.6,$
                                                 title='AOD all daset average '+strcompress(i+1)+' March 2006'
 Set colour bar       colour_ps

  + several routine to load different
  type of data