function getindex2,file,wave_in ;----------------------------------------------------------------- ; This routine interpolates refractive indices in wavelength, ; from a specified file of indices. ; ; The data whould be in 3 columns: ; wavelength, imaginary index, real index ; ; input: ; file......file containing the refractive index data (wave, real, imag) ; wave_in...input wavelength, units as in file (microns or 1/cm) ; ; output: ; result...complex refractive index ; ; source: Mark Hervig (UWyo) ;----------------------------------------------------------------- maxwave = 4000 ; max # wavelengths wave = fltarr(maxwave) ; wavelength, microns dxr = fltarr(maxwave) ; real index dxi = fltarr(maxwave) ; imaginary index headr = ' ' i = 0 ;- read the index file openr,lu,file,/get_lun readf,lu,headr ; print,headr readf,lu,headr ; print,headr readf,lu,headr ; print,headr while (not eof(lu)) do begin readf,lu,a,b,c wave(i) = a dxr(i) = c dxi(i) = b i=i+1 if (i eq maxwave) then $ stop,'exceeded max # wavelengths in getindex.pro' endwhile nw = i-1 wave = wave(0:nw-1) dxr = dxr(0:nw-1) dxi = dxi(0:nw-1) close,lu free_lun,lu ;- wave increasing or decreasing? if (wave(0) lt wave(1)) then begin st = 0 & en = nw-1 & inc = 1 endif if (wave(0) gt wave(1)) then begin st = nw-1 & en = 0 & inc = -1 endif ;- interpolate index to wave_in result = complex(0.0,0.0) if (wave_in ge wave(st) and wave_in le wave(en) ) then begin for i = st,en,inc do begin if (wave(i) le wave_in and wave(i+inc) gt wave_in) then begin term = (wave_in-wave(i)) /(wave(i+inc)-wave(i)) dr = term * (dxr(i+inc)-dxr(i)) + dxr(i) di = term * (dxi(i+inc)-dxi(i)) + dxi(i) result = complex(dr,di) goto,jump1 endif endfor print ,wave_in,' not in range in getindex.pro' result = complex(0.0,0.0) endif jump1: return,result end