Xmipp  v3.23.11-Nereus
Macros | Functions
symmetries.cpp File Reference
#include <stdio.h>
#include <limits>
#include <chrono>
#include <random>
#include "symmetries.h"
Include dependency graph for symmetries.cpp:

Go to the source code of this file.

Macros

#define Symmetrize_Vol(X)
 
#define put_inside(j, j_min, j_max, jint)
 

Functions

void symmetrizeCrystalVectors (Matrix1D< double > &aint, Matrix1D< double > &bint, Matrix1D< double > &shift, int space_group, int sym_no, const Matrix1D< double > &eprm_aint, const Matrix1D< double > &eprm_bint)
 
void symmetrizeCrystalVolume (GridVolume &vol_in, const Matrix1D< double > &eprm_aint, const Matrix1D< double > &eprm_bint, int eprm_space_group, const MultidimArray< int > &mask, int grid_type)
 
void symmetry_P2_122 (Image< double > &vol, const SimpleGrid &grid, const Matrix1D< double > &eprm_aint, const Matrix1D< double > &eprm_bint, const MultidimArray< int > &mask, int volume_no, int grid_type)
 
void symmetry_P22_12 (Image< double > &vol, const SimpleGrid &grid, const Matrix1D< double > &eprm_aint, const Matrix1D< double > &eprm_bint, const MultidimArray< int > &mask, int volume_no, int grid_type)
 
void symmetry_P4 (Image< double > &vol, const SimpleGrid &grid, const Matrix1D< double > &eprm_aint, const Matrix1D< double > &eprm_bint, const MultidimArray< int > &mask, int volume_no, int grid_type)
 
void symmetry_P42_12 (Image< double > &vol, const SimpleGrid &grid, const Matrix1D< double > &eprm_aint, const Matrix1D< double > &eprm_bint, const MultidimArray< int > &mask, int volume_no, int grid_type)
 
void symmetry_P6 (Image< double > &vol, const SimpleGrid &grid, const Matrix1D< double > &eprm_aint, const Matrix1D< double > &eprm_bint, const MultidimArray< int > &mask, int volume_no, int grid_type)
 
double interpolatedElement3DHelical (const MultidimArray< double > &Vin, double x, double y, double z, double zHelical, double sinRotHelical, double cosRotHelical)
 
double interpolatedElement3DHelicalInt (const MultidimArray< double > &Vin, int x, int y, int z, double zHelical, double sinRotHelical, double cosRotHelical)
 
void symmetry_Helical (MultidimArray< double > &Vout, const MultidimArray< double > &Vin, double zHelical, double rotHelical, double rot0, MultidimArray< int > *mask, bool dihedral, double heightFraction, int Cn)
 
void symmetry_HelicalLowRes (MultidimArray< double > &Vout, const MultidimArray< double > &Vin, double zHelical, double rotHelical, double rot0, MultidimArray< int > *mask, double heightFraction)
 
void symmetry_Dihedral (MultidimArray< double > &Vout, const MultidimArray< double > &Vin, double rotStep, double zmin, double zmax, double zStep, MultidimArray< int > *mask)
 

Macro Definition Documentation

◆ put_inside

#define put_inside (   j,
  j_min,
  j_max,
  jint 
)
Value:
if( (j) < (j_min) ) { (j) = (j) + (jint);}\
else if( (j) > (j_max) ) { (j) = (j) - (jint);};
#define j

Definition at line 360 of file symmetries.cpp.

◆ Symmetrize_Vol

#define Symmetrize_Vol (   X)
Value:
{\
for (size_t i=0; i<vol_in.VolumesNo(); i++)\
X(vol_in(i),vol_in.grid(i),eprm_aint,eprm_bint,mask,i, \
grid_type);\
}
#define i

Definition at line 292 of file symmetries.cpp.

Function Documentation

◆ interpolatedElement3DHelical()

double interpolatedElement3DHelical ( const MultidimArray< double > &  Vin,
double  x,
double  y,
double  z,
double  zHelical,
double  sinRotHelical,
double  cosRotHelical 
)

Definition at line 1598 of file symmetries.cpp.

1600 {
1601  int x0 = floor(x);
1602  double fx = x - x0;
1603  int x1 = x0 + 1;
1604 
1605  int y0 = floor(y);
1606  double fy = y - y0;
1607  int y1 = y0 + 1;
1608 
1609  int z0 = floor(z);
1610  double fz = z - z0;
1611  int z1 = z0 + 1;
1612 
1613  double d000 = interpolatedElement3DHelicalInt(Vin, x0, y0, z0, zHelical, sinRotHelical, cosRotHelical);
1614  double d001 = interpolatedElement3DHelicalInt(Vin, x1, y0, z0, zHelical, sinRotHelical, cosRotHelical);
1615  double d010 = interpolatedElement3DHelicalInt(Vin, x0, y1, z0, zHelical, sinRotHelical, cosRotHelical);
1616  double d011 = interpolatedElement3DHelicalInt(Vin, x1, y1, z0, zHelical, sinRotHelical, cosRotHelical);
1617  double d100 = interpolatedElement3DHelicalInt(Vin, x0, y0, z1, zHelical, sinRotHelical, cosRotHelical);
1618  double d101 = interpolatedElement3DHelicalInt(Vin, x1, y0, z1, zHelical, sinRotHelical, cosRotHelical);
1619  double d110 = interpolatedElement3DHelicalInt(Vin, x0, y1, z1, zHelical, sinRotHelical, cosRotHelical);
1620  double d111 = interpolatedElement3DHelicalInt(Vin, x1, y1, z1, zHelical, sinRotHelical, cosRotHelical);
1621 
1622  double dx00 = LIN_INTERP(fx, d000, d001);
1623  double dx01 = LIN_INTERP(fx, d100, d101);
1624  double dx10 = LIN_INTERP(fx, d010, d011);
1625  double dx11 = LIN_INTERP(fx, d110, d111);
1626  double dxy0 = LIN_INTERP(fy, dx00, dx10);
1627  double dxy1 = LIN_INTERP(fy, dx01, dx11);
1628 
1629  return LIN_INTERP(fz, dxy0, dxy1);
1630 }
__host__ __device__ float2 floor(const float2 v)
static double * y
#define z0
doublereal * x
#define y0
#define x0
double z
double interpolatedElement3DHelicalInt(const MultidimArray< double > &Vin, int x, int y, int z, double zHelical, double sinRotHelical, double cosRotHelical)
#define LIN_INTERP(a, l, h)
Definition: xmipp_macros.h:381

◆ interpolatedElement3DHelicalInt()

double interpolatedElement3DHelicalInt ( const MultidimArray< double > &  Vin,
int  x,
int  y,
int  z,
double  zHelical,
double  sinRotHelical,
double  cosRotHelical 
)

Definition at line 1577 of file symmetries.cpp.

1579 {
1580  if (x<STARTINGX(Vin) || x>FINISHINGX(Vin) || y<STARTINGY(Vin) || y>FINISHINGY(Vin))
1581  return 0.0;
1582  if (z>=STARTINGZ(Vin) && z<=FINISHINGZ(Vin))
1583  return A3D_ELEM(Vin,z,y,x);
1584  else if (z<STARTINGZ(Vin))
1585  {
1586  double newx=cosRotHelical*x-sinRotHelical*y;
1587  double newy=sinRotHelical*x+cosRotHelical*y;
1588  return interpolatedElement3DHelical(Vin,newx,newy,z+zHelical,zHelical, sinRotHelical, cosRotHelical);
1589  }
1590  else
1591  {
1592  double newx=cosRotHelical*x+sinRotHelical*y;
1593  double newy=-sinRotHelical*x+cosRotHelical*y;
1594  return interpolatedElement3DHelical(Vin,newx,newy,z-zHelical,zHelical, sinRotHelical, cosRotHelical);
1595  }
1596 }
double interpolatedElement3DHelical(const MultidimArray< double > &Vin, double x, double y, double z, double zHelical, double sinRotHelical, double cosRotHelical)
#define FINISHINGX(v)
static double * y
#define FINISHINGZ(v)
#define STARTINGX(v)
doublereal * x
#define STARTINGY(v)
#define A3D_ELEM(V, k, i, j)
double z
#define FINISHINGY(v)
#define STARTINGZ(v)

◆ symmetry_HelicalLowRes()

void symmetry_HelicalLowRes ( MultidimArray< double > &  Vout,
const MultidimArray< double > &  Vin,
double  zHelical,
double  rotHelical,
double  rot0,
MultidimArray< int > *  mask,
double  heightFraction 
)

Definition at line 1707 of file symmetries.cpp.

1709 {
1710  MultidimArray<double> Vaux;
1711  Vout.initZeros(Vin);
1712  double helicalStep=rotHelical/zHelical;
1713  Matrix2D<double> A;
1714 
1715  for (int k=0; k<(int)ZSIZE(Vin); ++k)
1716  {
1717  double angle=RAD2DEG(helicalStep*k)+rot0;
1718  rotation3DMatrix(angle,'Z',A,true);
1719  MAT_ELEM(A,2,3)=-k;
1720  applyGeometry(xmipp_transformation::LINEAR,Vaux,Vin,A,xmipp_transformation::IS_NOT_INV,false,0.0);
1721  Vout+=Vaux;
1722 
1723  rotation3DMatrix(-angle,'Z',A,true);
1724  MAT_ELEM(A,2,3)=k;
1725  applyGeometry(xmipp_transformation::LINEAR,Vaux,Vin,A,xmipp_transformation::IS_NOT_INV,false,0.0);
1726  Vout+=Vaux;
1727  }
1728  Vout/=2*ZSIZE(Vin);
1729  if (mask!=nullptr)
1731  if (!DIRECT_MULTIDIM_ELEM(*mask,n))
1732  DIRECT_MULTIDIM_ELEM(Vout,n)=0.0;
1733 }
void applyGeometry(int SplineDegree, MultidimArray< std::complex< double > > &V2, const MultidimArray< std::complex< double > > &V1, const Matrix2D< double > &A, bool inv, bool wrap, std::complex< double > outside, MultidimArray< double > *BcoeffsPtr)
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
void rotation3DMatrix(double ang, char axis, Matrix2D< double > &result, bool homogeneous)
#define MAT_ELEM(m, i, j)
Definition: matrix2d.h:116
#define FOR_ALL_DIRECT_ELEMENTS_IN_MULTIDIMARRAY(v)
#define ZSIZE(v)
#define DIRECT_MULTIDIM_ELEM(v, n)
#define RAD2DEG(r)
Definition: xmipp_macros.h:320
void initZeros(const MultidimArray< T1 > &op)
int * n