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

📄 fxaddpar.pro

📁 basic median filter simulation
💻 PRO
📖 第 1 页 / 共 2 页
字号:
;+; NAME: ;       FXADDPAR; Purpose     : ;       Add or modify a parameter in a FITS header array.; Explanation : ;       This version of FXADDPAR will write string values longer than 68 ;       characters using the FITS continuation convention described at ;       http://heasarc.gsfc.nasa.gov/docs/heasarc/ofwg/docs/ofwg_recomm/r13.html; Use         : ;       FXADDPAR, HEADER, NAME, VALUE, COMMENT; Inputs      : ;       HEADER  = String array containing FITS header.  The maximum string;                 length must be equal to 80.  If not defined, then FXADDPAR;                 will create an empty FITS header array.;;       NAME    = Name of parameter.  If NAME is already in the header the;                 value and possibly comment fields are modified. Otherwise a;                 new record is added to the header.  If NAME is equal to;                 either "COMMENT" or "HISTORY" then the value will be added to;                 the record without replacement.  In this case the comment;                 parameter is ignored.;;       VALUE   = Value for parameter.  The value expression must be of the;                 correct type, e.g. integer, floating or string.;                 String values of 'T' or 'F' are considered logical;                 values.  If the value is a string and is "long";                 (more than 69 characters), then it may be continued;                 over more than one line using the OGIP CONTINUE;                 standard.;; Opt. Inputs : ;       COMMENT = String field.  The '/' is added by this routine.  Added;                 starting in position 31.  If not supplied, or set equal to '';                 (the null string), then any previous comment field in the;                 header for that keyword is retained (when found).; Outputs     : ;       HEADER  = Updated header array.; Opt. Outputs: ;       None.; Keywords    : ;       BEFORE  = Keyword string name.  The parameter will be placed before the;                 location of this keyword.  For example, if BEFORE='HISTORY';                 then the parameter will be placed before the first history;                 location.  This applies only when adding a new keyword;;                 keywords already in the header are kept in the same position.;;       AFTER   = Same as BEFORE, but the parameter will be placed after the;                 location of this keyword.  This keyword takes precedence over;                 BEFORE.;;       FORMAT  = Specifies FORTRAN-like format for parameter, e.g. "F7.3".  A;                 scalar string should be used.  For complex numbers the format;                 should be defined so that it can be applied separately to the;                 real and imaginary parts.      If not supplied, then the IDL;                 default formatting is used, except that double precision is;                 given a format of G19.12.;;       /NOCONTINUE = By default, FXADDPAR will break strings longer than 68 ;                characters into multiple lines using the continuation;                convention.    If this keyword is set, then the line will;                instead be truncated to 68 characters.    This was the default;                behaviour of FXADDPAR prior to December 1999.  ;;	ERRMSG	 = If defined and passed, then any error messages will be;		   returned to the user in this parameter rather than;		   depending on the MESSAGE routine in IDL, e.g.;;			ERRMSG = '';			FXADDPAR, ERRMSG=ERRMSG, ...;			IF ERRMSG NE '' THEN ...;; Calls       : ;       DETABIFY(), FXPAR(), FXPARPOS(); Common      : ;       None.; Restrictions: ;       Warning -- Parameters and names are not checked against valid FITS;       parameter names, values and types.;;       The required FITS keywords SIMPLE (or XTENSION), BITPIX, NAXIS, NAXIS1,;       NAXIS2, etc., must be entered in order.  The actual values of these;       keywords are not checked for legality and consistency, however.;; Side effects: ;       All HISTORY records are inserted in order at the end of the header.;;       All COMMENT records are also inserted in order at the end of the;       header, but before the HISTORY records.  The BEFORE and AFTER keywords;       can override this.;;       All records with no keyword (blank) are inserted in order at the end of;       the header, but before the COMMENT and HISTORY records.  The BEFORE and;       AFTER keywords can override this.;;       All other records are inserted before any of the HISTORY, COMMENT, or;       "blank" records.  The BEFORE and AFTER keywords can override this.;;       String values longer than 68 characters will be split into multiple;       lines using the OGIP CONTINUE convention, unless the /NOCONTINUE keyword;       is set.    For a description of the CONTINUE convention see    ;       http://heasarc.gsfc.nasa.gov/docs/heasarc/ofwg/docs/ofwg_recomm/r13.htm; Category    : ;       Data Handling, I/O, FITS, Generic.; Prev. Hist. : ;       William Thompson, Jan 1992, from SXADDPAR by D. Lindler and J. Isensee.;       Differences include:;;               * LOCATION parameter replaced with keywords BEFORE and AFTER.;               * Support for COMMENT and "blank" FITS keywords.;               * Better support for standard FITS formatting of string and;                 complex values.;               * Built-in knowledge of the proper position of required;                 keywords in FITS (although not necessarily SDAS/Geis) primary;                 headers, and in TABLE and BINTABLE extension headers.;;       William Thompson, May 1992, fixed bug when extending length of header,;       and new record is COMMENT, HISTORY, or blank.; Written     : ;       William Thompson, GSFC, January 1992.; Modified    : ;       Version 1, William Thompson, GSFC, 12 April 1993.;               Incorporated into CDS library.;       Version 2, William Thompson, GSFC, 5 September 1997;               Fixed bug replacing strings that contain "/" character--it;               interpreted the following characters as a comment.;       Version 3, Craig Markwardt, GSFC,  December 1997;               Allow long values to extend over multiple lines;	Version 4, D. Lindler, March 2000, modified to use capital E instead;		of a lower case e for exponential format.;       Version 4.1 W. Landsman April 2000, make user-supplied format uppercase;       Version 4.2 W. Landsman July 2002, positioning of EXTEND keyword;       Version 5, 23-April-2007, William Thompson, GSFC;       Version 6, 02-Aug-2007, WTT, bug fix for OGIP long lines;       Version 6.1, 10-Feb-2009, W. Landsman, increase default format precision; Version     : ;       Version 5, 10-Feb-2009;-;; This is a utility routine, which splits a parameter into several; continuation bits.PRO FXADDPAR_CONTPAR, VALUE, CONTINUED    APOST = "'"  BLANK = STRING(REPLICATE(32B,80)) ;BLANK line  ;; The value may not need to be CONTINUEd.  If it does, then split  ;; out the first value now.  The first value does not have a  ;; CONTINUE keyword, because it will be grafted onto the proper  ;; keyword in the calling routine.  IF (STRLEN(VALUE) GT 68) THEN BEGIN      CONTINUED = [ STRMID(VALUE, 0, 67)+'&' ]      VALUE = STRMID(VALUE, 67, STRLEN(VALUE)-67)  ENDIF ELSE BEGIN      CONTINUED = [ VALUE ]      RETURN  ENDELSE  ;; Split out the remaining values.  WHILE( STRLEN(VALUE) GT 0 ) DO BEGIN      H = BLANK      ;; Add CONTINUE keyword      STRPUT, H, 'CONTINUE  '+APOST      ;; Add the next split      IF(STRLEN(VALUE) GT 68) THEN BEGIN          STRPUT, H, STRMID(VALUE, 0, 67)+'&'+APOST, 11          VALUE = STRMID(VALUE, 67, STRLEN(VALUE)-67)      ENDIF ELSE BEGIN          STRPUT, H, VALUE+APOST, 11          VALUE = ''      ENDELSE      CONTINUED = [ CONTINUED, H ]  ENDWHILE  RETURNEND; Utility routine to add a warning to the file.  The calling routine; must ensure that the header is in a consistent state before calling; FXADDPAR_CONTWARN because the header will be subsequently modified; by calls to FXADDPAR.PRO FXADDPAR_CONTWARN, HEADER, NAME;  By OGIP convention, the keyword LONGSTRN is added to the header as;  well.  It should appear before the first occurrence of a long;  string encoded with the CONTINUE convention.  CONTKEY = FXPAR(HEADER, 'LONGSTRN', COUNT = N_LONGSTRN);  Calling FXADDPAR here is okay since the state of the header is;  clean now.  IF N_LONGSTRN GT 0 THEN $    RETURN  FXADDPAR, HEADER, 'LONGSTRN', 'OGIP 1.0', $    ' The OGIP long string convention may be used.', $    BEFORE=NAME  FXADDPAR, HEADER, 'COMMENT', $    ' This FITS file may contain long string keyword values that are', $    BEFORE=NAME  FXADDPAR, HEADER, 'COMMENT', $    " continued over multiple keywords.  This convention uses the  '&'", $    BEFORE=NAME  FXADDPAR, HEADER, 'COMMENT', $    ' character at the end of a string which is then continued', $    BEFORE=NAME  FXADDPAR, HEADER, 'COMMENT', $    " on subsequent keywords whose name = 'CONTINUE'.", $    BEFORE=NAME  RETURNENDPRO FXADDPAR, HEADER, NAME, VALUE, COMMENT, BEFORE=BEFORE,      $              AFTER=AFTER, FORMAT=FORMAT, NOCONTINUE = NOCONTINUE, $              ERRMSG=ERRMSG        ON_ERROR,2                              ;Return to caller;;  Check the number of parameters.;        IF N_PARAMS() LT 3 THEN BEGIN            MESSAGE = 'Syntax:  FXADDPAR, HEADER, NAME, VALUE [, COMMENT ]'            GOTO, HANDLE_ERROR        ENDIF;; Define a blank line and the END line;        ENDLINE = 'END' + STRING(REPLICATE(32B,77))     ;END line        BLANK = STRING(REPLICATE(32B,80))               ;BLANK line;;  If no comment was passed, then use a null string.;        IF N_PARAMS() LT 4 THEN COMMENT = '';;  Check the HEADER array.;        N = N_ELEMENTS(HEADER)          ;# of lines in FITS header        IF N EQ 0 THEN BEGIN            ;header defined?                HEADER=STRARR(36)       ;no, make it.                HEADER[0]=ENDLINE                N=36        ENDIF ELSE BEGIN                S = SIZE(HEADER)        ;check for string type                IF (S[0] NE 1) OR (S[2] NE 7) THEN BEGIN                    MESSAGE = 'FITS Header (first parameter) must be a ' + $                      'string array'                    GOTO, HANDLE_ERROR                ENDIF        ENDELSE;;  Make sure NAME is 8 characters long;        NN = STRING(REPLICATE(32B,8))   ;8 char name        STRPUT,NN,STRUPCASE(NAME)       ;Insert name;;  Check VALUE.;        S = SIZE(VALUE)         ;get type of value parameter        STYPE = S[S[0]+1]        IF S[0] NE 0 THEN BEGIN                MESSAGE = 'Keyword Value (third parameter) must be scalar'                GOTO, HANDLE_ERROR        END ELSE IF STYPE EQ 0 THEN BEGIN                MESSAGE = 'Keyword Value (third parameter) is not defined'                GOTO, HANDLE_ERROR        END ELSE IF STYPE EQ 8 THEN BEGIN                MESSAGE = 'Keyword Value (third parameter) cannot be structure'                GOTO, HANDLE_ERROR        ENDIF;;  Extract first 8 characters of each line of header, and locate END line;        KEYWRD = STRMID(HEADER,0,8)                     ;Header keywords        IEND = WHERE(KEYWRD EQ 'END     ',NFOUND);;  If no END, then add it.  Either put it after the last non-null string, or;  append it to the end.;        IF NFOUND EQ 0 THEN BEGIN                II = WHERE(STRTRIM(HEADER) NE '',NFOUND)                II = MAX(II) + 1                IF (NFOUND EQ 0) OR (II EQ N_ELEMENTS(HEADER)) THEN     $                        HEADER = [HEADER,ENDLINE] ELSE HEADER[II] = ENDLINE                KEYWRD = STRMID(HEADER,0,8)                IEND = WHERE(KEYWRD EQ 'END     ',NFOUND)        ENDIF;        IEND = IEND[0] > 0                      ;Make scalar;;  History, comment and "blank" records are treated differently from the;  others.  They are simply added to the header array whether there are any;  already there or not.;        IF (NN EQ 'COMMENT ') OR (NN EQ 'HISTORY ') OR          $                        (NN EQ '        ') THEN BEGIN;;  If the header array needs to grow, then expand it in increments of 36 lines.;                IF IEND GE (N-1) THEN BEGIN                        HEADER = [HEADER,REPLICATE(BLANK,36)]                        N = N_ELEMENTS(HEADER)                ENDIF;;  Format the record.;                NEWLINE = BLANK                STRPUT,NEWLINE,NN+STRING(VALUE),0;;  If a history record, then append to the record just before the end.;                IF NN EQ 'HISTORY ' THEN BEGIN                        HEADER[IEND] = NEWLINE          ;add history rec.                        HEADER[IEND+1]=ENDLINE          ;move end up;;  The comment record is placed immediately after the last previous comment;  record, or immediately before the first history record, unless overridden by;  either the BEFORE or AFTER keywords.;                END ELSE IF NN EQ 'COMMENT ' THEN BEGIN                        I = FXPARPOS(KEYWRD,IEND,AFTER=AFTER,BEFORE=BEFORE)                        IF I EQ IEND THEN I =   $                            FXPARPOS(KEYWRD,IEND,AFTER='COMMENT',$                                     BEFORE='HISTORY')                        HEADER[I+1] = HEADER[I:N-2]     ;move rest up                        HEADER[I] = NEWLINE             ;insert comment;

⌨️ 快捷键说明

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