27 #ifndef _CORE__XmippFFTW_H 28 #define _CORE__XmippFFTW_H 125 if(fftw_init_threads()==0)
127 fftw_plan_with_nthreads(nthreads);
145 fftw_plan_with_nthreads(nthreads);
154 fftw_cleanup_threads();
165 template <
typename T,
typename T1>
197 template <
typename T,
typename T1>
206 template <
typename T>
214 template <
typename T>
222 template <
typename T>
225 V.resizeNoCopy(fFourier);
233 template <
typename T>
236 V.resizeNoCopy(*fReal);
238 if (
ZSIZE(*fReal)==1)
241 if (
YSIZE(*fReal)==1)
244 double *ptrSource=NULL;
245 double *ptrDest=NULL;
256 *(ptrDest+1)=*(ptrSource+1);
262 *(ptrDest+1)=-(*(ptrSource+1));
274 *(ptrDest+1)=*(ptrSource+1);
282 *(ptrDest+1)=-(*(ptrSource+1));
294 *(ptrDest+1)=*(ptrSource+1);
303 *(ptrDest+1)=-(*(ptrSource+1));
314 template <
typename T,
typename T1>
325 template <
typename T>
329 if (
ZSIZE(*fReal)==1)
332 if (
YSIZE(*fReal)==1)
418 normSign = _normSign;
451 template <
typename T>
454 Img.checkDimension(1);
463 double dSize=
XSIZE(Img);
467 double &realPart=*ptr;
468 double &imagPart=*(ptr+1);
469 realPart=dSize*(realPart*realPart+imagPart*imagPart);
487 template <
typename T>
492 m1.checkDimension(2);
493 m2.checkDimension(2);
503 double dSize=
XSIZE(m1);
505 FFT1(
i) *= dSize *
conj(FFT2(
i));
537 v1.checkDimension(1);
538 v2.checkDimension(1);
593 template <
typename T>
607 double &realPart=*ptr;
608 double &imagPart=*(ptr+1);
609 realPart=dSize*(realPart*realPart+imagPart*imagPart);
636 double sampling_rate,
643 bool doRfactor =
false,
645 double maxFreq = 0.5,
646 double * rFactor= NULL);
668 #define POWER_SPECTRUM 0 669 #define AMPLITUDE_SPECTRUM 1 685 bool leave_origin_intact=
false);
693 bool leave_origin_intact=
false);
702 bool leave_origin_intact=
false);
712 bool leave_origin_intact=
false);
void FFT_phase(const MultidimArray< std::complex< double > > &v, MultidimArray< double > &phase)
void adaptSpectrum(MultidimArray< double > &Min, MultidimArray< double > &Mout, const MultidimArray< double > &spectrum_ref, int spectrum_type=AMPLITUDE_SPECTRUM, bool leave_origin_intact=false)
alglib::complex conj(const alglib::complex &z)
#define REPORT_ERROR(nerr, ErrormMsg)
void auto_correlation_matrix(const MultidimArray< T > &Img, MultidimArray< double > &R)
#define FOR_ALL_DIRECT_ELEMENTS_IN_ARRAY2D(m)
#define DIRECT_A2D_ELEM(v, i, j)
void correlation_matrix(const MultidimArray< double > &m1, const MultidimArray< double > &m2, MultidimArray< double > &R, CorrelationAux &aux, bool center=true)
#define MULTIDIM_ARRAY(v)
void auto_correlation_vector(const MultidimArray< T > &Img, MultidimArray< double > &R)
void frc_dpr(MultidimArray< double > &m1, MultidimArray< double > &m2, double sampling_rate, MultidimArray< double > &freq, MultidimArray< double > &frc, MultidimArray< double > &frc_noise, MultidimArray< double > &dpr, MultidimArray< double > &error_l2, bool skipdpr=false, bool doRfactor=false, double minFreq=-1, double maxFreq=0.5, double *rFactor=NULL)
void correlation_vector(const MultidimArray< T > &m1, const MultidimArray< T > &m2, MultidimArray< double > &R)
#define FOR_ALL_DIRECT_ELEMENTS_IN_ARRAY3D(V)
void convolutionFFTStack(const MultidimArray< double > &img, const MultidimArray< double > &kernel, MultidimArray< double > &result)
#define FOR_ALL_DIRECT_ELEMENTS_IN_ARRAY1D(v)
ql0001_ & k(htemp+1),(cvec+1),(atemp+1),(bj+1),(bl+1),(bu+1),(x+1),(clamda+1), &iout, infoqp, &zero,(w+1), &lenw,(iw+1), &leniw, &glob_grd.epsmac
void getSpectrum(MultidimArray< double > &Min, MultidimArray< double > &spectrum, int spectrum_type=AMPLITUDE_SPECTRUM)
void CenterFFT(MultidimArray< T > &v, bool forward)
#define DIRECT_A1D_ELEM(v, i)
void correlation_vector_no_Fourier(const MultidimArray< T > &v1, const MultidimArray< T > &v2, MultidimArray< T > &result)
void multiplyBySpectrum(MultidimArray< double > &Min, MultidimArray< double > &spectrum, bool leave_origin_intact=false)
#define FOR_ALL_DIRECT_ELEMENTS_IN_MULTIDIMARRAY(v)
void fast_correlation_vector(const MultidimArray< std::complex< double > > &FFT1, const MultidimArray< std::complex< double > > &FFT2, MultidimArray< double > &R, FourierTransformer &transformer)
#define DIRECT_MULTIDIM_ELEM(v, n)
void selfScaleToSizeFourier(int Zdim, int Ydim, int Xdim, MultidimArray< double > &mda, int nthreads=1)
void convolutionFFT(MultidimArray< double > &img, MultidimArray< double > &kernel, MultidimArray< double > &result)
void scaleToSizeFourier(int Zdim, int Ydim, int Xdim, MultidimArray< double > &mdaIn, MultidimArray< double > &mdaOut, int nThreads=1)
void alias(const MultidimArray< T > &m)
#define DIRECT_A3D_ELEM(v, k, i, j)
Threads cannot be initiated.
void randomizePhases(MultidimArray< double > &Min, double wRandom)
#define FOR_ALL_ELEMENTS_IN_ARRAY1D(v)
void radial_magnitude(const MultidimArray< double > &v, MultidimArray< std::complex< double > > &V, MultidimArray< double > &radialMagnitude)
void whitenSpectrum(MultidimArray< double > &Min, MultidimArray< double > &Mout, int spectrum_type=AMPLITUDE_SPECTRUM, bool leave_origin_intact=false)
MultidimArray< std::complex< double > > FFT2
#define AMPLITUDE_SPECTRUM
void initZeros(const MultidimArray< T1 > &op)
FourierTransformer transformer2
void FFT_magnitude(const MultidimArray< std::complex< double > > &v, MultidimArray< double > &mag)
void divideBySpectrum(MultidimArray< double > &Min, MultidimArray< double > &spectrum, bool leave_origin_intact=false)
#define intWRAP(x, x0, xF)