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

#include <multireference_aligneability.h>

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

Public Member Functions

 MultireferenceAligneability ()
 
void readParams ()
 
void defineParams ()
 
void run ()
 
- 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 Attributes

FileName fnDir
 
FileName fnSym
 
FileName fin
 
FileName finRef
 
FileName fnInit
 
FileName fnGallery
 
FileName fnParticles
 
FileName fnParticlesRef
 
bool donNotUseWeights
 
bool check_mirror
 
SymList SL
 
size_t rank
 
size_t Nprocessors
 
MetaDataDb mdPartialParticles
 
- Public Attributes inherited from XmippProgram
bool doRun
 
bool runWithoutArgs
 
int verbose
 Verbosity level. More...
 
int debug
 

Additional Inherited Members

- 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
 

Detailed Description

Definition at line 43 of file multireference_aligneability.h.

Constructor & Destructor Documentation

◆ MultireferenceAligneability()

MultireferenceAligneability::MultireferenceAligneability ( )

Sampling rate of the volume and projections

Definition at line 37 of file multireference_aligneability.cpp.

Member Function Documentation

◆ defineParams()

void MultireferenceAligneability::defineParams ( )
virtual

Function in which the param of each Program are defined.

Reimplemented from XmippProgram.

Definition at line 58 of file multireference_aligneability.cpp.

59 {
60  addUsageLine("This function takes a volume and a set of projections with orientations. The volume is projected into the set of projection directions defining the "
61  "the reference projections. Thus, using the projections and references, calculation of the particle alignment precision and accuracy is carried out");
62  addParamsLine(" [ -i <md_file> ] : Input metadata with images and their angles to be validated against the volume");
63  addParamsLine(" [ -i2 <md_file> ] : Input metadata of reference particles obtained projecting the volume at the same orientations that the input particles");
64  addParamsLine(" [--volume <md_file=\"\">] : Input volume to be validated");
65  addParamsLine(" [--angles_file <file=\".\">] : Input metadata with particle projections at several orientations from (usually) Significant");
66  addParamsLine(" [--angles_file_ref <file=\".\">] : Input reference metadata with projections and orientations obtained projecting the volume at the several orientations from (usually) Significant");
67  addParamsLine(" [--gallery <file=\".\">] : Reference Gallery of projections ");
68  addParamsLine(" [--sym <symfile=c1>] : Enforce symmetry in projections"); //TODO the input will be two doc files one from the exp and the other from refs
69  addParamsLine(" [--odir <outputDir=\".\">] : Output directory");
70  addParamsLine(" [--check_mirrors] : Correct for mirrors in the alignment precision and accuracy estimation. In this case the precision of the projection axis without direction is computed");
71  addParamsLine(" [--dontUseWeights] : Do not use the particle weigths in the clusterability calculation ");
72 
73 }
void addUsageLine(const char *line, bool verbatim=false)
void addParamsLine(const String &line)

◆ readParams()

void MultireferenceAligneability::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 XmippProgram.

Definition at line 43 of file multireference_aligneability.cpp.

44 {
45  fnParticles = getParam("-i");
46  fnParticlesRef = getParam("-i2");
47  fnInit = getParam("--volume");
48  fin = getParam("--angles_file");
49  finRef = getParam("--angles_file_ref");
50  fnGallery = getParam("--gallery");
51  fnSym = getParam("--sym");
52  fnDir = getParam("--odir");
53  donNotUseWeights= checkParam("--dontUseWeights");
54  check_mirror = false;
55  check_mirror = checkParam("--check_mirrors");
56 }
const char * getParam(const char *param, int arg=0)
bool checkParam(const char *param)

◆ run()

void MultireferenceAligneability::run ( )
virtual

This function will be start running the program. it also should be implemented by derived classes.

Reimplemented from XmippProgram.

Definition at line 75 of file multireference_aligneability.cpp.

76 {
77  //xmipp_multireference_aligneability --volume 1BRD.vol --sym c3 --odir testMultiReference/ --angles_file testMultiReference/angles_iter001_00.xmd --angles_file_ref testMultiReference/gallery_alignment/angles_iter001_00.xmd &
79 
80  MetaDataVec mdOutQ;
81  MetaDataDb mdExp, mdExpSort, mdProj, mdGallery, mdInputParticles, mdInputParticlesRef;
82  size_t maxNImg;
83  FileName fnOutCL, fnOutQ;
84  fnOutCL = fnDir+"/pruned_particles_alignability.xmd";
85  fnOutQ = fnDir+"/validationAlignability.xmd";
86 
87  SL.readSymmetryFile(fnSym.c_str());
88 
89  mdInputParticles.read(fnParticles);
90  mdInputParticlesRef.read(fnParticles);
91  mdProj.read(finRef);
92  mdExp.read(fin);
93  mdGallery.read(fnGallery);
94 
95  mdExpSort.sort(mdExp,MDL_IMAGE_IDX,true,-1,0);
96  size_t sz = mdExp.size();
97  mdExpSort.getValue(MDL_IMAGE_IDX,maxNImg,sz);
98 
99  String expression;
100  MDRowSql row,rowInput,rowInputRef;
101 
102  double validationAlignabilityPrecision, validationAlignabilityAccuracy, validationAlignability, validationMirror;
103  validationAlignabilityPrecision = 0;
104  validationAlignabilityAccuracy = 0;
105  validationAlignability = 0;
106  validationMirror = 0;
107 
108  if (rank==0)
109  init_progress_bar(maxNImg);
110 
111  MetaDataVec tempMdExp, tempMdProj;
112  double sum_w_exp;
113  double sum_w_proj;
114  double sum_noise;
115  double error_mirror_exp;
116  double error_mirror_proj;
117 
118  sum_w_exp = 0;
119  sum_w_proj = 0;
120  sum_noise = 0;
121  error_mirror_exp = 0;
122  error_mirror_proj = 0;
123 
124  expression = formatString("imageIndex == %lu",maxNImg);
125  tempMdExp.importObjects(mdExp, MDExpression(expression));
126  size_t numProjs = tempMdExp.size();
127  tempMdExp.clear();
128 
129  //Noise
130  calc_sumw2(numProjs, sum_noise, mdGallery);
131 
132  double rankPrec = 0.;
133  double rankAccNoMirror = 0.;
134  double rankAccMirror = 0.;
135 
136  double accuracy = 0.;
137  double accuracyRef = 0.;
138  double accuracyMirror = 0.;
139  double accuracyMirrorRef = 0.;
140 
141  FileName imagePath;
142 
143  for (size_t i=0; i<=maxNImg;i++)
144  {
145  if ((i+1)%Nprocessors==rank)
146  {
147  expression = formatString("imageIndex == %lu",i);
148  tempMdExp.importObjects(mdExp, MDExpression(expression));
149  tempMdProj.importObjects(mdProj, MDExpression(expression));
150  mdInputParticles.getRow(rowInput,i+1);
151  mdInputParticles.getRow(rowInputRef,i+1);
152 
153 
154  if ( (tempMdExp.size()==0) || (tempMdProj.size()==0))
155  continue;
156 
157  calc_sumu(tempMdExp, sum_w_exp, error_mirror_exp);
158  calc_sumu(tempMdProj, sum_w_proj, error_mirror_proj);
159 
160  obtainAngularAccuracy(tempMdExp, rowInput, accuracy, accuracyMirror);
161  obtainAngularAccuracy(tempMdProj, rowInputRef, accuracyRef, accuracyMirrorRef);
162 
163 #ifdef DEBUG
164 
165  std::cout << " " << std::endl;
166  std::cout << "accuracy " << accuracy << std::endl;
167  std::cout << "accuracyRef " << accuracyRef << std::endl;
168  std::cout << "accuracy2f " << accuracyRef/accuracy << std::endl;
169 
170 
171 
172 #endif
173 #undef DEBUG
174 
175  rankPrec = 1/(sum_w_proj-sum_noise)*(sum_w_exp-sum_noise);
176  rankAccMirror = 1/(accuracyRef-sum_noise)*(accuracy-sum_noise);
177  rankAccNoMirror = 1/(accuracyMirrorRef-sum_noise)*(accuracyMirror-sum_noise);
178 
179  tempMdExp.getValue(MDL_IMAGE,imagePath,1);
180  rowInput.setValue(MDL_IMAGE,imagePath);
181  rowInput.setValue(MDL_IMAGE_IDX,i);
182  rowInput.setValue(MDL_SCORE_BY_ALIGNABILITY_PRECISION, rankPrec);
183  rowInput.setValue(MDL_SCORE_BY_ALIGNABILITY_ACCURACY, rankAccMirror);
184  rowInput.setValue(MDL_SCORE_BY_MIRROR, rankAccNoMirror);
188  rowInput.setValue(MDL_SCORE_BY_ALIGNABILITY_ACCURACY_REF,accuracyRef);
189  rowInput.setValue(MDL_SCORE_BY_ALIGNABILITY_NOISE,sum_noise);
190 
191  mdPartialParticles.addRow(rowInput);
192 
193  rowInput.clear();
194  rowInputRef.clear();
195  tempMdExp.clear();
196  tempMdProj.clear();
197 
198  if (rank==0)
199  progress_bar(i+1);
200  }
201  }
202 
203  synchronize();
204  gatherResults();
205 
206 
207  if (rank == 0)
208  {
209  mdPartialParticles.write(fnOutCL);
210  row.clear();
211 
212  for (size_t objId : mdPartialParticles.ids())
213  {
216  mdPartialParticles.getValue(MDL_SCORE_BY_MIRROR,rankAccNoMirror,objId);
217 
218  validationAlignabilityPrecision += (rankPrec>0.5);
219  validationAlignabilityAccuracy += (rankAccMirror > 0.5);
220  validationAlignability += ( (rankAccMirror > 0.5) && (rankPrec>0.5));
221  validationMirror += (rankAccNoMirror> 0.5);
222 
223  }
224 
225  validationAlignabilityPrecision /= (maxNImg+1);
226  validationAlignabilityAccuracy /= (maxNImg+1);
227  validationAlignability /= (maxNImg+1);
228  validationMirror /= (maxNImg+1);
229 
231  row.setValue(MDL_WEIGHT_PRECISION_ALIGNABILITY,validationAlignabilityPrecision);
232  row.setValue(MDL_WEIGHT_ACCURACY_ALIGNABILITY,validationAlignabilityAccuracy);
233  row.setValue(MDL_WEIGHT_ALIGNABILITY,validationAlignability);
234  row.setValue(MDL_WEIGHT_PRECISION_MIRROR,validationMirror);
235 
236  mdOutQ.addRow(row);
237  mdOutQ.write(fnOutQ);
238 
239  }
240 
241 }
void init_progress_bar(long total)
score by alignability (double)
Weight due to Alignability Precision and Accuracy.
Weight due to Alignability Precision.
score by alignability experimental particles (double)
Index of an image within a list (size_t)
void clear() override
score by alignability references (double)
bool getValue(MDObject &mdValueOut, size_t id) const override
int readSymmetryFile(FileName fn_sym, double accuracy=SYM_ACCURACY)
Definition: symmetries.cpp:33
score by alignability (double)
void write(const FileName &outFile, WriteModeMetaData mode=MD_OVERWRITE) const
virtual IdIteratorProxy< false > ids()
size_t size() const override
#define i
size_t addRow(const MDRow &row) override
void clear() override
std::unique_ptr< MDRow > getRow(size_t id) override
score by alignability references (double)
size_t addRow(const MDRow &row) override
void setValue(const MDObject &object) override
void importObjects(const MetaData &md, const std::vector< size_t > &objectsToAdd, bool doClear=true) override
void progress_bar(long rlen)
void write(const FileName &outFile, WriteModeMetaData mode=MD_OVERWRITE) const override
score by alignability experimental particles (double)
size_t size() const override
bool getValue(MDObject &mdValueOut, size_t id) const override
score by alignability noise (double)
void sort(MetaDataDb &MDin, const MDLabel sortLabel, bool asc=true, int limit=-1, int offset=0)
score by mirror (double)
std::string String
Definition: xmipp_strings.h:34
String formatString(const char *format,...)
void read(const FileName &inFile, const std::vector< MDLabel > *desiredLabels=NULL, bool decomposeStack=true) override
Weight due to Mirror Precision.
Weight due to Alignability Accuracy.
unsigned int randomize_random_generator()
Name of an image (std::string)

Member Data Documentation

◆ check_mirror

bool MultireferenceAligneability::check_mirror

Definition at line 53 of file multireference_aligneability.h.

◆ donNotUseWeights

bool MultireferenceAligneability::donNotUseWeights

Definition at line 51 of file multireference_aligneability.h.

◆ fin

FileName MultireferenceAligneability::fin

Definition at line 49 of file multireference_aligneability.h.

◆ finRef

FileName MultireferenceAligneability::finRef

Definition at line 49 of file multireference_aligneability.h.

◆ fnDir

FileName MultireferenceAligneability::fnDir

Filenames

Definition at line 49 of file multireference_aligneability.h.

◆ fnGallery

FileName MultireferenceAligneability::fnGallery

Definition at line 49 of file multireference_aligneability.h.

◆ fnInit

FileName MultireferenceAligneability::fnInit

Definition at line 49 of file multireference_aligneability.h.

◆ fnParticles

FileName MultireferenceAligneability::fnParticles

Definition at line 49 of file multireference_aligneability.h.

◆ fnParticlesRef

FileName MultireferenceAligneability::fnParticlesRef

Definition at line 49 of file multireference_aligneability.h.

◆ fnSym

FileName MultireferenceAligneability::fnSym

Definition at line 49 of file multireference_aligneability.h.

◆ mdPartialParticles

MetaDataDb MultireferenceAligneability::mdPartialParticles

Definition at line 58 of file multireference_aligneability.h.

◆ Nprocessors

size_t MultireferenceAligneability::Nprocessors

Definition at line 56 of file multireference_aligneability.h.

◆ rank

size_t MultireferenceAligneability::rank

Definition at line 56 of file multireference_aligneability.h.

◆ SL

SymList MultireferenceAligneability::SL

Definition at line 54 of file multireference_aligneability.h.


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