46 int R2 = (
k*
k +
i*
i +
j*
j);
52 radius =
sqrt(radius);
53 std::cout <<
" " << std::endl;
54 std::cout <<
"The protein has a radius of "<< radius <<
" px " << std::endl;
71 radiuslimit =
XSIZE(inputmap)/2;
73 double last_std2=1e-38;
75 for (
int rad = radius; rad<radiuslimit; rad++)
83 sup = (rad + 1)*(rad + 1);
86 double aux =
k*
k +
i*
i +
j*
j;
87 if ( (aux<sup) && (aux>=inf) )
96 double std2 = sum2/N - mean*mean;
98 if (std2/last_std2<0.01)
100 radiuslimit = rad - 1;
104 last_mean = mean, last_std2 = std2;
107 std::cout <<
"There is no noise beyond a radius of " << radiuslimit <<
" px " << std::endl;
108 std::cout <<
"Regions with a radius greater than " << radiuslimit <<
" px will not be considered" << std::endl;
110 double raux = (radiuslimit - rsmooth);
113 std::cout <<
"Warning: the boxsize is very close to " 114 "the protein size please provide a greater box" << std::endl;
121 double aux =
k*
k +
i*
i +
j*
j;
138 for(
size_t k=1;
k<dimarrayFourier; ++
k){
174 for(
size_t k=0;
k<
ZSIZE(myfftV); ++
k)
178 for(
size_t i=0;
i<
YSIZE(myfftV); ++
i)
183 for(
size_t j=0;
j<
XSIZE(myfftV); ++
j)
188 if ((
k != 0) || (
i != 0) || (
j != 0))
213 double &resolution,
double &last_resolution,
214 double &freq,
double &freqL,
215 int &last_fourier_idx,
217 bool &continueIter,
bool &breakIter,
221 resolution = maxRes - count_res*step;
223 freq = sampling/resolution;
227 double aux_frequency;
234 freq = aux_frequency;
236 if (fourier_idx == last_fourier_idx)
242 last_fourier_idx = fourier_idx;
243 resolution = sampling/aux_frequency;
247 last_resolution = resolution;
250 if (resolution<Nyquist)
256 freqL = sampling/(resolution + step);
262 if (fourier_idx_2 == fourier_idx)
264 if (fourier_idx > 0){
268 freqL = sampling/(resolution + step);
295 fftVRiesz.initZeros(myfftV);
296 fftVRiesz_aux.initZeros(myfftV);
297 std::complex<double> J(0,1);
301 double ideltal=
PI/(freq-freqH);
303 for(
size_t k=0;
k<
ZSIZE(myfftV); ++
k)
305 for(
size_t i=0;
i<
YSIZE(myfftV); ++
i)
307 for(
size_t j=0;
j<
XSIZE(myfftV); ++
j)
311 if (freqH<=un && un<=freq)
338 for(
size_t k=0;
k<
ZSIZE(myfftV); ++
k)
340 for(
size_t i=0;
i<
YSIZE(myfftV); ++
i)
342 for(
size_t j=0;
j<
XSIZE(myfftV); ++
j)
360 for(
size_t k=0;
k<
ZSIZE(myfftV); ++
k)
363 for(
size_t i=0;
i<
YSIZE(myfftV); ++
i)
366 for(
size_t j=0;
j<
XSIZE(myfftV); ++
j)
390 double raised_w =
PI/(freqL-freq);
395 if (freqL>=un && un>=freq)
427 double &meanN,
double &sdN2,
double &significance,
double &thr95,
double &NS,
double &NN)
435 std::vector<double> noiseValues;
442 sumS += amplitudeValue;
443 sumS2 += amplitudeValue*amplitudeValue;
449 noiseValues.push_back(amplitudeValueN);
450 sumN += amplitudeValueN;
451 sumN2 += amplitudeValueN*amplitudeValueN;
456 std::sort(noiseValues.begin(),noiseValues.end());
457 thr95 = noiseValues[size_t(noiseValues.size()*significance)];
460 sdS2 = sumS2/NS - meanS*meanS;
461 sdN2 = sumN2/NN - meanN*meanN;
472 double &meanN,
double &sdN2,
double &significance,
double &thr95,
double &NS,
double &NN)
481 std::vector<double> noiseValues;
488 sumS += amplitudeValue;
489 sumS2 += amplitudeValue*amplitudeValue;
495 noiseValues.push_back(amplitudeValueN);
496 sumN += amplitudeValueN;
497 sumN2 += amplitudeValueN*amplitudeValueN;
502 std::sort(noiseValues.begin(),noiseValues.end());
503 thr95 = noiseValues[size_t(noiseValues.size()*significance)];
506 sdS2 = sumS2/NS - meanS*meanS;
507 sdN2 = sumN2/NN - meanN*meanN;
520 double thresholdNoise,
double resolution,
double resolution_2)
550 double thresholdNoise,
double resolution,
double resolution_2)
582 iu =
fourierFreqs_3D(myfftV, amplitude, freq_fourier_x, freq_fourier_y, freq_fourier_z);
589 std::complex<double> J(0,1);
616 for(
size_t k=0;
k<
ZSIZE(myfftV); ++
k)
618 for(
size_t i=0;
i<
YSIZE(myfftV); ++
i)
620 for(
size_t j=0;
j<
XSIZE(myfftV); ++
j)
635 for(
size_t k=0;
k<
ZSIZE(myfftV); ++
k)
638 for(
size_t i=0;
i<
YSIZE(myfftV); ++
i)
641 for(
size_t j=0;
j<
XSIZE(myfftV); ++
j)
669 std::random_device rd;
670 std::default_random_engine generator(rd());
671 std::normal_distribution<double> dist(mean, stddev);
698 for(
int k=0;
k<zdim; ++
k)
702 for(
int i=0;
i<ydim; ++
i)
707 for(
int j=0;
j<xdim; ++
j)
void resizeNoCopy(const MultidimArray< T1 > &v)
void sqrt(Image< double > &op)
void write(const FileName &name="", size_t select_img=ALL_IMAGES, bool isStack=false, int mode=WRITE_OVERWRITE, CastWriteMode castMode=CW_CAST, int _swapWrite=0)
double icdf_gauss(double p)
void statisticsInOutBinaryMask2(const MultidimArray< double > &volS, MultidimArray< int > &mask, double &meanS, double &sdS2, double &meanN, double &sdN2, double &significance, double &thr95, double &NS, double &NN)
void findCliffValue(MultidimArray< double > &inputmap, int &radius, int &radiuslimit, MultidimArray< int > &mask, double rsmooth)
void statisticsInBinaryMask2(const MultidimArray< double > &volS, const MultidimArray< double > &volN, MultidimArray< int > &mask, double &meanS, double &sdS2, double &meanN, double &sdN2, double &significance, double &thr95, double &NS, double &NN)
void resolution2eval(int &count_res, double step, double &resolution, double &last_resolution, double &freq, double &freqL, int &last_fourier_idx, int &volsize, bool &continueIter, bool &breakIter, double &sampling, double &maxRes)
#define DIGFREQ2FFT_IDX(freq, size, idx)
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 A3D_ELEM(V, k, i, j)
#define FOR_ALL_ELEMENTS_IN_ARRAY3D(V)
void setLocalResolutionHalfMaps(const MultidimArray< double > &litudeMS, MultidimArray< int > &pMask, MultidimArray< double > &plocalResolutionMap, double thresholdNoise, double resolution, double resolution_2)
#define FOR_ALL_DIRECT_ELEMENTS_IN_MULTIDIMARRAY(v)
MultidimArray< double > fourierFreqs_3D(const MultidimArray< std::complex< double > > &myfftV, const MultidimArray< double > &inputVol, Matrix1D< double > &freq_fourier_x, Matrix1D< double > &freq_fourier_y, Matrix1D< double > &freq_fourier_z)
Matrix1D< double > fourierFreqVector(size_t dimarrayFourier, size_t dimarrayReal)
#define DIRECT_MULTIDIM_ELEM(v, n)
void sort(struct DCEL_T *dcel)
void amplitudeMonoSig3D_LPF(const MultidimArray< std::complex< double > > &myfftV, FourierTransformer &transformer_inv, MultidimArray< std::complex< double > > &fftVRiesz, MultidimArray< std::complex< double > > &fftVRiesz_aux, MultidimArray< double > &VRiesz, double freq, double freqH, double freqL, MultidimArray< double > &iu, Matrix1D< double > &freq_fourier_x, Matrix1D< double > &freq_fourier_y, Matrix1D< double > &freq_fourier_z, MultidimArray< double > &litude, int count, FileName fnDebug)
__device__ float FFT_IDX2DIGFREQ(int idx, int size)
void monogenicAmplitude_3D_Fourier(const MultidimArray< std::complex< double > > &myfftV, MultidimArray< double > &iu, MultidimArray< double > &litude, int numberOfThreads)
void proteinRadiusVolumeAndShellStatistics(const MultidimArray< int > &mask, int &radius, long &vol)
MultidimArray< double > createDataTest(size_t xdim, size_t ydim, size_t zdim, double wavelength)
String formatString(const char *format,...)
void setLocalResolutionMap(const MultidimArray< double > &litudeMS, MultidimArray< int > &pMask, MultidimArray< double > &plocalResolutionMap, double thresholdNoise, double resolution, double resolution_2)
void initZeros(const MultidimArray< T1 > &op)
void addNoise(MultidimArray< double > &vol, double mean, double stddev)