Xmipp  v3.23.11-Nereus
Classes | Functions | Variables
CTF Phase flip in 2D particles
Collaboration diagram for CTF Phase flip in 2D particles:

Classes

class  ProgCorrectPhaseFlip2D
 
class  ProgCorrectWiener2D
 

Functions

void ProgCorrectPhaseFlip2D::readParams ()
 
void ProgCorrectPhaseFlip2D::defineParams ()
 
void ProgCorrectPhaseFlip2D::processImage (const FileName &fnImg, const FileName &fnImgOut, const MDRow &rowIn, MDRow &rowOut)
 
void ProgCorrectWiener2D::readParams ()
 
void ProgCorrectWiener2D::defineParams ()
 
void ProgCorrectWiener2D::processImage (const FileName &fnImg, const FileName &fnImgOut, const MDRow &rowIn, MDRow &rowOut)
 
void ProgCorrectWiener2D::generateWienerFilter (MultidimArray< double > &Mwien, CTFDescription &ctf)
 
void ProgCorrectWiener2D::postProcess ()
 
void ProgVolumeCorrectBfactor::make_guinier_plot (MultidimArray< std::complex< double > > &m1, std::vector< fit_point2D > &guinier)
 
void ProgVolumeCorrectBfactor::apply_bfactor (MultidimArray< std::complex< double > > &FT1, double bfactor)
 
void ProgVolumeCorrectBfactor::apply_allpoints (MultidimArray< std::complex< double > > &FT1, std::vector< fit_point2D > &guinier_diff)
 
void ProgVolumeCorrectBfactor::get_snr_weights (std::vector< double > &snr)
 
void ProgVolumeCorrectBfactor::apply_snr_weights (MultidimArray< std::complex< double > > &FT1, std::vector< double > &snr)
 
void ProgVolumeCorrectBfactor::write_guinierfile (const FileName &fn_guinier, std::vector< fit_point2D > &guinierin, std::vector< fit_point2D > &guinierweighted, std::vector< fit_point2D > &guiniernew, double intercept, std::vector< fit_point2D > &guinierref)
 

Variables

double ProgCorrectPhaseFlip2D::sampling_rate
 Sampling rate. More...
 
Image< double > ProgCorrectPhaseFlip2D::img
 
CTFDescription ProgCorrectPhaseFlip2D::ctf
 
size_t ProgCorrectPhaseFlip2D::Ydim
 
size_t ProgCorrectPhaseFlip2D::Xdim
 
FourierTransformer ProgCorrectPhaseFlip2D::transformer
 
Wiener2D ProgCorrectWiener2D::WF
 
bool ProgCorrectWiener2D::phase_flipped
 
double ProgCorrectWiener2D::pad
 
bool ProgCorrectWiener2D::isIsotropic
 
bool ProgCorrectWiener2D::correct_envelope
 
double ProgCorrectWiener2D::wiener_constant
 Wiener filter constant. More...
 
double ProgCorrectWiener2D::sampling_rate
 Sampling rate. More...
 
Image< double > ProgCorrectWiener2D::img
 
CTFDescription ProgCorrectWiener2D::ctf
 
size_t ProgCorrectWiener2D::Ydim
 
size_t ProgCorrectWiener2D::Xdim
 
MultidimArray< double > ProgCorrectWiener2D::Mwien
 
MultidimArray< std::complex< double > > ProgCorrectWiener2D::Faux
 
FourierTransformer ProgCorrectWiener2D::transformer
 

Detailed Description

Function Documentation

◆ apply_allpoints()

void ProgVolumeCorrectBfactor::apply_allpoints ( MultidimArray< std::complex< double > > &  FT1,
std::vector< fit_point2D > &  guinier_diff 
)

Apply B-factor

This will adjust the power spectrum according to the difference Guinier

Definition at line 300 of file volume_correct_bfactor.cpp.

302 {
303  Matrix1D<double> f(3);
305  {
307  FFT_IDX2DIGFREQ(i,YSIZE(FT1),YY(f));
308  FFT_IDX2DIGFREQ(k,ZSIZE(FT1),ZZ(f));
309  double R=f.module();
310  if (R>0.5)
311  continue;
312  size_t idx=lround(R*xsize);
313  if (idx < guinier_diff.size() && guinier_diff[idx].w > 0.)
314  {
315  dAkij(FT1, k, i, j) *= exp( -guinier_diff[idx].y );
316  }
317  }
318 }
#define YSIZE(v)
static double * y
#define FOR_ALL_DIRECT_ELEMENTS_IN_ARRAY3D(V)
#define i
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 XX(v)
Definition: matrix1d.h:85
double * f
#define dAkij(V, k, i, j)
#define ZSIZE(v)
__device__ float FFT_IDX2DIGFREQ(int idx, int size)
#define j
#define YY(v)
Definition: matrix1d.h:93
#define ZZ(v)
Definition: matrix1d.h:101

◆ apply_bfactor()

void ProgVolumeCorrectBfactor::apply_bfactor ( MultidimArray< std::complex< double > > &  FT1,
double  bfactor 
)

Apply B-factor

This will apply the following operation to the FT1: exp (- bfactor / 4 * d *d)

Definition at line 282 of file volume_correct_bfactor.cpp.

284 {
285  Matrix1D<double> f(3);
286  double isampling_rate=1.0/sampling_rate;
288  {
290  FFT_IDX2DIGFREQ(i,YSIZE(FT1),YY(f));
291  FFT_IDX2DIGFREQ(k,ZSIZE(FT1),ZZ(f));
292  double R = f.module() * isampling_rate;
293  if (1./R >= apply_maxres)
294  {
295  dAkij(FT1, k, i, j) *= exp( -0.25* bfactor * R * R);
296  }
297  }
298 }
#define YSIZE(v)
#define FOR_ALL_DIRECT_ELEMENTS_IN_ARRAY3D(V)
#define i
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 XX(v)
Definition: matrix1d.h:85
double * f
#define dAkij(V, k, i, j)
#define ZSIZE(v)
__device__ float FFT_IDX2DIGFREQ(int idx, int size)
#define j
#define YY(v)
Definition: matrix1d.h:93
#define ZZ(v)
Definition: matrix1d.h:101

◆ apply_snr_weights()

void ProgVolumeCorrectBfactor::apply_snr_weights ( MultidimArray< std::complex< double > > &  FT1,
std::vector< double > &  snr 
)

Apply SNR weights to Fourier Transform of a volume

Definition at line 263 of file volume_correct_bfactor.cpp.

265 {
266 
267  Matrix1D<double> f(3);
269  {
271  FFT_IDX2DIGFREQ(i,YSIZE(FT1),YY(f));
272  FFT_IDX2DIGFREQ(k,ZSIZE(FT1),ZZ(f));
273  double R = f.module();
274  if (sampling_rate / R >= apply_maxres)
275  {
276  int idx=ROUND(R*xsize);
277  dAkij(FT1, k, i, j) *= snr[idx];
278  }
279  }
280 }
#define YSIZE(v)
#define FOR_ALL_DIRECT_ELEMENTS_IN_ARRAY3D(V)
#define i
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 XX(v)
Definition: matrix1d.h:85
double * f
#define dAkij(V, k, i, j)
#define ZSIZE(v)
#define ROUND(x)
Definition: xmipp_macros.h:210
__device__ float FFT_IDX2DIGFREQ(int idx, int size)
#define j
#define YY(v)
Definition: matrix1d.h:93
#define ZZ(v)
Definition: matrix1d.h:101

◆ defineParams() [1/2]

void ProgCorrectPhaseFlip2D::defineParams ( )
virtual

Function in which the param of each Program are defined.

Reimplemented from XmippMetadataProgram.

Reimplemented in BasicMpiMetadataProgram< ProgCorrectPhaseFlip2D >.

Definition at line 36 of file ctf_correct_phase.cpp.

37 {
38  addUsageLine("Perform CTF correction to 2D projection images with estimated ctfs using a phase flip filter.");
41  addKeywords("correct CTF by phase flipping");
42  addParamsLine(" [--sampling_rate <float=1.0>] : Sampling rate of the input particles");
43 }
void addKeywords(const char *keywords)
bool each_image_produces_an_output
Indicate that an output is produced for each image in the input.
void addUsageLine(const char *line, bool verbatim=false)
void addParamsLine(const String &line)

◆ defineParams() [2/2]

void ProgCorrectWiener2D::defineParams ( )
virtual

Function in which the param of each Program are defined.

Reimplemented from XmippMetadataProgram.

Reimplemented in BasicMpiMetadataProgram< ProgCorrectWiener2D >.

Definition at line 42 of file ctf_correct_wiener2d.cpp.

43 {
44  addUsageLine("Perform CTF correction to 2D projection images with estimated ctfs using a Wiener filter.");
47  addKeywords("correct CTF by Wiener filtering");
48  addParamsLine(" [--phase_flipped] : Is the data already phase-flipped?");
49  addParamsLine(" [--isIsotropic] : Must be considered the defocus isotropic?");
50  addParamsLine(" [--sampling_rate <float=1.0>] : Sampling rate of the input particles");
51  addParamsLine(" [--wc <float=-1>] : Wiener-filter constant (if < 0: use FREALIGN default)");
52  addParamsLine(" [--pad <factor=2.> ] : Padding factor for Wiener correction");
53  addParamsLine(" [--correct_envelope] : Correct the CTF envelope");
54 }
void addKeywords(const char *keywords)
bool each_image_produces_an_output
Indicate that an output is produced for each image in the input.
void addUsageLine(const char *line, bool verbatim=false)
void addParamsLine(const String &line)

◆ generateWienerFilter()

void ProgCorrectWiener2D::generateWienerFilter ( MultidimArray< double > &  Mwien,
CTFDescription ctf 
)

◆ get_snr_weights()

void ProgVolumeCorrectBfactor::get_snr_weights ( std::vector< double > &  snr)

Read FSC file and convert to signal-to-noise weights

Definition at line 243 of file volume_correct_bfactor.cpp.

244 {
245 
246  MetaDataVec md;
247  md.read(fn_fsc);
248 
249  double fsc;
250  int line_no = 0;
251 
252  snr.clear();
253 
254  for (size_t objId : md.ids())
255  {
256  md.getValue(MDL_RESOLUTION_FRC, fsc, objId);
257  double mysnr = XMIPP_MAX( (2*fsc) / (1+fsc), 0.);
258  snr.push_back( sqrt(mysnr) );
259  }
260 }
#define XMIPP_MAX(x, y)
Definition: xmipp_macros.h:193
void read(const FileName &inFile, const std::vector< MDLabel > *desiredLabels=nullptr, bool decomposeStack=true) override
void sqrt(Image< double > &op)
virtual IdIteratorProxy< false > ids()
bool getValue(MDObject &mdValueOut, size_t id) const override
Fourier shell correlation (double)

◆ make_guinier_plot()

void ProgVolumeCorrectBfactor::make_guinier_plot ( MultidimArray< std::complex< double > > &  m1,
std::vector< fit_point2D > &  guinier 
)

Make Guinier plot (logarithm of spherically averaged amplitudes versus resolution in 1/A^2)

Definition at line 146 of file volume_correct_bfactor.cpp.

148 {
149  MultidimArray< int > radial_count(xsize);
151  Matrix1D<double> f(3);
152  fit_point2D onepoint;
153 
154  lnF.initZeros();
155  for (size_t k=0; k<ZSIZE(FT1); k++)
156  {
157  FFT_IDX2DIGFREQ(k,ZSIZE(FT1),ZZ(f));
158  double z2=ZZ(f)*ZZ(f);
159  for (size_t i=0; i<YSIZE(FT1); i++)
160  {
161  FFT_IDX2DIGFREQ(i,YSIZE(FT1),YY(f));
162  double y2z2=z2+YY(f)*YY(f);
163  for (size_t j=0; j<XSIZE(FT1); j++)
164  {
166  double R2=y2z2+XX(f)*XX(f);
167  if (R2>0.25)
168  continue;
169  double R=sqrt(R2);
170  int idx=ROUND(R*xsize);
171  A1D_ELEM(lnF,idx) += abs(dAkij(FT1, k, i, j));
172  ++A1D_ELEM(radial_count,idx);
173  }
174  }
175  }
176 
177  guinier.clear();
178  for (size_t i = 0; i < XSIZE(radial_count); i++)
179  {
180  double res = (xsize * sampling_rate)/(double)i;
181  if (res >= apply_maxres)
182  {
183  onepoint.x = 1. / (res * res);
184  if (lnF(i)>0.)
185  {
186  onepoint.y = log ( lnF(i) / radial_count(i) );
187  if (res <= fit_minres && res >= fit_maxres)
188  {
189  onepoint.w = 1.;
190  }
191  else
192  {
193  onepoint.w = 0.;
194  }
195  }
196  else
197  {
198  onepoint.y = 0.;
199  onepoint.w = 0.;
200  }
201  guinier.push_back(onepoint);
202  }
203  }
204 }
#define YSIZE(v)
void sqrt(Image< double > &op)
#define A1D_ELEM(v, i)
void abs(Image< double > &op)
double x
x coordinate
Definition: geometry.h:234
#define i
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 log(Image< double > &op)
#define XX(v)
Definition: matrix1d.h:85
double * f
#define XSIZE(v)
#define dAkij(V, k, i, j)
#define ZSIZE(v)
#define ROUND(x)
Definition: xmipp_macros.h:210
double y
y coordinate (assumed to be a function of x)
Definition: geometry.h:236
__device__ float FFT_IDX2DIGFREQ(int idx, int size)
#define j
double w
Weight of the point in the Least-Squares problem.
Definition: geometry.h:238
#define YY(v)
Definition: matrix1d.h:93
#define ZZ(v)
Definition: matrix1d.h:101

◆ postProcess()

void ProgCorrectWiener2D::postProcess ( )
virtual

Reimplemented from XmippMetadataProgram.

Definition at line 57 of file ctf_correct_wiener2d.cpp.

58 {
59  MetaData &ptrMdOut = getOutputMd();
60 
61  ptrMdOut.removeLabel(MDL_CTF_DEFOCUSA);
62  ptrMdOut.removeLabel(MDL_CTF_DEFOCUSU);
64  ptrMdOut.removeLabel(MDL_CTF_DEFOCUSV);
82  ptrMdOut.removeLabel(MDL_CTF_CA);
85  ptrMdOut.removeLabel(MDL_CTF_ENVELOPE);
89  ptrMdOut.removeLabel(MDL_CTF_K);
90 
91  ptrMdOut.write(fn_out.replaceExtension("xmd"));
92 
93 }
CTF Background parameter.
CTF gain.
Defocus U (Angstroms)
CTF Background parameter.
virtual bool removeLabel(const MDLabel label)=0
FileName replaceExtension(const String &newExt) const
Defocus angle (degrees)
CTF Background parameter.
virtual void write(const FileName &outFile, WriteModeMetaData mode=MD_OVERWRITE) const =0
Convergence cone.
CTF Background parameter.
CTF Background parameter.
CTF Background parameter.
CTF Background parameter.
CTF Background parameter.
CTF Background parameter.
CTF Background parameter.
Longitudinal displacement.
average defocus (Angtroms)
CTF Background parameter.
CTF Background parameter.
CTF Background parameter.
CTF_ CTF Background parameter.
CTF Background parameter.
CTF Background parameter.
Defocus V (Angstroms)
Chromatic aberration.
Transversal displacemente.
Lens stability.
CTF Background parameter.

◆ processImage() [1/2]

void ProgCorrectPhaseFlip2D::processImage ( const FileName fnImg,
const FileName fnImgOut,
const MDRow rowIn,
MDRow rowOut 
)
virtual

Implements XmippMetadataProgram.

Definition at line 45 of file ctf_correct_phase.cpp.

46 {
47  rowOut = rowIn;
48  img.read(fnImg);
49  ctf.readFromMdRow(rowIn);
50  img().setXmippOrigin();
52  img.write(fnImgOut);
53  rowOut.setValue(MDL_IMAGE, fnImgOut);
54 }
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 readFromMdRow(const MDRow &row, bool disable_if_not_K=true)
Definition: ctf.cpp:1172
void correctPhase(MultidimArray< std::complex< double > > &FFTI, const MultidimArray< double > &I, double Ts)
Correct phase flip of an image.
Definition: ctf.cpp:1553
void setValue(MDLabel label, const T &d, bool addLabel=true)
int read(const FileName &name, DataMode datamode=DATA, size_t select_img=ALL_IMAGES, bool mapData=false, int mode=WRITE_READONLY)
double sampling_rate
Sampling rate.
Name of an image (std::string)

◆ processImage() [2/2]

void ProgCorrectWiener2D::processImage ( const FileName fnImg,
const FileName fnImgOut,
const MDRow rowIn,
MDRow rowOut 
)
virtual

Implements XmippMetadataProgram.

Definition at line 96 of file ctf_correct_wiener2d.cpp.

97 {
98  WF.pad = pad;
104  WF.applyWienerFilter(fnImg, fnImgOut, rowIn, rowOut);
105 
106 }
void applyWienerFilter(MultidimArray< double > &ptrImg, CTFDescription &ctf)
Definition: wiener2d.cpp:101
bool isIsotropic
Definition: wiener2d.h:44
double sampling_rate
Sampling rate.
double wiener_constant
Wiener filter constant.
double pad
Definition: wiener2d.h:42
double wiener_constant
Wiener filter constant.
Definition: wiener2d.h:49
bool phase_flipped
Definition: wiener2d.h:39
double sampling_rate
Sampling rate.
Definition: wiener2d.h:52
bool correct_envelope
Definition: wiener2d.h:46

◆ readParams() [1/2]

void ProgCorrectPhaseFlip2D::readParams ( )
virtual

Function in which each program will read parameters that it need. If some error occurs the usage will be printed out.

Reimplemented from XmippMetadataProgram.

Reimplemented in BasicMpiMetadataProgram< ProgCorrectPhaseFlip2D >.

Definition at line 29 of file ctf_correct_phase.cpp.

30 {
32  sampling_rate = getDoubleParam("--sampling_rate");
33 }
double getDoubleParam(const char *param, int arg=0)
double sampling_rate
Sampling rate.

◆ readParams() [2/2]

void ProgCorrectWiener2D::readParams ( )
virtual

Function in which each program will read parameters that it need. If some error occurs the usage will be printed out.

Reimplemented from XmippMetadataProgram.

Reimplemented in BasicMpiMetadataProgram< ProgCorrectWiener2D >.

Definition at line 30 of file ctf_correct_wiener2d.cpp.

31 {
33  phase_flipped = checkParam("--phase_flipped");
34  pad = XMIPP_MAX(1.,getDoubleParam("--pad"));
35  isIsotropic = checkParam("--isIsotropic");
37  correct_envelope = checkParam("--correct_envelope");
38  sampling_rate = getDoubleParam("--sampling_rate");
39 }
#define XMIPP_MAX(x, y)
Definition: xmipp_macros.h:193
double getDoubleParam(const char *param, int arg=0)
double sampling_rate
Sampling rate.
double wiener_constant
Wiener filter constant.
bool checkParam(const char *param)

◆ write_guinierfile()

void ProgVolumeCorrectBfactor::write_guinierfile ( const FileName fn_guinier,
std::vector< fit_point2D > &  guinierin,
std::vector< fit_point2D > &  guinierweighted,
std::vector< fit_point2D > &  guiniernew,
double  intercept,
std::vector< fit_point2D > &  guinierref 
)

Write Guinier plot in a textfile

Definition at line 320 of file volume_correct_bfactor.cpp.

326 {
327  std::ofstream fh;
328  fh.open(fn_guinier.c_str(), std::ios::out);
329  if (!fh)
330  REPORT_ERROR(ERR_IO_NOWRITE, fn_guinier);
331 
332  fh << "# 1/d^2 lnF weighted-lnF corrected-lnF (model)\n";
333  for (size_t i = 0; i < guinierin.size(); i++)
334  {
335  fh << (guinierin[i]).x << " " << (guinierin[i]).y << " " << (guinierweighted[i]).y << " " <<(guiniernew[i]).y;
337  fh << " " << intercept;
339  {
340  fh << " " << (guinierref[i]).y + intercept;
341  }
342  fh << std::endl;
343  }
344  fh.close();
345 }
#define REPORT_ERROR(nerr, ErrormMsg)
Definition: xmipp_error.h:211
static double * y
Couldn&#39;t write to file.
Definition: xmipp_error.h:140
doublereal * x
#define i

Variable Documentation

◆ correct_envelope

bool ProgCorrectWiener2D::correct_envelope

Definition at line 53 of file ctf_correct_wiener2d.h.

◆ ctf [1/2]

CTFDescription ProgCorrectPhaseFlip2D::ctf

Definition at line 50 of file ctf_correct_phase.h.

◆ ctf [2/2]

CTFDescription ProgCorrectWiener2D::ctf

Definition at line 77 of file ctf_correct_wiener2d.h.

◆ Faux

MultidimArray<std::complex<double> > ProgCorrectWiener2D::Faux

Definition at line 82 of file ctf_correct_wiener2d.h.

◆ img [1/2]

Image<double> ProgCorrectPhaseFlip2D::img

Definition at line 49 of file ctf_correct_phase.h.

◆ img [2/2]

Image<double> ProgCorrectWiener2D::img

Definition at line 75 of file ctf_correct_wiener2d.h.

◆ isIsotropic

bool ProgCorrectWiener2D::isIsotropic

Definition at line 51 of file ctf_correct_wiener2d.h.

◆ Mwien

MultidimArray<double> ProgCorrectWiener2D::Mwien

Definition at line 81 of file ctf_correct_wiener2d.h.

◆ pad

double ProgCorrectWiener2D::pad

Padding factor

Definition at line 49 of file ctf_correct_wiener2d.h.

◆ phase_flipped

bool ProgCorrectWiener2D::phase_flipped

Definition at line 46 of file ctf_correct_wiener2d.h.

◆ sampling_rate [1/2]

double ProgCorrectPhaseFlip2D::sampling_rate

Sampling rate.

Definition at line 41 of file ctf_correct_phase.h.

◆ sampling_rate [2/2]

double ProgCorrectWiener2D::sampling_rate

Sampling rate.

Definition at line 59 of file ctf_correct_wiener2d.h.

◆ transformer [1/2]

FourierTransformer ProgCorrectPhaseFlip2D::transformer

Definition at line 52 of file ctf_correct_phase.h.

◆ transformer [2/2]

FourierTransformer ProgCorrectWiener2D::transformer

Definition at line 83 of file ctf_correct_wiener2d.h.

◆ WF

Wiener2D ProgCorrectWiener2D::WF

Definition at line 44 of file ctf_correct_wiener2d.h.

◆ wiener_constant

double ProgCorrectWiener2D::wiener_constant

Wiener filter constant.

Definition at line 56 of file ctf_correct_wiener2d.h.

◆ Xdim [1/2]

size_t ProgCorrectPhaseFlip2D::Xdim

Definition at line 51 of file ctf_correct_phase.h.

◆ Xdim [2/2]

size_t ProgCorrectWiener2D::Xdim

Definition at line 79 of file ctf_correct_wiener2d.h.

◆ Ydim [1/2]

size_t ProgCorrectPhaseFlip2D::Ydim

Definition at line 51 of file ctf_correct_phase.h.

◆ Ydim [2/2]

size_t ProgCorrectWiener2D::Ydim

Definition at line 79 of file ctf_correct_wiener2d.h.