Interactive Data Language (IDL)
Margit Haberreiter ([email protected])
LASP, room 135
Acknowledgement: Marty Snow
June 11, 2009 IDL for REU studentsMargit Haberreiter
2/72
Outline• What is IDL?• Basic Syntax• Functions, Procedures, and Library• Reading & Writing• Plotting & Printing• Image Processing• And Stuff….
June 11, 2009 IDL for REU studentsMargit Haberreiter
3/72
Pro testSave it as test.pro.compile filename
filename
June 11, 2009 IDL for REU studentsMargit Haberreiter
4/72
Interactive Data Language
• IDL was born here at LASP• Very popular among scientists:
– Handles arrays of data easily (spectra, time series, images, etc.)
– Easy to learn– Portable – Large existing user library
• Online Help – type “?” at prompt• Type help at prompt for contents of
variables• Interactive or Compiled, your choice!
June 11, 2009 IDL for REU studentsMargit Haberreiter
5/72
Data Types
• Integer (and Long Integer)• Floating Point (and Double Precision)• String• Structure• Pointer• Also, complex, unsigned integers,
etc.IDL is “dynamically typed” which means a variable can be defined as one type, and then be changed to another within the same program unit.
June 11, 2009 IDL for REU studentsMargit Haberreiter
6/72
Scalars, Vectors, Arrays Problem 1
• Scalar – 42 a=5 & b=0. & c=0.d– ‘help!’
• Vector
– [1,2,3,5]– [‘red’,’blue’,’happy’,’Burma Shave’]
• Array– Up to 8 dimensions
Definition of arraysarr1=intarr(3) arr2=fltarr(2,a) arr3=dblarr(a,b,c,d…)arr4=strarr(11)
June 11, 2009 IDL for REU studentsMargit Haberreiter
7/72
Structures - Problem 2
• Can hold mixed data types– S={day:0,time:0d0,label:’ ‘}– S.day=5– S.label=‘happy time’
• Can make arrays of structures– S2=replicate({time:0d0,label:’’,values:fltarr(100)},n_obs
)– S2[4].values=findgen(100)
• Names or Numbers– S2.time is equivalent to S2.(0)
“tag A, B, C”
June 11, 2009 IDL for REU studentsMargit Haberreiter
8/72
Rules of the Road
• Always start counting at zero.• For help at any time, type help.• Case Insensitive (EXC: filenames).• Odd is true, Even or Zero is false. • An array of length 1 is not the same
as a scalar. But you can reform it.
June 11, 2009 IDL for REU studentsMargit Haberreiter
9/72
Squiggly or Square?
• Subscripting variables -- [] square• Parameters of a function – () round• Definition of a structure – {} curly
IDL is lax about enforcing these rules, but it is to your benefit to follow them.
Example: a=exp[5] ;6th element of variable “exp”a=exp(5) ;e^5
You might have named a variable the same name as a library function!
June 11, 2009 IDL for REU studentsMargit Haberreiter
10/72
Subscripting - Problem 3
• z=a[5]• z=a[0:2]• z=a[3:*]• mask=[5,6,7,8,9] & z=a[mask]• Range=where(mask gt 2 and mask le 4)• Mask2=mask(range)
a=indgen(10)z=a[5]z=a[0:2]z=a[3:*]mask=[5,6,7,8,9] & z=a[mask]Range=where((mask gt 6) and (mask le 8))Mask2=mask(range)
June 11, 2009 IDL for REU studentsMargit Haberreiter
11/72
The Size of Arrays
• Size(x)• n_elements returns the number of
elements in an array (vector, scalar).• An undefined variable has zero elements.
• Often takes the place of size().• Used to check if user has supplied
parameters• Used to index loops.
June 11, 2009 IDL for REU studentsMargit Haberreiter
12/72
Basic IDL Syntax Problem 4
a=‘Hello World’ print,a ;This is a commenta=5;dynamic data typesb=4.5*findgen(100) z=a+$ ;continuationsqrt(b)
June 11, 2009 IDL for REU studentsMargit Haberreiter
13/72
Operators• Arithmetic
– + – -– *– /– ^– mod
• Min/Max– < (a<b is the lesser)– > (a>b is the greater)
• Matrix Multiply– #– ##
• Boolean Logic– and– not– or– xor
• Relational Operators– eq (a=b)– ge (ab) – gt (ab)– le (ab)– lt (ab)– ne (ab)
Note that you can’t use any of these letter combinations as variable names!
June 11, 2009 IDL for REU studentsMargit Haberreiter
14/72
FOR loop
for variable=init,limit[,increment] do statementfor i=0,100 do print,i,vector[i]
for variable=init,limit[,increment] do beginstatements
endfor
Loops in IDL execute slowly (relatively speaking), so try to use something else, like where.
June 11, 2009 IDL for REU studentsMargit Haberreiter
15/72
As IF…. Problem 5
if expression then statementif expression then statement else statement2
if expression then beginstatements
endif else beginstatements
endelse
for x=0,5 do beginif x gt 5 then begin
z=dblarr(10,10)z=z+.1z[3,2]=1.
endif else beginz=dblarr(10)z[x]=!pi
endelseendfor
Good programming style avoid hardcoded numbers in procedures
June 11, 2009 IDL for REU studentsMargit Haberreiter
16/72
meanWHILE
while expression do statement
while expression do beginstatements
endwhile
June 11, 2009 IDL for REU studentsMargit Haberreiter
17/72
just in CASEcase expression of
expression1: statementexpression2: begin
statementsendexpression3: statementelse: statement
endcase
Example:x=3 CASE x OF 1: PRINT, 'one' 2: PRINT, 'two' 3: PRINT, 'three' 4: PRINT, 'four'
ENDCASE
June 11, 2009 IDL for REU studentsMargit Haberreiter
18/72
Other Flow Control Statements
• STOP – excellent way to debug (.con or .c to continue)
• GOTO – goto,label– label:
• SWITCH• CONTINUE • BREAK• MESSAGE – stops program and prints message
IDL Help: This example illustrates how, unlike CASE, SWITCH executes the first matching statement and any following statements in the SWITCH block: x=2 SWITCH x OF
1: PRINT, 'one' 2: PRINT, 'two' 3: PRINT, 'three' 4: PRINT, 'four'
ENDSWITCH
June 11, 2009 IDL for REU studentsMargit Haberreiter
19/72
Procedures and Functions
• A list of IDL statements that could have been entered at the command prompt.
• Contained in separate file or files.– Compiled automatically if files are properly
named. Filename matches procedure with a .pro extension. USE LOWER CASE!
– All procedures compiled from start of file but stops when procedure name matches file name.
– Environmental variables define directories that IDL will automatically search. USER LIBRARY
June 11, 2009 IDL for REU studentsMargit Haberreiter
20/72
Compile and Run
• Type procedure name at command prompt to run it. IDL will search for an appropriately named file and automatically compile and run the procedure.
• .r or .compile will compile the procedure, but not run it.
• IDL will compile all procedures in file until it hits the one matching the file name, then it will stop. Put the named procedure last in the file.
June 11, 2009 IDL for REU studentsMargit Haberreiter
21/72
Simple Procedure
pro simpleprocedure,a,b,cc=a+b
end
To run it, type:
simpleprocedure,var1,var2,resultprint,result
June 11, 2009 IDL for REU studentsMargit Haberreiter
22/72
Simple Function
function eve,numberif number mod 2 eq 0 then return,0return,1
end
To run it, type:
result=eve(var)print,eve(var)print, ‘The result is ‘, result
June 11, 2009 IDL for REU studentsMargit Haberreiter
23/72
What’s the difference?Not much.
Use a function to get a value that you’ll use right away (like an expression).
EXAMPLE: simpleprocedure,eve(0),eve(5),result
Use a procedure when you return multiple results and don’t want to just wrap them together in a structure or array.
June 11, 2009 IDL for REU studentsMargit Haberreiter
24/72
Parameters and Keywords Problem 7
pro proc2,input1,input2,result,doplot=doplot if n_elements(doplot) eq 0 then doplot=0 result=input1*sin(input2/!pi) if doplot gt 0 then begin set_plot,'win' !P.CHARSIZE=3. ; system setting !P.MULTI=[0,1,3] ; system setting plot,input2,result,psym=-4 plot,input1 plot,sin(input2/!pi) endifend
Order of Parameters is critical.Order of Keywords is irrelevant.
Keywords can normally be abbreviatedxtit instead of xtitlexs instead of xstyle
June 11, 2009 IDL for REU studentsMargit Haberreiter
25/72
Variables: Global or Local? Problem 8
Variables are local….sort of (Attention!!)A procedure can modify any of its parameters, which will change the variable in the calling procedure.
pro proc1v=0print,vproc3,vprint,v
end
pro proc3,var2var2=var2+1
end
June 11, 2009 IDL for REU studentsMargit Haberreiter
26/72
Error and stop
• If the IDL interpreter hits a STOP or encounters an error, flow halts at the local level. You can type ‘help’ to view contents of variables and which line of code you’re at.
• To return to the top level – retall (return all the way)
• To clear everything, type .f (full reset) or .reset -> Attention: all variables deleted
June 11, 2009 IDL for REU studentsMargit Haberreiter
27/72
Reading & Writing & Saving
• openr,openw,openu (Read, Write, Update)
• readf,readu (Formatted, Unformatted)• close or free_lun• IDL save files:
– save,file=‘data.idl’,var1,var2– restore,’data.idl’ openr,lu,’file.txt’,/get_lun
while not eof(lu) do beginreadf,lu,data
endwhilefree_lun,lu
June 11, 2009 IDL for REU studentsMargit Haberreiter
28/72
Slight Gotcha…pro wont_workopenr,lu,’file.txt’,/get_lundata=fltarr(100)for i=0,n_elements(data)-1 do begin
readf,lu,data[i]endforfree_lun,luend
IDL passes by value, not by reference, so this won’t work.
June 11, 2009 IDL for REU studentsMargit Haberreiter
29/72
Slight Gotcha…pro will_workopenr,lu,’file.txt’,/get_lundata=fltarr(100)i=0while not eof(lu) do begin
readf,lu,temporarydata[i]=temporaryi=i+1; counter
endwhilefree_lun,ludata=data[0:i-1]end
IDL passes by value, so this will make IDL happy.
June 11, 2009 IDL for REU studentsMargit Haberreiter
30/72
Task: Read data from file Problem 9
pro willwork,filename,dataopenr,lu,filename,/get_lun ; get_lun: sets file unit numberdata=fltarr(2,1000)i=0while not eof(lu) do begin readf,lu,temporary1,temporary2 data[0,i]=temporary1 data[1,i]=temporary2 i=i+1 ; counterendwhilefree_lun,ludata=data[*,0:i-1]set_plot,'win'!P.MULTI=0plot,data(0,*),data(1,*),title='Data from file'end
Run the procedureAdd a plot using a parameter (see slide 22)
June 11, 2009 IDL for REU studentsMargit Haberreiter
31/72
Homework 1—LISIRD Data
• Go to http://lasp.colorado.edu/lisird and retrieve solar Lyman alpha (121.5 nm) data for at least two missions.
• Save data as text file.• Write an IDL procedure to read data.
June 11, 2009 IDL for REU studentsMargit Haberreiter
32/72
More on plotting…Basic IDL Plotting Procedures
• Line plots– plot– oplot– histogram
• Contour plots– contour
• Surface plots– surface– shade_surf
June 11, 2009 IDL for REU studentsMargit Haberreiter
33/72
Line ‘em up Problem 10• X=FINDGEN(360)• Y=SIN(X*!DTOR)• PLOT, X, Y, XRANGE=[0,360], /XSTYLE, XTIT=‘X’, $
YTIT=‘Y’, TIT=‘Sample Line Plot• Z=COS(X*!DTOR)• OPLOT, X, Z, LINESTYLE=2
June 11, 2009 IDL for REU studentsMargit Haberreiter
34/72
Adding text to plot• X=FINDGEN(360)• Y=SIN(X*!DTOR)• PLOT, X, Y, XRANGE=[0,360], /XSTYLE, XTIT='X', $
YTIT='Y', TIT='Sample Line Plot'• Z=COS(X*!DTOR)• OPLOT, X, Z, LINES=2• XYOUTS, 100, 0, 'cos(x)'• XYOUTS, 190, 0, 'sin(x)'
June 11, 2009 IDL for REU studentsMargit Haberreiter
35/72
Histograms
• Y=RANDOMN(SEED, 100, /NORMAL)• H=HISTOGRAM(Y, BINSIZE=0.2, LOCATIONS=L)• PLOT, L, H, PSYM=10 ; histogram mode
June 11, 2009 IDL for REU studentsMargit Haberreiter
36/72
Graphics Keywords
• change the style of the data• add a title• manipulate an axis/change tick marks• change the format of text• change coordinate systems• etc.
June 11, 2009 IDL for REU studentsMargit Haberreiter
37/72
Styles and Symbols Keywords
• Lines– LINESTYLE={0,1,2,3,4,5}– THICK: change the
thickness of the line (default is 1.0)
• Symbols– PSYM={1,2,3,…10}– SYMSIZE: change the size of
the symbol– USERSYM: procedure to
define PSYM=8– PSYM= -{1,2,3,…8}: solid
line connecting the symbols– N.B.: PSYM=3 (period) does
NOT show up well in postscript plots and does not scale nicely with symsize. Better to use PSYM=1, SYMSIZE=.3 (or similar)
Negative value of “psym” creates line+symbols
Value Meaning
Long Dashes5
Dash Dot Dot4
Dash Dot3
Dash2
Dotted1
Solid0
MeaningValue
June 11, 2009 IDL for REU studentsMargit Haberreiter
38/72
Titletown USA Keywords
• TITLE: place a string of text at the top of a plot– TITLE=‘This is my title’– TITLE_STRING=‘This is my title’
TITLE=TITLE_STRING• SUBTITLE: place a title below the x-axis• [XYZ]title places title on x, y, or z axis
June 11, 2009 IDL for REU studentsMargit Haberreiter
39/72
Axes & Tick Mark Keywords
• To manipulate individual axes:– Set the range:
• [XYZ]RANGE=[min, max]
– Change the axis style• [XYZ]STYLE=number• Multiple effects can be achieved by adding values together
– Label an axis:• [XYZ]TITLE=string
Value Meaning
1 Force exact axis range
2 Extend axis range
4 Suppress entire axis
8 Suppress box style axis
16Inhibit setting y-axis minimum to
zero
June 11, 2009 IDL for REU studentsMargit Haberreiter
40/72
Axes & Ticks Keywords 2
• To manipulate individual axes (cont.):– Change the axis thickness
• [XYZ]THICK=number (default is 1.0)
• Use axis procedure to draw axes with different scales– X=FINDGEN(360)– Y=SIN(X*!DTOR) ; system variable π/180– PLOT, X, Y, XRANGE=[0,360], XSTYLE=9, XTIT='X (Degrees)'– AXIS, XAXIS=1, XRANGE=[0,2*!PI], XSTYLE=1,
XTITLE='(Radians)'
June 11, 2009 IDL for REU studentsMargit Haberreiter
41/72
Clipped title
June 11, 2009 IDL for REU studentsMargit Haberreiter
42/72
Fixed clipping…plot,x,y,xstyle=9,xtit='X (degrees)',ymargin=[4,4]
June 11, 2009 IDL for REU studentsMargit Haberreiter
43/72
Text Formatting Keywords
• To change the size of text– CHARSIZE=number (default is 1.0)
• To change the thickness of the text– CHARTHICK=number (default is 1.0)– Or set system variable:
• !P.Charsize=3
June 11, 2009 IDL for REU studentsMargit Haberreiter
44/72
Coordinate systems
• IDL has 3 coordinate systems– DATA (default)
• Uses the range of values of the data
– DEVICE• Uses the device (X window or Postscript
device) coordinates (i.e. pixels)
– NORMAL• Normalized coordinates from 0 to 1 over the
3 axes
June 11, 2009 IDL for REU studentsMargit Haberreiter
45/72
Adding color
• Color tables– LOADCT[, number]– XLOADCT (widget)
• Graphics keywords:– BACKGROUND=number– COLOR=number– Number from 0 to 255, corresponding to the
color table– color=fsc_color(‘red’) ;using library routine
• On Mac, Windows: DEVICE, DECOMPOSED=0
June 11, 2009 IDL for REU studentsMargit Haberreiter
46/72
Contour• X=FINDGEN(360)• Z=SIN(X*!DTOR)#COS(2*X*!DTOR)• CONTOUR, Z, NLEVELS=6, XRANGE=[0, 360], $
YRANGE=[0, 360], /XSTYLE, /YSTYLE, XTIT='X', YTIT='Y', $TIT=‘Sample Contour Plot’
June 11, 2009 IDL for REU studentsMargit Haberreiter
47/72
Surface plots (shaded surf)
• SHADE_SURF, Z, XRANGE=[0, 360], $YRANGE=[0, 360], /XSTYLE, /YSTYLE, XTIT='X', $YTIT='Y', TIT='Sample Surface Plot 2'
June 11, 2009 IDL for REU studentsMargit Haberreiter
48/72
Colored surface
loadct,3shade_surf,z,tit='Sample Surface Plot 3',shades=bytscl(z+1)
Bytscl translates the values of the array into a byte array from 0 to 255
June 11, 2009 IDL for REU studentsMargit Haberreiter
49/72
Surface plots 2 (wire mesh)
• SURFACE, Z, XRANGE=[0, 360], $YRANGE=[0, 360], /XSTYLE, /YSTYLE, XTIT='X', $YTIT='Y', TIT='Sample Surface Plot 2'
June 11, 2009 IDL for REU studentsMargit Haberreiter
50/72
Changing appearance of mesh
z2=rebin(z,180,180)surface,z2
z3=rebin(z,90,90)surface,z3
The possibilities are endless!
June 11, 2009 IDL for REU studentsMargit Haberreiter
51/72
Multiple plots on a page
• !p.multi=[a,b,c]– a: number of plots left on page– b: number of columns– c: number of rows
• Example: – 6 plots per page (3x2), begin plotting in the top
left– !p.multi=[0,3,2]
• To return to a single plot per window, !p.multi=0
June 11, 2009 IDL for REU studentsMargit Haberreiter
52/72
Making postscript files
• SET_PLOT, ‘PS’• DEVICE, FILENAME=‘example.ps’
– , /LANDSCAPE– , /PORTRAIT, YOFFSET=1, YSIZE=9, XSIZE=6,
/INCHES– , /COLOR, BITS_PER_PIXEL=8
• Plotting commands• DEVICE, /CLOSE• SET_PLOT, ‘X’
• For Windows, SET_PLOT, ‘WIN’
June 11, 2009 IDL for REU studentsMargit Haberreiter
53/72
Detailed plotting...set_plot,'ps'tek_color!p.font=1!p.color=0!p.background=1;!p.MULTI=[0,2,4]!P.MULTI=0ang = string("305B) ; Angstrom symboldevice,filename=fileout+'*.ps',/color,ysize=12, xsize=17,xoffset=1,yoffset=10;*****************************************************************plot,x1,y1,linestyle=1,/ylog,thick=6,$ ; /nodata does not plot the data tit='',CHARSIZE=1.5, xtit='!Ml!N (nm)',XCHARSIZE=1.5,$ytit='intensity (erg s!E-1!Ncm!E-2!NHz!E-1!N)',YCHARSIZE=1.5,$ ; !E ->exponent; !I-> index; !N -
>normal fontxrange=[x0,x1],xs=1, $ ; !M -> mathfont, e.g. !Ml ->lambdayrange=[y0,y1],ys=1;*****************************************************************; overplot;*****************************************************************oplot,x2,y2,linestyle=0,thick=3legend_mh01,textarr,charsize=charsize,textcolor=colors,colors=colors,$box=0,position=[.5,.55],/normalxyouts,0.85,0.85,‘a‘,charsize=1.5 ; label of figure panel, i.e. a, b, c, d....print,'Have a look at the plot :)'end
June 11, 2009 IDL for REU studentsMargit Haberreiter
54/72
Making other types of graphics files
• Use tvread function from David Fanning’s library www.dfanning.com
• plot,x,y• im=tvread(/png,file=‘filename’,/
nodialog)
June 11, 2009 IDL for REU studentsMargit Haberreiter
55/72
Putting it all togetherHomework assignment 2
• Using LISIRD, create a composite Lyman- time series using SORCE, TIMED SEE, UARS SOLSTICE, and SME data– Plot each instrument as a different color– Label each instrument– X-axis: year
Y-axis: W/m2/nm
June 11, 2009 IDL for REU studentsMargit Haberreiter
56/72
Sample Solution
June 11, 2009 IDL for REU studentsMargit Haberreiter
57/72
Imaging basics• Images in IDL are just arrays. All standard
mathematical operations are available.• Images are usually saved in FITS format
– Header and array of integers (image)– Use Goddard IDL Astronomy Library procedures to read
both the header and image
• Raw images must be processed before they can be used for science. Example:– Remove the background counts (dark)– Correct for variations across the CCD (flatfield)
imagedarkimageFlat
imagedarkimageRawimageCorrected
June 11, 2009 IDL for REU studentsMargit Haberreiter
58/72
Displaying images
• Basic IDL commands to display an array/image– TV, image– TVSCL, image
• Resize an image– REBIN(image, xsize, ysize)– xsize and ysize must be integer factors of the
original size of the image
• Add color by loading a color table– E.g. SOHO EIT has its own color table for each
wavelength
June 11, 2009 IDL for REU studentsMargit Haberreiter
59/72
and Stuff
• where• size• histogram• string manipulation• file_search• map projections• n_elements• reading file formats (CDF, FITS, PNG, etc.)• pointers
June 11, 2009 IDL for REU studentsMargit Haberreiter
60/72
Where
Use WHERE to find data values meeting some criterion.– good=where(data gt 0.)– better=where(data gt 1.5 and $
time gt julday(1,1,2005))
data2=data[good] ;new variable data2data=data[better] ;redefine variable data
June 11, 2009 IDL for REU studentsMargit Haberreiter
61/72
Size
• The size function returns lots of good information about your variable.
(dimensions, n_elements, data type, etc.)
s=size(data)
An undefined variable is a valid type, so check for size or n_elements.
June 11, 2009 IDL for REU studentsMargit Haberreiter
62/72
Histogram
• There are billions and billions of uses for histogram.
h=histogram(data,binsize=2.5,omin=omin)
bins=findgen(n_elements(h))+omin
http://www.dfanning.com/tips/histogram_tutorial.html
June 11, 2009 IDL for REU studentsMargit Haberreiter
63/72
Strings
• IDL understands regular expressions• Concatenate strings with +myname=‘yourname’result=strpos(myname,‘o',0)result=strupcase(myname)result=strlen(myname)
strsplit, strmid, ….
June 11, 2009 IDL for REU studentsMargit Haberreiter
64/72
file_search
• Retrieves a list of filenames into a string array.
list=file_search(path+’*.idl’)
for i=0,n_elements(list)-1 do begin
restore,list[i]
plot,time,irradiance,psym=-4
endfor All your string manipulation skills can be used to create the list of files, of course.
dialog_pickfile is an interactive way of selecting files.
June 11, 2009 IDL for REU studentsMargit Haberreiter
65/72
Plotting Data on a Map
• set up map projection – map_set,/continents,/mercator(mercator: cylindrical map projection)
• plot positional data on itMAP_SET, /MERCATOR, 0, -75, 90, CENTRAL_AZIMUTH=90, $
/ISOTROPIC, LIMIT= [32,-130, 70,-86, -5,-34, -58, -67], $ /GRID, LATDEL=10, LONDEL=10, /CONTINENTS, $ TITLE = 'Transverse Mercator‘
Other options: /ROBINSON, /ORTHOGRAPHIC, … ?map_set
June 11, 2009 IDL for REU studentsMargit Haberreiter
66/72
Standard Data Formats
• IDL save files: restore, filename• FITS files: d=mrdfits(file,exten,head)• netCDF: read_netcdf,file,data,status
June 11, 2009 IDL for REU studentsMargit Haberreiter
67/72
Pointers
• Variable contains a reference to data in memory, instead of containing the data.
• Needs to be de-referenced to get the data.
get_sorce_telemetry,data,info,jd1,jd2,$externalelement=‘solstice_a’,$itemname=[‘grat_pos’,’detector_a’,’int_time’]
gp=(*data.(0)).science
June 11, 2009 IDL for REU studentsMargit Haberreiter
68/72
User Library Routines
• legend• pause• psymdot• which or file_which• fsc_color• rainbow
June 11, 2009 IDL for REU studentsMargit Haberreiter
69/72
Coyote’s Guide to IDL
• www.dfanning.com The real source for tips and tricks
June 11, 2009 IDL for REU studentsMargit Haberreiter
70/72
Colors and Plots
• xpalette to show color table• tvrd (“TV read”)to grab graphics
window and write to file• add color definitions to startup file• remember to make plots color-blind
friendly if possible (linestyles --- and symbols xxx)
June 11, 2009 IDL for REU studentsMargit Haberreiter
71/72
File Tips
• help IDL’s automatic compiler by always naming your files with lower case
• IDL stops compiling when it hits the routine that matches the filename
June 11, 2009 IDL for REU studentsMargit Haberreiter
72/72
IDL 7 Workbench
• New version of IDL uses Eclipse• Backwards compatible as always
June 11, 2009 IDL for REU studentsMargit Haberreiter
73/72
Tips & Tricks for Workbench
• Hover help (and open declaration)• Redefine key bindings to whatever you’re
used to: ctrl-shift-L• double click on history entries• cntrl-i shifts focus to command line• cntrl-space (or alt-slash) for command
completion• .edit filename• search works like grep—search for content
in files
June 11, 2009 IDL for REU studentsMargit Haberreiter
74/72
Just the beginning….
• Remember, there’s a lot of IDL knowledge around here, so feel free to ask questions.
• Many user library routines might already do whatever you had in mind.
• Online help manual has lots of examples.
• SolarSoft, Widget programming, Object Oriented...