62 addUsageLine(
"This function determines the local resolution of a map");
64 addParamsLine(
" --mask <vol_file=\"\"> : Mask defining the macromolecule");
65 addParamsLine(
" -o <output=\"MGresolution.vol\"> : Local resolution volume (in Angstroms)");
66 addParamsLine(
" [--sampling_rate <s=1>] : Sampling rate (A/px)");
67 addParamsLine(
" [--resStep <s=0.5>] : Resolution step (precision) in A");
68 addParamsLine(
" [--volumeRadius <s=100>] : This parameter determines the radius of a sphere where the volume is");
69 addParamsLine(
" [--significance <s=0.95>] : The level of confidence for the hypothesis test.");
70 addParamsLine(
" --radialRes <vol_file=\"\"> : Output radial resolution map");
71 addParamsLine(
" --azimuthalRes <vol_file=\"\"> : Output azimuthal resolution map");
72 addParamsLine(
" --highestResolutionVol <vol_file=\"\"> : Output highest resolution map");
73 addParamsLine(
" --lowestResolutionVol <vol_file=\"\"> : Output lowest resolution map");
76 addParamsLine(
" --radialAzimuthalThresholds <vol_file=\"\"> : Radial and azimuthal threshold for representation resolution maps");
77 addParamsLine(
" --radialAvG <md_file=\"\"> : Radial Average of higesht, lowest, azimuthal, and radial, and local resolution map");
78 addParamsLine(
" --monores <vol_file=\"\"> : Local resolution map");
79 addParamsLine(
" --prefMin <vol_file=\"\"> : Metadata of highest resolution per direction");
81 addParamsLine(
" --zScoremap <vol_file=\"\"> : Local zScore map, voxel with zscore higher than 3 are weird");
88 std::cout <<
"Starting..." << std::endl;
96 std::cout <<
"Obtaining angular projections..." << std::endl;
113 double uz, uy, ux, uz2, u2, uz2y2;
130 if ((
k != 0) || (
i != 0) || (
j != 0))
145 mask().setXmippOrigin();
149 std::cout <<
"Error: a mask ought to be provided" << std::endl;
160 if ((
k*
k +
i*
i +
j*
j)>radius)
161 radius =
k*
k +
i*
i + j*
j;
171 std::cout <<
"particle radius = " <<
Rparticle << std::endl;
178 std::cout <<
"-------------DEBUG-----------" <<std::endl;
179 std::cout <<
"Next number ought to be the same than number of directions" 181 std::cout <<
"number of angles" << xrows << std::endl;
182 std::cout <<
"---------END-DEBUG--------" <<std::endl;
187 int size =
ZSIZE(inputVol);
197 for(
size_t k=1;
k<size_fourier; ++
k)
354 std::complex<double> J(0,1);
358 double ideltal=
PI/(freq-freqH);
360 for(
size_t k=0;
k<
ZSIZE(myfftV); ++
k)
362 for(
size_t i=0;
i<
YSIZE(myfftV); ++
i)
364 for(
size_t j=0;
j<
XSIZE(myfftV); ++
j)
369 if (freqH<=un && un<=freq)
419 for(
size_t k=0;
k<
ZSIZE(myfftV); ++
k)
421 for(
size_t i=0;
i<
YSIZE(myfftV); ++
i)
423 for(
size_t j=0;
j<
XSIZE(myfftV); ++
j)
442 for(
size_t k=0;
k<
ZSIZE(myfftV); ++
k)
445 for(
size_t i=0;
i<
YSIZE(myfftV); ++
i)
448 for(
size_t j=0;
j<
XSIZE(myfftV); ++
j)
466 int z_size =
ZSIZE(amplitude);
467 int siz = z_size*0.5;
471 for(
int k=0;
k<z_size; ++
k)
475 for(
int i=0;
i<z_size; ++
i)
479 for(
int j=0;
j<z_size; ++
j)
485 double radius =
sqrt(ux + uy + uz);
486 if ((radius>=limit_radius) && (radius<=siz))
511 double raised_w =
PI/(freqL-freq);
517 if (freqL>=un && un>=freq)
559 double x_dir, y_dir, z_dir;
561 x_dir = sin(tilt*
PI/180)*cos(rot*
PI/180);
562 y_dir = sin(tilt*
PI/180)*sin(rot*
PI/180);
563 z_dir = cos(tilt*
PI/180);
566 double ang_con = 15*
PI/180;
570 for(
size_t k=0;
k<
ZSIZE(myfftV); ++
k)
574 for(
size_t i=0;
i<
YSIZE(myfftV); ++
i)
578 for(
size_t j=0;
j<
XSIZE(myfftV); ++
j)
586 iun *= (ux + uy + uz);
587 double acosine = acos(fabs(iun));
625 double &resolution,
double &last_resolution,
626 int &last_fourier_idx,
627 double &freq,
double &freqL,
double &freqH,
628 bool &continueIter,
bool &breakIter,
bool &doNextIteration)
642 if ( fabs(resolution - last_resolution)<min_step )
644 freq =
sampling/(last_resolution-min_step);
648 if (fourier_idx == last_fourier_idx)
657 last_resolution = resolution;
659 double step = 0.05*resolution;
661 double resolution_L, resolution_H;
663 if ( step < min_step)
665 resolution_L = resolution - min_step;
666 resolution_H = resolution + min_step;
670 resolution_L = 0.95*resolution;
671 resolution_H = 1.05*resolution;
677 if (freqH>0.5 || freqH<0)
680 if (freqL>0.5 || freqL<0)
682 int fourier_idx_H, fourier_idx_L;
687 if (fourier_idx_H == fourier_idx)
688 fourier_idx_H = fourier_idx - 1;
690 if (fourier_idx_L == fourier_idx)
691 fourier_idx_L = fourier_idx + 1;
699 if (freq>0.49 || freq<0)
701 std::cout <<
"Nyquist limit reached" << std::endl;
703 doNextIteration =
false;
709 doNextIteration =
true;
714 last_fourier_idx = fourier_idx;
721 std::cout <<
"Removing outliers..." << std::endl;
723 double x1, y1, z1, x2, y2, z2,
distance, resolution, sigma,
724 rot, tilt,
threshold, sigma2, lastMinDistance;
725 double meandistance = 0, distance_2 = 0;
726 int numberdirections =
angles.
mdimx, N=0, count = 0;
729 double threshold_gauss;
744 neigbour_dir.
initZeros(numberdirections, 2);
746 for (
int i = 0;
i<numberdirections; ++
i)
761 for (
int j = 0;
j<numberdirections; ++
j)
771 distance = (180/
PI)*acos(x1*x2 + y1*y2 + z1*z2);
778 distance =
sqrt( (resi*x1-x2)*(resi*x1-x2) + (resi*y1-y2)*(resi*y1-y2) + (resi*z1-z2)*(resi*z1-z2) );
792 double thresholdDirection;
794 meandistance= meandistance/counter;
795 sigma = sigma/counter - meandistance*meandistance;
799 threshold_gauss = meandistance + criticalZ*
sqrt(sigma);
805 for (
int i = 0;
i<numberdirections; ++
i)
812 if ((meandistance>threshold_gauss) ||
MAT_ELEM(neigbour_dir,
i, 0) <= 1)
832 std::cout <<
"FITTIG" << std::endl;
833 double x,
y,
z,
a,
b,
c, resolution, rot, tilt;
835 std::vector<double> list_distances;
858 for (
int i = 0;
i<numberdirections; ++
i)
866 for (
int i = 0;
i<numberdirections; ++
i)
879 MAT_ELEM(ellipMat, mycounter, 3) = 2*x*
y;
880 MAT_ELEM(ellipMat, mycounter, 4) = 2*x*
z;
881 MAT_ELEM(ellipMat, mycounter, 5) = 2*y*
z;
887 ellipMat.
inv(pseudoinv);
890 leastSquares = pseudoinv*onesVector;
893 residuals = ellipMat*leastSquares - onesVector;
894 residualssorted = residuals.
sort();
900 size_t ellipsoidcounter = 0;
901 for (
int i = 0;
i<numberdirections; ++
i)
907 if ( (
VEC_ELEM(residuals, mycounter) > threshold_plus) ||
908 (
VEC_ELEM(residuals, mycounter) < threshold_minus) )
922 for (
int i = 0;
i<numberdirections; ++
i)
941 MAT_ELEM(ellipMat, mycounter, 3) = 2*x*
y;
942 MAT_ELEM(ellipMat, mycounter, 4) = 2*x*
z;
943 MAT_ELEM(ellipMat, mycounter, 5) = 2*y*
z;
950 ellipMat.
inv(pseudoinv);
952 onesVector.initConstant(mycounter, 1.0);
953 leastSquares = pseudoinv*onesVector;
1015 double u_inf, u_sup,
u;
1023 int siz =
XSIZE(inputVol_1);
1039 std_mean_Radial_4, std_mean_Radial_5;
1041 std_mean_Radial_1.
initZeros(2, (
size_t) siz*0.5 + 1);
1042 std_mean_Radial_2.
initZeros(2, (
size_t) siz*0.5 + 1);
1043 std_mean_Radial_3.
initZeros(2, (
size_t) siz*0.5 + 1);
1044 std_mean_Radial_4.
initZeros(2, (
size_t) siz*0.5 + 1);
1045 std_mean_Radial_5.
initZeros(2, (
size_t) siz*0.5 + 1);
1047 for(
size_t kk=1; kk<siz*0.5; ++kk)
1049 double cum_mean_1 = 0;
1050 double cum_mean_2 = 0;
1051 double cum_mean_3 = 0;
1052 double cum_mean_4 = 0;
1053 double cum_mean_5 = 0;
1055 double cum2_mean_1 = 0;
1056 double cum2_mean_2 = 0;
1057 double cum2_mean_3 = 0;
1058 double cum2_mean_4 = 0;
1059 double cum2_mean_5 = 0;
1070 if ((u<u_sup) && (u>=u_inf))
1075 cum2_mean_1 += aux*aux;
1078 cum2_mean_2 += aux*aux;
1081 cum2_mean_3 += aux*aux;
1084 cum2_mean_4 += aux*aux;
1087 cum2_mean_5 += aux*aux;
1094 double sigma1, sigma2, sigma3, sigma4, sigma5;
1109 if ((cum_mean_1>0) || (cum_mean_2>0) || (cum_mean_3>0) || (cum_mean_4>0) || (cum_mean_5>0))
1112 cum_mean_1 = (cum_mean_1/N);
1113 cum_mean_2 = (cum_mean_2/N);
1114 cum_mean_3 = (cum_mean_3/N);
1115 cum_mean_4 = (cum_mean_4/N);
1116 cum_mean_5 = (cum_mean_5/N);
1118 MAT_ELEM(std_mean_Radial_1,1, kk) = cum_mean_1;
1119 MAT_ELEM(std_mean_Radial_2,1, kk) = cum_mean_2;
1120 MAT_ELEM(std_mean_Radial_3,1, kk) = cum_mean_3;
1121 MAT_ELEM(std_mean_Radial_4,1, kk) = cum_mean_4;
1122 MAT_ELEM(std_mean_Radial_5,1, kk) = cum_mean_5;
1131 MAT_ELEM(std_mean_Radial_1,0, kk) =
sqrt(cum2_mean_1/N - cum_mean_1*cum_mean_1);
1132 MAT_ELEM(std_mean_Radial_2,0, kk) =
sqrt(cum2_mean_2/N - cum_mean_2*cum_mean_2);
1133 MAT_ELEM(std_mean_Radial_3,0, kk) =
sqrt(cum2_mean_3/N - cum_mean_3*cum_mean_3);
1134 MAT_ELEM(std_mean_Radial_4,0, kk) =
sqrt(cum2_mean_4/N - cum_mean_4*cum_mean_4+0.001);
1135 MAT_ELEM(std_mean_Radial_5,0, kk) =
sqrt(cum2_mean_5/N - cum_mean_5*cum_mean_5);
1150 if ((u<u_sup) && (u>=u_inf) && (
MAT_ELEM(std_mean_Radial_1,1, kk)>0))
1178 zVolumesave = zVolume;
1191 double &radial_Thr,
double &azimuthal_Thr,
1202 double radial_angle = 45*
PI/180;
1203 double azimuthal_resolution = 0;
1204 double radial_resolution = 0;
1205 double azimuthal_angle = 70*
PI/180;
1206 double resolution, dotproduct,
x,
y,
z,
iu, arcos;
1210 double count_radial = 0.0, count_azimuthal = 0.0;
1225 count_azimuthal = 0;
1226 std::vector<double> ResList;
1228 double lastRes = 100;
1230 for (
int ii = 0; ii<xrows; ++ii)
1232 resolution =
MAT_ELEM(resolutionMat, ii, idx);
1236 ResList.push_back(resolution);
1241 dotproduct = (x*
i + y*
j + z*
k)*iu;
1242 arcos = acos(fabs(dotproduct));
1243 if (arcos>=azimuthal_angle)
1245 count_azimuthal = count_azimuthal + 1;
1246 azimuthal_resolution += resolution;
1248 if (arcos<=radial_angle)
1250 count_radial = count_radial + 1;
1251 radial_resolution += resolution;
1263 std::sort(ResList.begin(),ResList.end());
1265 double Mres, mres, medianResol, res75, res25;
1267 Mres = ResList[ (size_t)
floor(0.95*ResList.size()) ];
1270 mres = ResList[ (size_t)
floor(0.05*ResList.size()) ];
1272 res75 = ResList[ (size_t)
floor(0.83*ResList.size()) ];
1273 res25 = ResList[ (size_t)
floor(0.17*ResList.size()) ];
1277 A3D_ELEM(doaResolution_1,k,
i,
j) = 0.5*(res75 - res25);
1279 A3D_ELEM(doaResolution_2,k,
i,
j) = 0.5*( Mres + mres );
1285 for (
int ii = 0; ii<xrows; ++ii)
1287 resolution =
MAT_ELEM(resolutionMat, ii, idx);
1291 if ((mres>(resolution-0.1)) && (mres<(resolution+0.1)))
1293 VEC_ELEM(PrefferredDirHist,ii) += 1;
1294 VEC_ELEM(resolutionMeanVector,ii) += resolution;
1305 A3D_ELEM(radial,
k,
i,
j) = radial_resolution/count_radial;
1307 if (count_azimuthal<1)
1310 A3D_ELEM(azimuthal,
k,
i,
j) = azimuthal_resolution/count_azimuthal;
1313 azimuthal_resolution = 0;
1314 radial_resolution = 0;
1318 for (
size_t ii = 0; ii<xrows; ++ii)
1322 con = (size_t)
VEC_ELEM(PrefferredDirHist,ii);
1334 meanRes =
VEC_ELEM(resolutionMeanVector,ii)/((double)
VEC_ELEM(PrefferredDirHist,ii));
1345 std::vector<double> radialList, azimuthalList;
1353 azimuthalList.push_back(
A3D_ELEM(azimuthal,
k,
i,
j));
1357 std::sort(radialList.begin(),radialList.end());
1358 std::sort(azimuthalList.begin(),azimuthalList.end());
1360 radial_Thr = radialList[(size_t)
floor(radialList.size()*0.9)];
1361 azimuthal_Thr = azimuthalList[(size_t)
floor(azimuthalList.size()*0.9)];
1370 std::complex<double> J(0,1);
1375 double iwl=1.0/freqH;
1376 double ideltal=
PI/(freq-freqH);
1382 if (freqH<=un && un<=freq)
1401 for(
size_t k=0;
k<
ZSIZE(myfftV); ++
k)
1403 for(
size_t i=0;
i<
YSIZE(myfftV); ++
i)
1405 for(
size_t j=0;
j<
XSIZE(myfftV); ++
j)
1410 if (freqH<=un && un<=freq)
1436 for(
size_t k=0;
k<
ZSIZE(myfftV); ++
k)
1438 for(
size_t i=0;
i<
YSIZE(myfftV); ++
i)
1441 for(
size_t j=0;
j<
XSIZE(myfftV); ++
j)
1445 if (freqH<=un && un<=freq)
1470 for(
size_t k=0;
k<
ZSIZE(myfftV); ++
k)
1473 for(
size_t i=0;
i<
YSIZE(myfftV); ++
i)
1475 for(
size_t j=0;
j<
XSIZE(myfftV); ++
j)
1479 if (freqH<=un && un<=freq)
1511 lowPassFilter.
w1 = freq;
1515 double sumS=0, sumS2=0, sumN=0, sumN2=0, NN = 0, NS = 0;
1522 sumN += amplitudeValue;
1523 sumN2 += amplitudeValue*amplitudeValue;
1528 double mean_noise = sumN/NN;
1536 bool continueIter =
false, breakIter =
false;
1542 std::cout <<
"Analyzing directions " << std::endl;
1573 std::cout <<
"N_directions = " <<
N_directions << std::endl;
1575 double cone_angle = 45.0;
1576 cone_angle =
PI*cone_angle/180;
1584 outputResolution().initZeros(
VRiesz);
1586 double freq, freqL, freqH, counter, resolution_2;
1589 std::vector<double> list;
1592 double max_meanS = -1e38;
1593 double cut_value = 0.025;
1595 bool doNextIteration=
true;
1597 int fourier_idx, last_fourier_idx = -1,
iter = 0, fourier_idx_2;
1598 fourier_idx = aux_idx;
1605 std::cout <<
"--------------NEW DIRECTION--------------" << std::endl;
1606 std::cout <<
"direction = " << dir+1 <<
" rot = " << rot <<
" tilt = " << tilt << std::endl;
1609 std::vector<float> noiseValues;
1611 double last_resolution = 0;
1617 continueIter =
false;
1622 resolution, last_resolution, last_fourier_idx,
1624 continueIter, breakIter, doNextIteration);
1632 list.push_back(resolution);
1635 resolution_2 = list[0];
1637 resolution_2 = list[
iter - 2];
1643 double sumS=0, sumS2=0, sumN=0, sumN2=0, NN = 0, NS = 0;
1644 noiseValues.clear();
1647 double x_dir = sin(tilt*
PI/180)*cos(rot*
PI/180);
1648 double y_dir = sin(tilt*
PI/180)*sin(rot*
PI/180);
1649 double z_dir = cos(tilt*
PI/180);
1654 int z_size =
ZSIZE(amplitudeMS);
1655 int x_size =
XSIZE(amplitudeMS);
1656 int y_size =
YSIZE(amplitudeMS);
1661 double amplitudeValue;
1663 for(
int k=0;
k<z_size; ++
k)
1665 for(
int i=0;
i<y_size; ++
i)
1667 for(
int j=0;
j<x_size; ++
j)
1674 sumS += amplitudeValue;
1682 uz = (
k - z_size*0.5);
1683 ux = (
j - x_size*0.5);
1684 uy = (
i - y_size*0.5);
1686 double rad =
sqrt(ux*ux + uy*uy + uz*uz);
1690 double dotproduct = (uy*y_dir + ux*x_dir + uz*z_dir)*iun;
1692 double acosine = acos(dotproduct);
1695 if (((acosine<cone_angle) || (acosine>(
PI-cone_angle)) )
1700 noiseValues.push_back((
float) amplitudeValue);
1701 sumN += amplitudeValue;
1702 sumN2 += amplitudeValue*amplitudeValue;
1719 img.
write(iternumber);
1725 std::cout <<
"Search of resolutions stopped due to mask has been completed" << std::endl;
1726 doNextIteration =
false;
1737 std::cout <<
"There are no points to compute inside the mask" << std::endl;
1738 std::cout <<
"If the number of computed frequencies is low, perhaps the provided" 1739 "mask is not enough tight to the volume, in that case please try another mask" << std::endl;
1743 double meanS=sumS/NS;
1745 double meanN=sumN/NN;
1746 double sigma2N=sumN2/NN-meanN*meanN;
1748 if (meanS>max_meanS)
1751 if (meanS<0.001*AvgNoise)
1755 std::cout <<
"Search of resolutions stopped due to too low signal" << std::endl;
1756 std::cout <<
"\n"<< std::endl;
1757 doNextIteration =
false;
1762 double thresholdNoise;
1765 std::sort(noiseValues.begin(),noiseValues.end());
1766 thresholdNoise = (double) noiseValues[
size_t(noiseValues.size()*
significance)];
1769 noiseValues.clear();
1771 std::cout <<
"Iteration = " <<
iter <<
", Resolution= " << resolution <<
", Signal = " << meanS <<
", Noise = " << meanN <<
", Threshold = " << thresholdNoise <<std::endl;
1800 if (doNextIteration)
1801 if (resolution <= (
minRes-0.001))
1802 doNextIteration =
false;
1806 last_resolution = resolution;
1807 }
while(doNextIteration);
1838 std::cout <<
"----------------direction-finished----------------" << std::endl;
1854 double radialThr, azimuthalThr;
1856 lowestResolution, highestResolution, doavol1, doavol2, radialThr, azimuthalThr, prefDir);
1863 imgdoa = lowestResolution;
1865 imgdoa = highestResolution;
1874 objIdx = mdRadialAzimuthalThr.
addObject();
1881 std::cout <<
"Calculating the radial and azimuthal resolution " << std::endl;
1889 monoresVol = monores();
FourierTransformer transformer_inv
void radialAvg(Image< double > &op)
double getDoubleParam(const char *param, int arg=0)
__host__ __device__ float2 floor(const float2 v)
void resizeNoCopy(const MultidimArray< T1 > &v)
void sqrt(Image< double > &op)
void defineCone(MultidimArray< std::complex< double > > &myfftV, MultidimArray< std::complex< double > > &conefilter, double rot, double tilt)
MultidimArray< std::complex< double > > fftVRiesz
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 inv(Matrix2D< T > &result) const
void abs(Image< double > &op)
void radialAzimuthalResolution(Matrix2D< double > &resolutionMat, MultidimArray< int > &pmask, MultidimArray< double > &radial, MultidimArray< double > &azimuthal, MultidimArray< double > &lowestResolution, MultidimArray< double > &highestResolution, MultidimArray< double > &doaResolution_1, MultidimArray< double > &doaResolution_2, double &radial_Thr, double &azimuthal_Thr, MetaDataVec &mdprefDirs)
#define DIGFREQ2FFT_IDX(freq, size, idx)
Matrix2D< double > angles
double firstMonoResEstimation(MultidimArray< std::complex< double > > &myfftV, double w1, double w1l, MultidimArray< double > &litude)
Matrix2D< double > resolutionMatrix
void ellipsoidFitting(Matrix2D< double > &resolutionMat, Matrix2D< double > &axis)
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 radialAverageInMask(MultidimArray< int > &mask, MultidimArray< double > &inputVol_1, MultidimArray< double > &inputVol_2, MultidimArray< double > &inputVol_3, MultidimArray< double > &inputVol_4, MultidimArray< double > &inputVol_5, MetaDataVec &md)
FileName fnLowestResolution
#define MAT_ELEM(m, i, j)
void threshold(double *phi, unsigned long nvox, double limit)
#define A3D_ELEM(V, k, i, j)
void resolution2eval_(int &fourier_idx, double min_step, double &resolution, double &last_resolution, int &last_fourier_idx, double &freq, double &freqL, double &freqH, bool &continueIter, bool &breakIter, bool &doNextIteration)
#define FOR_ALL_ELEMENTS_IN_ARRAY3D(V)
const char * getParam(const char *param, int arg=0)
void amplitudeMonogenicSignal3D_fast(const MultidimArray< std::complex< double > > &myfftV, double w1, double w1l, double wH, MultidimArray< double > &litude, int count, int dir, FileName fnDebug)
#define FOR_ALL_DIRECT_ELEMENTS_IN_MULTIDIMARRAY(v)
void generalizedEigs(const Matrix2D< double > &A, const Matrix2D< double > &B, Matrix1D< double > &D, Matrix2D< double > &P)
#define DIRECT_MULTIDIM_ELEM(v, n)
MultidimArray< double > iu
MultidimArray< double > VRiesz
void sort(struct DCEL_T *dcel)
__device__ float FFT_IDX2DIGFREQ(int idx, int size)
Matrix1D< double > freq_fourier
void diagSymMatrix3x3(Matrix2D< double > A, Matrix1D< double > &eigenvalues, Matrix2D< double > &P)
TYPE distance(struct Point_T *p, struct Point_T *q)
FileName fnHighestResolution
Matrix2D< double > trigProducts
MultidimArray< std::complex< double > > conefilter
String formatString(const char *format,...)
void removeOutliers(Matrix2D< double > &resolutionMat)
MultidimArray< std::complex< double > > fftVRiesz_aux
bool checkParam(const char *param)
int read(const FileName &name, DataMode datamode=DATA, size_t select_img=ALL_IMAGES, bool mapData=false, int mode=WRITE_READONLY)
Matrix2D< double > maskMatrix
Matrix1D< T > sort() const
void addUsageLine(const char *line, bool verbatim=false)
void initZeros(const MultidimArray< T1 > &op)
MultidimArray< std::complex< double > > fftV
int getIntParam(const char *param, int arg=0)
void addParamsLine(const String &line)
void generateGridProjectionMatching(Matrix2D< double > &angles)
void applyMaskSpace(MultidimArray< double > &v)