📄 fits_read.pro
字号:
pro fits_read,file_or_fcb,data,header,group_par,noscale=noscale, $ exten_no=exten_no, extname=extname, $ extver=extver, extlevel=extlevel, xtension=xtension, $ no_abort=no_abort, message=message, first=first, last=last, $ group=group, header_only=header_only,data_only=data_only, $ no_pdu=no_pdu, enum = enum, no_unsigned = no_unsigned, pdu=pdu;+; NAME:; FITS_READ; PURPOSE:; To read a FITS file.;; EXPLANATION:; ***NOTE** This version of FITS_READ must be used with a post Sep 2006; version of FITS_OPEN.; CALLING SEQUENCE:; FITS_READ, filename_or_fcb, data [,header, group_par];; INPUTS:; FILENAME_OR_FCB - this parameter can be the FITS Control Block (FCB); returned by FITS_OPEN or the file name of the FITS file. If; a file name is supplied, FITS_READ will open the file with; FITS_OPEN and close the file with FITS_CLOSE before exiting.; When multiple extensions are to be read from the file, it is; more efficient for the user to call FITS_OPEN and leave the; file open until all extensions are read.;; OUTPUTS:; DATA - data array. If /NOSCALE is specified, BSCALE and BZERO; (if present in the header) will not be used to scale the data.; If Keywords FIRST and LAST are used to read a portion of the; data or the heap portion of an extension, no scaling is done; and data is returned as a 1-D vector. The user can use the IDL; function REFORM to convert the data to the correct dimensions; if desired. If /DATA_ONLY is specified, no scaling is done.; HEADER - FITS Header. The STScI inheritance convention is recognized; http://fits.gsfc.nasa.gov/registry/inherit/fits_inheritance.txt; If an extension is read, and the INHERIT keyword exists with a ; value of T, and the /NO_PDU keyword keyword is not supplied, ; then the primary data unit header and the extension header will; be combined. The header will have the form:;; <required keywords for the extension: XTENSION, BITPIX,; NAXIS, ...>; BEGIN MAIN HEADER --------------------------------; <PDU header keyword and history less required keywords:; SIMPLE, BITPIX, NAXIS, ...>; BEGIN EXTENSION HEADER ---------------------------; <extension header less required keywords that were; placed at the beginning of the header.; END; ; The structure of the header is such that if a keyword is; duplicated in both the PDU and extension headers, routine; SXPAR will print a warning and return the extension value of; the keyword. ;; GROUP_PAR - Group parameter block for FITS random groups format files; or the heap area for variable length binary tables.; Any scale factors in the header (PSCALn and PZEROn) are not; applied to the group parameters.;; INPUT KEYWORD PARAMETERS:;; /NOSCALE: Set to return the FITS data without applying the scale; factors BZERO and BSCALE.; /HEADER_ONLY: set to read the header only.; /DATA_ONLY: set to read the data only. If set, if any scale factors; are present (BSCALE or BZERO), they will not be applied.; /NO_PDU: By default, FITS_READ will add the primary data unit header ; keywords to the output header, *if* the header includes ; INHERIT = T. Set /NO_PDU to never append the primary header.; /NO_ABORT: Set to return to calling program instead of a RETALL; when an I/O error is encountered. If set, the routine will; return a non-null string (containing the error message) in the; keyword MESSAGE. (For backward compatibility, the obsolete ; system variable !ERR is also set to -1 in case of an error.) ; If /NO_ABORT not set, then FITS_READ will print the message and; issue a RETALL; /NO_UNSIGNED - By default, if the header indicates an unsigned integer; (BITPIX = 16, BZERO=2^15, BSCALE=1) then FITS_READ will output ; an IDL unsigned integer data type (UINT). But if /NO_UNSIGNED; is set, or the IDL, then the data is converted to type LONG. ; /PDU - If set, then always add the primary data unit header keywords; to the output header, even if the INHERIT=T keyword is not found; This was the default behavior of FITS_READ prior to April 2007; EXTEN_NO - extension number to read. If not set, the next extension; in the file is read. Set to 0 to read the primary data unit.; XTENSION - string name of the xtension to read; EXTNAME - string name of the extname to read; EXTVER - integer version number to read; EXTLEVEL - integer extension level to read; FIRST - set this keyword to only read a portion of the data. It gives; the first word of the data to read; LAST - set this keyword to only read a portion of the data. It gives; the last word number of the data to read; GROUP - group number to read for GCOUNT>1. (Default=0, the first group); ; OUTPUT KEYWORD PARAMETERS:; ENUM - Output extension number that was read. ; MESSAGE = value: Output error message;; NOTES:; Determination or which extension to read.; case 1: EXTEN_NO specified. EXTEN_NO will give the number of the; extension to read. The primary data unit is refered; to as extension 0. If EXTEN_NO is specified, XTENSION,; EXTNAME, EXTVER, and EXTLEVEL parameters are ignored.; case 2: if EXTEN_NO is not specified, the first extension; with the specified XTENSION, EXTNAME, EXTVER, and; EXTLEVEL will be read. If any of the 4 parameters; are not specified, they will not be used in the search.; Setting EXTLEVEL=0, EXTVER=0, EXTNAME='', or; XTENSION='' is the same as not supplying them.; case 3: if none of the keyword parameters, EXTEN_NO, XTENSION,; EXTNAME, EXTVER, or EXTLEVEL are supplied. FITS_READ; will read the next extension in the file. If the; primary data unit (PDU), extension 0, is null, the; first call to FITS_READ will read the first extension; of the file.;; The only way to read a null PDU is to use EXTEN_NO = 0.;; If FIRST and LAST are specified, the data is returned without applying; any scale factors (BSCALE and BZERO) and the data is returned in a; 1-D vector. This will allow you to read any portion of a multiple; dimension data set. Once returned, the IDL function REFORM can be; used to place the correct dimensions on the data.;; IMPLICIT IMAGES: FITS_READ will construct an implicit image; for cases where NAXIS=0 and the NPIX1, NPIX2, and PIXVALUE; keywords are present. The output image will be:; image = replicate(PIXVALUE,NPIX1,NPIX2);; EXAMPLES:; Read the primary data unit of a FITS file, if it is null read the; first extension:; FITS_READ, 'myfile.fits', data, header;; Read the first two extensions of a FITS file and the extension with; EXTNAME = 'FLUX' and EXTVER = 4; FITS_OPEN, 'myfile.fits', fcb; FITS_READ, fcb,data1, header2, exten_no = 1; FITS_READ, fcb,data1, header2, exten_no = 2; FITS_READ, fcb,data3, header3, extname='flux', extver=4; FITS_CLOSE, fcb; ; Read the sixth image in a data cube for the fourth extension.;; FITS_OPEN, 'myfile.fits', fcb; image_number = 6; ns = fcb.axis(0,4); nl = fcb.axis(1,4); i1 = (ns*nl)*(image_number-1); i2 = i2 + ns*nl-1; FITS_READ,fcb,image,header,first=i1,last=i2; image = reform(image,ns,nl,/overwrite); FITS_CLOSE;; PROCEDURES USED:; FITS_CLOSE, FITS_OPEN; SXADDPAR, SXDELPAR, SXPAR(); WARNINGS:; In Sep 2006, FITS_OPEN was modified to open FITS files using the; /SWAP_IF_LITTLE_ENDIAN keyword to OPEN, so that subsequent routines ; (FITS_READ, FITS_WRITE) did not require any byte swapping. An error; may result if an pre-Sep 2006 version of FITS_OPEN is used with a ; post Sep 2006 version of FITS_READ, FITS_WRITE or MODFITS.; HISTORY:; Written by: D. Lindler, August 1995; Avoid use of !ERR W. Landsman August 1999; Read unsigned datatypes, added /no_unsigned W. Landsman December 1999; Don't call FITS_CLOSE unless fcb is defined W. Landsman January 2000; Set BZERO = 0 for unsigned integer data W. Landsman January 2000; Only call IEEE_TO_HOST if needed W. Landsman February 2000; Ensure EXTEND keyword in primary header W. Landsman April 2001; Don't erase ERROR message when closing file W. Landsman April 2002; Assume at least V5.1 remove NANValue keyword W. Landsman November 2002; Work with compress files (read file size from fcb),; requires updated (Jan 2003) version of FITS_OPEN W. Landsman Jan 2003; Do not modify BSCALE/BZERO for unsigned integers W. Landsman April 2006; Asuume FITS_OPEN has opened the file with /SWAP_IF_LITTLE_ENDIAN; W. Landsman September 2006; Fix problem with /DATA_ONLY keyword M.Buie/W.Landsman October 2006; Only append primary header if INHERIT=T W. Landsman April 2007; Make ndata 64bit for very large files E. Hivon/W. Landsman May 2007; Added /PDU keyword to always append primary header W. Landsman June 2007;-;;----------------------------------------------------------------------------- compile_opt idl2; print calling sequence; if N_params() eq 0 then begin print,'Syntax - FITS_READ,file_or_fcb,data,header,group_par' print,' Input Keywords: /noscale, exten_no=, extname=, ' print,' extver=, extlevel=, xtension=, /no_abort, ' print,' first, last, group, /header_only, /no_pdu, /pdu' print,' Output Keywords: enum =, message=' return endif;; I/O error processing; on_ioerror,ioerror;; set defaults; message = '' if n_elements(noscale) eq 0 then noscale = 0 if n_elements(exten_no) eq 0 then exten_no = -1 if n_elements(extname) eq 0 then extname = '' if n_elements(extver) eq 0 then extver = 0 if n_elements(extlevel) eq 0 then extlevel = 0 if n_elements(first) eq 0 then first = 0 if n_elements(last) eq 0 then last = 0 if n_elements(no_abort) eq 0 then no_abort = 0 if n_elements(group) eq 0 then group = 0 if n_elements(header_only) eq 0 then header_only = 0 if n_elements(data_only) eq 0 then data_only = 0 if n_elements(no_pdu) eq 0 then no_pdu = 0 if n_elements(pdu) eq 0 then pdu = 0 if n_elements(xtension) eq 0 then xtension = '';; Open file if file name is supplied; s = size(file_or_fcb) & fcbtype = s[s[0]+1] fcbsize = n_elements(file_or_fcb) if (fcbsize ne 1) or ((fcbtype ne 7) and (fcbtype ne 8)) then begin message = 'Invalid Filename or FCB supplied' goto,error_exit end if fcbtype eq 7 then begin fits_open,file_or_fcb,fcb,no_abort=no_abort,message=message if message NE '' then goto,error_exit end else fcb = file_or_fcb;; determine which extension to read ==========================================;; case 1: exten_no specified; enum = exten_no if exten_no le -1 then begin;; case 2: extname, extver, or extlevel specified; if (extname ne '') or (extlevel ne 0) or (extver ne 0) or $ (xtension ne '') then begin;; find extensions with supplied extname, extver, extlevel, and xtension; good = replicate(1b,fcb.nextend+1) if extname ne '' then good = good and $ (strtrim(strupcase(extname)) eq strupcase(fcb.extname)) if xtension ne '' then good = good and $ (strtrim(strupcase(xtension)) eq strupcase(fcb.xtension)) if extver ne 0 then good = good and (extver eq fcb.extver) if extlevel ne 0 then good = good and (extlevel eq fcb.extlevel) good = where(good,ngood);; select first one; if ngood le 0 then begin message='No extension for given extname, extver, and/or' + $ ' extlevel found' goto,error_exit endif enum = good[0]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -