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

#include <metadata_split_3D.h>

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

Public Member Functions

void readParams ()
 Read argument from command line. More...
 
void show ()
 Show. More...
 
void defineParams ()
 Usage. More...
 
void run ()
 Run. More...
 
- 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 fn_in
 
FileName fn_vol
 
FileName fn_sym
 
FileName fn_oroot
 
double angularSampling
 
double maxDist
 
MetaDataDb mdRef
 
MetaDataDb mdIn
 
Matrix1D< int > correlatesWell
 
- 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

MetadataSplit3D parameters.

Definition at line 36 of file metadata_split_3D.h.

Member Function Documentation

◆ defineParams()

void ProgMetadataSplit3D::defineParams ( )
virtual

Usage.

Reimplemented from XmippProgram.

Definition at line 60 of file metadata_split_3D.cpp.

61 {
62  addUsageLine("Separate projections according to a volume");
63  addParamsLine(" -i <metadata> : Metadata with the images to separate. Make sure they have an angular assignment");
64  addParamsLine(" --vol <volume> : Reference volume");
65  addParamsLine(" [--oroot <rootname=split>] : Rootname for the output files");
66  addParamsLine(" [--sym <symmetry_file=c1>] : Symmetry file if any");
67  addParamsLine(" :+The definition of the symmetry is described at [[transform_symmetrize_v3][transform_symmetrize]]");
68  addParamsLine(" [--angSampling <a=5>] : Angular sampling in degrees");
69  addParamsLine(" [--maxDist <a=10>] : Maximum angular distance in degrees");
70  addExampleLine("xmipp_metadata_split_3D -i projections.sel --vol volume.vol --oroot split");
71 }
void addExampleLine(const char *example, bool verbatim=true)
void addUsageLine(const char *line, bool verbatim=false)
void addParamsLine(const String &line)

◆ readParams()

void ProgMetadataSplit3D::readParams ( )
virtual

Read argument from command line.

Reimplemented from XmippProgram.

Definition at line 34 of file metadata_split_3D.cpp.

35 {
36  fn_in = getParam("-i");
37  fn_vol = getParam("--vol");
38  fn_sym = getParam("--sym");
39  fn_oroot = getParam("--oroot");
40  angularSampling = getDoubleParam("--angSampling");
41  maxDist = getDoubleParam("--maxDist");
42 }
double getDoubleParam(const char *param, int arg=0)
const char * getParam(const char *param, int arg=0)

◆ run()

void ProgMetadataSplit3D::run ( )
virtual

Run.

Reimplemented from XmippProgram.

Definition at line 127 of file metadata_split_3D.cpp.

128 {
129  // Generate projections
130  std::cerr << "Generating projections ..." << std::endl;
131  String cmd=formatString("xmipp_angular_project_library -i %s -o %s_gallery.stk --sampling_rate %f --sym %s --method fourier 1 0.25 bspline --compute_neighbors --angular_distance -1 --experimental_images %s -v 0",
132  fn_vol.c_str(),fn_oroot.c_str(),angularSampling,fn_sym.c_str(),fn_in.c_str());
133  if (system(cmd.c_str())!=0)
134  REPORT_ERROR(ERR_UNCLASSIFIED,"Error when generating projections");
135 
136  // Read reference and input metadatas
137  mdIn.read(fn_in);
139  REPORT_ERROR(ERR_MD_MISSINGLABEL,"Input metadata with images does not contain an imageIndex column");
141  mdRef.read(fn_oroot+"_gallery.doc");
142  deleteFile(fn_oroot+"_gallery.doc");
143  deleteFile(fn_oroot+"_gallery.stk");
144  deleteFile(fn_oroot+"_gallery_sampling.xmd");
145 
146  // Get the maximum reference number
147  size_t maxRef=0, refno;
148  for (size_t objId : mdIn.ids())
149  {
150  mdIn.getValue(MDL_IMAGE_IDX, refno, objId);
151  if (refno>maxRef)
152  maxRef=refno;
153  }
154 
155  // Calculate coocurrence matrix
156  correlatesWell.initZeros(maxRef+1);
157  Matrix1D<double> projectionDir;
158  std::vector<FileName> fnNeighbours;
159  FileName fnImg;
161  MetaDataDb mdNeighbours;
162  std::vector<size_t> refs;
163  std::vector<double> upperHalf;
164  int i=0;
165  std::cerr << "Classifying projections ...\n";
167 
168  for (size_t objId : mdRef.ids())
169  {
170  // Get the projection direction of this image
171  double rot, tilt;
172  mdRef.getValue(MDL_ANGLE_ROT,rot, objId);
173  mdRef.getValue(MDL_ANGLE_TILT,tilt, objId);
174  Euler_direction(rot,tilt,0,projectionDir);
175 
176  // Get all images in the input metadata that are close to this one
177  getNeighbours(mdIn,projectionDir,mdNeighbours,maxDist);
178 
179  // Check if it is upper or lower half
180  if (mdNeighbours.size()>0)
181  {
182  mdRef.getValue(MDL_IMAGE,fnImg, objId);
183  analyzeNeighbours(mdNeighbours,fnImg);
184  mdNeighbours.getColumnValues(MDL_IMAGE_IDX,refs);
185  mdNeighbours.getColumnValues(MDL_COST,upperHalf);
186 
187  size_t imax=refs.size();
188  for (size_t i=0; i<imax; ++i)
189  VEC_ELEM(correlatesWell,refs[i])+=upperHalf[i];
190  }
191  ++i;
192  progress_bar(i);
193  }
195 
196  // Split in two metadatas
197  MetaDataVec mdUpper, mdLower;
198  for (auto& row : mdIn)
199  {
200  mdIn.getValue(MDL_IMAGE_IDX, refno, row.id());
201  row.setValue(MDL_COST,(double)VEC_ELEM(correlatesWell,refno));
202 
203  if (VEC_ELEM(correlatesWell,refno)>0)
204  mdUpper.addRow(row);
205  else if (VEC_ELEM(correlatesWell,refno)<0)
206  mdLower.addRow(row);
207  }
208  mdUpper.write(fn_oroot+"_upper.xmd");
209  mdLower.write(fn_oroot+"_lower.xmd");
210 }
Just to locate unclassified errors.
Definition: xmipp_error.h:192
void init_progress_bar(long total)
Rotation angle of an image (double,degrees)
#define VEC_ELEM(v, i)
Definition: matrix1d.h:245
#define REPORT_ERROR(nerr, ErrormMsg)
Definition: xmipp_error.h:211
Index of an image within a list (size_t)
void Euler_direction(double alpha, double beta, double gamma, Matrix1D< double > &v)
Definition: geometry.cpp:721
#define DEG2RAD(d)
Definition: xmipp_macros.h:312
bool getValue(MDObject &mdValueOut, size_t id) const override
Tilting angle of an image (double,degrees)
void getNeighbours(MetaDataDb &mdIn, const Matrix1D< double > &projectionDir, MetaDataDb &mdNeighbours, double maxDist)
virtual IdIteratorProxy< false > ids()
#define i
void deleteFile(const char *line)
Definition: tools.cpp:280
void analyzeNeighbours(MetaData &mdNeighbours, const FileName &fnRef)
void getColumnValues(const MDLabel label, std::vector< MDObject > &valuesOut) const override
Cost for the image (double)
void progress_bar(long rlen)
Missing expected label.
Definition: xmipp_error.h:158
void initZeros()
Definition: matrix1d.h:592
size_t size() const override
bool getValue(MDObject &mdValueOut, size_t id) const override
virtual void removeDisabled()
Matrix1D< int > correlatesWell
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
Name of an image (std::string)
bool containsLabel(const MDLabel label) const override
Definition: metadata_db.h:305

◆ show()

void ProgMetadataSplit3D::show ( )

Show.

Definition at line 45 of file metadata_split_3D.cpp.

46 {
47  if (!verbose)
48  return;
49  std::cout
50  << "Input images: " << fn_in << std::endl
51  << "Reference volume: " << fn_vol << std::endl
52  << "Output rootname: " << fn_oroot << std::endl
53  << "Symmetry: " << fn_sym << std::endl
54  << "Angular sampling: " << angularSampling << std::endl
55  << "Maximum distance: " << maxDist << std::endl
56  ;
57 }
int verbose
Verbosity level.

Member Data Documentation

◆ angularSampling

double ProgMetadataSplit3D::angularSampling

Angular sampling rate

Definition at line 48 of file metadata_split_3D.h.

◆ correlatesWell

Matrix1D<int> ProgMetadataSplit3D::correlatesWell

Definition at line 59 of file metadata_split_3D.h.

◆ fn_in

FileName ProgMetadataSplit3D::fn_in

Input metadata with images

Definition at line 40 of file metadata_split_3D.h.

◆ fn_oroot

FileName ProgMetadataSplit3D::fn_oroot

Rootname for output

Definition at line 46 of file metadata_split_3D.h.

◆ fn_sym

FileName ProgMetadataSplit3D::fn_sym

Filename for the symmetry file

Definition at line 44 of file metadata_split_3D.h.

◆ fn_vol

FileName ProgMetadataSplit3D::fn_vol

Reference volume

Definition at line 42 of file metadata_split_3D.h.

◆ maxDist

double ProgMetadataSplit3D::maxDist

Maximum angular distance

Definition at line 50 of file metadata_split_3D.h.

◆ mdIn

MetaDataDb ProgMetadataSplit3D::mdIn

Definition at line 56 of file metadata_split_3D.h.

◆ mdRef

MetaDataDb ProgMetadataSplit3D::mdRef

Definition at line 53 of file metadata_split_3D.h.


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