61
Winter Quarter 2003 Rolando V. Raqueño 1 1 Basic IDL Commands SIMG 726

1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Embed Size (px)

Citation preview

Page 1: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 11

Basic IDL Commands

SIMG 726

Page 2: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 22

Objective

• Quick Tour of IDL

• Writing IDL Programs

Page 3: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 33

Before we start

% source ~rvrpci/.simg726.rc

% script% set history=100

AT THE END OF THE UNIX SESSION,DON’T FORGET TO TYPE

% ^D

Page 4: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 44

Before we END

AT THE END OF THE UNIX SESSION,DON’T FORGET TO TYPE

% ^D

You now have file called typescript which contains a log of your UNIX session

Page 5: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 55

Starting IDL in UNIX

• To start command line interface IDL environment% idl

• To start graphical interface IDL environment% idlde

Page 6: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 66

IDL Help

• MOST IMPORTANT IDL COMMAND OF ALL

IDL> ?

Page 7: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 77

IDL Help Window

Page 8: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 88

Other IDL Help Facilities

IDL> doc_library,’moment’

• Allows specially formatted code comments to be viewed without having to view the source code

Page 9: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 99

General IDL Information

• N.B. Platform specific limitation – UNIX

• File name conflict between lower and upper case characters

– e.g. addnum.pro vs. AddNum.pro

• Recommend use of strictly lowercase file names

Page 10: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 1010

IDL Character Set• IDL is not case sensitive• Commands and arguments are delimited by

comas.– e.g. IDL> print, a

• Comments are started by a semicolon (;)– e.g. IDL> ; This is a comment

• Command options are set using a backslash (/)– e.g. IDL> tv, a, /order

Page 11: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 1111

Other IDL Characters

• System variables are started with an exclamation point (!)e.g. IDL> print, !PIe.g. IDL> y = sin( x*!DTOR )

• Command line continuation with $e.g. IDL> print, 180 / $

!PI

Page 12: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 1212

Other IDL Characters

• Multiple IDL commands can be separated by the & symbol– e.g. IDL> a=0.0 & b=1.0

• UNIX Command execution– e.g. IDL> $ls -la

Page 13: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 1313

Journal Facility of IDL

• The journal command allows you to record all IDL activity during a particular session

IDL> journal, ‘sequence.pro’

IDL> print, 3*5

IDL> journal

Page 14: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 1414

sequence.pro

; IDL Version 3.6.1a (MacOS Macintosh); Journal File for Rolando Raqueño@green; Working directory: Raqueño's Hard Drive:Applications:ENVI:; Date: Tue Sep 17 00:56:18 1996 print,3*5

; 15

Page 15: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 1515

Sample Commands

• Some sample commandIDL> print,3*5

IDL> print,SysTime()

IDL> num = 5*12

IDL> help,numNUM INT = 60

IDL> print,num60

Page 16: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 1616

Creating an Array

• Some sample commandIDL> num = fltarr(40)

IDL> help,numNUM FLOAT = Array(40)

IDL> print,num 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000

0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000

0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000

0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000

0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000

0.00000 0.00000 0.00000 0.00000 0.00000

Page 17: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 1717

Creating an “Indexed Array”

• Some sample commandIDL> for i=0,39 do num(i)=i

IDL> help,numNUM FLOAT = Array(40)

IDL> print,num 0.00000 1.00000 2.00000 3.00000 4.00000 5.00000 6.00000

7.00000 8.00000 9.00000 10.0000 11.0000 12.0000 13.0000

14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000

21.0000 22.0000 23.0000 24.0000 25.0000 26.0000 27.0000

28.0000 29.0000 30.0000 31.0000 32.0000 33.0000 34.0000

35.0000 36.0000 37.0000 38.0000 39.0000

Page 18: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 1818

Shortcut Creating Indexed Array

• Some sample commandIDL> num = findgen(40)

IDL> help,numNUM FLOAT = Array(40)

IDL> print,num 0.00000 1.00000 2.00000 3.00000 4.00000 5.00000 6.00000

7.00000 8.00000 9.00000 10.0000 11.0000 12.0000 13.0000

14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000

21.0000 22.0000 23.0000 24.0000 25.0000 26.0000 27.0000

28.0000 29.0000 30.0000 31.0000 32.0000 33.0000 34.0000

35.0000 36.0000 37.0000 38.0000 39.0000

Page 19: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 1919

Indexed Array Example

• Some sample commandIDL> num = findgen(40)*10

IDL> print,num 0.00000 10.0000 20.0000 30.0000 40.0000 50.0000 60.0000

70.0000 80.0000 90.0000 100.000 110.000 120.000 130.000

140.000 150.000 160.000 170.000 180.000 190.000 200.000

210.000 220.000 230.000 240.000 250.000 260.000 270.000

280.000 290.000 300.000 310.000 320.000 330.000 340.000

350.000 360.000 370.000 380.000 390.000

Page 20: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 2020

Indexed Array Example

• Some sample commandIDL> num = findgen(40)*10-195IDL> print,num

-195.000 -185.000 -175.000 -165.000 -155.000 -145.000 -135.000 -125.000 -115.000 -105.000 -95.0000 -85.0000 -75.0000 -65.0000 -55.0000 -45.0000 -35.0000 -25.0000 -15.0000 -5.00000 5.00000 15.0000 25.0000 35.0000 45.0000 55.0000 65.0000 75.0000 85.0000 95.0000 105.000 115.000 125.000 135.000 145.000 155.000 165.000 175.000 185.000 195.000

• In general you will be using a linear formy=m*x+b

Page 21: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 2121

Extracting Array Subset

• Some sample commandIDL> num1 = num(0:36)

IDL> print,num1 -195.000 -185.000 -175.000 -165.000 -155.000 -145.000 -135.000

-125.000 -115.000 -105.000 -95.0000 -85.0000 -75.0000 -65.0000

-55.0000 -45.0000 -35.0000 -25.0000 -15.0000 -5.00000 5.00000

15.0000 25.0000 35.0000 45.0000 55.0000 65.0000 75.0000

85.0000 95.0000 105.000 115.000 125.000 135.000 145.000

155.000 165.000

IDL> help,num1 NUM1 FLOAT = Array(37)

Page 22: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 2222

Scalar Operation on Arrays

• Some sample commandsIDL> num = findgen(37)*10

IDL> print,num0.00000 10.0000 20.0000 30.0000 40.0000 50.0000 60.0000

70.0000 80.0000 90.0000 100.000 110.000 120.000 130.000

140.000 150.000 160.000 170.000 180.000 190.000 200.000

210.000 220.000 230.000 240.000 250.000 260.000 270.000

280.000 290.000 300.000 310.000 320.000 330.000 340.000

350.000 360.000

IDL> help,num NUM FLOAT = Array(37)

Page 23: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 2323

Two-Dimensional Plotting

• Displaying Two-Dimensional GraphicsIDL> line = Sin(num * !DtoR)

IDL> plot,line

Page 24: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 2424

Two-Dimensional Plotting

• Displaying Two-Dimensional GraphicsIDL> plot,line IDL> plot,num,line

Page 25: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 2525

Two-Dimensional Plotting Options

IDL> plot,num,line,/Psym

Page 26: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 2626

Two-Dimensional Plotting Options

IDL> plot,num,line,Psym=1

Page 27: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 2727

Other Plotting OptionsIDL> plot,num,line,linestyle=1

Page 28: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 2828

Labeling IDL PlotsIDL> plot,num,line,xrange=[0,360],$

ytitle='Sin(x)',Title='Sine Plot'

Page 29: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 2929

Other Plot FacilitiesIDL> plotplot,num,line,xrange=[0,360],$

ytitle='Sin(x)',Title='Sine Plot'

IDL> plots,[0,360],[0,0]

Page 30: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 3030

Polygon FillingIDL> loadct, 5IDL> polyfill,num(0:18),line(0:18),color=120IDL> polyfill,num(18:36),line(18:36),color=50

Page 31: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 3131

Data File Inputs

• Copy the following files from ~rvrpci/pub/IDL/training

surface.dat

ctscan.dat

Page 32: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 3232

Three-Dimensional Plotting• Displaying Three-Dimensional Graphics

– To get the data into IDL, you will need to open a file and read it into an array using the following commands (N.B. this is specific for this particular data set)

IDL> file=‘surface.dat’IDL> openr,lun,file,/get_lunIDL> peak=fltarr(40,40)IDL> readf,lun,peakIDL> free_lun, lun

Page 33: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 3333

Surface Plots• Displaying Three-Dimensional Graphics

IDL> print, max(peak), min(peak)

IDL> surface,peak

Page 34: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 3434

Surface PlotsIDL> x = findgen(40)*2.5 & y=findgen(40)+50

IDL> surface,peak,x,y

Page 35: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 3535

Color Look-up Tables– The following command lets you view the

current colors loaded into the color look-up tables

IDL> cindex

Page 36: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 3636

Background/Foreground Colors– The following surface command lets you

manipulate the background and foreground colors

IDL>surface,peak,background=200,color=45,title='Surface Projection',charsize=2.0

Page 37: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 3737

Shaded Surface PlottingIDL> shade_surf, peak

Page 38: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 3838

Draping Data Over a Surface– We can drape a given surface over another one by the

following command (we read in the data snow the same manner as peak)

IDL>shade_surf,peak,$

shade=snow

Page 39: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 3939

Surface Plot Colored by Altitude– We can generate a simple elevation color map.

IDL> shade_surf, peak, shade=bytscl(peak)

Page 40: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 4040

Simple Contour Plots– We can generate a simple contour map.

IDL> contour,peak

Page 41: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 4141

Contour Plots Spacing– We can generate a simple contour map and adjust spacing.

IDL> contour, peak, nlevels=10

Page 42: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 4242

Contour Plots Labelling– We can generate a simple contour map and label them

IDL> contour, peak, nlevels=10, /follow

Page 43: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 4343

Contour Plots Spacing Adjustment– We can generate a simple contour map and adjust spacing

along with line styles.IDL> contour, peak, nlevels=10, c_linestyle = indgen(5)

Page 44: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 4444

Colored Contour Plots– We can generate a simple contour map and adjust spacing

along with line color.IDL> contour, peak, nlevels=10, c_colors = indgen(5)*20+80

Page 45: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 4545

Images Data• Displaying Image Data

– You can read in image data in a manner similar to other forms of two-dimensional data. You will need to ascertain whether the data is an ASCII file or a binary file

IDL> openr, lun,’ctscan.dat’,/get_lunIDL> scan=bytarr(256,256)IDL> readu, lun, scanIDL> free_lun, lun

Page 46: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 4646

Image Data• Displaying Image Data

IDL> window, /free, xsize=256, ysize=256

IDL> tvscl, scan

Page 47: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 4747

Image Data• Displaying Image Data

IDL> window, /free, xsize=256, ysize=256

IDL> tvscl, scan IDL> tvscl,hist_equal(scan)

Page 48: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 4848

Image Processing• Displaying Image Data

IDL> window, /free, xsize=256, ysize=256

IDL> tvscl, scan IDL> tvscl, sobel(scan)

Page 49: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 4949

XLOADCT Routine• Displaying Image Data

IDL> xloadctIDL> tvscl, scan

Page 50: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 5050

Writing IDL Programs

Page 51: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 5151

General Form of an IDL Program• Parts of an IDL program

pro program_name [, arg1, arg2, ..., argn]

IDL statement #1IDL statement #2

.

.

.IDL statement #n

end

Page 52: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 5252

Compiling an IDL Program

• Create a program to take celsius arguments and print out fahrenheit valuespro celsius_to_fahrenheit, celsius

print, 9/5*celsius+32

end

• To compile:IDL> .compile celsius_to_fahrenheit.pro

Page 53: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 5353

Executing an IDL Program

• To use the program in scalar mode:

IDL> c = 100.0

IDL> celsius_to_fahrenheit, c

• To use the program in array mode:

IDL> c = findgen(201)/2

IDL> celsius_to_fahrenheit, c

Page 54: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 5454

General Form of an IDL Function• Parts of an IDL function

function program_name [, arg1, arg2, ..., argn]

IDL statement #1IDL statement #2

.

.

.IDL statement #nreturn, answer

end

Page 55: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 5555

Compiling an IDL Function• Create a function to take celsius

arguments and print out fahrenheit valuesfunction celsius_to_fahrenheit, celsius

answer=9/5*celsius+32

return, answer

end

• To compile:IDL> .compile celsius_to_fahrenheit.pro

Page 56: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 5656

Executing an IDL Function

• To use the program:IDL> c = findgen(201)/2IDL> f = celsius_to_fahrenheit(c)IDL> print, fIDL> plot, c, f

• Equivalently:IDL> print, celsius_to_fahrenheit(c)IDL> plot, c, celsius_to_fahrenheit(c)

Page 57: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 5757

Program Designprogram file vs. function file

• Use functions in case of mathematical functions to allow composition of functions

IDL> k=celsius_to_kelvin(fahrenheit_to_celsius(f))

• Use program file in case of process not requiring the return of data

IDL> write_to_file,’temperature.dat’,k

Page 58: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 5858

Parameter Passing in IDL

• IDL passes parameters into functions and programs by reference

• This means parameters can be modified through “side effect”

pro celsius_to_fahrenheit, celsius

celsius =9/5*celsius+32

end

Page 59: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 5959

Problems with “Side Effect” Parameter Passing

IDL> a=32.0

IDL> celsius_to_fahrenheit,a

% Compiled module: CELSIUS_TO_FAHRENHEIT.

IDL> print,a

64.0000

Page 60: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 6060

A Debugging Exercise

• The IDL function and program examples celsius_to_fahrenheit all compile, but generate incorrect answers in some cases.

• This is left as a debugging exercise

Page 61: 1 Winter Quarter 2003Rolando V. Raqueño Basic IDL Commands SIMG 726

Winter Quarter 2003 Rolando V. Raqueño 6161

Hints for Statistics Problem

• Study the IDL functionsn_elements()

size()

• Try to reuse as many of the functions as possible.

• Do not be concerned with efficiency at this point.