Xmipp  v3.23.11-Nereus
Public Member Functions | Public Attributes | List of all members
RealShearsInfo Class Reference

Structure for holding a volume. More...

#include <project_real_shears.h>

Collaboration diagram for RealShearsInfo:
Collaboration graph
[legend]

Public Member Functions

 RealShearsInfo (const MultidimArray< double > &V)
 

Public Attributes

const MultidimArray< double > * volume
 
int Xdim
 
Matrix2D< double > Ac
 
Matrix2D< double > Acinv
 
MultidimArray< double > Coef_x
 
MultidimArray< double > Coef_y
 
MultidimArray< double > Coef_z
 

Detailed Description

Structure for holding a volume.

Definition at line 39 of file project_real_shears.h.

Constructor & Destructor Documentation

◆ RealShearsInfo()

RealShearsInfo::RealShearsInfo ( const MultidimArray< double > &  V)

Definition at line 43 of file project_real_shears.cpp.

44 {
45  volume=&V;
46  if (XSIZE(V)!=XSIZE(V) || XSIZE(V)!=ZSIZE(V))
47  REPORT_ERROR(ERR_MULTIDIM_DIM, "The volume must be cubic");
48  Xdim=XSIZE(*volume);
49 
50  int Status = !ERROR;
51  MultidimArray<double> planeCoef, inputPlane, inputRow;
55  planeCoef.resizeNoCopy(Xdim,Xdim);
56  inputPlane.resizeNoCopy(Xdim,Xdim);
57  inputRow.resizeNoCopy(Xdim);
58 
59  for (long l = 0; l<Xdim; l++)
60  {
61  for (long m = 0; m < Xdim; m++)
62  {
63  CopyDoubleToDouble(MULTIDIM_ARRAY(V), Xdim, Xdim, Xdim, l, 0L, m,
64  MULTIDIM_ARRAY(inputRow), 1L, Xdim, 1L, 0L, 0L, 0L,
65  1L, Xdim, 1L);
66  memcpy(&DIRECT_A2D_ELEM(inputPlane,m,0),
67  MULTIDIM_ARRAY(inputRow),Xdim*sizeof(double));
68  }
69 
70  ChangeBasisVolume(MULTIDIM_ARRAY(inputPlane), MULTIDIM_ARRAY(planeCoef),
71  Xdim, Xdim, 1L, CardinalSpline,
73 
74  CopyDoubleToDouble(MULTIDIM_ARRAY(planeCoef), Xdim, Xdim, 1L, 0L, 0L, 0L,
75  MULTIDIM_ARRAY(Coef_x), Xdim, Xdim, Xdim, 0L, 0L, l,
76  Xdim, Xdim, 1L);
77  }
78 
79  for (long l = 0; l < Xdim; l++)
80  {
81  for (long m = 0; m < Xdim; m++)
82  {
83  CopyDoubleToDouble(MULTIDIM_ARRAY(V), Xdim, Xdim, Xdim, 0L, l, m,
84  MULTIDIM_ARRAY(inputRow), Xdim, 1L, 1L, 0L, 0L, 0L,
85  Xdim, 1L, 1L);
86  CopyDoubleToDouble(MULTIDIM_ARRAY(inputRow), Xdim, 1L, 1L, 0L, 0L, 0L,
87  MULTIDIM_ARRAY(inputPlane), Xdim, Xdim, 1L, 0L, m, 0L,
88  Xdim, 1L, 1L);
89  }
90 
91  ChangeBasisVolume(MULTIDIM_ARRAY(inputPlane), MULTIDIM_ARRAY(planeCoef),
92  Xdim, Xdim, 1L, CardinalSpline,
94  CopyDoubleToDouble(MULTIDIM_ARRAY(planeCoef), Xdim, Xdim, 1L, 0L, 0L, 0L,
95  MULTIDIM_ARRAY(Coef_y), Xdim, Xdim, Xdim, 0L, 0L, l,
96  Xdim, Xdim, 1L);
97  }
98 
99  for (long l = 0L; l < Xdim; l++)
100  {
101  for (long m = 0L; m < Xdim; m++)
102  {
103  CopyDoubleToDouble(MULTIDIM_ARRAY(V), Xdim, Xdim, Xdim, 0L, m, l,
104  MULTIDIM_ARRAY(inputRow), Xdim, 1L, 1L, 0L, 0L, 0L,
105  Xdim, 1L, 1L);
106  CopyDoubleToDouble(MULTIDIM_ARRAY(inputRow), Xdim, 1L, 1L, 0L, 0L, 0L,
107  MULTIDIM_ARRAY(inputPlane), Xdim, Xdim, 1L, 0L, m, 0L,
108  Xdim, 1L, 1L);
109  }
110 
111  ChangeBasisVolume(MULTIDIM_ARRAY(inputPlane), MULTIDIM_ARRAY(planeCoef),
112  Xdim, Xdim, 1L, CardinalSpline,
114  CopyDoubleToDouble(MULTIDIM_ARRAY(planeCoef), Xdim, Xdim, 1L, 0L, 0L, 0L,
115  MULTIDIM_ARRAY(Coef_z), Xdim, Xdim, Xdim, 0L, 0L, l,
116  Xdim, Xdim, 1L);
117  }
118 
119  Ac.initIdentity(4);
120  Acinv.initIdentity(4);
121  double halfSize=Xdim/2;
122  MAT_ELEM(Ac,0,3)=MAT_ELEM(Ac,1,3)=MAT_ELEM(Ac,2,3)=halfSize;
123  MAT_ELEM(Acinv,0,3)=MAT_ELEM(Acinv,1,3)=MAT_ELEM(Acinv,2,3)=-halfSize;
124 }
#define REPORT_ERROR(nerr, ErrormMsg)
Definition: xmipp_error.h:211
void resizeNoCopy(const MultidimArray< T1 > &v)
#define DIRECT_A2D_ELEM(v, i, j)
#define MULTIDIM_ARRAY(v)
const MultidimArray< double > * volume
MultidimArray< double > Coef_y
MultidimArray< double > Coef_x
#define MAT_ELEM(m, i, j)
Definition: matrix2d.h:116
MultidimArray< double > Coef_z
#define ERROR
Definition: configs.h:24
Matrix2D< double > Ac
#define XSIZE(v)
#define ZSIZE(v)
Matrix2D< double > Acinv
#define DBL_EPSILON
int m
int CopyDoubleToDouble(double *VolumeSource, long NxSource, long NySource, long NzSource, long XSource, long YSource, long ZSource, double *VolumeDestination, long NxDestination, long NyDestination, long NzDestination, long XDestination, long YDestination, long ZDestination, long NxCopy, long NyCopy, long NzCopy)
int ChangeBasisVolume(double *VolumeSource, double *VolumeDestination, long Nx, long Ny, long Nz, enum TSplineBasis FromBasis, enum TSplineBasis ToBasis, long Degree, enum TBoundaryConvention Convention, double Tolerance, int *Status)
Incorrect MultidimArray dimensions.
Definition: xmipp_error.h:173
void initIdentity()
Definition: matrix2d.h:673

Member Data Documentation

◆ Ac

Matrix2D<double> RealShearsInfo::Ac

Definition at line 44 of file project_real_shears.h.

◆ Acinv

Matrix2D<double> RealShearsInfo::Acinv

Definition at line 44 of file project_real_shears.h.

◆ Coef_x

MultidimArray<double> RealShearsInfo::Coef_x

Definition at line 45 of file project_real_shears.h.

◆ Coef_y

MultidimArray<double> RealShearsInfo::Coef_y

Definition at line 45 of file project_real_shears.h.

◆ Coef_z

MultidimArray<double> RealShearsInfo::Coef_z

Definition at line 45 of file project_real_shears.h.

◆ volume

const MultidimArray<double>* RealShearsInfo::volume

Definition at line 42 of file project_real_shears.h.

◆ Xdim

int RealShearsInfo::Xdim

Definition at line 43 of file project_real_shears.h.


The documentation for this class was generated from the following files: