This file is indexed.

/usr/share/gnudatalanguage/astrolib/quadterp.pro is in gdl-astrolib 2018.02.16+dfsg-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
PRO quadterp, xtab, ytab, xint, yint, MISSING = MISSING
;+
; NAME:
;       QUADTERP     
; PURPOSE:
;       Quadratic interpolation of X,Y vectors onto a new X grid
; EXPLANATION:
;       Interpolate a function Y = f(X) at specified grid points using an
;       average of two neighboring 3 point quadratic (Lagrangian) interpolants.
;       Use LINTERP for linear interpolation
;
; CALLING SEQUENCE:
;       QUADTERP, Xtab, Ytab, Xint, Yint, [ MISSING = ]
;
; INPUT: 
;       Xtab - Vector (X TABle) containing the current independent variable 
;               Must be either monotonic increasing or decreasing
;       Ytab - Vector (Y TABle) containing the dependent variable defined
;               at each of the points of XTAB.
;       Xint - Scalar or vector giving the values of X for which interpolated 
;               Y values are sought
;
; OUTPUT: 
;       Yint - Interpolated value(s) of Y, same number of points as Xint
;
; OPTIONAL INPUT KEYWORD:
;       MISSING - Scalar specifying Yint value(s) to be assigned, when Xint
;               value(s) are outside of the range of Xtab.     Default is to
;               truncate the out of range Yint value(s) to the nearest value 
;               of Ytab.   See the help for the INTERPOLATE function.
; METHOD:
;       3-point Lagrangian interpolation.  The average of the two quadratics 
;       derived from the four nearest  points is returned in YTAB.   A single
;       quadratic is used near the end points.   VALUE_LOCATE is used 
;       to locate center point of the interpolation.
;
; NOTES:
;       QUADTERP provides one method of high-order interpolation.   The 
;           RSI interpol.pro function includes the following alternatives:
;
;       interpol(/LSQUADRATIC) - least squares quadratic fit to a 4 pt 
;               neighborhood
;       interpol(/QUADRATIC) - quadratic fit to a 3 pt neighborhood
;       interpol(/SPLINE) - cubic spline fit to a 4 pt neighborhood
;
;       Also, the IDL Astro function HERMITE fits a cubic polynomial and its
;             derivative to the two nearest points. 
; RESTRICTIONS:
;       Unless MISSING keyword is set, points outside the range of Xtab in 
;       which valid quadratics can be computed are returned at the value 
;       of the nearest end point of Ytab (i.e. Ytab[0] and Ytab[NPTS-1] ).
;
; EXAMPLE:
;       A spectrum has been defined using a wavelength vector WAVE and a
;       flux vector FLUX.  Interpolate onto a new wavelength grid, e.g. 
;
;       IDL> wgrid = [1540.,1541.,1542.,1543.,1544.,1545.]
;       IDL> quadterp, wave, flux, wgrid, fgrid 
;     
;       FGRID will be a 5 element vector containing the quadratically
;       interpolated values of FLUX at the wavelengths given in WGRID.
;
;  EXTERNAL ROUTINES:
;       ZPARCHECK
;  REVISION HISTORY:
;       31 October 1986 by B. Boothman, adapted from the IUE RDAF
;       12 December 1988 J. Murthy, corrected error in Xint
;       September 1992, W. Landsman, fixed problem with double precision
;       August 1993, W. Landsman, added MISSING keyword
;       June, 1995, W. Landsman, use single quadratic near end points
;       Converted to IDL V5.0   W. Landsman   September 1997
;       Fix occasional problem with integer X table,  
;       YINT is a scalar if XINT is a scalar   W. Landsman Dec 1999
;       Use VALUE_LOCATE instead of TABINV W. Landsman  Feb. 2000
;-
 On_error,2
 compile_opt idl2

 if N_params() LT 4 then begin
     print,'Syntax - QUADTERP, xtab, ytab, xint, yint, [ MISSING = ]'
     return
 endif

 zparcheck,'QUADTERP',xtab,1,[1,2,3,4,5],1,'Independent (X) vector'
 zparcheck,'QUADTERP',ytab,2,[1,2,3,4,5],1,'Dependent (Y) vector'

 npts = min( [N_elements(xtab), N_elements(ytab) ] )
 m = n_elements(xint)

 if size(xtab,/TNAME) NE 'DOUBLE' then xt = float(xtab) else xt = xtab
 
 Xmin = min( [ Xtab[0],Xtab[npts-1] ], max = Xmax)
 u = xint > Xmin < Xmax 

 if npts LT 3 then  $
     message,' ERROR - At least 3 points required for quadratic interpolation'

; Determine index of data-points from which interpolation is made 

        index = value_locate(xtab,xint) > 0L < (npts-2)

; First quadratic   
 
        i0 = (index-1) > 0   & i1 = i0+1 & i2 = (i1 +1)
        x0  = xt[i0]  & x1 = xt[i1] & x2 = xt[i2]
        p1 = ytab[i0] * (u-x1) * (u-x2) / ((x0-x1) * (x0-x2)) + $
             ytab[i1] * (u-x0) * (u-x2) / ((x1-x0) * (x1-x2)) + $
             ytab[i2] * (u-x0) * (u-x1) / ((x2-x0) * (x2-x1))

; Second Quadratic

        i2 = (index+2) < (npts-1) & i1 = i2-1 & i0 = (i1-1)
        x0  = xt[i0]  & x1 = xt[i1] & x2 = xt[i2]
        p2 =  ytab[i0] * (u-x1) * (u-x2) / ((x0-x1) * (x0-x2)) + $
              ytab[i1] * (u-x0) * (u-x2) / ((x1-x0) * (x1-x2)) + $
              ytab[i2] * (u-x0) * (u-x1) / ((x2-x0) * (x2-x1))
  
  
      yint = (p1 + p2) / 2.    ;Average of two quadratics

  if N_elements(missing) EQ 1 then begin
        bad = where( (Xint LT Xmin) or (Xint GT Xmax ), Nbad)
        if Nbad GT 0 then Yint[bad] = missing
  endif
 

 return
 end