Xmipp  v3.23.11-Nereus
Classes | Macros | Functions
volume_align_prog.cpp File Reference
#include "interface/frm.h"
#include <fstream>
#include "core/xmipp_image.h"
#include "data/filters.h"
#include "core/geometry.h"
#include "data/mask.h"
#include "core/xmipp_program.h"
#include "core/transformations.h"
Include dependency graph for volume_align_prog.cpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  AlignParams
 
class  ProgAlignVolumes
 

Macros

#define COVARIANCE   1
 
#define LEAST_SQUARES   2
 

Functions

void applyTransformation (const MultidimArray< double > &V2, MultidimArray< double > &Vaux, double *p, bool wrap)
 
double fitness (double *p)
 
double wrapperFitness (double *p, void *params)
 

Macro Definition Documentation

◆ COVARIANCE

#define COVARIANCE   1

Definition at line 39 of file volume_align_prog.cpp.

◆ LEAST_SQUARES

#define LEAST_SQUARES   2

Definition at line 40 of file volume_align_prog.cpp.

Function Documentation

◆ applyTransformation()

void applyTransformation ( const MultidimArray< double > &  V2,
MultidimArray< double > &  Vaux,
double *  p,
bool  wrap 
)

Definition at line 56 of file volume_align_prog.cpp.

60 {
61  Matrix1D<double> r(3);
62  Matrix2D<double> A, Aaux;
63 
64  double greyScale = p[0];
65  double greyShift = p[1];
66  double rot = p[2];
67  double tilt = p[3];
68  double psi = p[4];
69  double scale = p[5];
70  ZZ(r) = p[6];
71  YY(r) = p[7];
72  XX(r) = p[8];
73 
74  Euler_angles2matrix(rot, tilt, psi, A, true);
75  translation3DMatrix(r,Aaux);
76  A = A * Aaux;
77  scale3DMatrix(vectorR3(scale, scale, scale),Aaux);
78  A = A * Aaux;
79 
80  applyGeometry(xmipp_transformation::LINEAR, Vaux, V2, A, xmipp_transformation::IS_NOT_INV, wrap);
81  if (greyScale!=1 || greyShift!=0)
83  DIRECT_MULTIDIM_ELEM(Vaux,n)=DIRECT_MULTIDIM_ELEM(Vaux,n)*greyScale+greyShift;
84 }
void Euler_angles2matrix(T alpha, T beta, T gamma, Matrix2D< T > &A, bool homogeneous)
Definition: geometry.cpp:624
Matrix1D< double > vectorR3(double x, double y, double z)
Definition: matrix1d.cpp:892
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)
#define XX(v)
Definition: matrix1d.h:85
template void translation3DMatrix(const Matrix1D< float > &translation, Matrix2D< float > &resMatrix, bool inverse)
#define FOR_ALL_DIRECT_ELEMENTS_IN_MULTIDIMARRAY(v)
#define DIRECT_MULTIDIM_ELEM(v, n)
void scale3DMatrix(const Matrix1D< double > &sc, Matrix2D< double > &result, bool homogeneous)
#define YY(v)
Definition: matrix1d.h:93
double psi(const double x)
int * n
#define ZZ(v)
Definition: matrix1d.h:101

◆ fitness()

double fitness ( double *  p)

Definition at line 88 of file volume_align_prog.cpp.

89 {
90  applyTransformation(params.V2(),params.Vaux(),p, params.wrap);
91 
92  // Correlate
93  double fit=0.;
94  switch (params.alignment_method)
95  {
96  case COVARIANCE:
97  fit = -correlationIndex(params.V1(), params.Vaux(), params.mask_ptr);
98  break;
99  case LEAST_SQUARES:
100  fit = rms(params.V1(), params.Vaux(), params.mask_ptr);
101  break;
102  }
103  return fit;
104 }
double rms(const MultidimArray< T > &x, const MultidimArray< T > &y, const MultidimArray< int > *mask=nullptr, MultidimArray< double > *Contributions=nullptr)
Definition: filters.h:725
#define COVARIANCE
Image< double > Vaux
Image< double > V2
double correlationIndex(const MultidimArray< T > &x, const MultidimArray< T > &y, const MultidimArray< int > *mask=NULL, MultidimArray< double > *Contributions=NULL)
void applyTransformation(const MultidimArray< double > &V2, MultidimArray< double > &Vaux, double *p, bool wrap)
Image< double > V1
#define LEAST_SQUARES
const MultidimArray< int > * mask_ptr

◆ wrapperFitness()

double wrapperFitness ( double *  p,
void *  params 
)

Definition at line 107 of file volume_align_prog.cpp.

108 {
109  return fitness(p+1);
110 }
double fitness(double *p)