sxginfo.pro
来自「basic median filter simulation」· PRO 代码 · 共 127 行
PRO
127 行
pro sxginfo,h,par,type,sbyte,nbytes;+; NAME:; SXGINFO;; PURPOSE:; Return information on all group parameters in an STSDAS header.; EXPLANATION:; Return datatype, starting byte, and number bytes for all group; parameters in an STSDAS file. Obtaining these values ; greatly speed up execution time in subsequent calls to SXGPAR.;; CALLING SEQUENCE:; sxginfo, h, par, type, sbyte, nbytes;; INPUTS:; h - header returned by SXOPEN; par - parameter block returned by SXREAD or multiple; parameter blocks stored in array of dimension; greater than one.;; OUTPUT:; type - data type (if not supplied or null string, the; header is searched for type,sbyte, and nbytes); sbyte - starting byte in parameter block for data; nbytes - number of bytes in parameter block for data;; The number of elements in type,sbyte and nbytes equals the total; number of group parameters.;; METHOD:; The parameter type for each parameter is obtained; from PDTYPEn keyword. If not found then DATATYPE keyword; value is used. If that is not found then BITPIX is; used. BITPIX=8, byte; BITPIX=16 integer*2; BITPIX=32; integer*4.;; NOTES:; For an example of the use of SXGINFO, see CONV_STSDAS;; HISTORY:; version 1 W. Landsman Apr. 93;; Converted to IDL V5.0 W. Landsman September 1997;------------------------------------------------------------ On_error,2 if N_params() LT 3 then begin print,'Syntax - sxginfo,h,par,type,sbyte,nbytes' return endif; determine size of output result s = size(par) ndim = s[0] dtype = s[ndim+1] case 1 of (ndim eq 0) or (dtype ne 1) : message, $ 'Invalid parameter block specified' ndim eq 1 : begin scalar = 1 ; output will be scalar dimen = intarr(1)+1 end else: begin scalar = 0 ; output will be vector dimen = s[2:ndim] end endcase plen = s[1] ;length of parameter blocks;; check remaining input parameters; s=size(h) !err=-1 if (s[0] ne 1) or (s[2] ne 7) then message, $ 'Header array must be string array' if strlen(h[0]) ne 80 then message, $ 'Header must contain 80 character strings';; get number of group parameters and size;; pcount = sxpar(h,'PCOUNT') ;get number of group parameters if pcount eq 0 then begin message,'No group parameters present',/INFO return endif sbyte = intarr(pcount) nbytes = intarr(pcount) type = strarr(pcount); Determine BITPIX and DATATYPE in case PSIZE or PDTYPE is undefined nbits=0 ;number of bits to skip dtype = strtrim(sxpar(h, 'DATATYPE') ) bitpix = sxpar(h,'BITPIX') if !err lt 0 then begin case bitpix of 8: dtype = 'BYTE' 16: dtype = 'INTEGER*2' 32: dtype = 'INTEGER*4' -32: dtype = 'REAL*4' -64: dtype = 'REAL*8' endcase endif for i = 1,pcount do begin nbit = sxpar(h,'PSIZE'+strtrim(i,2)) if !err lt 0 then nbit = bitpix nbits=nbits+nbit if i NE pcount then sbyte[i]=nbits/8 ;number of bytes to skip pdtype = strtrim(sxpar(h,'PDTYPE' + strtrim(i,2))) if !ERR LT 0 then pdtype = dtype type[i-1] = pdtype aster = strpos(pdtype,'*') if aster gt 0 then $ nbytes[i-1]=fix(strmid(pdtype,aster+1,strlen(pdtype)-aster-1)) $ else nbytes[i-1]=4 endfor return end
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?