46 <<
"Input file: " <<
fnIn << std::endl
47 <<
"Output rootname: " <<
fnRoot << std::endl
49 <<
"Phase flipped: " <<
isFlipped << std::endl
52 std::cout <<
"Apply Wiener filter only beyond: " <<
minFreq << std::endl;
59 addUsageLine(
"+The program combines a set of volumes, each one with its one CTF and produces a deconvolved Wiener volume");
61 addParamsLine(
" -i <metadataFile> : Metadata with the volumes, ctfs, number of images in that group");
62 addParamsLine(
" :+The metadata labels are _image, _CTFModel, _class_count");
64 addParamsLine(
" :+oroot+_deconvolved.vol contains the combination of all volumes");
65 addParamsLine(
" :+oroot+_ctffiltered_group01.vol contains each volume obtained after filtering the deconvolved one");
66 addParamsLine(
" :+With verbose==2: oroot+_wien01.txt contains the Wiener filters in Fourier");
67 addParamsLine(
" [--minFreq <Ang=-1>] : Apply Wiener filter only beyond this resolution (in Angstrom)");
68 addParamsLine(
" [--phase_flipped] : Use this if the maps were reconstructed from phase corrected images ");
69 addParamsLine(
" [--wienerConstant <K=0.05>] : Wiener constant (to be multiplied by the total number of images) ");
70 addExampleLine(
"xmipp_ctf_correct_wiener3d -i ctf_correct3d.xmd --oroot volumeCorrected");
71 addExampleLine(
"In the following link you can find an example of input file:",
false);
73 addExampleLine(
"http://sourceforge.net/p/testxmipp/code/ci/master/tree/input/ctf_correct3d.xmd?format=raw",
false);
104 double stepsize = maxres / (
double)nr_steps;
109 for (
size_t step=0; step < nr_steps; step++)
116 A1D_ELEM(CTF1D,step)=fabs(CTF1D(step));
130 double tot_nr_imgs = 0;
148 size_t NumberOfImages;
150 tot_nr_imgs += NumberOfImages;
158 A1D_ELEM(sumterm,
i) += NumberOfImages * CTF1Di * CTF1Di;
166 double maxwien=0, minwien=1e38;
170 size_t NumberOfImages;
173 CTF1D*=NumberOfImages;
181 fn_tmp =
fnRoot +
"_wien";
182 fn_tmp.
compose(fn_tmp, ii+1,
"txt");
183 fh.open(fn_tmp.c_str(), std::ios::out);
186 for (
size_t step = 0; step < nr_steps; step++)
188 res = (step *
sqrt(3.) ) /
191 fh << res <<
" " <<
Vwien1D[ii](step) <<
" " <<
Vctfs1D[ii](step) <<
"\n";
199 std::cerr <<
" ---------------------------------------------------"<<std::endl;
200 std::cerr <<
" + Number of defocus groups = "<<
ctfdat.
size()<<std::endl;
201 std::cerr <<
" + Total number of images = "<<tot_nr_imgs<<std::endl;
202 std::cerr <<
" + Normalized Wiener constant = "<<tot_nr_imgs*wienerConstant<<std::endl;
203 std::cerr <<
" + Minimum Wiener filter value = "<<minwien<<std::endl;
204 std::cerr <<
" + Maximum Wiener filter value = "<<maxwien<<std::endl;
205 std::cerr <<
" ---------------------------------------------------"<<std::endl;
237 YY(freq)*
YY(freq)*Ydim2+
238 ZZ(freq)*
ZZ(freq)*Zdim2));
246 fnVol=
fnRoot+
"_deconvolved.vol";
263 YY(freq)*
YY(freq)*Ydim2+
264 ZZ(freq)*
ZZ(freq)*Zdim2));
269 fnVol=
fnRoot+
"_ctffiltered_group";
void generateWienerFilters()
double getDoubleParam(const char *param, int arg=0)
#define REPORT_ERROR(nerr, ErrormMsg)
void generateCTF1D(const FileName &fnCTF, size_t nr_steps, MultidimArray< double > &CTF1D)
void resizeNoCopy(const MultidimArray< T1 > &v)
void sqrt(Image< double > &op)
Couldn't write to file.
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)
void compose(const String &str, const size_t no, const String &ext="")
FileName fnIn
Metadata with volume, ctf and number of images in that volume.
std::vector< MultidimArray< double > > Vctfs1D
The 3D CTFs and Wiener filters.
double minFreq
Low resolution cutoff to apply Wiener filter.
double wienerConstant
Wiener filter constant.
void InverseFourierTransform(const MultidimArray< std::complex< double > > &in, MultidimArray< double > &out)
bool isFlipped
Flag for phase flipped images.
void FFT_idx2digfreq(T &v, const Matrix1D< int > &idx, Matrix1D< double > &freq)
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 read(const FileName &fn, bool disable_if_not_K=true)
#define A3D_ELEM(V, k, i, j)
#define FOR_ALL_ELEMENTS_IN_ARRAY3D(V)
FileName fnRoot
Rootname for output files.
const char * getParam(const char *param, int arg=0)
double getValueAt(bool show=false) const
Compute CTF at (U,V). Continuous frequencies.
double Tm
Sampling rate (A/pixel)
void addExampleLine(const char *example, bool verbatim=true)
FourierFilter ctf
Side Info: CTF.
void precomputeValues(double X, double Y)
Precompute values for a given frequency.
int verbose
Verbosity level.
void FourierTransform(const MultidimArray< double > &in, MultidimArray< std::complex< double > > &out)
#define FOR_ALL_ELEMENTS_IN_ARRAY1D(v)
void produceSideInfo()
Produce Side information.
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)
void addUsageLine(const char *line, bool verbatim=false)
void initZeros(const MultidimArray< T1 > &op)
bool enable_CTFnoise
Enable CTFnoise part.
MetaDataVec ctfdat
Side Info: ctfdat.
size_t Zdim
Dimensions of the volumes.
void addParamsLine(const String &line)
void getDimensions(size_t &Xdim, size_t &Ydim, size_t &Zdim, size_t &Ndim) const
std::vector< MultidimArray< double > > Vwien1D