Xmipp  v3.23.11-Nereus
ml_align2d.h
Go to the documentation of this file.
1 /***************************************************************************
2  *
3  * Authors: Sjors Scheres scheres@cnb.csic.es (2004)
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 _MLALIGN2D_H
27 #define _MLALIGN2D_H
28 
29 #include "ml2d.h"
30 
33 #define FOR_ALL_THREAD_REFNO() \
34 int refno, load; \
35 while ((load = getThreadRefnoJob(refno)) > 0) \
36  for (int i = 0; i < load; i++, refno = (refno + 1) % model.n_ref)
37 #define FOR_ALL_THREAD_REFNO_NODECL() \
39 while ((load = getThreadRefnoJob(refno)) > 0) \
40  for (int i = 0; i < load; i++, refno = (refno + 1) % model.n_ref)
41 
42 class ProgML2D;
43 // This structure is needed to pass parameters to the threads
44 typedef struct
45 {
46  int thread_id;
48 }
50 
51 #define SPECIAL_ITER 0
52 
53 void * doThreadsTasks(void * data);
54 
60 {
61 
62 public:
63  bool no_iem;
64 
69  pthread_t * th_ids;
71 
73  double LL, sumfracweight;
75  std::vector<double> sumw, sumw2, sumwsc, sumwsc2, sumw_mirror;
76  std::vector<MultidimArray<double > > wsum_Mref;
79  std::vector<double> allref_offsets;
80  std::vector<double> pdf_directions;
81  std::vector<MultidimArray<double> > mref;
82  std::vector<MultidimArray<std::complex<double> > > fref;
83  std::vector<MultidimArray<std::complex<double > > > wsumimgs;
87 
89 
90  std::vector<MultidimArray<std::complex<double> > > Fimg_flip, mysumimgs;
91  std::vector<double> refw, refw2, refwsc2, refw_mirror, sumw_refpsi;
94  double mindiff;
95  size_t sigdim;
96  int ioptx, iopty;
97  std::vector<int> ioptx_ref, iopty_ref, ioptflip_ref;
99  double pfs_mindiff;
103 
105  std::vector<double> A2;
107  double Xi2;
108 
109  //These are for refno work assigns to threads
112  // Which group does this image belong to in iteration 0 (generation of K references)
113  int mygroup;
115  void readParams();
117  void defineParams();
118 
119 public:
120  ProgML2D();
122  virtual void show();
124  virtual void produceSideInfo();
126  virtual void produceSideInfo2();
127 
129  void calculatePdfInplane();
130 
132  void rotateReference();
133 
135  void reverseRotateReference();
136 
139  void preselectLimitedDirections(double &phi, double &theta);
140 
144 
146  void expectationSingleImage(Matrix1D<double> &opt_offsets);
147 
148  /*** Threads functions */
150  void createThreads();
151 
153  void destroyThreads();
154 
156  int getThreadRefnoJob(int &refno);
157 
159  void awakeThreads(ThreadTask task, int start_refno, int load = 1);
160 
163 
166 
169 
172 
174  void doThreadESIUpdateRefno();
175 
177  virtual void iteration();
178 
180  virtual void expectation();
181 
184 
186  virtual void maximization();
187 
189  void correctScaleAverage();
190 
192  virtual void addPartialDocfileData(const MultidimArray<double> &data, size_t first, size_t last);
193 
195  virtual void writeOutputFiles(const ModelML2D &model, OutputType outputType = OUT_FINAL);
196 
198  virtual void readModel(ModelML2D &model, int block);
200  FileName getBaseName(String suffix = "", int number = -1);
201 
202  virtual void printModel(const String &msg, const ModelML2D & model);
203 
204 };
205 
206 
207 
209 #endif
int getThreadRefnoJob(int &refno)
Assign refno jobs to threads.
int threadTask
Definition: ml_align2d.h:67
virtual void printModel(const String &msg, const ModelML2D &model)
Definition: ml_align2d.cpp:281
void preselectLimitedDirections(double &phi, double &theta)
Definition: ml_align2d.cpp:634
virtual void addPartialDocfileData(const MultidimArray< double > &data, size_t first, size_t last)
Add docfiledata to docfile.
barrier_t barrier2
Definition: ml_align2d.h:68
double opt_scale
Definition: ml_align2d.h:85
double dLL
Definition: ml_align2d.h:86
double old_bgmean
Definition: ml_align2d.h:93
double wsum_sc
Definition: ml_align2d.h:93
MultidimArray< double > Mimg
Definition: ml_align2d.h:78
std::vector< double > sumw_mirror
Definition: ml_align2d.h:75
size_t sigdim
Definition: ml_align2d.h:95
std::vector< int > iopty_ref
Definition: ml_align2d.h:97
double pfs_mindiff
Definition: ml_align2d.h:99
double wsum_sigma_offset
Definition: ml_align2d.h:74
ModelML2D model
Definition: ml2d.h:224
void createThreads()
Create working threads.
Definition: ml_align2d.cpp:929
std::vector< int > ioptx_ref
Definition: ml_align2d.h:97
double sum_refw
Definition: ml_align2d.h:92
double wsum_corr
Definition: ml_align2d.h:92
int iopt_flip
Definition: ml_align2d.h:84
void readParams()
Read arguments from command line.
Definition: ml_align2d.cpp:75
std::vector< MultidimArray< std::complex< double > > > fref
Definition: ml_align2d.h:82
virtual void maximization()
Update all model parameters, adapted for IEM blocks use.
void doThreadExpectationSingleImageRefno()
Thread code to parallelize refno loop in expectationSingleImage.
MultidimArray< int > omask
Definition: ml_align2d.h:65
OutputType
Definition: ml2d.h:76
void destroyThreads()
Exit threads and free memory.
Definition: ml_align2d.cpp:958
ThreadTask
Definition: ml2d.h:74
virtual void produceSideInfo2()
Try to merge produceSideInfo1 and 2.
Definition: ml_align2d.cpp:357
structThreadTasks * threads_d
Definition: ml_align2d.h:70
virtual void readModel(ModelML2D &model, int block)
Read model from file.
int pfs_count
Definition: ml_align2d.h:102
std::vector< MultidimArray< std::complex< double > > > Fimg_flip
Definition: ml_align2d.h:90
barrier_t barrier
Definition: ml_align2d.h:68
virtual void expectation()
Integrate over all experimental images.
double sumfracweight
Definition: ml_align2d.h:73
size_t refno_index
Definition: ml_align2d.h:110
int mygroup
Definition: ml_align2d.h:113
double theta
std::vector< int > ioptflip_ref
Definition: ml_align2d.h:97
barrier_t barrier3
Definition: ml_align2d.h:68
double LL
Definition: ml_align2d.h:73
glob_log first
int ioptx
Definition: ml_align2d.h:96
std::vector< MultidimArray< std::complex< double > > > wsumimgs
Definition: ml_align2d.h:83
void doThreadRotateReferenceRefno()
Thread code to parallelize refno loop in rotateReference.
double sumw_allrefs
Definition: ml_align2d.h:74
double mindiff
Definition: ml_align2d.h:94
int refno_load
Definition: ml_align2d.h:111
double bgmean
Definition: ml_align2d.h:85
std::vector< double > sumw
Definition: ml_align2d.h:75
void doThreadReverseRotateReferenceRefno()
Thread code to parallelize refno loop in reverseRotateReference.
int opt_refno
Definition: ml_align2d.h:84
void maximizeModel(ModelML2D &model)
Update all model parameters.
double trymindiff
Definition: ml_align2d.h:85
double wsum_sigma_noise
Definition: ml_align2d.h:74
void preselectFastSignificant()
Definition: ml_align2d.cpp:674
int iopt_psi
Definition: ml_align2d.h:84
std::vector< double > refw_mirror
Definition: ml_align2d.h:91
void defineParams()
Params definition.
Definition: ml_align2d.cpp:45
double wsum_sc2
Definition: ml_align2d.h:93
double Xi2
Definition: ml_align2d.h:107
double maxweight2
Definition: ml_align2d.h:86
int refno_count
Definition: ml_align2d.h:111
std::vector< double > A2
Definition: ml_align2d.h:105
void doThreadPreselectFastSignificantRefno()
Thread code to parallelize refno loop in preselectFastSignificant.
virtual void writeOutputFiles(const ModelML2D &model, OutputType outputType=OUT_FINAL)
Write model parameters.
std::vector< double > pdf_directions
Definition: ml_align2d.h:80
std::vector< double > sumwsc2
Definition: ml_align2d.h:75
MultidimArray< int > mask
Definition: ml_align2d.h:65
std::vector< double > refwsc2
Definition: ml_align2d.h:91
double sum_refw2
Definition: ml_align2d.h:92
double wsum_offset
Definition: ml_align2d.h:93
std::vector< MultidimArray< double > > mref
Definition: ml_align2d.h:81
std::vector< double > allref_offsets
Definition: ml_align2d.h:79
std::vector< double > refw2
Definition: ml_align2d.h:91
double opt_psi
Definition: ml_align2d.h:85
double maxweight
Definition: ml_align2d.h:92
void calculatePdfInplane()
Calculate probability density distribution for in-plane transformations.
Definition: ml_align2d.cpp:553
int iopty
Definition: ml_align2d.h:96
void rotateReference()
Fill vector of matrices with all rotations of reference.
Definition: ml_align2d.cpp:603
bool no_iem
Definition: ml_align2d.h:63
void reverseRotateReference()
Apply reverse rotations to all matrices in vector and fill new matrix with their sum.
Definition: ml_align2d.cpp:618
void expectationSingleImage(Matrix1D< double > &opt_offsets)
ML-integration over all (or -fast) translations.
Definition: ml_align2d.cpp:700
std::vector< double > sumwsc
Definition: ml_align2d.h:75
std::vector< MultidimArray< double > > wsum_Mref
Definition: ml_align2d.h:76
void doThreadESIUpdateRefno()
Thread code to parallelize update loop in ESI.
std::string String
Definition: xmipp_strings.h:34
size_t refno_load_param
Definition: ml_align2d.h:110
void awakeThreads(ThreadTask task, int start_refno, int load=1)
Awake threads for different tasks.
std::vector< double > refw
Definition: ml_align2d.h:91
Definition: ml2d.h:79
std::vector< double > sumw_refpsi
Definition: ml_align2d.h:91
void * doThreadsTasks(void *data)
Function for threads do different tasks.
Definition: ml_align2d.cpp:967
pthread_t * th_ids
Definition: ml_align2d.h:69
void correctScaleAverage()
Correct references scale.
ProgML2D * prm
Definition: ml_align2d.h:47
FileName getBaseName(String suffix="", int number=-1)
Get base name based on fn_root and some number.
Definition: ml2d.h:76
virtual void show()
Show info at starting program.
Definition: ml_align2d.cpp:196
MultidimArray< double > pfs_weight
Definition: ml_align2d.h:101
virtual void iteration()
Perform an iteration.
double fracweight
Definition: ml_align2d.h:86
std::vector< MultidimArray< std::complex< double > > > mysumimgs
Definition: ml_align2d.h:90
MultidimArray< int > Msignificant
Definition: ml_align2d.h:77
std::vector< double > sumw2
Definition: ml_align2d.h:75
virtual void produceSideInfo()
Try to merge produceSideInfo1 and 2.
Definition: ml_align2d.cpp:290
MultidimArray< double > pfs_maxweight
Definition: ml_align2d.h:100