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

📄 jplephtest.pro

📁 basic median filter simulation
💻 PRO
字号:
;+; NAME:;   JPLEPHTEST;; AUTHOR:;   Craig B. Markwardt, NASA/GSFC Code 662, Greenbelt, MD 20770;   craigm@lheamail.gsfc.nasa.gov;   UPDATED VERSIONs can be found on my WEB PAGE: ;      http://cow.physics.wisc.edu/~craigm/idl/idl.html;; PURPOSE:;   Test JPLEPHTEST with JPL test data set;; MAJOR TOPICS:;   Planetary Orbits, Interpolation;; CALLING SEQUENCE:;   JPLEPHTEST, EPHFILE, TESTFILE;; DESCRIPTION:;;   JPLEPHTEST tests the JPLEPHINTERP procedure for precision.  In;   order to function, you must have a JPL ephemeris test data set.;   The test data set testpo.405 is available in ;   ftp://idlastro.gsfc.nasa.gov/pub/data;;   The procedure opens and reads the test set, which contains;   precomputed data.  Every tenth value is printed on the screen.;   Any deviations that exceed 1.5d-13 AU = 1.5 cm are reported.;;   The columns are labelled according to the input file, except for;   the final column, which is the deviation between the input file;   and the computed value.;;; PARAMETERS: ;;   EPHFILE - a scalar string, specifies the name of the ephemeris;             file, in FITS format.    JPLEPHTEST will look in the directory;             $ASTRO_DATA for the file if it is not in the current directory.;;   TESTFILE - a scalar string, specifies JPL test data set to compare;              against.   JPLEPHTEST will look in the directory;             $ASTRO_DATA for the file if it is not in the current directory.;;; EXAMPLE:;;   Test JPL DE200 and DE405 ephemerides.  Assumes files are in the;   current directory.;;   JPLEPHTEST, 'JPLEPH.200', 'testpo.200';   JPLEPHTEST, 'JPLEPH.405', 'testpo.405';     ;; REFERENCES:;;   JPL Export Ephemeris FTP Site;      ftp://navigator.jpl.nasa.gov/pub/ephem/export/;      (see test-data/ for test data sets);   ;   HORIZONS, JPL Web-based ephermis calculator (Ephemeris DE406);      http://ssd.jpl.nasa.gov/horizons.html;;; SEE ALSO;   JPLEPHREAD, JPLEPHINTERP, JPLEPHTEST;   ; MODIFICATION HISTORY:;   Written and Documented, CM, Jun 2001;   Removed TRANSREAD, improved output, improved docs, CM, 9 Jul 2001;;  $Id: jplephtest.pro,v 1.4 2001/07/20 13:29:53 craigm Exp $;;-; Copyright (C) 2001, Craig Markwardt; This software is provided as is without any warranty whatsoever.; Permission to use, copy and distribute unmodified copies for; non-commercial purposes, and to modify and use for personal or; internal use, is granted.  All other rights are reserved.;-pro jplephtest, ephfile, testfile, pause=pause  if n_params() EQ 0 then begin      message, 'USAGE: JPLEPHTEST, EPHFILE, TESTFILE', /info      return  endif  testdata = find_with_def( testfile, 'ASTRO_DATA')  openr, unit, testdata, /get_lun, error=err  if err NE 0 then begin      message, 'ERROR: could not open '+testdata      return  endif  ;; Read header of file, up to and including the EOT line  repeat begin      line = ''      readf, unit, line  endrep until strupcase(strmid(line,0,3)) EQ 'EOT'  ;; Read at least 20000 lines from file  data = replicate({denum:0L, caldate: '', jd: 0D, targ: 0L, $                    cent: 0L, coord: 0L, value: 0D}, 20000)  on_ioerror, DONE  readf, unit, data, format='(I5,A10,D0,I0,I0,I0,D0)'  DONE:  rc = floor((fstat(unit)).transfer_count/7)  on_ioerror, NULL  free_lun, unit  if rc LT 10 then begin      message, 'ERROR: could not read input data'  endif  ;; Cull the data out of the structure  data = data[0:rc-1]  denum = data.denum & caldate = data.caldate & jd = data.jd   targ = data.targ & cent = data.cent & coord = data.coord  value = data.value  data = 0        bad = cent*0  ephdata = find_with_def(ephfile, 'ASTRO_DATA')  jplephread, ephdata, pinfo, pdata, status=st, errmsg=errmsg  if st EQ 0 then begin      message, errmsg  endif  if denum[0] NE pinfo.denum then begin      message, 'ERROR: test file and ephemeris are not of same version'  endif  wh = where(jd GE pinfo.tstart AND jd LE pinfo.tstop, totct)  if totct EQ 0 then begin      message, 'ERROR: test file and ephemeris do not overlap'  endif  j = 0L  for i = 0L, totct-1 do begin      if coord[wh[i]] GE 4 then vel = 1 else vel = 0      if targ[wh[i]] GE 14 then vel = 1  ;; Always for nut. & libr.      jplephinterp, pinfo, pdata, jd[wh[i]], x, y, z, vx, vy, vz, $        objectname=targ[wh[i]], center=cent[wh[i]], $        posunits='AU', velunits='AU/DAY', velocity=vel      case coord[wh[i]] of           1: newval = x          2: newval = y          3: newval = z          4: newval = vx          5: newval = vy          6: newval = vz          else: message, 'ERROR: coordinate '+coord[wh[i]]+' does not exist'      endcase      ;; Nutations are handled differently than PLEPH      if targ[wh[i]] EQ 14 AND coord[wh[i]] GT 2 then begin          if coord[wh[i]] EQ 3 then newval = vx $          else                      newval = vy      endif      del = abs(newval - value[wh[i]])      if targ[wh[i]] EQ 15 AND coord[wh[i]] EQ 3 then $        del = del/(0.23d0*(jd[wh[i]]-2451545.d0))      if del GE 1.5d-13 OR (i MOD 10) EQ 0 then begin          if del GE 1.5d-13 then begin              print, '****** WARNING: Large difference ******'              bad[wh[i]] = 1          endif          if j GT 300 then j = 0L          if j EQ 0 then $            print, 'REC#', 'Jul. Day', 'Targ', 'Cent', 'Coor', $            'Value', 'Deviation', format='(A6,A10,3(A5),1(A20),A22)'          print, i+1, jd[wh[i]], targ[wh[i]], cent[wh[i]], coord[wh[i]], $            value[wh[i]], del, $            format='(I6,D10.1,3(I5),1(D20.13),E22.13)'      endif      j = j + 1  endfor  if keyword_set(pause) AND total(bad) NE 0 then stop  wh = where(bad, ct)  print, ''  print, '***********************************'  print, ' Time Range (Julian Days): ', minmax(jd)  print, ' Number of Records: ', totct  print, ' Erroneous Records: ', ctend

⌨️ 快捷键说明

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