The National Virtual Observatory
|
Install IDL from the internet (~150Mb download) or from the CDs
provided. The final installation is ~250MB.
INSTALL directions are provided on the CDROM in the WINDOWS, LINUX or
MACOSX directory.
LINUX users can (safely?) ignore the symbolic link errors and web
server locations. Follow the install directions.
It is easier from the superuser or ROOT account.
WINDOWS users: make sure the JAVA_BRIDGE option is selected.
Select Evaluation License
Select (from Pulldown) IDL 6.3
Enter Date and KEY provided on the CDROM (or via email)
If you are using GDL, uncomment the line which contains the
GDL_NEEDS dependencies.
The Command-line
Some Datatypes
Some
Built-in Functions
Some Mathematical
Relations
Arrays/Matrices
Some
Commonly Used Commands
Data I/O
Astronomy IDL
Libraries/Resources
Data I/O (again)
Objects and
Structures
What
Does that Routine Do?
Plot/Display
Data
Images
Programing Methods
Batch
Procedures
Functions
FOR Loops
WHILE Loops
IF THEN ELSE
External Compiled Libraries
IDL and the VO
SQL queries
VOLib
IDL supports more than a dozen of datatypes, including integers,
long integers,
floats, doubles, strings, etc.
Try the following examples. Note that IDL ignores capitalization.
IDL> A = 3*5
IDL> print, a
15
IDL> a = 2020
IDL> a = double(a); or a = float(a), or a = long(a), etc.
IDL> print, a
2020.0000
IDL> filename = '/home/user/nvoss05/root' + string(fix(a)) + '.fit'
IDL> print, filename
/home/user/idl/root 2020.fit
IDL> filename = '/home/user/nvoss05/cluster' + strtrim(string(fix(a)),2) + '.fit'
IDL> print, filename
/home/user/idl/cluster2020.fit
IDL> a = fltarr(2); or intarr(2), or dblarr(2), or strarr(2,2), etc
IDL> a = [5,3]
IDL> print, a[0]
5
IDL> a = fltarr(2)
IDL> a[1] = 2
IDL> print, a
0.00000 2.00000
IDL> a = [[2,2],[2,2]]
IDL> b = [[0.5,0.5],[0.5,0.5]]
IDL> print, a#b
2.00000 2.00000
2.00000 2.00000
IDL> print, a##b
2.00000 2.00000
2.00000 2.00000
IDL> d = [[1,5],[2,2]]
IDL> print, d##a; COLUMN-MAJOR
12 12
8 8
IDL> print, d#a; ROW-MAJOR
6 14
6 14
IDL> evals = Eigenql(covar, Eigenvectors=evecs)
IDL> ra = findgen(360) & dec = findgen(360)/2.0 - 90.0 & z = findgen(360)/1800.0 & eps = 10
IDL> print, size(ra); # elements, size of each dimension, datatype, # elements
1 360 4 360
IDL> print, n_elements(ra)
360
IDL> result = where( (abs(ra - 180) le eps) and (abs(dec - 0) le eps) and z ge 0.05 and z le 0.095)
IDL> print, ra[result[0:1]], dec[result[0:1]], z[result[0:1]], format = '(6(1x,f12.8))'
170.00000000 171.00000000 -5.00000000 -4.50000000 0.09444445 0.09500000
IDL> result = randomu(seed, 100)
IDL> print, result[0:5]
0.139039 0.481758 0.594192 0.431110 0.854777 0.585114
IDL> result = randomn(seed, 100); or randomu(seed, 100, /normal)
IDL> print, mean(result)
IDL>$vi ascii_datafile.dat ; or $emacs ascii_datafile.dat
1 2 3 4 5 6 7 8 9 10
10 9 8 7 6 5 4 3 2 1
5 6 7 8 9 10 4 3 2 1
4 3 2 1 5 6 7 8 9 10
1 1 1 1 1 1 1 1 1 10
10 2 2 2 2 2 2 2 2 2
2 1 2 1 2 1 2 1 2 1
10 10 10 10 10 10 10 10 10 10
10 5 2 10 4 2 10 8 4 1
1 1 1 1 1 1 1 1 1 1
:wq ; or ctrl-q
IDL> openr, 1, 'ascii_datafile.dat'
IDL> delvarx, a
IDL> readf,1, a
IDL> print, a
IDL> 1.00000
IDL> close, 1
IDL> openr, 1, 'ascii_datafile.dat'
IDL> a = intarr(10, 10)
IDL> readf,1, a
IDL> print, a
1 2 3 4 5 6 7 8 9 10
10 9 8 7 6 5 4 3 2 1
5 6 7 8 9 10 4 3 2 1
4 3 2 1 5 6 7 8 9 10
1 1 1 1 1 1 1 1 1 10
10 2 2 2 2 2 2 2 2 2
2 1 2 1 2 1 2 1 2 1
10 10 10 10 10 10 10 10 10 10
10 5 2 10 4 2 10 8 4 1
1 1 1 1 1 1 1 1 1 1
IDL> close,1 ; or close, /all
IDL> openw,1, 'test_write.txt'
IDL> printf,1, 'Test for IDL file writing with PRINTF'
IDL> $more test_write.txt
Test for IDL file writing with PRINTF
http://idlastro.gsfc.nasa.gov/contents.html
For these to work, make sure your IDL_PATH contains the correct location of your ASTROLIB.
setenv IDL_PATH ${IDL_PATH}:+/Users/chrism/idl/astron_lib/pro
The following ASTROLIB libraries are given as examples. These are just a sampling of what is
IDL> tabledata = mrdfits('sdss_c4_dr2_published.fit',1,hdr, structyp='c4data'); NOTE structyp nneded for GDL
% Compiled module: VALID_NUM.
% Compiled module: REPCHR.
% Compiled module: GETTOK.
% Compiled module: FXPAR.
% Compiled module: FXMOVE.
% Compiled module: MRDFITS.
% Compiled module: EXPAND_TILDE.
% Compiled module: REPSTR.
% Compiled module: FXPOSIT.
% Compiled module: MRD_HREAD.
% Compiled module: MRD_SKIP.
% Compiled module: MATCH.
% Compiled module: IDL_VALIDNAME.
% Compiled module: MRD_STRUCT.
% Compiled module: LMGR.
% Compiled module: STRSPLIT.
MRDFITS: Binary table. 126 columns by 748 rows.
% Compiled module: IS_IEEE_BIG.
% Compiled module: IEEE_TO_HOST.
IDL> spawn, "echo $NVOSS_HOME", nvoss_home ;Puts the NVOSS home directory into a variable
IDL> image = readfits(nvoss_home+'/java/data/testr.fits',hdr)
IDL> hprint, hdr
IDL> extast, hdr, astr
IDL> help, /str,astr
** Structure <38d6c10>, 8 tags, length=112, data length=108, refs=1:
CD DOUBLE Array[2, 2]
CDELT DOUBLE Array[2]
CRPIX FLOAT Array[2]
CRVAL DOUBLE Array[2]
CTYPE STRING Array[2]
LONGPOLE FLOAT 180.000
PROJP1 FLOAT -1.00000
PROJP2 FLOAT -2.00000
IDL> print, lumdist()
% Compiled module: LUMDIST.
Syntax: result = lumdist(z, H0 = ,k=, Lambda0 = ])
Returns luminosity distance in Mpc
IDL> print, zang()
% Compiled module: ZANG.
Sytnax - angsiz = zang( dl, z, [H0 =, Omega_m =, Lambda0 = , q0 = , k =, /SILENT])
IDL> tabledata = mrdfits('sdss_c4_dr2_published.fit',1,hdr, structyp='c4data'); NOTE structyp nneded for GDL
IDL> result = robust_linefit(alog10(tabledata.lum_r), alog10(tabledata.biwt1500), $
IDL> yfit, sig, coef_sig)
IDL> plot, alog10(tabledata.lum_r), yfit, psym=-3
IDL> oplot, alog10(tabledata.lum_r), alog10(tabledata.biwt1500), psym=3
IDL> h = histogram(tabledata.z, binsize=0.004, omin=omin, max=0.4, min=0.)
IDL> plothist,tabledata.z,bin=0.004
IDL> tabledata = mrdfits('sdss_c4_dr2_published.fit',1,hdr, structyp='name')
IDL> hprint, hdr
XTENSION= 'BINTABLE' /Binary table written by MWRFITS v1.4a
BITPIX = 8 /Required value
NAXIS = 2 /Required value
NAXIS1 = 1030 /Number of bytes per row
NAXIS2 = 748 /Number of rows
PCOUNT = 0 /Normally 0 (no varying arrays)
GCOUNT = 1 /Required value
TFIELDS = 126 /Number of columns in table
COMMENT
COMMENT *** End of mandatory fields ***
.
.
.
COMMENT *** Column names ***
COMMENT
TTYPE1 = 'RA_BCG ' /
TTYPE2 = 'DEC_BCG ' /
TTYPE3 = 'RA_BCGPHOT ' /
TTYPE4 = 'DEC_BCGPHOT ' /
TTYPE5 = 'Z_BCG ' /
TTYPE6 = 'ZERR_BCG ' /
TTYPE7 = 'RA_MEAN ' /
TTYPE8 = 'DEC_MEAN ' /
.
.
.
COMMENT *** Column formats ***
COMMENT
TFORM1 = 'D ' /
TFORM2 = 'D ' /
TFORM3 = 'D ' /
TFORM4 = 'D ' /
TFORM5 = 'D ' /
TFORM6 = 'D ' /
TFORM7 = 'D ' /
TFORM8 = 'D ' /
TFORM9 = 'D ' /
TFORM10 = 'D ' /
TFORM11 = 'D ' /
TFORM12 = 'D ' /
TFORM13 = 'I ' /
IDL> help, /str, tabledata
** Structure <8287a54>, 126 tags, length=996, data length=992, refs=1:
RA_BCG DOUBLE 258.12006
DEC_BCG DOUBLE 64.060760
RA_BCGPHOT DOUBLE 258.12006
DEC_BCGPHOT DOUBLE 64.060760
Z_BCG DOUBLE 0.073402300
ZERR_BCG DOUBLE 0.00020854300
RA_MEAN DOUBLE 258.12720
DEC_MEAN DOUBLE 64.016602
RA_GEOM DOUBLE 258.13622
DEC_GEOM DOUBLE 64.018345
Z DOUBLE 0.080783151
Z2 DOUBLE 0.080979899
NC4 INT 203
RADC4 DOUBLE 0.47838822
BIWT500 DOUBLE 1342.1189
.
.
.
IDL> print, size(tabledata)
1 748 8 748
IDL> print, tabledata[0].(0), tabledata[0].(1)
258.12006 64.060760
IDL> print, tabledata[0:10].(0)
258.12006 213.74054 133.95474 229.21742 257.73026 240.34569 255.63577 228.82294 202.79596
358.55704 234.12422
IDL> print, tabledata[0].ra_bcg, tabledata[0].dec_bcg
258.12006 64.060760
The following only works within the IDL environment. NOT GDL.
IDL> doc_library, 'readcol'
----- Documentation for /home/chrism/idl/astron_lib/pro/readcol.pro -----
NAME:
READCOL
PURPOSE:
Read a free-format ASCII file with columns of data into IDL vectors
EXPLANATION:
Lines of data not meeting the specified format (e.g. comments) are
ignored. Columns may be separated by commas or spaces.
Use READFMT to read a fixed-format ASCII file. Use RDFLOAT for
much faster I/O (but less flexibility). Use FORPRINT to write
columns of data (inverse of READCOL).
CALLING SEQUENCE:
READCOL, name, v1, [ v2, v3, v4, v5, ... v25 , COMMENT=
DELIMITER= ,FORMAT = , /DEBUG , /SILENT , SKIPLINE = , NUMLINE = ]
.
.
.
IDL> doc_library, 'zang'
----- Documentation for /home/chrism/idl/astron_lib/pro/zang.pro -----
NAME:
ZANG
PURPOSE:
Determine the angular size of an object as a function of redshift
EXPLANATION:
Requires an input size in kpc and returns an angular size in arc seconds
Default cosmology has a Hubble constant of 70 km/s/Mpc, Omega (matter)
=0.3 and a normalized cosmological constant Lambda = 0.7; however these
values can be changed with apropriate keywords.
CALLING SEQUENCE:
angsiz = zang( dl, [ z, H0 =, Omega_m =, Lambda0 = , q0 = , k =,
/SILENT] )
.
.
.
IDL> a = findgen(100) & b = findgen(100)
IDL> plot, a,b
IDL> a = sin(a*!PI/180 + !PI/2) & b = cos(b*!PI/180 +!PI/2)
IDL> c = dblarr(2,100)
IDL> c[0,*] = a & c[1,*] = b
IDL> contour, c
IDL> surface, c, zr=[-0.5,0.5]
IDL> w = where(tabledata.sub le 1)
IDL> plot, tabledata[w].lum_r,tabledata[w].biwt1500, psym=3, /xlog, /ylog, xrange=[5d10,4d12], yrange=[100,2200], xstyle=1,ystyle=1,$
ytitle = 'Velocity Disp. within 1.5Mpc (km/s)', xtitle='r-band luminosity (solar)'
The following only works within the IDL environment. NOT GDL.
Image DISPLAY in GDL is nearly non-functional at the 0.9pre-release.
IDL> spawn, "echo $NVOSS_HOME", nvoss_home ;Puts the NVOSS home directory into a variable
IDL> image = readfits(nvoss_home+'/java/data/testr.fits',hdr)
IDL> tv, image
IDL> loadct
% Compiled module: LOADCT.
% Compiled module: PATH_SEP.
0- B-W LINEAR 14- STEPS 28- Hardcandy
1- BLUE/WHITE 15- STERN SPECIAL 29- Nature
2- GRN-RED-BLU-WHT 16- Haze 30- Ocean
3- RED TEMPERATURE 17- Blue - Pastel - R 31- Peppermint
4- BLUE/GREEN/RED/YE 18- Pastels 32- Plasma
5- STD GAMMA-II 19- Hue Sat Lightness 33- Blue-Red
6- PRISM 20- Hue Sat Lightness 34- Rainbow
7- RED-PURPLE 21- Hue Sat Value 1 35- Blue Waves
8- GREEN/WHITE LINEA 22- Hue Sat Value 2 36- Volcano
9- GRN/WHT EXPONENTI 23- Purple-Red + Stri 37- Waves
10- GREEN-PINK 24- Beach 38- Rainbow18
11- BLUE-RED 25- Mac Style 39- Rainbow + white
12- 16 LEVEL 26- Eos A 40- Rainbow + black
13- RAINBOW 27- Eos B
Enter table number:
13
IDL> tv,image
IDL> atv,image
IDL> imdisp, image
IDL> image24 = TVRD(True=1)
IDL> image2d = Color_Quan(image24,1,r,g,b,Cube=6)
IDL> write_jpeg, 'cluster.jpg', image2d
idl> read_jpeg, 'cluster.jpg', image
idl> tvscl, image
PRO SEPAR, separ, ra1,ra2,dec1,dec2
;Returns the separation of 2 points on the sky
;(in RA,DEC) in arcminutes. Uses spherical trig.
phi1 = ra1/57.29578
theta1 = (90.0 - dec1)/57.29578
phi2 = ra2/57.29578
theta2 = (90.0 - dec2)/57.29578
costh3=cos(theta1)*cos(theta2)+sin(theta1)*sin(theta2)*cos(phi2-phi1)
separ = (acos(costh3)*57.296)*60.0
RETURN
END
IDL> .com separ
IDL> separ, sep,180,179,45,45
% Compiled module: SEPAR.
IDL> print, sep
42.4159
IDL> separ, sep,180,179,0,0
IDL> print, sep
59.9973
FUNCTION DIRECTORY, t
name = STRUPCASE(t) ;Convert to uppercase
CASE name OF
'JANE': d='555-1212'
'BILL': d='555-2121'
ELSE: d='Not Found'
ENDCASE
RETURN,D
END
IDL> number = directory('jane')
IDL> print, number
555-1212
WHILE Loops:
The following only works within the IDL environment. NOT GDL.
GDL DOES NOT support inline loops from the command-line.
IDL> testme = findgen(15) & zran = dblarr(100,n_elements(testme)) & probd=zran
IDL> FOR I = 0, 99 DO BEGIN zran[I,*] = randomu(iseed, n_elements(testme))*15.0
IDL> FOR I = 0, 99 DO BEGIN kstwo, testme, zran[I,*],d,prob & probd[I] = prob
IDL> print, avg(probd)
The following works within both IDL and GDL.
PRO MAKE_BCG_DATA
c4data = mrdfits('sdss_c4_dr2_published.fit',1,hdr, structyp='c4data')
openw,1,'bcg_data.dat'
FOR I = 0, n_elements(c4data.ra_mean)- 1 DO BEGIN
printf,1, c4data[I].ra_bcg, c4data[I].dec_bcg, c4data[I].z_bcg, $
format = '(3(1x, f16.10))'
ENDFOR
close, 1
END
IDL> make_bcg_data
IDL> $ls
The following only works within the IDL environment. NOT GDL.
GDL DOES NOT support inline loops from the command-line.
IDL> openr,1,'bcg_data.dat'
IDL> WHILE NOT(EOF(1)) DO BEGIN READF,1,a,b,c & print,a,b,c
The following only works within the IDL environment. NOT GDL.
GDL DOES NOT support inline loops from the command-line.
IDL> openr,1,'bcg_data.dat'
IDL> WHILE NOT(EOF(1)) DO BEGIN READF,1,a,b,c & IF (c gt 0.15) THEN PRINT, a,b,c
260.042 26.6256 0.159325
196.274 62.2164 0.169516
15.2565 -9.95473 0.150398
348.409 14.8376 0.163154
The following works within both IDL and GDL.
PRO SEPAR, separ, ra1,ra2,dec1,dec2
;Returns the separation of 2 points on the sky
;(in RA,DEC) in arcminutes. Uses spherical trig.
IF (n_elements(ra1) eq 0 or n_elements(ra2) eq 0 or n_elements(dec1) eq 0 or n_elements(dec2) eq 0) THEN BEGIN
PRINT, 'Error: invalid coordinates'
RETURN
ENDIF ELSE BEGIN
phi1 = ra1/57.29578
theta1 = (90.0 - dec1)/57.29578
phi2 = ra2/57.29578
theta2 = (90.0 - dec2)/57.29578
costh3=cos(theta1)*cos(theta2)+sin(theta1)*sin(theta2)*cos(phi2-phi1)
separ = (acos(costh3)*57.296)*60.0
ENDELSE
RETURN
END
IDL> .com separ
IDL> separ, sep
Error: invalid coordinates
Now, start up IDL (type idl or start the idlde GUI editor). This assumes you also have the astron_lib libraries as well.
[client]
user=root
host = localhost
[mysql]
database = SPOCS
IDL> openmysql, lun, 'spocs'
% Compiled module: OPENMYSQL.
% Compiled module: BADPAR.
IDL> mysqlquery, lun, 'SELECT s.Teff, s.Logg, S.Fe FROM spocs s;', v1,v2,v3, format = '(f,f,f)'
% Compiled module: MYSQLQUERY
% Compiled module: MYSQLCMD
% Compiled module: STRSPLIT
% Compiled module: ZPARCHECK
% Compiled module: REMCHAR
% Compiled module: GETTOK
% Compiled module: STRNUMBER
IDL> print, avg(v1), avg(v2), avg(v3)
% Compiled module: AVG.
5693.82 4.36144 -0.00614423
The NVOSS 2006 software distribution contains a directory
nvoss2006/idl/ which in turn contains a sub-directory containing
a registry calling procedure (G. Greene) and another sub-directory
containing a number of VO libraries (VOLib_0.2 --C.
Miller). The VOLib contains procedures to read VOTables, SIAP calls,
Cone Searches, Open Sky Query calls, Registry calls, and WESIX calls.
These will be discussed in more detail in the Lessons Learned talk
(Monday) after we're all a little more comfortable with some of these
Standards.