Xmipp  v3.23.11-Nereus
subtract_projection.h
Go to the documentation of this file.
1 /***************************************************************************
2  *
3  * Authors: Estrella Fernandez Gimenez (me.fernandez@cnb.csic.es)
4  *
5  * Unidad de Bioinformatica of Centro Nacional de Biotecnologia , CSIC
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
20  * 02111-1307 USA
21  *
22  * All comments concerning this program package may be sent to the
23  * e-mail address 'xmipp@cnb.csic.es'
24  ***************************************************************************/
25 
26  #ifndef _PROG_SUBTRACT_PROJECTION
27  #define _PROG_SUBTRACT_PROJECTION
28 
29  #include "core/metadata_vec.h"
30  #include "core/xmipp_program.h"
31  #include "core/xmipp_image.h"
32  #include "data/fourier_filter.h"
33  #include "data/fourier_projection.h"
35 
42  {
43  public:
44  // Input params
45  FileName fnVolR; // Input reference volume
46  FileName fnParticles; // Input metadata
47  FileName fnImgI; // Particle filename
48  FileName fnOut; // Output metadata
49  FileName fnMaskVol; // Input 3D mask of the reference volume
50  FileName fnMask; // Input 3D mask for region to keep
51  FileName fnProj; // Path to save intermediate files
52  double sampling;
53  double padFourier;
54  double maxResol;
55  double cirmaskrad; // Radius of the circular mask
56  int sigma;
57  int limitfreq;
58  int maxwiIdx;
60  bool boost;
61  bool subtract;
63 
64  // Data variables
65  Image<double> V; // volume
66  Image<double> vM; // mask 3D
67  Image<double> ivM; // invert mask 3D
68 
69  Image<double> M; // mask projected and smooth
70  Image<double> I; // particle
71  Image<double> Pctf; // projection with CTF applied
72  Image<double> iM; // inverse mask of the region to keep
73  Image<double> Mfinal; // final dilated mask
74  Image<double> Idiff; // final subtracted image
75  Image<double> cirmask; // circular mask to avoid edge artifacts
76 
77  Projection P; // projection
78  Projection Pmask; // mask projection for region to keep
79  Projection PmaskVol; // reference volume mask projection
80  FourierFilter FilterG; // Gaussian LPF to smooth mask
81 
82  const MultidimArray<double> *ctfImage = nullptr; // needed for FourierProjector
83  FourierTransformer transformerP; // Fourier transformer for projection
84  FourierTransformer transformerI; // Fourier transformer for particle
85 
88  MultidimArray< std::complex<double> > PFourier0; // FT(projection) estimation of order 0
89  MultidimArray< std::complex<double> > PFourier1; // FT(projection) estimation of order 1
92 
93 
96 
99  Image<double> padp; // padded image when applying CTF
100  Image<double> PmaskI; // inverted projected mask
101  Image<double> ImgiM; // auxiliary image for computing estimation images
103 
104  // Particle metadata
107  Matrix1D<double> roffset; // particle shifts
108  struct Angles // particle angles for projection
109  {
110  double rot;
111  double tilt;
112  double psi;
113  };
115 
116  bool disable;
118  void readParticle(const MDRow &rowIn);
119  void writeParticle(MDRow &rowOut, FileName, Image<double> &, double, double, double);
121  void createMask(const FileName &, Image<double> &, Image<double> &);
125  void processParticle(const MDRow &rowIn, int, FourierTransformer &, FourierTransformer &);
128  double evaluateFitting(const MultidimArray< std::complex<double> > &, const MultidimArray< std::complex<double> > &) const;
129  Matrix1D<double> checkBestModel(MultidimArray< std::complex<double> > &, const MultidimArray< std::complex<double> > &,
130  const MultidimArray< std::complex<double> > &, const MultidimArray< std::complex<double> > &) const;
131 
132  int rank; // for MPI version
140  void readParams() override;
142  void show() const override;
144  void defineParams() override;
145  void preProcess() override;
146  void processImage(const FileName &fnImg, const FileName &fnImgOut, const MDRow &rowIn, MDRow &rowOut) override;
147  void postProcess() override;
148  };
150 #endif
151 
void readParams() override
Read argument from command line.
FourierProjector * projectorMask
MultidimArray< std::complex< double > > PiMFourier
MultidimArray< std::complex< double > > IiMFourier
Image< double > binarizeMask(Projection &) const
MultidimArray< std::complex< double > > PFourier1
FourierTransformer transformerI
FourierTransformer transformerP
void show() const override
Show.
void writeParticle(MDRow &rowOut, FileName, Image< double > &, double, double, double)
Matrix1D< double > checkBestModel(MultidimArray< std::complex< double > > &, const MultidimArray< std::complex< double > > &, const MultidimArray< std::complex< double > > &, const MultidimArray< std::complex< double > > &) const
double evaluateFitting(const MultidimArray< std::complex< double > > &, const MultidimArray< std::complex< double > > &) const
Matrix1D< double > roffset
MultidimArray< std::complex< double > > ImgiMFourier
FourierProjector * projector
MultidimArray< std::complex< double > > computeEstimationImage(const MultidimArray< double > &, const MultidimArray< double > &, FourierTransformer &)
FourierTransformer transformerIiM
MultidimArray< int > wi
Image< double > applyCTF(const MDRow &, Projection &)
void processImage(const FileName &fnImg, const FileName &fnImgOut, const MDRow &rowIn, MDRow &rowOut) override
~ProgSubtractProjection()
Destructor.
void createMask(const FileName &, Image< double > &, Image< double > &)
Processing methods.
const MultidimArray< double > * ctfImage
void readParticle(const MDRow &rowIn)
Read and write methods.
ProgSubtractProjection()
Empty constructor.
void processParticle(const MDRow &rowIn, int, FourierTransformer &, FourierTransformer &)
MultidimArray< std::complex< double > > PFourier
void defineParams() override
Define parameters.
FourierTransformer transformerPiM
Image< double > invertMask(const Image< double > &)
MultidimArray< std::complex< double > > IFourier
MultidimArray< std::complex< double > > PFourier0