Xmipp  v3.23.11-Nereus
Public Member Functions | List of all members
MpiProgMLF2D Class Reference

#include <mpi_ml_align2d.h>

Inheritance diagram for MpiProgMLF2D:
Inheritance graph
[legend]
Collaboration diagram for MpiProgMLF2D:
Collaboration graph
[legend]

Public Member Functions

 MpiProgMLF2D ()
 
 MpiProgMLF2D (MpiNode *node)
 
void produceSideInfo ()
 
void produceSideInfo2 ()
 
void writeOutputFiles (const ModelML2D &model, OutputType outputType=OUT_FINAL)
 Write model parameters. More...
 
void expectation ()
 After normal ML2D expectation, data must be collected from nodes. More...
 
void endIteration ()
 Redefine endIteration for some synchronization. More...
 
- Public Member Functions inherited from ProgMLF2D
 ProgMLF2D (int nr_vols=0, int rank=0, int size=1)
 
void defineParams ()
 Params definition. More...
 
void readParams ()
 Read arguments from command line. More...
 
void show (bool ML3D=false)
 Show. More...
 
virtual void defineBasicParams (XmippProgram *prog)
 Some redefinitions of the basic and additional params. More...
 
virtual void defineAdditionalParams (XmippProgram *prog, const char *sectionLine)
 
void estimateInitialNoiseSpectra ()
 
void updateWienerFilters (const MultidimArray< double > &spectral_signal, std::vector< double > &sumw_defocus, int iter)
 
void setCurrentSamplingRates (double current_probres_limit)
 Vary in-plane and translational sampling rates with resolution. More...
 
void generateInitialReferences ()
 Generate initial references from random subset averages. More...
 
void calculatePdfInplane ()
 Calculate probability density distribution for in-plane transformations. More...
 
void appendFTtoVector (const MultidimArray< std::complex< double > > &Fin, std::vector< double > &out)
 
void getFTfromVector (const std::vector< double > &in, const int start_point, MultidimArray< std::complex< double > > &out, bool only_real=false)
 
void rotateReference (std::vector< double > &out)
 Fill vector of matrices with all rotations of reference. More...
 
void reverseRotateReference (const std::vector< double > &in, std::vector< MultidimArray< double > > &out)
 Apply reverse rotations to all matrices in vector and fill new matrix with their sum. More...
 
void preselectDirections (float &phi, float &theta, std::vector< double > &pdf_directions)
 
void preselect_significant_model_phi (MultidimArray< double > &Mimg, std::vector< double > &offsets, std::vector< std::vector< MultidimArray< double > > > &Mref, MultidimArray< int > &Msignificant, std::vector< double > &pdf_directions)
 
void fourierTranslate2D (const std::vector< double > &in, MultidimArray< double > &trans, std::vector< double > &out, int point_start=0)
 
void calculateFourierOffsets (const MultidimArray< double > &Mimg, const std::vector< double > &offsets, std::vector< double > &out, MultidimArray< int > &Moffsets, MultidimArray< int > &Moffsets_mirror)
 
void processOneImage (const MultidimArray< double > &Mimg, size_t focus, bool apply_ctf, double &fracweight, double &maxweight2, double &sum_refw2, double &opt_scale, size_t &opt_refno, double &opt_psi, size_t &opt_ipsi, size_t &opt_iflip, MultidimArray< double > &opt_offsets, std::vector< double > &opt_offsets_ref, std::vector< double > &pdf_directions, bool do_kstest, bool write_histograms, FileName fn_img, double &KSprob)
 Perform expectation step for a single image. More...
 
double performKSTest (MultidimArray< double > &Mimg, const int focus, bool apply_ctf, FileName &fn_img, bool write_histogram, std::vector< std::vector< MultidimArray< std::complex< double > > > > &Fref, double &opt_scale, int &opt_refno, int &opt_ipsi, int &opt_iflip, MultidimArray< double > &opt_offsets)
 Perform Kolmogorov-Smirnov test. More...
 
void iteration ()
 One iteration of the process. More...
 
void expectation ()
 Integrate over all experimental images. More...
 
void maximization ()
 Update all model parameters (maximization step) More...
 
void endIteration ()
 Redefine endIteration to update Wiener filters. More...
 
void writeNoiseFile (const FileName &fn_base, int ifocus)
 Write noise estimation per resolution. More...
 
virtual void addPartialDocfileData (const MultidimArray< double > &data, size_t first, size_t last)
 Add docfiledata to docfile. More...
 
- Public Member Functions inherited from ML2DBaseProgram
void initSamplingStuff ()
 
 ML2DBaseProgram ()
 
virtual void setNumberOfLocalImages ()
 Set the number of images, this function is useful only for MPI. More...
 
virtual void randomizeImagesOrder ()
 Randomize initial images order, only once. More...
 
virtual void createThreads ()
 Create working threads. More...
 
virtual void destroyThreads ()
 Exit threads and free memory. More...
 
virtual bool checkConvergence ()
 
virtual void run ()
 Main function of the program. More...
 
virtual void defineHiddenParams (XmippProgram *prog)
 
- Public Member Functions inherited from XmippProgram
const char * getParam (const char *param, int arg=0)
 
const char * getParam (const char *param, const char *subparam, int arg=0)
 
int getIntParam (const char *param, int arg=0)
 
int getIntParam (const char *param, const char *subparam, int arg=0)
 
double getDoubleParam (const char *param, int arg=0)
 
double getDoubleParam (const char *param, const char *subparam, int arg=0)
 
float getFloatParam (const char *param, int arg=0)
 
float getFloatParam (const char *param, const char *subparam, int arg=0)
 
void getListParam (const char *param, StringVector &list)
 
int getCountParam (const char *param)
 
bool checkParam (const char *param)
 
bool existsParam (const char *param)
 
void addParamsLine (const String &line)
 
void addParamsLine (const char *line)
 
ParamDefgetParamDef (const char *param) const
 
virtual void quit (int exit_code=0) const
 
virtual int tryRun ()
 
void initProgress (size_t total, size_t stepBin=60)
 
void setProgress (size_t value=0)
 
void endProgress ()
 
void processDefaultComment (const char *param, const char *left)
 
void setDefaultComment (const char *param, const char *comment)
 
virtual void initComments ()
 
void setProgramName (const char *name)
 
void addUsageLine (const char *line, bool verbatim=false)
 
void clearUsage ()
 
void addExampleLine (const char *example, bool verbatim=true)
 
void addSeeAlsoLine (const char *seeAlso)
 
void addKeywords (const char *keywords)
 
const char * name () const
 
virtual void usage (int verb=0) const
 
virtual void usage (const String &param, int verb=2)
 
int version () const
 
virtual void show () const
 
virtual void read (int argc, const char **argv, bool reportErrors=true)
 
virtual void read (int argc, char **argv, bool reportErrors=true)
 
void read (const String &argumentsLine)
 
 XmippProgram ()
 
 XmippProgram (int argc, const char **argv)
 
virtual ~XmippProgram ()
 
- Public Member Functions inherited from MpiML2DBase< MpiProgMLF2D >
void readMpi (int argc, char **argv)
 
 MpiML2DBase (MpiProgMLF2D *prm)
 
 MpiML2DBase (MpiProgMLF2D *prm, MpiNode *node)
 
 MpiML2DBase (const MpiML2DBase &)=delete
 
 MpiML2DBase (const MpiML2DBase &&)=delete
 
 ~MpiML2DBase ()
 
MpiML2DBaseoperator= (const MpiML2DBase &)=delete
 
MpiML2DBaseoperator= (const MpiML2DBase &&)=delete
 
void sendDocfile (const MultidimArray< double > &data)
 

Additional Inherited Members

- Public Attributes inherited from ProgMLF2D
double sigma_offset
 
std::vector< double > alpha_k
 
std::vector< double > mirror_fraction
 
size_t max_nr_psi
 
bool do_variable_psi
 
bool do_variable_trans
 
std::vector< Image< double > > Ictf
 
bool limit_trans
 
size_t nr_trans
 
size_t zero_trans
 
int search_shift
 
int offsets_keepdir
 
bool do_ctf_correction
 
double sampling
 
std::vector< int > count_defocus
 
bool phase_flipped
 
MultidimArray< size_t > Mresol_int
 
std::vector< MultidimArray< double > > Vsig
 
std::vector< MultidimArray< double > > Vctf
 
std::vector< MultidimArray< double > > Vdec
 
double reduce_snr
 
size_t nr_focus
 
double lowres_limit
 
double highres_limit
 
double ini_highres_limit
 
bool first_iter_noctf
 
bool do_divide_ctf
 
bool do_include_allfreqs
 
double fix_high
 
std::vector< int > pointer_2d
 
std::vector< int > pointer_i
 
std::vector< int > pointer_j
 
size_t nr_points_prob
 
size_t nr_points_2d
 
size_t dnr_points_2d
 
size_t current_highres_limit
 
bool do_student
 IN DEVELOPMENT. More...
 
bool do_student_sigma_trick
 
bool do_kstest
 Statistical analysis of the noise distributions. More...
 
int iter_write_histograms
 
Histogram1D sumhist
 
std::vector< Histogram1Dresolhist
 
std::vector< double > refs_avgscale
 
int rank
 
int size
 
int nr_vols
 
double LL
 
double sumcorr
 
double wsum_sigma_offset
 
double sumw_allrefs
 
std::vector< MultidimArray< double > > wsum_Mref
 
std::vector< MultidimArray< double > > wsum_ctfMref
 
std::vector< std::vector< double > > Mwsum_sigma2
 
std::vector< double > sumw
 
std::vector< double > sumw2
 
std::vector< double > sumwsc
 
std::vector< double > sumwsc2
 
std::vector< double > sumw_mirror
 
std::vector< double > sumw_defocus
 
std::vector< double > Fref
 
std::vector< double > Fwsum_imgs
 
std::vector< double > Fwsum_ctfimgs
 
- Public Attributes inherited from ML2DBaseProgram
FileName fn_img
 
FileName fn_ref
 
FileName fn_root
 
FileName fn_frac
 
FileName fn_sig
 
FileName fn_doc
 
FileName fn_oext
 
FileName fn_scratch
 
FileName fn_control
 
String cline
 
bool do_mirror
 
bool fix_fractions
 
bool fix_sigma_offset
 
bool fix_sigma_noise
 
int istart
 
int iter
 
int Niter
 
size_t dim
 
size_t dim2
 
size_t hdim
 
double ddim2
 
size_t nr_psi
 
size_t nr_flip
 
double psi_step
 
double psi_max
 
size_t nr_nomirror_flips
 
size_t nr_images_global
 
size_t nr_images_local
 
size_t myFirstImg
 
size_t myLastImg
 
double eps
 
MetaDataDb MDimg
 
MetaDataDb MDref
 
MetaDataDb MDlog
 
std::vector< Matrix2D< double > > F
 
std::vector< Image< double > > Iold
 
MultidimArray< double > P_phi
 
MultidimArray< double > Mr2
 
bool fast_mode
 
double C_fast
 
std::vector< Matrix1D< double > > Vtrans
 
bool zero_offsets
 
bool limit_rot
 
double search_rot
 
bool save_mem1
 
bool save_mem2
 
bool save_mem3
 
std::vector< double > imgs_oldphi
 
std::vector< double > imgs_oldtheta
 
bool do_ML3D
 
bool do_generate_refs
 
std::vector< std::vector< double > > imgs_offsets
 
double trymindiff_factor
 
double df
 
double df2
 
double dfsigma2
 
bool do_norm
 Re-normalize internally. More...
 
std::vector< double > imgs_scale
 
std::vector< double > imgs_bgmean
 
std::vector< double > imgs_trymindiff
 
std::vector< int > imgs_optrefno
 
double average_scale
 
int factor_nref
 
int refs_per_class
 
std::vector< double > conv
 
size_t current_image
 
ModelML2D model
 
ModelML2Dcurrent_model
 
size_t blocks
 
size_t current_block
 
std::vector< size_t > img_id
 
MultidimArray< double > docfiledata
 
bool do_restart
 
bool referenceExclusive
 
bool allowFastOption
 
bool allowThreads
 
bool allowIEM
 
bool allowRestart
 
String defaultRoot
 
int defaultNiter
 
int defaultStartingIter
 
int threads
 
String outRefsMd
 
MultidimArray< double > spectral_signal
 
int seed
 
- Public Attributes inherited from XmippProgram
bool doRun
 
bool runWithoutArgs
 
int verbose
 Verbosity level. More...
 
int debug
 
- Protected Member Functions inherited from XmippProgram
void defineCommons ()
 
- Protected Attributes inherited from XmippProgram
int errorCode
 
ProgramDefprogDef
 Program definition and arguments parser. More...
 
std::map< String, CommentListdefaultComments
 
int argc
 Original command line arguments. More...
 
const char ** argv
 
- Protected Attributes inherited from MpiML2DBase< MpiProgMLF2D >
MpiNodenode
 
bool created_node
 
MpiProgMLF2Dprogram
 

Detailed Description

Class to parallelize the MLF 2D alignment program

Definition at line 124 of file mpi_ml_align2d.h.

Constructor & Destructor Documentation

◆ MpiProgMLF2D() [1/2]

MpiProgMLF2D::MpiProgMLF2D ( )

Default constructor

Definition at line 190 of file mpi_ml_align2d.cpp.

190  :MpiML2DBase(this)
191 {}
MpiML2DBase(MpiProgMLF2D *prm)

◆ MpiProgMLF2D() [2/2]

MpiProgMLF2D::MpiProgMLF2D ( MpiNode node)

Constructor passing the MpiNode

Definition at line 193 of file mpi_ml_align2d.cpp.

193  :MpiML2DBase(this, node)
194 {}
MpiML2DBase(MpiProgMLF2D *prm)

Member Function Documentation

◆ endIteration()

void MpiProgMLF2D::endIteration ( )
virtual

Redefine endIteration for some synchronization.

Reimplemented from ML2DBaseProgram.

Definition at line 278 of file mpi_ml_align2d.cpp.

279 {
280  // Write output files
281  LOG("MpiProgMLF2D::endIteration : before sendDocfile");
283  LOG("MpiProgMLF2D::endIteration : before writeOutputFiles");
285  LOG("MpiProgMLF2D::endIteration : before updateWienerFilters");
287  LOG("MpiProgMLF2D::endIteration : before barrierWait");
288  node->barrierWait();
289 }
Definition: ml2d.h:76
void sendDocfile(const MultidimArray< double > &data)
ModelML2D model
Definition: ml2d.h:224
std::vector< double > sumw_defocus
Definition: mlf_align2d.h:156
void barrierWait()
Definition: xmipp_mpi.cpp:171
MultidimArray< double > spectral_signal
Definition: ml2d.h:253
MultidimArray< double > docfiledata
Definition: ml2d.h:234
#define LOG(msg)
void writeOutputFiles(const ModelML2D &model, OutputType outputType=OUT_FINAL)
Write model parameters.
void updateWienerFilters(const MultidimArray< double > &spectral_signal, std::vector< double > &sumw_defocus, int iter)

◆ expectation()

void MpiProgMLF2D::expectation ( )
virtual

After normal ML2D expectation, data must be collected from nodes.

Implements ML2DBaseProgram.

Definition at line 196 of file mpi_ml_align2d.cpp.

197 {
198  MultidimArray<double> Maux, Vaux;
199  double aux;
200  Maux.resize(dim, dim);
201  Maux.setXmippOrigin();
202 
204  MPI_Allreduce(&LL, &aux, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD);
205  LL = aux;
206  MPI_Allreduce(&sumcorr, &aux, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD);
207  sumcorr = aux;
208  MPI_Allreduce(&wsum_sigma_offset, &aux, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD);
209  wsum_sigma_offset = aux;
210  if (do_kstest)
211  {
212  Vaux.resize(sumhist);
213  MPI_Allreduce(MULTIDIM_ARRAY(sumhist), MULTIDIM_ARRAY(Vaux),
214  MULTIDIM_SIZE(sumhist), MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD);
217  for (size_t ires = 0; ires < hdim; ires++)
218  {
219  Vaux.resize(sumhist);
220  MPI_Allreduce(MULTIDIM_ARRAY(resolhist[ires]), MULTIDIM_ARRAY(Vaux),
221  MULTIDIM_SIZE(resolhist[ires]), MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD);
224  }
225  }
226  for (int refno = 0;refno < model.n_ref; refno++)
227  {
228  MPI_Allreduce(MULTIDIM_ARRAY(wsum_Mref[refno]), MULTIDIM_ARRAY(Maux),
229  MULTIDIM_SIZE(wsum_Mref[refno]), MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD);
230  wsum_Mref[refno] = Maux;
231  if (do_ctf_correction)
232  {
233  MPI_Allreduce(MULTIDIM_ARRAY(wsum_ctfMref[refno]), MULTIDIM_ARRAY(Maux),
234  MULTIDIM_SIZE(wsum_ctfMref[refno]), MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD);
235  wsum_ctfMref[refno] = Maux;
236  }
237  MPI_Allreduce(&sumw[refno], &aux, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD);
238  sumw[refno] = aux;
239  MPI_Allreduce(&sumw2[refno], &aux, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD);
240  sumw2[refno] = aux;
241  MPI_Allreduce(&sumwsc2[refno], &aux, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD);
242  sumwsc2[refno] = aux;
243  MPI_Allreduce(&sumwsc[refno], &aux, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD);
244  sumwsc[refno] = aux;
245  MPI_Allreduce(&sumw_mirror[refno], &aux, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD);
246  sumw_mirror[refno] = aux;
247  }
248  for (size_t ifocus = 0;ifocus < nr_focus;ifocus++)
249  {
250  for (size_t ii = 0; ii < Mwsum_sigma2[ifocus].size(); ii++)
251  {
252  MPI_Allreduce(&Mwsum_sigma2[ifocus][ii], &aux, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD);
253  Mwsum_sigma2[ifocus][ii] = aux;
254  }
255  if (do_student)
256  {
257  MPI_Allreduce(&sumw_defocus[ifocus], &aux, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD);
258  sumw_defocus[ifocus] = aux;
259  }
260  }
261 }//end of expectation
bool do_student
IN DEVELOPMENT.
Definition: mlf_align2d.h:135
double wsum_sigma_offset
Definition: mlf_align2d.h:153
void resize(size_t Ndim, size_t Zdim, size_t Ydim, size_t Xdim, bool copy=true)
#define MULTIDIM_SIZE(v)
ModelML2D model
Definition: ml2d.h:224
double LL
Definition: mlf_align2d.h:153
#define MULTIDIM_ARRAY(v)
int n_ref
Definition: ml2d.h:83
std::vector< double > sumw_defocus
Definition: mlf_align2d.h:156
void expectation()
Integrate over all experimental images.
size_t hdim
Definition: ml2d.h:151
size_t nr_focus
Definition: mlf_align2d.h:114
std::vector< double > sumwsc2
Definition: mlf_align2d.h:156
bool do_kstest
Statistical analysis of the noise distributions.
Definition: mlf_align2d.h:141
std::vector< MultidimArray< double > > wsum_Mref
Definition: mlf_align2d.h:154
#define FOR_ALL_DIRECT_ELEMENTS_IN_MULTIDIMARRAY(v)
#define DIRECT_MULTIDIM_ELEM(v, n)
size_t dim
Definition: ml2d.h:151
bool do_ctf_correction
Definition: mlf_align2d.h:100
std::vector< Histogram1D > resolhist
Definition: mlf_align2d.h:146
std::vector< double > sumwsc
Definition: mlf_align2d.h:156
std::vector< double > sumw
Definition: mlf_align2d.h:156
std::vector< double > sumw_mirror
Definition: mlf_align2d.h:156
std::vector< double > sumw2
Definition: mlf_align2d.h:156
std::vector< std::vector< double > > Mwsum_sigma2
Definition: mlf_align2d.h:155
Histogram1D sumhist
Definition: mlf_align2d.h:145
int * n
double sumcorr
Definition: mlf_align2d.h:153
std::vector< MultidimArray< double > > wsum_ctfMref
Definition: mlf_align2d.h:154

◆ produceSideInfo()

void MpiProgMLF2D::produceSideInfo ( )
virtual

All mpi nodes should syncronize at this point that's why the need of override the implementation.

Reimplemented from ProgMLF2D.

Definition at line 271 of file mpi_ml_align2d.cpp.

272 {
275 }
#define SET_RANK_AND_SIZE()
virtual void produceSideInfo()
Setup lots of stuff.

◆ produceSideInfo2()

void MpiProgMLF2D::produceSideInfo2 ( )
virtual

Read reference images in memory & set offset vectors (This produceSideInfo is Selfile-dependent!)

Reimplemented from ProgMLF2D.

Definition at line 263 of file mpi_ml_align2d.cpp.

264 {
265  node->barrierWait();
267  //Also sync after finishing produceSideInfo2
268  node->barrierWait();
269 }
void barrierWait()
Definition: xmipp_mpi.cpp:171
virtual void produceSideInfo2()

◆ writeOutputFiles()

void MpiProgMLF2D::writeOutputFiles ( const ModelML2D model,
OutputType  outputType = OUT_FINAL 
)
virtual

Write model parameters.

Reimplemented from ProgMLF2D.

Definition at line 291 of file mpi_ml_align2d.cpp.

292 {
293  //All nodes should arrive to writeOutput files at same time
294  LOG("MpiProgMLF2D::writeOutputFiles : waiting before writing");
295  node->barrierWait();
296  //Only master write files
297  if (node->isMaster())
298  {
299  ProgMLF2D::writeOutputFiles(model, outputType);
300  LOG("MpiProgMLF2D::writeOutputFiles : master writing ");
301  }
302  else if (outputType == OUT_REFS)
303  {
305  LOG(formatString("MpiProgMLF2D::writeOutputFiles : slave setting outRefsMd = %s", outRefsMd.c_str()).c_str());
306  }
307  //All nodes wait until files are written
308  LOG("MpiProgMLF2D::writeOutputFiles : waiting after writing");
309  node->barrierWait();
310 }
Definition: ml2d.h:76
FileName fn_root
Definition: ml2d.h:132
void barrierWait()
Definition: xmipp_mpi.cpp:171
#define FN_CLASSES_MD(base)
Definition: ml2d.h:55
FileName getIterExtraPath(const FileName &fn_root, int iter, bool makePath)
Definition: ml2d.cpp:305
#define LOG(msg)
String formatString(const char *format,...)
String outRefsMd
Definition: ml2d.h:250
bool isMaster() const
Definition: xmipp_mpi.cpp:166
virtual void writeOutputFiles(const ModelML2D &model, OutputType outputType)
Write out reference images, selfile and logfile.

The documentation for this class was generated from the following files: