Skip to content
Snippets Groups Projects
Commit 7205d63d authored by Claudio Gheller's avatar Claudio Gheller
Browse files

Precalculated Gaussian Kernel added

parent 2d16e4a0
No related branches found
No related tags found
No related merge requests found
......@@ -22,6 +22,22 @@ gauss_kernel_norm(double norm, double std22, double u_dist, double v_dist)
return conv_weight;
}
void makeGaussKernel(double * kernel,
int KernelLen,
double std22)
{
double norm = std22/PI;
int n = KernelLen, mid = n / 2;
for (int i = 0; i != mid + 1; i++) {
double term = (double)i / mid;
kernel[mid + i] = sqrt(norm) * exp(-(term*term)*std22);
}
for (int i = 0; i != mid; i++) kernel[i] = kernel[n - 1 - i];
}
// Kaiser-Bessel Kernel: it is adapted from WSClean
double bessel0(double x, double precision) {
// Calculate I_0 = SUM of m 0 -> inf [ (x/2)^(2m) ]
......@@ -188,6 +204,8 @@ void wstack(
double std = 1.0;
double std22 = 1.0/(2.0*std*std);
double norm = std22/PI;
double * convkernel = malloc(w_support*sizeof(*convkernel));
makeGaussKernel(convkernel,w_support,std22);
// Loop over visibilities.
// Switch between CUDA and GPU versions
......@@ -309,11 +327,14 @@ void wstack(
for (j = jmin; j <= jmax; j++)
{
int jKer = (int)j-pos_u+KernelLen;
int kKer = (int)k-pos_v+KernelLen;
double u_dist = (double)j+0.5 - pos_u;
long iKer = 2 * (j + k*grid_size_x + grid_w*grid_size_x*grid_size_y);
double conv_weight = gauss_kernel_norm(norm,std22,u_dist,v_dist);
//double conv_weight = gauss_kernel_norm(norm,std22,u_dist,v_dist);
double conv_weight = convkernel[jKer]*convkernel[kKer];
// Loops over frequencies and polarizations
double add_term_real = 0.0;
double add_term_img = 0.0;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment