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

📄 fxaddpar.pro

📁 basic median filter simulation
💻 PRO
📖 第 1 页 / 共 2 页
字号:
;  The "blank" record is placed immediately after the last previous "blank";  record, or immediately before the first comment or history record, unless;  overridden by either the BEFORE or AFTER keywords.;                END ELSE BEGIN                        I = FXPARPOS(KEYWRD,IEND,AFTER=AFTER,BEFORE=BEFORE)                        IF I EQ IEND THEN I =   $                            FXPARPOS(KEYWRD,IEND,AFTER='',BEFORE='COMMENT')<$                            FXPARPOS(KEYWRD,IEND,AFTER='',BEFORE='HISTORY')                        HEADER[I+1] = HEADER[I:N-2]     ;move rest up                        HEADER[I] = NEWLINE             ;insert "blank"                ENDELSE                RETURN        ENDIF                           ;history/comment/blank;;  Find location to insert keyword.  If the keyword is already in the header,;  then simply replace it.  If no new comment is passed, then retain the old;  one.;        IPOS  = WHERE(KEYWRD EQ NN,NFOUND)        IF NFOUND GT 0 THEN BEGIN                I = IPOS[0]                IF COMMENT EQ '' THEN BEGIN                        SLASH = STRPOS(HEADER[I],'/')                        QUOTE = STRPOS(HEADER[I],"'")                        IF (QUOTE GT 0) AND (QUOTE LT SLASH) THEN BEGIN                                QUOTE = STRPOS(HEADER[I],"'",QUOTE+1)                                IF QUOTE LT 0 THEN SLASH = -1 ELSE      $                                        SLASH = STRPOS(HEADER[I],'/',QUOTE+1)                        ENDIF                        IF SLASH NE -1 THEN     $                                COMMENT = STRMID(HEADER[I],SLASH+1,80) ELSE $                                COMMENT = STRING(REPLICATE(32B,80))                ENDIF                GOTO, REPLACE        ENDIF;;  Start of section dealing with the positioning of required FITS keywords.  If;  the keyword is SIMPLE, then it must be at the beginning.;        IF NN EQ 'SIMPLE  ' THEN BEGIN                I = 0                GOTO, INSERT        ENDIF;;  In conforming extensions, if the keyword is XTENSION, then it must be at the;  beginning. ;        IF NN EQ 'XTENSION' THEN BEGIN                I = 0                GOTO, INSERT        ENDIF;;  If the keyword is BITPIX, then it must follow the either SIMPLE or XTENSION;  keyword.;        IF NN EQ 'BITPIX  ' THEN BEGIN                IF (KEYWRD[0] NE 'SIMPLE  ') AND                $                        (KEYWRD[0] NE 'XTENSION') THEN BEGIN                    MESSAGE = 'Header must start with either SIMPLE or XTENSION'                    GOTO, HANDLE_ERROR                ENDIF                I = 1                GOTO, INSERT        ENDIF;;  If the keyword is NAXIS, then it must follow the BITPIX keyword.;        IF NN EQ 'NAXIS   ' THEN BEGIN                IF KEYWRD[1] NE 'BITPIX  ' THEN BEGIN                    MESSAGE = 'Required BITPIX keyword not found'                    GOTO, HANDLE_ERROR                ENDIF                I = 2                GOTO, INSERT        ENDIF;;  If the keyword is NAXIS1, then it must follow the NAXIS keyword.;        IF NN EQ 'NAXIS1  ' THEN BEGIN                IF KEYWRD[2] NE 'NAXIS   ' THEN BEGIN                    MESSAGE = 'Required NAXIS keyword not found'                    GOTO, HANDLE_ERROR                ENDIF                I = 3                GOTO, INSERT        ENDIF;;  If the keyword is NAXIS<n>, then it must follow the NAXIS<n-1> keyword.;        IF STRMID(NN,0,5) EQ 'NAXIS' THEN BEGIN                NUM_AXIS = FIX(STRMID(NN,5,3))                PREV = STRING(REPLICATE(32B,8))         ;Format NAXIS<n-1>                STRPUT,PREV,'NAXIS',0                   ;Insert NAXIS                STRPUT,PREV,STRTRIM(NUM_AXIS-1,2),5     ;Insert <n-1>                IF KEYWRD[NUM_AXIS+1] NE PREV THEN BEGIN                    MESSAGE = 'Required '+PREV+' keyword not found'                    GOTO, HANDLE_ERROR                ENDIF                I = NUM_AXIS + 2                GOTO, INSERT        ENDIF;;  If the keyword is EXTEND, then it must follow the last NAXIS* keyword.;        IF NN EQ 'EXTEND  ' THEN BEGIN                IF KEYWRD[2] NE 'NAXIS   ' THEN BEGIN                    MESSAGE = 'Required NAXIS keyword not found'                    GOTO, HANDLE_ERROR                ENDIF                FOR I = 3, N-2 DO $                       IF STRMID(KEYWRD[I],0,5) NE 'NAXIS' THEN GOTO, INSERT                             ENDIF    ;;  If the first keyword is XTENSION, and has the value of either 'TABLE' or;  'BINTABLE', then there are some additional required keywords.;        IF KEYWRD[0] EQ 'XTENSION' THEN BEGIN                XTEN = FXPAR(HEADER,'XTENSION')                IF (XTEN EQ 'TABLE   ') OR (XTEN EQ 'BINTABLE') THEN BEGIN;;  If the keyword is PCOUNT, then it must follow the NAXIS2 keyword.;                        IF NN EQ 'PCOUNT  ' THEN BEGIN                                IF KEYWRD[4] NE 'NAXIS2  ' THEN BEGIN                                    MESSAGE = 'Required NAXIS2 keyword not found'                                    GOTO, HANDLE_ERROR                                ENDIF                                I = 5                                GOTO, INSERT                        ENDIF;;  If the keyword is GCOUNT, then it must follow the PCOUNT keyword.;                        IF NN EQ 'GCOUNT  ' THEN BEGIN                                IF KEYWRD[5] NE 'PCOUNT  ' THEN BEGIN                                    MESSAGE = 'Required PCOUNT keyword not found'                                    GOTO, HANDLE_ERROR                                ENDIF                                I = 6                                GOTO, INSERT                        ENDIF;;  If the keyword is TFIELDS, then it must follow the GCOUNT keyword.;                        IF NN EQ 'TFIELDS ' THEN BEGIN                                IF KEYWRD[6] NE 'GCOUNT  ' THEN BEGIN                                    MESSAGE = 'Required GCOUNT keyword not found'                                    GOTO, HANDLE_ERROR                                ENDIF                                I = 7                                GOTO, INSERT                        ENDIF                ENDIF        ENDIF;;  At this point the location has not been determined, so a new line is added;  at the end of the FITS header, but before any blank, COMMENT, or HISTORY;  keywords, unless overridden by the BEFORE or AFTER keywords.;        I = FXPARPOS(KEYWRD,IEND,AFTER=AFTER,BEFORE=BEFORE)        IF I EQ IEND THEN I =                                     $            FXPARPOS(KEYWRD,IEND,AFTER=AFTER,BEFORE='')         < $            FXPARPOS(KEYWRD,IEND,AFTER=AFTER,BEFORE='COMMENT')  < $            FXPARPOS(KEYWRD,IEND,AFTER=AFTER,BEFORE='HISTORY');;  A new line needs to be added.  First check to see if the length of the;  header array needs to be extended.  Then insert a blank record at the proper;  place.;INSERT:        IF IEND EQ (N-1) THEN BEGIN                HEADER = [HEADER,REPLICATE(BLANK,36)]                N = N_ELEMENTS(HEADER)        ENDIF        HEADER[I+1] = HEADER[I:N-2]        HEADER[I] = BLANK        IEND = IEND + 1        ; CM 24 Sep 1997;;  Now put value into keyword at line I.;REPLACE:         H=BLANK                 ;80 blanks        STRPUT,H,NN+'= '        ;insert name and =.        APOST = "'"             ;quote (apostrophe) character        TYPE = SIZE(VALUE)      ;get type of value parameter;;  Store the value depending on the data type.  If a character string, first;  check to see if it is one of the logical values "T" (true) or "F" (false).;        IF TYPE[1] EQ 7 THEN BEGIN              ;which type?                UPVAL = STRUPCASE(VALUE)        ;force upper case.                IF (UPVAL EQ 'T') OR (UPVAL EQ 'F') THEN BEGIN                        STRPUT,H,UPVAL,29       ;insert logical value.;;  Otherwise, remove any tabs, and check for any apostrophes in the string.;                END ELSE BEGIN                        VAL = DETABIFY(VALUE)                        NEXT_CHAR = 0                        REPEAT BEGIN                                AP = STRPOS(VAL,"'",NEXT_CHAR)                                IF AP GE 66 THEN BEGIN                                        VAL = STRMID(VAL,0,66)                                END ELSE IF AP GE 0 THEN BEGIN                                        VAL = STRMID(VAL,0,AP+1) + APOST + $                                          STRMID(VAL,AP+1,80)                                        NEXT_CHAR = AP + 2                                ENDIF                        ENDREP UNTIL AP LT 0;;  If a long string, then add the comment as soon as possible.;; CM 24 Sep 1997;  Separate parameter if it needs to be CONTINUEd.;                        IF NOT KEYWORD_SET(NOCONTINUE) THEN $                             FXADDPAR_CONTPAR, VAL, CVAL  ELSE $                             CVAL = STRMID(VAL,0,68)                        K = I + 1                        ;; See how many CONTINUE lines there already are                        WHILE K LT IEND DO BEGIN                            IF STRMID(HEADER[K],0,8) NE 'CONTINUE' THEN $                              GOTO, DONE_CHECK_CONT                            K = K + 1                        ENDWHILE                                                DONE_CHECK_CONT:                        NOLDCONT = K - I - 1                        NNEWCONT = N_ELEMENTS(CVAL) - 1                        ;; Insert new lines if needed                        IF NNEWCONT GT NOLDCONT THEN BEGIN                            INS = NNEWCONT - NOLDCONT                            WHILE IEND+INS GE N DO BEGIN                                HEADER = [HEADER, REPLICATE(BLANK,36)]                                N = N_ELEMENTS(HEADER)                            ENDWHILE                        ENDIF                         ;; Shift the old lines properly                        IF NNEWCONT NE NOLDCONT THEN $                          HEADER[I+NNEWCONT+1] = HEADER[I+NOLDCONT+1:IEND]                        IEND = IEND + NNEWCONT - NOLDCONT                        ;; Blank out any lines at the end if needed                        IF NNEWCONT LT NOLDCONT THEN BEGIN                            DEL = NOLDCONT - NNEWCONT                            HEADER[IEND+1:IEND+DEL] = REPLICATE('', DEL)                        ENDIF                        IF STRLEN(CVAL[0]) GT 18 THEN BEGIN                            STRPUT,H,APOST+STRMID(CVAL[0],0,68)+APOST+ $                              ' /'+COMMENT,10                            HEADER[I]=H                                ;  There might be a continuation of this string.  CVAL would contain;  more than one element if that is so.                                                        ;; Add new continuation lines                            IF N_ELEMENTS(CVAL) GT 1 THEN BEGIN                              HEADER[I+1] = CVAL[1:*]                                                        ;; Header state is now clean, so add                            ;; warning to header                               FXADDPAR_CONTWARN, HEADER, NAME                            ENDIF                            DONE_CONT:                            RETURN;;  If a short string, then pad out to at least eight characters.;                        END ELSE BEGIN                                STRPUT,H,APOST+CVAL[0],10                                STRPUT,H,APOST,11+(STRLEN(CVAL[0])>8)                        ENDELSE                    ENDELSE;;  If complex, then format the real and imaginary parts, and add the comment;  beginning in column 51.;        END ELSE IF TYPE[1] EQ 6 THEN BEGIN                IF N_ELEMENTS(FORMAT) EQ 1 THEN BEGIN   ;use format keyword                        VR = STRING(FLOAT(VALUE),    '('+STRUPCASE(FORMAT)+')')                        VI = STRING(IMAGINARY(VALUE),'('+STRUPCASE(FORMAT)+')')                 END ELSE BEGIN                        VR = STRTRIM(FLOAT(VALUE),2)                        VI = STRTRIM(IMAGINARY(VALUE),2)                ENDELSE                SR = STRLEN(VR)  &  STRPUT,H,VR,(30-SR)>10                SI = STRLEN(VI)  &  STRPUT,H,VI,(50-SI)>30                STRPUT,H,' /'+COMMENT,50                HEADER[I] = H                RETURN;;  If not complex or a string, then format according to either the FORMAT;  keyword, or the default for that datatype.;        END ELSE BEGIN                IF (N_ELEMENTS(FORMAT) EQ 1) THEN $ ;use format keyword                        V = STRING(VALUE,'('+STRUPCASE(FORMAT)+')' ) ELSE BEGIN			IF TYPE[1] EQ 5 THEN $			V = STRING(VALUE,FORMAT='(G19.12)') ELSE $                        V = STRTRIM(strupcase(VALUE),2)    ;default format			ENDELSE                S = STRLEN(V)                 ;right justify                STRPUT,H,V,(30-S)>10          ;insert        ENDELSE;;  Add the comment, and store the completed line in the header.;        STRPUT,H,' /',30        ;add ' /'        STRPUT,H,COMMENT,32     ;add comment        HEADER[I]=H             ;save line;        ERRMSG = ''        RETURN;;  Error handling point.;HANDLE_ERROR:	IF ARG_PRESENT(ERRMSG) THEN ERRMSG = 'FXADDPAR: ' + MESSAGE	$		ELSE MESSAGE, MESSAGE        RETURN        END

⌨️ 快捷键说明

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