Xmipp  v3.23.11-Nereus
Modules | Classes | Functions
Basis function
Collaboration diagram for Basis function:

Modules

 Blobs
 
 Splines
 

Classes

class  Basis
 

Functions

void createZernike3DBasis (const MultidimArray< double > &Vin, MultidimArray< double > &Vbasis, int l1, int n, int l2, int m, int Rmax=-1)
 

Detailed Description

This class defines the basis function to use for the reconstruction. Currently, valid basis functions are blobs and voxels.

Function Documentation

◆ createZernike3DBasis()

void createZernike3DBasis ( const MultidimArray< double > &  Vin,
MultidimArray< double > &  Vbasis,
int  l1,
int  n,
int  l2,
int  m,
int  Rmax = -1 
)

Create a Zernike Spherical Basis volume. With the same size as an input volume. Z(l,n,m)=R_n^l(r)Y_l^m(x,y,z) for l=0,1,2,..., n=0,1,2,..., m=-l,...,l The basis volume is created up to Rmax, by default half the size of the input volume

Definition at line 406 of file basis.cpp.

407 {
408  Vbasis.initZeros(Vin);
409  Vbasis.setXmippOrigin();
410  if (Rmax<0)
411  Rmax=XSIZE(Vin)/2;
412  double Rmax2=Rmax*Rmax;
413  double iRmax=1.0/Rmax;
414  for (int k=STARTINGZ(Vbasis); k<=FINISHINGZ(Vbasis); k++)
415  {
416  double k2=k*k;
417  if (k2>Rmax2)
418  continue;
419  double kr=k*iRmax;
420  for (int i=STARTINGY(Vbasis); i<=FINISHINGY(Vbasis); i++)
421  {
422  double k2i2=k2+i*i;
423  if (k2i2>Rmax2)
424  continue;
425  double ir=i*iRmax;
426  for (int j=STARTINGX(Vbasis); j<=FINISHINGX(Vbasis); j++)
427  {
428  double r2=k2i2+j*j;
429  if (r2>Rmax2)
430  continue;
431  double jr=j*iRmax;
432  A3D_ELEM(Vbasis,k,i,j)=ZernikeSphericalHarmonics(l1,n,l2,m,jr,ir,kr,sqrt(r2)*iRmax);
433  }
434  }
435 
436  }
437 }
#define FINISHINGX(v)
void sqrt(Image< double > &op)
#define FINISHINGZ(v)
#define STARTINGX(v)
#define i
ql0001_ & k(htemp+1),(cvec+1),(atemp+1),(bj+1),(bl+1),(bu+1),(x+1),(clamda+1), &iout, infoqp, &zero,(w+1), &lenw,(iw+1), &leniw, &glob_grd.epsmac
#define STARTINGY(v)
#define A3D_ELEM(V, k, i, j)
#define XSIZE(v)
#define j
int m
#define FINISHINGY(v)
double ZernikeSphericalHarmonics(int n, int m, double xr, double yr, double zr, double r)
float r2
void initZeros(const MultidimArray< T1 > &op)
#define STARTINGZ(v)
int * n
int ir