Example #1
0
    def interpolate(self,
                    inputvars,
                    locs,
                    datavec,
                    interpval=0.27,
                    interpmethod='linear'):

        locations = range(len(inputvars) + 2)
        jj = 2

        # search for the column locations of the desired variables
        for inputvar in inputvars:
            ii = 0
            flag = 0
            for title in self.gettitles():
                if title == inputvar:
                    locations[jj] = ii
                    flag = 1
                ii = ii + 1
            if flag == 0:
                raise IOError(
                    "user specified column header %s not found in specified data file %s"
                    % (inputvar, self._sfile))
            jj = jj + 1
        locs[:] = locations[2:]

        # generate data matrix
        dataPy = np.genfromtxt(self._sfile,
                               unpack=False,
                               skip_header=2,
                               delimiter="\t",
                               usecols=locations)
        norows = dataPy.shape[0]
        nocols = dataPy.shape[1]
        datavec1 = np.zeros((nocols))
        data = matrix.Matrix(norows, nocols)
        for i in range(norows):
            for j in range(nocols):
                data.SetVal(i, j, dataPy[i, j])
        if interpmethod == 'linear':
            interp = interpolator.LinInterp()
        elif interpmethod == 'hermite':
            interp = interpolator.HermiteInterp()
        elif interpmethod == 'cubic':
            interp = interpolator.CubicInterp()
        else:
            raise IOError(
                "Specified interpolation method: %s not supported, use <linear>"
                % interpmethod)
        flag = 0
        flag = interp.Interp(data, 0, interpval, datavec1)
        if flag == 1:
            raise RuntimeError(
                "Interpolation failed: interpolation value out of bounds")
        datavec[:] = datavec1[1:]
        return 0
Example #2
0
 def testCubicExtrap(self):
     # Test if cubic interpolator returns correct flag when attempting extrapolation
     data = matrix.Matrix(2, 2)
     for i in range(2):
         data.SetVal(i, 0, i)
         data.SetVal(i, 1, 3 * i)
     interp = interpolator.CubicInterp()
     icol = 0
     cols = 2
     vecout = np.zeros((cols))
     self.assertEqual(interp.Interp(data, icol, -1.0, vecout),
                      1)  # x < xmin
     self.assertEqual(interp.Interp(data, icol, 2.0, vecout), 1)  # x > xmax
Example #3
0
 def testCubicNode(self):
     # Test if cubic interpolator gives node value when interpolating at node
     data = matrix.Matrix(10, 2)
     for i in range(10):
         data.SetVal(i, 0, i)
         data.SetVal(i, 1, np.cos(i))
     interp = interpolator.CubicInterp()
     icol = 0
     cols = 2
     vecout = np.zeros((cols))
     for i in range(10):
         flag = interp.Interp(data, icol, data.GetVal(i, 0), vecout)
         self.assertEqual(flag, 0)
         self.assertAlmostEqual(vecout[1], data.GetVal(i, 1))
Example #4
0
    def testCubicLinearfunc(self):
        # Test if cubic interpolator is exact for data generated by linear function
        def f(x):
            return 4.0 * x - 1.1

        data = matrix.Matrix(10, 2)
        for i in range(10):
            data.SetVal(i, 0, i)
            data.SetVal(i, 1, f(i))
        interp = interpolator.CubicInterp()
        icol = 0
        cols = 2
        vecout = np.zeros((cols))
        for i in range(9):
            x = i + 0.2
            flag = interp.Interp(data, icol, x, vecout)
            self.assertEqual(flag, 0)
            self.assertAlmostEqual(vecout[1], f(x))
Example #5
0
 def testCase(self):
     # Test if the interpolators return the correct answer for a specific case
     data = matrix.Matrix(4, 3)
     for i in range(4):
         data.SetVal(i, 0, i)
         data.SetVal(i, 1, i * i * i - 1)
         data.SetVal(i, 2, i * i + 1)
     interps = [
         interpolator.LinInterp(),
         interpolator.CubicInterp(),
         interpolator.HermiteInterp()
     ]
     icol = 0
     cols = 3
     vecout = np.zeros((cols))
     x = 1.5
     yt = [[x, 3.5, 3.5], [x, 2.15, 3.2], [x, 2.375, 3.25]]
     for i in range(3):
         flag = interps[i].Interp(data, icol, x, vecout)
         self.assertEqual(flag, 0)
         np.testing.assert_array_almost_equal(vecout, yt[i])
Example #6
0
# Run the fit to grid function to generate final data
# Setup
dim1 = 2  # w~ and c~
dim2 = ZmeanPoints  # dimension of z~
dim3 = ZvarPoints  # dimension of z_v
dim4 = nofiles  # number of files
lcgrid = int(options["LCgrid"][0])
# length of cgrid
cgrid = np.linspace(0.0, maxC * 1.5, lcgrid)
interpmethod = options["InterpMethod"][0]
if interpmethod == 'linear':  # add more interpolation options later
    interp = interpolator.LinInterp()
elif interpmethod == 'hermite':
    interp = interpolator.HermiteInterp()
elif interpmethod == 'cubic':
    interp = interpolator.CubicInterp()
else:
    raise IOError(
        "Specified interpolation method: %s not supported, use <linear>" %
        interpmethod)
datain = matrix4d.Matrix4D(dim1, dim2, dim3, dim4)
dataout = matrix3d.Matrix3D(dim2, dim3, lcgrid)
print "Fitting final data to grid using %s interpolation" % interpmethod
for i in range(2):
    for l in range(nofiles):
        for j in range(ZmeanPoints):
            for k in range(ZvarPoints):
                if i == 0:
                    datain.SetVal(i, j, k, l, convolutedST[l].GetVal(k, j))
                if i == 1:
                    datain.SetVal(i, j, k, l, convolutedC[l].GetVal(k, j))