Xmipp  v3.23.11-Nereus
Public Member Functions | Static Protected Member Functions | List of all members
Alignment::IterativeAlignmentEstimator< T > Class Template Reference

#include <iterative_alignment_estimator.h>

Inheritance diagram for Alignment::IterativeAlignmentEstimator< T >:
Inheritance graph
[legend]

Public Member Functions

 IterativeAlignmentEstimator (ARotationEstimator< T > &rot_estimator, AShiftEstimator< T > &shift_estimator, BSplineGeoTransformer< T > &interpolator, AMeritComputer< T > &meritComputer, ctpl::thread_pool &threadPool)
 
void loadReference (const T *ref)
 
AlignmentEstimation compute (const T *others, unsigned iters=3)
 

Static Protected Member Functions

static void sApplyTransform (ctpl::thread_pool &pool, const Dimensions &dims, const AlignmentEstimation &estimation, const T *orig, T *copy, bool hasSingleOrig)
 

Detailed Description

template<typename T>
class Alignment::IterativeAlignmentEstimator< T >

Definition at line 46 of file iterative_alignment_estimator.h.

Constructor & Destructor Documentation

◆ IterativeAlignmentEstimator()

template<typename T>
Alignment::IterativeAlignmentEstimator< T >::IterativeAlignmentEstimator ( ARotationEstimator< T > &  rot_estimator,
AShiftEstimator< T > &  shift_estimator,
BSplineGeoTransformer< T > &  interpolator,
AMeritComputer< T > &  meritComputer,
ctpl::thread_pool threadPool 
)
inline

Definition at line 48 of file iterative_alignment_estimator.h.

52  :
53  m_rot_est(rot_estimator),
54  m_shift_est(shift_estimator),
55  m_meritComputer(meritComputer),
56  m_threadPool(threadPool),
57  m_transformer(interpolator) {
58  m_sameEstimators = ((void*)&m_shift_est == (void*)&m_rot_est);
59  this->check();
60  }
check(nparam, nf, nfsr, &Linfty, nineq, nineqn, neq, neqn, ncsrl, ncsrn, mode, &modem, eps, bgbnd, param)

Member Function Documentation

◆ compute()

template<typename T>
AlignmentEstimation Alignment::IterativeAlignmentEstimator< T >::compute ( const T *  others,
unsigned  iters = 3 
)

◆ loadReference()

template<typename T >
void Alignment::IterativeAlignmentEstimator< T >::loadReference ( const T *  ref)

Definition at line 142 of file iterative_alignment_estimator.cpp.

143  {
144  m_meritComputer.loadReference(ref);
145  m_shift_est.load2DReferenceOneToN(ref);
146  if ( ! m_sameEstimators) {
147  m_rot_est.loadReference(ref);
148  }
149 }

◆ sApplyTransform()

template<typename T>
void Alignment::IterativeAlignmentEstimator< T >::sApplyTransform ( ctpl::thread_pool pool,
const Dimensions dims,
const AlignmentEstimation estimation,
const T *  orig,
T *  copy,
bool  hasSingleOrig 
)
staticprotected

Definition at line 64 of file iterative_alignment_estimator.cpp.

66  {
67  const size_t n = dims.n();
68  const size_t z = dims.z();
69  const size_t y = dims.y();
70  const size_t x = dims.x();
71 
72  auto futures = std::vector<std::future<void>>();
73 
74  auto workload = [&](int id, size_t signalId){
75  size_t offset = signalId * dims.sizeSingle();
76  auto in = MultidimArray<T>(1, z, y, x, const_cast<T*>(orig + (hasSingleOrig ? 0 : offset))); // removing const, but data should not be changed
77  auto out = MultidimArray<T>(1, z, y, x, copy + offset);
78  in.setXmippOrigin();
79  out.setXmippOrigin();
80  // compensate the movement
81  applyGeometry(xmipp_transformation::LINEAR, out, in, estimation.poses.at(signalId), false, xmipp_transformation::DONT_WRAP);
82  };
83 
84  for (size_t i = 0; i < n; ++i) {
85  futures.emplace_back(pool.push(workload, i));
86  }
87  for (auto &f : futures) {
88  f.get();
89  }
90 }
auto push(F &&f, Rest &&... rest) -> std::future< decltype(f(0, rest...))>
Definition: ctpl.h:152
CUDA_HD constexpr size_t z() const
Definition: dimensions.h:69
static double * y
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)
doublereal * x
#define i
CUDA_HD constexpr size_t x() const
Definition: dimensions.h:51
int in
double * f
CUDA_HD constexpr size_t sizeSingle() const
Definition: dimensions.h:100
CUDA_HD constexpr size_t y() const
Definition: dimensions.h:60
double z
CUDA_HD constexpr size_t n() const
Definition: dimensions.h:78
int * n

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