/usr/include/purify/FFTOperator.h is in libpurify-dev 2.0.0-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | #ifndef PURIFY_FFT_OPERATOR_H
#define PURIFY_FFT_OPERATOR_H
#include "purify/config.h"
#include "purify/types.h"
#ifdef PURIFY_OPENMP
#include <omp.h>
#endif
#include <fftw3.h>
#include <unsupported/Eigen/FFT>
#include <unsupported/Eigen/src/FFT/ei_fftw_impl.h>
namespace purify {
//! This does something
class Fft2d {
private:
//! Performs fftshift on vector
Vector<t_complex> fftshift_1d(const Vector<t_complex> input);
//! Performs ifftshift on vector
Vector<t_complex> ifftshift_1d(const Vector<t_complex> input);
public:
//! Uses Eigen's 1D FFT to perform 2D FFT
Matrix<t_complex> forward(const Matrix<t_complex> &input);
//! Uses Eigen's 1D IFFT to perform 2D IFFT
Matrix<t_complex> inverse(const Matrix<t_complex> &input);
//! Performs fftshift on 2d matrix
Matrix<t_complex> shift(const Matrix<t_complex> &input);
//! Performs ifftshift on 2d matrix
Matrix<t_complex> ishift(const Matrix<t_complex> &input);
};
class FFTOperator : protected Eigen::FFT<t_real, Eigen::internal::fftw_impl<t_real>> {
public:
//! Uses Eigen's perform 2D FFT
Matrix<t_complex> forward(const Matrix<t_complex> &input, bool only_plan = false);
//! Uses Eigen's perform 2D IFFT
Matrix<t_complex> inverse(const Matrix<t_complex> &input, bool only_plan = false);
//! Set up multithread fft
void set_up_multithread();
//! Set up plan
void init_plan(const Matrix<t_complex> &input);
protected:
t_int fftw_flag_ = (FFTW_ESTIMATE | FFTW_PRESERVE_INPUT);
public:
t_int const &fftw_flag() { return fftw_flag_; };
FFTOperator &fftw_flag(t_int const &fftw_flag) {
fftw_flag_ = fftw_flag;
return *this;
}
};
}
#endif
|