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

#include <classify_first_split3.h>

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

Public Member Functions

void readParams ()
 Read argument from command line. More...
 
void show ()
 Show. More...
 
void defineParams ()
 Define parameters. More...
 
void run ()
 Run. More...
 
void updateVolume (const std::vector< size_t > &objIds1, const FileName &fnOut, FourierProjector &projector)
 
void calculateProjectedIms (size_t id, double &corrI_P1, double &corrI_P2)
 
- 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 fnClasses
 
FileName fnRoot
 
int Niter
 
int Nsamples
 
FileName fnSym
 
bool externalMask
 
Mask mask
 
double alpha
 
String mpiCommand
 
bool mpiUse
 
Image< double > V
 
Image< double > imgV
 
MultidimArray< double > projV
 
int Nvols
 
size_t maskSize
 
double sumCorrDiff
 
double sum2CorrDiff
 
double sumCorr1
 
double sumCorr2
 
double sum2Corr1
 
double sum2Corr2
 
int count1
 
int count2
 
int countChange
 
int countTotal
 
MetaDataVec md
 
Projection PV
 
FourierProjectorprojectorV1
 
FourierProjectorprojectorV2
 
int countSwap
 
int countRandomSwap
 
int countNormalSwap
 
- 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

Classification First Split 2 Parameters.

Definition at line 40 of file classify_first_split3.h.

Member Function Documentation

◆ calculateProjectedIms()

void ProgClassifyFirstSplit3::calculateProjectedIms ( size_t  id,
double &  corrI_P1,
double &  corrI_P2 
)

Definition at line 98 of file classify_first_split3.cpp.

98  {
99 
100  //Project the first volume with the parameters in the randomly selected image
101  double rot, tilt, psi, x, y;
102  bool flip;
103  MDRowVec currentRow;
104  FileName fnImg;
106 
107  md.getRow(currentRow, id);
108  currentRow.getValue(MDL_IMAGE,fnImg);
109  imgV.read(fnImg);
110  currentRow.getValue(MDL_ANGLE_ROT,rot);
111  currentRow.getValue(MDL_ANGLE_TILT,tilt);
112  currentRow.getValue(MDL_ANGLE_PSI,psi);
113  currentRow.getValue(MDL_SHIFT_X,x);
114  currentRow.getValue(MDL_SHIFT_Y,y);
115  currentRow.getValue(MDL_FLIP,flip);
116  A.initIdentity(3);
117  MAT_ELEM(A,0,2)=x;
118  MAT_ELEM(A,1,2)=y;
119  if (flip)
120  {
121  MAT_ELEM(A,0,0)*=-1;
122  MAT_ELEM(A,0,1)*=-1;
123  MAT_ELEM(A,0,2)*=-1;
124  }
125  auto xdim = (int)XSIZE(V());
126  projectVolume(*projectorV1, PV, xdim, xdim, rot, tilt, psi);
127  applyGeometry(xmipp_transformation::LINEAR,projV,PV(),A,xmipp_transformation::IS_INV,xmipp_transformation::DONT_WRAP,0.);
128  corrI_P1 = correlation(imgV(), projV);
129 
130  projectVolume(*projectorV2, PV, xdim, xdim, rot, tilt, psi);
131  applyGeometry(xmipp_transformation::LINEAR,projV,PV(),A,xmipp_transformation::IS_INV,xmipp_transformation::DONT_WRAP,0.);
132  corrI_P2 = correlation(imgV(), projV);
133 }
Rotation angle of an image (double,degrees)
double correlation(const MultidimArray< T > &x, const MultidimArray< T > &y, const MultidimArray< int > *mask=nullptr, int l=0, int m=0, int q=0)
Definition: filters.h:249
Tilting angle of an image (double,degrees)
static double * y
Shift for the image in the X axis (double)
void applyGeometry(int SplineDegree, MultidimArray< std::complex< double > > &V2, const MultidimArray< std::complex< double > > &V1, const Matrix2D< double > &A, bool inv, bool wrap, std::complex< double > outside, MultidimArray< double > *BcoeffsPtr)
Special label to be used when gathering MDs in MpiMetadataPrograms.
std::unique_ptr< MDRow > getRow(size_t id) override
doublereal * x
T & getValue(MDLabel label)
#define MAT_ELEM(m, i, j)
Definition: matrix2d.h:116
Flip the image? (bool)
#define XSIZE(v)
void projectVolume(FourierProjector &projector, Projection &P, int Ydim, int Xdim, double rot, double tilt, double psi, const MultidimArray< double > *ctf)
MultidimArray< double > projV
FourierProjector * projectorV2
double psi(const double x)
int read(const FileName &name, DataMode datamode=DATA, size_t select_img=ALL_IMAGES, bool mapData=false, int mode=WRITE_READONLY)
Shift for the image in the Y axis (double)
FourierProjector * projectorV1
Name of an image (std::string)
void initIdentity()
Definition: matrix2d.h:673

◆ defineParams()

void ProgClassifyFirstSplit3::defineParams ( )
virtual

Define parameters.

Reimplemented from XmippProgram.

Definition at line 58 of file classify_first_split3.cpp.

59 {
60  addUsageLine("Produce a first volume split from a set of directional classes using K-means");
61  addParamsLine(" -i <metadata> : Metadata with the list of directional classes with angles");
62  addParamsLine(" [--oroot <fnroot=split>] : Rootname for the output");
63  addParamsLine(" [--Niter <n=5000>] : Number of iterations");
64  addParamsLine(" [--sym <sym=c1>] : Symmetry");
65  addParamsLine(" [--mpiCommand <mystr>] : MPI command to parallelize the reconstruction process");
67 }
static void defineParams(XmippProgram *program, int allowed_data_types=ALL_KINDS, const char *prefix=nullptr, const char *comment=nullptr, bool moreOptions=false)
Definition: mask.cpp:1203
#define INT_MASK
Definition: mask.h:385
void addUsageLine(const char *line, bool verbatim=false)
void addParamsLine(const String &line)

◆ readParams()

void ProgClassifyFirstSplit3::readParams ( )
virtual

Read argument from command line.

Reimplemented from XmippProgram.

Definition at line 31 of file classify_first_split3.cpp.

32 {
33  fnClasses = getParam("-i");
34  fnRoot = getParam("--oroot");
35  Niter = getIntParam("--Niter");
36  fnSym = getParam("--sym");
38  if ((externalMask=checkParam("--mask")))
39  mask.readParams(this);
40  if ((mpiUse=checkParam("--mpiCommand")))
41  mpiCommand = getParam("--mpiCommand");
42 }
int allowed_data_types
Definition: mask.h:495
const char * getParam(const char *param, int arg=0)
void readParams(XmippProgram *program)
Definition: mask.cpp:1284
#define INT_MASK
Definition: mask.h:385
bool checkParam(const char *param)
int getIntParam(const char *param, int arg=0)

◆ run()

void ProgClassifyFirstSplit3::run ( )
virtual

Run.

Reimplemented from XmippProgram.

Definition at line 135 of file classify_first_split3.cpp.

136 {
137  show();
138 
140 
141  countSwap=0;
142  countRandomSwap=0;
143  countNormalSwap=0;
144  double th=0.05;
145 
146  // Generate initial volumes
147  md.read(fnClasses);
148  std::vector<size_t> objIds1, objIds2;
149 
150  for (size_t objId : md.ids()) {
151  if(rnd_unif()<0.5)
152  objIds1.push_back(objId);
153  else
154  objIds2.push_back(objId);
155  }
156 
159 
160  updateVolume(objIds1, fnRoot+"_avg1", *projectorV1);
161  updateVolume(objIds2, fnRoot+"_avg2", *projectorV2);
162 
164  Image<double> img1, img2;
165  MultidimArray<double> imgProjectedV1, imgProjectedV2;
166 
167  for (int n=0; n<Niter; n++)
168  {
169  // Select a random image from the subset of every volume
170  size_t idx1 = floor(rnd_unif(0,objIds1.size()));
171  size_t idx2 = floor(rnd_unif(0,objIds2.size()));
172  size_t id1 = objIds1[idx1];
173  size_t id2 = objIds2[idx2];
174 
175  bool swap=false;
176  if(rnd_unif()<th){
177  swap = true;
178  countRandomSwap++;
179  //std::cout << "RANDOM" << std::endl;
180  }
181  else
182  {
183  //Calculating correlations
184  double corrI1_P1, corrI2_P1, corrI2_P2, corrI1_P2;
185  calculateProjectedIms(id1, corrI1_P1, corrI1_P2);
186  calculateProjectedIms(id2, corrI2_P1, corrI2_P2);
187 
188  //std::cout << " corrI1_P1 = " << corrI1_P1 << " corrI2_P1 = " << corrI2_P1
189  // << " corrI2_P2 = " << corrI2_P2 << " corrI1_P2 = " << corrI1_P2 << std::endl;
190  if (corrI1_P2>corrI1_P1 && corrI2_P1>corrI2_P2){
191  swap=true;
192  countNormalSwap++;
193  }
194 
195  }
196 
197  if(swap)
198  {
199  countSwap++;
200  //std::cout << "SWAPPING" << std::endl;
201  //Generate metadata with swapped images
202  objIds1.erase(objIds1.begin()+idx1);
203  objIds2.erase(objIds2.begin()+idx2);
204  objIds1.push_back(id2);
205  objIds2.push_back(id1);
206  updateVolume(objIds1, fnRoot+"_avg1", *projectorV1);
207  updateVolume(objIds2, fnRoot+"_avg2", *projectorV2);
208 
209  //char c;
210  //std::cout << "Press any key" << std::endl;
211  //std::cin >> c;
212  }
213 
214  if (countSwap>0){
215  th = (double)countSwap/(double)(n*10); //to make the th lower with time
216  //std::cout << " th = " << th << std::endl;
217  }
218 
219  progress_bar(n);
220 
221  }
222  progress_bar(Niter);
223  std::cout << " Niter = " << Niter << " Images in set1 = " << objIds1.size() << " Images in set2 = " << objIds2.size() << " countRandomSwap = " << countRandomSwap << " countNormalSwap = " << countNormalSwap << std::endl;
224  //deleteFile(fnSubset);
225  //deleteFile(fnSubsetVol);
226 
227  // Save volumes
228  //V1.write(fnRoot+"_v1.vol");
229  //V2.write(fnRoot+"_v2.vol");
230 }
void init_progress_bar(long total)
__host__ __device__ float2 floor(const float2 v)
void read(const FileName &inFile, const std::vector< MDLabel > *desiredLabels=nullptr, bool decomposeStack=true) override
virtual IdIteratorProxy< false > ids()
double rnd_unif()
void progress_bar(long rlen)
void calculateProjectedIms(size_t id, double &corrI_P1, double &corrI_P2)
FourierProjector * projectorV2
void updateVolume(const std::vector< size_t > &objIds1, const FileName &fnOut, FourierProjector &projector)
unsigned int randomize_random_generator()
FourierProjector * projectorV1
int * n

◆ show()

void ProgClassifyFirstSplit3::show ( )

Show.

Definition at line 45 of file classify_first_split3.cpp.

46 {
47  if (!verbose)
48  return;
49  std::cout
50  << "Input classes: " << fnClasses << std::endl
51  << "Output root: " << fnRoot << std::endl
52  << "N. iterations: " << Niter << std::endl
53  << "Symmetry: " << fnSym << std::endl
54  ;
55 }
int verbose
Verbosity level.

◆ updateVolume()

void ProgClassifyFirstSplit3::updateVolume ( const std::vector< size_t > &  objIds1,
const FileName fnOut,
FourierProjector projector 
)

Definition at line 70 of file classify_first_split3.cpp.

71 {
72  MetaDataVec mdOut;
73  for(size_t i=0; i<objIds.size(); i++){
74  MDRowVec row;
75  md.getRow(row, objIds[i]);
76  mdOut.addRow(row);
77  }
78  mdOut.write(fnRoot+".xmd");
79 
80  String command;
81  if (!mpiUse){
82  command=formatString("xmipp_reconstruct_fourier -i %s.xmd -o %s.vol --max_resolution 0.25 --sym %s -v 0",
83  fnRoot.c_str(),fnRoot.c_str(), fnSym.c_str());
84  }else{
85  command=formatString(" `which xmipp_mpi_reconstruct_fourier` -i %s.xmd -o %s.vol --max_resolution 0.25 --sym %s -v 0",
86  fnRoot.c_str(),fnRoot.c_str(), fnSym.c_str());
87  command = mpiCommand + command;
88  }
89  //std::cout << command << std::endl;
90  int retval=system(command.c_str());
91  V.read(fnRoot+".vol");
92  V().setXmippOrigin();
93 
94  projector.updateVolume(V());
95 }
void updateVolume(MultidimArray< double > &V)
void write(const FileName &outFile, WriteModeMetaData mode=MD_OVERWRITE) const
std::unique_ptr< MDRow > getRow(size_t id) override
#define i
size_t addRow(const MDRow &row) override
std::string String
Definition: xmipp_strings.h:34
String formatString(const char *format,...)
int read(const FileName &name, DataMode datamode=DATA, size_t select_img=ALL_IMAGES, bool mapData=false, int mode=WRITE_READONLY)

Member Data Documentation

◆ alpha

double ProgClassifyFirstSplit3::alpha

Learning rate

Definition at line 58 of file classify_first_split3.h.

◆ count1

int ProgClassifyFirstSplit3::count1

Definition at line 84 of file classify_first_split3.h.

◆ count2

int ProgClassifyFirstSplit3::count2

Definition at line 84 of file classify_first_split3.h.

◆ countChange

int ProgClassifyFirstSplit3::countChange

Definition at line 84 of file classify_first_split3.h.

◆ countNormalSwap

int ProgClassifyFirstSplit3::countNormalSwap

Definition at line 88 of file classify_first_split3.h.

◆ countRandomSwap

int ProgClassifyFirstSplit3::countRandomSwap

Definition at line 88 of file classify_first_split3.h.

◆ countSwap

int ProgClassifyFirstSplit3::countSwap

Definition at line 88 of file classify_first_split3.h.

◆ countTotal

int ProgClassifyFirstSplit3::countTotal

Definition at line 84 of file classify_first_split3.h.

◆ externalMask

bool ProgClassifyFirstSplit3::externalMask

External mask

Definition at line 54 of file classify_first_split3.h.

◆ fnClasses

FileName ProgClassifyFirstSplit3::fnClasses

Directional classes

Definition at line 44 of file classify_first_split3.h.

◆ fnRoot

FileName ProgClassifyFirstSplit3::fnRoot

Rootname

Definition at line 46 of file classify_first_split3.h.

◆ fnSym

FileName ProgClassifyFirstSplit3::fnSym

Symmetry

Definition at line 52 of file classify_first_split3.h.

◆ imgV

Image<double> ProgClassifyFirstSplit3::imgV

Definition at line 79 of file classify_first_split3.h.

◆ mask

Mask ProgClassifyFirstSplit3::mask

Mask

Definition at line 56 of file classify_first_split3.h.

◆ maskSize

size_t ProgClassifyFirstSplit3::maskSize

Definition at line 82 of file classify_first_split3.h.

◆ md

MetaDataVec ProgClassifyFirstSplit3::md

Definition at line 85 of file classify_first_split3.h.

◆ mpiCommand

String ProgClassifyFirstSplit3::mpiCommand

String with MPI command

Definition at line 60 of file classify_first_split3.h.

◆ mpiUse

bool ProgClassifyFirstSplit3::mpiUse

Definition at line 61 of file classify_first_split3.h.

◆ Niter

int ProgClassifyFirstSplit3::Niter

Number of iterations

Definition at line 48 of file classify_first_split3.h.

◆ Nsamples

int ProgClassifyFirstSplit3::Nsamples

Number of samples per reconstruction

Definition at line 50 of file classify_first_split3.h.

◆ Nvols

int ProgClassifyFirstSplit3::Nvols

Definition at line 81 of file classify_first_split3.h.

◆ projectorV1

FourierProjector* ProgClassifyFirstSplit3::projectorV1

Definition at line 87 of file classify_first_split3.h.

◆ projectorV2

FourierProjector * ProgClassifyFirstSplit3::projectorV2

Definition at line 87 of file classify_first_split3.h.

◆ projV

MultidimArray<double> ProgClassifyFirstSplit3::projV

Definition at line 80 of file classify_first_split3.h.

◆ PV

Projection ProgClassifyFirstSplit3::PV

Definition at line 86 of file classify_first_split3.h.

◆ sum2Corr1

double ProgClassifyFirstSplit3::sum2Corr1

Definition at line 83 of file classify_first_split3.h.

◆ sum2Corr2

double ProgClassifyFirstSplit3::sum2Corr2

Definition at line 83 of file classify_first_split3.h.

◆ sum2CorrDiff

double ProgClassifyFirstSplit3::sum2CorrDiff

Definition at line 83 of file classify_first_split3.h.

◆ sumCorr1

double ProgClassifyFirstSplit3::sumCorr1

Definition at line 83 of file classify_first_split3.h.

◆ sumCorr2

double ProgClassifyFirstSplit3::sumCorr2

Definition at line 83 of file classify_first_split3.h.

◆ sumCorrDiff

double ProgClassifyFirstSplit3::sumCorrDiff

Definition at line 83 of file classify_first_split3.h.

◆ V

Image<double> ProgClassifyFirstSplit3::V

Definition at line 79 of file classify_first_split3.h.


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