⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fits_open.pro

📁 basic median filter simulation
💻 PRO
📖 第 1 页 / 共 2 页
字号:
;        n = 100        xtension = strarr(n)        extname = strarr(n)        extver = lonarr(n)        extlevel = lonarr(n)        gcount = lonarr(n)        pcount = lonarr(n)        bitpix = lonarr(n)        naxis  = lonarr(n)        axis = lonarr(20,n)        start_header = lon64arr(n)        ; starting byte in file for header        start_data = lon64arr(n)          ; starting byte in file for data        position = long64(0)             ; current byte position in file        skip = long64(0)                 ; Amount to skip from current position;; read and process each header in the file if open for read or update;        extend_number = 0               ; current extension number being                                        ; processed         if open_for_read or open_for_update then begin            main_header = 1             ; first header in file flag            h = bytarr(80,36,/nozero)   ; read buffer;; loop on headers in the file;            repeat begin              if skip GT 0 then point_lun,unit,position               start = position;; loop on header blocks;                first_block = 1         ; first block in header flag                repeat begin                    if position+2879 ge nbytes_in_file then begin                        if extend_number eq 0 then begin                                message = 'EOF encountered while reading header'                                goto,error_exit                        endif                        print,'EOF encountered reading extension header'                        print,'Only '+strtrim(extend_number-1,2) + $                                ' extensions processed'                        goto,done_headers                    endif                    readu,unit,h                    position = position + 2880                    hdr = string(h>32b)                    endline = where(strmid(hdr,0,8) eq 'END     ',nend)                    if nend gt 0 then hdr = hdr[0:endline[0]]                    if first_block then begin;; check for valid header (SIMPLE keyword must be first for PDU and; XTENSION keyword for the extensions.;                        header = hdr                         keyword = strmid(header[0],0,8)                        if (extend_number eq 0) and $                           (keyword ne 'SIMPLE  ') then begin                                message = 'Invalid header, no SIMPLE keyword'                                goto,error_exit                        endif                        if (extend_number gt 0) and $                           (keyword ne 'XTENSION') then begin                                print,'Invalid extension header encountered'                                print,'XTENSION keyword missing'                                print,'Only '+strtrim(extend_number-1,2) + $                                        ' extensions processed'                                goto,done_headers                        endif                    end else header = [header,hdr]                    first_block = 0                end until (nend gt 0)   ;; print header if hprint set;                if keyword_set(hprint) then hprint,header;; end of loop on header blocks;; Increase size of vectors if needed;                if extend_number ge n then begin                        xtension = [xtension,strarr(n)]                        extname = [extname,strarr(n)]                        extver = [extver,lonarr(n)]                        extlevel = [extver,lonarr(n)]                        gcount = [gcount,lonarr(n)]                        pcount = [pcount,lonarr(n)]                        bitpix = [bitpix,lonarr(n)]                        naxis  = [naxis,lonarr(n)]                        old_axis = axis                        axis = lonarr(20,n*2)                        axis[0,0] = old_axis                        start_header = [start_header,lonarr(n)]                        start_data = [start_data,lonarr(n)]                        n = n*2                end;; extract information from header;                xtension[extend_number] = strtrim(sxpar(header,'xtension'))                st = sxpar(header,'extname', Count = N_extname)                if N_extname EQ 0 then st = ''                extname[extend_number] = strtrim(st,2)                  extver[extend_number] = sxpar(header,'extver')                          extlevel[extend_number] = sxpar(header,'extlevel')                              gcount[extend_number] = sxpar(header,'gcount')                pcount[extend_number] = sxpar(header,'pcount')                bitpix[extend_number] = sxpar(header,'bitpix')                nax = sxpar(header,'naxis')                naxis[extend_number] = nax                if nax gt 0 then for i=1,nax do $                    axis[i-1,extend_number] = sxpar(header,'naxis'+strtrim(i,2))                start_data[extend_number] = position                    start_header[extend_number] = start;; if first header, save without FITS required keywords;                if extend_number eq 0 then begin                    hmain = header                    random_groups = sxpar(header,'groups')                    sxdelpar,hmain,['SIMPLE','BITPIX','NAXIS','NAXIS1', $                                    'NAXIS2','NAXIS3','NAXIS4','NAXIS5', $                                    'NAXIS6','NAXIS7','NAXIS8','EXTEND', $                                    'PCOUNT','GCOUNT','GROUPS','BSCALE', $                                    'BZERO','NPIX1','NPIX2','PIXVALUE']                        if (pcount[0] gt 0) then for i=1,pcount[0] do $                        sxdelpar,hmain,['ptype','pscal','pzero']+strtrim(i,2)                endif;; skip past data to go to next header;                ndata = long64(axis[0,extend_number])                if naxis[extend_number] gt 1 then $                                for i=2,naxis[extend_number] do $                                    ndata = ndata*axis[i-1,extend_number]                nbytes = (abs(bitpix[extend_number])/8) * $                       (gcount[extend_number]>1)*(pcount[extend_number] + ndata)                skip = (nbytes + 2879)/2880*2880                position = position + skip;; end loop on headers;                           extend_number = extend_number + 1            end until (position ge nbytes_in_file-2879)        end;; point at end of file in /extend;done_headers:        if open_for_update then point_lun,unit,nbytes_in_file;; number of extensions;        if open_for_write then nextend = -1 $                          else nextend = extend_number - 1;; set up blank hmain if open for write;        if open_for_write then begin                hmain = strarr(1)                hmain[0] = 'END     '        end;; create output structure for the file control block;        if open_for_write or open_for_update then begin                fcb = {filename:fname,unit:unit,nextend:nextend, $                        open_for_write:open_for_write + open_for_update*2}           end else begin                nx = nextend                fcb = {filename:fname,unit:unit,nextend:nextend, $                        xtension:xtension[0:nx],extname:extname[0:nx], $                        extver:extver[0:nx],extlevel:extlevel[0:nx], $                        gcount:gcount[0:nx],pcount:pcount[0:nx], $                        bitpix:bitpix[0:nx],naxis:naxis[0:nx], $                        axis:axis[*,0:nx], $                        start_header:start_header[0:nx], $                        start_data:start_data[0:nx],hmain:hmain, $                        open_for_write:open_for_overwrite*3,$                        last_extension:-1, $                        random_groups:random_groups, $                        nbytes: nbytes_in_file }        end        !err = 1            ;For obsolete users still using !err        return;; error exit;ioerror:         message = !ERROR_STATE.msgerror_exit:        free_lun,unit        !err = -1        if keyword_set(no_abort) then return        message,' ERROR: '+message,/CON        returnend

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -