40 int ldim = (int)(
XSIZE(
in) / 2) + 1;
42 for (
int j = 0;
j < ldim;
j++)
45 else if (
in.getDim() == 2)
49 int ldim = (int)(
YSIZE(
in) / 2) + 1;
53 for (
int j = 0;
j < ldim;
j++)
56 for (
int i = 1;
i < ldim;
i++)
72 out.resizeNoCopy(oridim);
78 else if (
in.getDim() == 2)
81 out.resizeNoCopy(oridim,
XSIZE(
in));
118 out.resizeNoCopy(real);
146 out.resizeNoCopy(in);
158 if (
in.getDim() == 1 )
214 in.checkDimension(1);
235 in.checkDimension(1);
256 in.checkDimension(1);
268 in.checkDimension(1);
273 out.setXmippOrigin();
283 int xsize =
XSIZE(v);
284 int xhalf = xsize / 2;
285 int yhalf =
YSIZE(v) / 2;
287 double * posB = posA + xhalf;
288 double * posC = posA + xsize * yhalf;
289 double * posD = posC + xhalf;
290 double *
buffer=
new double[xhalf];
291 size_t bytes = xhalf *
sizeof(double);
293 for (
int i = 0;
i < yhalf; ++
i,
294 posA += xsize, posB += xsize, posC += xsize, posD += xsize)
308 std::cerr <<
"bad dim: " << v.
getDim() << std::endl;
315 double dotp,
a,
b,
c,
d, ac, bd, ab_cd;
316 double xxshift = xshift / (double)
XSIZE(v);
319 dotp = -2 *
PI * ((double)(
i) * xxshift);
326 ab_cd = (a +
b) * (c + d);
332 double xshift,
double yshift)
335 double dotp,
a,
b,
c,
d, ac, bd, ab_cd;
336 double xxshift = xshift / (double)
XSIZE(v);
337 double yyshift = yshift / (double)
YSIZE(v);
340 dotp = -2 *
PI * ((double)(
j) * xxshift + (double)(
i) * yyshift);
347 ab_cd = (a +
b) * (c + d);
353 double xshift,
double yshift,
double zshift)
356 double dotp,
a,
b,
c,
d, ac, bd, ab_cd;
357 double xxshift = -2 *
PI * xshift / (double)
XSIZE(v);
358 double yyshift = -2 *
PI * yshift / (double)
YSIZE(v);
359 double zzshift = -2 *
PI * zshift / (double)
ZSIZE(v);
362 double zdot=(double)(
k) * zzshift;
365 double zydot=zdot+(double)(
i) * yyshift;
369 dotp = (double)(
j) * xxshift + zydot;
377 ab_cd = (a +
b) * (c + d);
379 *(ptrv_kij+1) = ab_cd - ac - bd;
388 if ( v.getDim() == 1 )
391 double xshift = -(double)(
int)(
XSIZE(v) / 2);
403 else if ( v.getDim() == 2)
407 double xshift = -(double)(
int)(
XSIZE(v) / 2);
408 double yshift = -(double)(
int)(
YSIZE(v) / 2);
420 else if ( v.getDim() == 3)
423 double xshift = -(double)(
int)(
XSIZE(v) / 2);
424 double yshift = -(double)(
int)(
YSIZE(v) / 2);
425 double zshift = -(double)(
int)(
ZSIZE(v) / 2);
428 ShiftFFT(v, xshift, yshift, zshift);
434 ShiftFFT(v, -xshift, -yshift, -zshift);
453 if (pixval > 0 && pixval < min_val)
456 min_val = 10 *
log10(min_val);
478 double min_val = output(0,
XSIZE(output) - 1);
479 double max_val = min_val;
481 int Xdim =
XSIZE(output);
482 int Ydim =
YSIZE(output);
485 if ((i < Ydim / 2 && j >= Xdim / 2) || (
i >= Ydim / 2 &&
j < Xdim / 2))
488 (output(
i,
j) < min_val || first))
489 min_val = output(
i,
j);
491 (output(
i,
j) > max_val || first))
493 max_val = output(
i,
j);
499 min_val = 10 *
log10(min_val);
502 if ((i < Ydim / 2 && j >= Xdim / 2) || (
i >= Ydim / 2 &&
j < Xdim / 2))
507 left(
i,
j) = min_val;
514 if ((i < Ydim / 2 && j >= Xdim / 2) || (
i >= Ydim / 2 &&
j < Xdim / 2))
515 output(
i,
j) = left(
i,
j);
517 output(
i,
j) =
ABS(output(
i,
j));
void FourierTransformHalf(const MultidimArray< double > &in, MultidimArray< std::complex< double > > &out)
template void xmipp2PSD< float >(const MultidimArray< float > &, MultidimArray< float > &, bool)
#define A2D_ELEM(v, i, j)
alglib::complex conj(const alglib::complex &z)
#define REPORT_ERROR(nerr, ErrormMsg)
#define FOR_ALL_DIRECT_ELEMENTS_IN_ARRAY2D(m)
void ShiftFFT(MultidimArray< std::complex< double > > &v, double xshift)
void resizeNoCopy(const MultidimArray< T1 > &v)
#define DIRECT_A2D_ELEM(v, i, j)
void centerFFT2(MultidimArray< double > &v)
#define MULTIDIM_ARRAY(v)
void Whole2Half(const MultidimArray< std::complex< double > > &in, MultidimArray< std::complex< double > > &out)
void InverseFourierTransform(const MultidimArray< std::complex< double > > &in, MultidimArray< double > &out)
#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
#define FOR_ALL_ELEMENTS_IN_ARRAY2D(m)
void CenterFFT(MultidimArray< T > &v, bool forward)
void Half2Whole(const MultidimArray< std::complex< double > > &in, MultidimArray< std::complex< double > > &out, size_t oridim)
#define DIRECT_A1D_ELEM(v, i)
void xmipp2PSD(const MultidimArray< T > &input, MultidimArray< T > &output, bool takeLog)
void RealImag2Complex(const MultidimArray< double > &real, const MultidimArray< double > &imag, MultidimArray< std::complex< double > > &out)
void reject_outliers(T &v, double percentil_out=0.25)
void xmipp2CTF(const MultidimArray< double > &input, MultidimArray< double > &output)
#define XMIPP_EQUAL_ACCURACY
void max(Image< double > &op1, const Image< double > &op2)
void log10(Image< double > &op)
void FourierTransform(const MultidimArray< double > &in, MultidimArray< std::complex< double > > &out)
#define DIRECT_A3D_ELEM(v, k, i, j)
#define SWAP_ARRAY(a, b, n)
Incorrect MultidimArray dimensions.
void Complex2RealImag(const MultidimArray< std::complex< double > > &in, MultidimArray< double > &real, MultidimArray< double > &imag)
void InverseFourierTransformHalf(const MultidimArray< std::complex< double > > &in, MultidimArray< double > &out, int oridim)
template void xmipp2PSD< double >(const MultidimArray< double > &, MultidimArray< double > &, bool)
void CenterOriginFFT(MultidimArray< std::complex< double > > &v, bool forward)