PRO rfmrd2, filename, wnoarr, datarr ; ; 10-DEC-10 AD Rename from rfmrd.pro rfmrd2.pro. Use /get_lun ; 25-AUG-03 AD Change NWIDEMESH from INTARR to LONARR ; 20-DEC-00 VJ Add capability to read binary files ; 28-NOV-00 AD Original ; ; IDL procedure for reading asc or bin RFM spectra ; Binary files are identified by presence of '.bin' string in filename ; ; filename (in) string name of RFM spec. file (eg 'rad_01000.asc') ; wnoarr (out) dbl arr wavenumber array ; datarr (out) dbl arr data array ; wno1 = 0.D0 wnod = 0.D0 nwno = long(0) commnt = '' ; ASCII or binary? IF STRPOS(filename,'.bin') GT 0 THEN BEGIN ; binary file nwidemesh = LONARR (60000L) ; max. no. of nwidemesh points OPENR, lun, filename, /F77_UNFORMATTED, /GET_LUN READU, lun, commnt READU, lun, commnt READU, lun, commnt READU, lun, nwno, wno1, wnod datarr = DBLARR (nwno) wnoarr = wno1 + FINDGEN(nwno) * wnod ; Read number of elements per record i = 0L n = LONG(0) WHILE (NOT EOF (lun)) DO BEGIN READU, lun, n ; print ,'n',n nwidemesh (i) = n i = i + 1 ENDWHILE nrecord = i FREE_LUN, lun ; Read datarr x = '' i = 0L j = 0L OPENR, lun, filename, /F77_UNFORMATTED, /GET_LUN FOR m = 0, 3 DO READU, lun, x ; skip first 4 records FOR m = 0L, long(nrecord - 1) DO BEGIN recarray = FLTARR (nwidemesh (m)) IF (NOT EOF (lun)) THEN READU, lun, n, recarray FOR i = j, j + nwidemesh (m) - 1 DO BEGIN datarr (i) = recarray (i - j) ENDFOR j = j + nwidemesh (m) ENDFOR FREE_LUN, lun ENDIF ELSE BEGIN ; ASCII file OPENR, lun, filename, /GET_LUN READF, lun, commnt ; skip header records (assume always 3) READF, lun, commnt READF, lun, commnt READF, lun, nwno, wno1, wnod WNOARR = wno1 + FINDGEN(nwno) * wnod DATARR = DBLARR(nwno) READF, lun, datarr FREE_LUN, lun ENDELSE END