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

📄 adstring.pro

📁 basic median filter simulation
💻 PRO
字号:
Function adstring,ra_dec,dec,precision, TRUNCATE = truncate,PRECISION=prec;+; NAME:;       ADSTRING; PURPOSE:;       Return RA and Dec as character string(s) in sexigesimal format.; EXPLANATION:;       RA and Dec may be entered as either a 2 element vector or as;       two separate vectors (or scalars).  One can also specify the precision ;       of the declination in digits after the decimal point.;; CALLING SEQUENCE;       result = ADSTRING( ra_dec, precision, /TRUNCATE )           ;               or;       result = ADSTRING( ra,dec,[ precision, /TRUNCATE ] );               or;       result = ADSTRING( dec, [ PRECISION= ] ;; INPUTS:;       RA_DEC - 2 element vector giving the Right Ascension and declination;               in decimal degrees.;                     or;       RA     - Right ascension in decimal degrees, numeric scalar or vector;       DEC    - Declination in decimal degrees, numeric scalar or vector;; OPTIONAL INPUT:;       PRECISION  - Integer scalar (0-4) giving the number of digits after the ;               decimal of DEClination.   The RA is automatically 1 digit more.;               This parameter may either be the third parameter after RA,DEC ;               or the second parameter after [RA,DEC].  If only DEC is supplied ;               then precision must be supplied as a keyword parameter.   If no;               PRECISION parameter or keyword is passed, a  precision of 1 for;               both RA and DEC is returned to maintain  compatibility with past;               ADSTRING versions.    Values of  precision larger than 4 will ;               be truncated to 4.    If PRECISION is 3 or 4, then RA and Dec ;               should be input as double precision.; OPTIONAL INPUT KEYWORD:;       /TRUNCATE - if set, then the last displayed digit in the output is ;               truncated in precision rather than rounded.   This option is;               useful if ADSTRING() is used to form an official IAU name ;               (see http://vizier.u-strasbg.fr/Dic/iau-spec.htx) with ;               coordinate specification.   The IAU name will typically be;               be created by applying STRCOMPRESS/REMOVE) after the ADSTRING();               call, e.g. ;              strcompress( adstring(ra,dec,0,/truncate), /remove)   ;IAU format;        PRECISION = Alternate method of supplying the precision parameter, ; OUTPUT:;       RESULT - Character string(s) containing HR,MIN,SEC,DEC,MIN,SEC formatted;               as ( 2I3,F5.(p+1),2I3,F4.p ) where p is the PRECISION ;               parameter.    If only a single scalar is supplied it is ;               converted to a sexigesimal string (2I3,F5.1).;; EXAMPLE:;       (1) Display CRVAL coordinates in a FITS header, H;;       IDL> crval = sxpar(h,'CRVAL*')  ;Extract 2 element CRVAL vector (degs);       IDL> print, adstring(crval)     ;Print CRVAL vector sexigesimal format;;       (2)  print,adstring(30.42,-1.23,1)  ==>  ' 02 01 40.80  -01 13 48.0';            print,adstring(30.42,+0.23)    ==>  ' 02 01 40.8   +00 13 48.0'    ;            print,adstring(+0.23)          ==>  '+00 13 48.0';;       (3) The first two calls in (2) can be combined in a single call using;           vector input;              print,adstring([30.42,30.42],[-1.23,0.23], 1); PROCEDURES CALLED:;       RADEC, SIXTY();; REVISION HISTORY:;       Written   W. Landsman                      June 1988;       Addition of variable precision and DEC seconds precision fix. ;       ver.  Aug. 1990 [E. Deutsch];       Output formatting spiffed up       October 1991 [W. Landsman];       Remove ZPARCHECK call, accept 1 element vector  April 1992 [W. Landsman];       Call ROUND() instead of NINT()    February 1996  [W. Landsman];       Check roundoff past 60s           October 1997   [W. Landsman];       Work for Precision =4             November 1997  [W. Landsman];       Converted to IDL V5.0   W. Landsman 24-Nov-1997;       Major rewrite to allow vector inputs   W. Landsman  February 2000;       Fix possible error in seconds display when Precision=0 ;                               P. Broos/W. Landsman April 2002;       Added /TRUNCATE keyword, put leading zeros in seconds display;                               P. Broos/W. Landsman September 2002;       Fix declination zero values under vector processing W.Landsman Feb 2004;       Fix possible problem in leading zero display W. Landsman June 2004;       Assume since V5.4, omit fstring() call  W. Landsman April 2006;       Fix significant bug when round a declination with -1<dec<0 ;          Add PRECISION keyword    W.L. Aug 2008;-  On_error,2  compile_opt idl2  Npar = N_params()  case N_elements(ra_dec) of      1: if ( Npar EQ 1 ) then dec = ra_dec else ra = ra_dec     2: begin        if (N_elements(dec) LT 2) then begin               ra = ra_dec[0] mod 360.              if N_elements(dec) EQ 1 then begin               precision = dec & Npar=3 & endif              dec = ra_dec[1]        endif else ra = ra_dec        end   else: ra = ra_dec    endcase  if N_elements(prec) EQ 1 then precision = prec    if ( Npar GE 2 ) then $        if N_elements(dec) NE N_elements(ra) then message, $      'ERROR - RA and Declination do not have equal number of elements'  if N_elements(ra) EQ N_elements(dec) then begin    badrange = where( (dec LT -90.) or (dec GT 90.), Nbad)    if Nbad GT 0 then message, /INF, $      'WARNING - Some declination values are out of valid range (-90 < dec <90)'     radec, ra, dec, ihr, imin, xsec, ideg, imn, xsc     if N_elements(precision) EQ 0 then precision = 0     precision = precision > 0 < 4         ;No more than 4 decimal places if not keyword_set(truncate) then begin     roundsec = [59.5,59.95,59.995,59.9995,59.99995,59.999995]     carry = where(xsec GT roundsec[precision+1], Ncarry)     if Ncarry GT 0 then begin        imin[carry] = imin[carry] + 1        xsec[carry] = 0.0        mcarry = where(imin[carry] EQ 60, Nmcarry)        if Nmcarry GT 0 then begin                ic = carry[mcarry]                ihr[ic] = (ihr[ic] + 1) mod 24                imin[ic] = 0        endif     endif  endif else xsec = (long(xsec*10L^(precision+1)))/10.0d^(precision+1)     secfmt = '(F' + string( 4+precision+1,'(I1)' ) + '.' + $                     string(   precision+1,'(I1)' ) + ')'    leadzero = replicate(' ',N_elements(xsec))    less10 = where(xsec LT (10.-10^(-float(precision+1))/2. ),Nzero)    if Nzero GT 0 then leadzero[less10] = ' 0'     result = string(ihr,'(I3.2)') + string(imin,'(I3.2)') + $              leadzero + strtrim(string(xsec,secfmt),2) + '  '     if N_elements(precision) EQ 0 then precision = 1  endif else begin     x = sixty(dec)     if N_elements(precision) EQ 0 then precision = 1     ideg = fix(x[0]) & imn = fix(x[1]) & xsc = x[2]     result = ''  endelse   imn = abs(imn)  & xsc = abs(xsc)   if ( precision EQ 0 ) then begin            secfmt = '(I3.2)'            if not keyword_set(truncate) then begin           xsc = round(xsc)           carry = where(xsc EQ 60, Ncarry)           if Ncarry GT 0 then begin                 ;Updated April 2002                  xsc[carry] = 0                  imn[carry] = imn[carry] + 1           endif           endif   endif else begin         secfmt = '(F' + string( 3+precision,'(I1)') + '.' + $                         string(   precision,'(I1)') + ')'			          if not keyword_set(truncate) then begin         ixsc = fix(xsc + 0.5/10^precision)         carry = where(ixsc GE 60, Ncarry)         if Ncarry GT 0 then begin             xsc[carry] = 0.             imn[carry] = imn[carry] + 1         endif         endif else $              xsc = (long(xsc*10^precision))/10.0d^precision  endelse   pos = dec GE 0    carry = where(imn EQ 60, Ncarry)   if Ncarry GT 0  then begin       ideg[carry] = ideg[carry] -1 + 2*pos[carry]        imn[carry] = 0   endif   deg = string(ideg,'(I3.2)')   zero = where(ideg EQ 0, Nzero)   if Nzero GT 0 then begin       negzero = where( dec[zero] LT 0, Nneg)       if Nneg GT 0 then begin         ineg = zero[negzero]         deg[ineg] = '-00'          imn[ineg] = imn[ineg] & xsc[ineg] = xsc[ineg]       endif   endif   ipos = where(pos, Npos)   if Npos GT 0 then deg[ipos] =  '+' + strtrim(deg[ipos],2)      leadzero = replicate(' ',N_elements(xsc))   if precision NE 0 then begin      less10 = where(xsc LT (10.- 10^(-float(precision))/2.),Nzero)      if Nzero GT 0 then leadzero[less10] = ' 0'   endif    return, result + deg + string(imn,'(I3.2)') + leadzero + $            strtrim(string(xsc,secfmt),2)   end

⌨️ 快捷键说明

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