Xmipp  v3.23.11-Nereus
psd_estimator.h
Go to the documentation of this file.
1 /***************************************************************************
2  *
3  * Authors: David Strelak (davidstrelak@gmail.com)
4  *
5  * Unidad de Bioinformatica of Centro Nacional de Biotecnologia , CSIC
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
20  * 02111-1307 USA
21  *
22  * All comments concerning this program package may be sent to the
23  * e-mail address 'xmipp@cnb.csic.es'
24  ***************************************************************************/
25 
26 #ifndef LIBRARIES_RECONSTRUCTION_PSD_ESTIMATOR_H_
27 #define LIBRARIES_RECONSTRUCTION_PSD_ESTIMATOR_H_
28 
29 #include "core/multidim_array.h"
30 #include "data/fft_settings.h"
31 #include "data/rectangle.h"
32 
33 class Dimensions;
34 
35 
39 template<typename T>
40 class PSDEstimator {
41 public:
42  static std::vector<Rectangle<Point2D<size_t>>> getPatchesLocation(
43  const std::pair<size_t, size_t> &borders,
44  const Dimensions &micrograph,
45  const Dimensions &patch,
46  float overlap);
47 
48  static void estimatePSD(const MultidimArray<T> &micrograph,
49  float overlap, const Dimensions &tileDim, MultidimArray<T> &psd,
50  unsigned fftThreads, bool normalize);
51 
52  template<typename F>
53  static void half2whole(const T *in,
54  T __restrict__ *out,
55  const FFTSettings<T> &settings, F func) {
56  for (size_t y = 0; y < settings.sDim().y(); ++y) {
57  for (size_t x = 0; x < settings.sDim().x(); ++x) {
58  bool mirror = x >= settings.fDim().x();
59  size_t xS = mirror
60  ? (settings.sDim().x() - x)
61  : x;
62  size_t yS = mirror
63  ? ((y == 0) ? 0 : (settings.sDim().y() - y))
64  : y;
65  size_t indexD = y * settings.sDim().x() + x;
66  size_t indexS = yS * settings.fDim().x() + xS;
67  out[indexD] = func(mirror, in[indexS]);
68  }
69  }
70  }
71 
72 
73 };
75 #endif /* LIBRARIES_RECONSTRUCTION_PSD_ESTIMATOR_H_ */
static double * y
static void half2whole(const T *in, T __restrict__ *out, const FFTSettings< T > &settings, F func)
Definition: psd_estimator.h:53
constexpr Dimensions fDim() const
Definition: fft_settings.h:82
doublereal * x
CUDA_HD constexpr size_t x() const
Definition: dimensions.h:51
int in
quaternion_type< T > normalize(quaternion_type< T > q)
Definition: point.cpp:278
CUDA_HD constexpr size_t y() const
Definition: dimensions.h:60
constexpr Dimensions sDim() const
Definition: fft_settings.h:78
static void estimatePSD(const MultidimArray< T > &micrograph, float overlap, const Dimensions &tileDim, MultidimArray< T > &psd, unsigned fftThreads, bool normalize)
static std::vector< Rectangle< Point2D< size_t > > > getPatchesLocation(const std::pair< size_t, size_t > &borders, const Dimensions &micrograph, const Dimensions &patch, float overlap)