1#include <isce3/math/complexOperations.h>
4#include "detail/Interp1d.h"
5#include "detail/SSOBuffer.h"
7namespace isce3 {
namespace core {
9template<
typename KernelType,
typename DataType>
12 size_t stridex,
size_t ny,
size_t stridey,
double x,
double y,
15 using namespace isce3::math::complex_operations;
18 const int widthx =
static_cast<int>(ceil(kernelx.width()));
19 const int widthy =
static_cast<int>(ceil(kernely.width()));
29 long lowx = 0, lowy = 0;
30 detail::interp1d_coeffs(kernelx, x, &lowx, coeffsx.data());
31 detail::interp1d_coeffs(kernely, y, &lowy, coeffsy.data());
34 for (
int i_kernely = 0; i_kernely < widthy; ++i_kernely) {
35 long i_datay = i_kernely + lowy;
38 if ((i_datay >= 0) and (i_datay < ny)) {
39 const DataType* zi = &z[i_datay * stridey];
40 const DataType* px = detail::get_contiguous_view_or_copy(
41 datax.data(), widthx, lowx, zi, nx, stridex, periodic);
42 datay[i_kernely] = detail::inner_product(widthx, coeffsx.data(), px);
48 return detail::inner_product(widthy, coeffsy.data(), datay.data());
Abstract base class for all kernels.
Definition Kernels.h:19
Small-size optimized (SSO) buffer.
Definition SSOBuffer.h:13
base interpolator is an abstract base class
Definition BinarySearchFunc.cpp:5