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

#include <transform_dimred.h>

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

Public Member Functions

void readParams ()
 Read argument from command line. More...
 
void show ()
 Show. More...
 
void defineParams ()
 Define parameters. More...
 
void produceSideInfo ()
 Produce side info. More...
 
void run ()
 Main routine. More...
 
void insertImageInDataMatrix (size_t index, const MultidimArray< double > &mImg)
 From image to data matrix. More...
 
void extractImageFromDataMatrix (size_t index, MultidimArray< double > &mImg)
 From image to data matrix. More...
 
double progCorrelationDistance (size_t i1, size_t i2)
 Correlation distance between two images. More...
 
void extractRandomProjections ()
 
- Public Member Functions inherited from ProgDimRed
 ProgDimRed ()
 Empty constructor. More...
 
void estimateDimension ()
 Estimate dimensionality. 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 fnRandomSampling
 
int numGrids
 
String distance
 
MetaDataVec SFin
 
Mask mask
 
MultidimArray< double > I1
 
MultidimArray< double > I2
 
Matrix2D< double > M
 
AlignmentAux aux
 
CorrelationAux aux2
 
RotationalCorrelationAux aux3
 
- Public Attributes inherited from ProgDimRed
FileName fnIn
 
FileName fnOut
 
FileName fnMapping
 
int outputDim
 
String dimRefMethod
 
String dimEstMethod
 
int kNN
 
int Niter
 
double t
 
double sigma
 
bool global
 
Matrix2D< double > X
 
DimRedAlgorithmalgorithm
 
PCA algorithmPCA
 
LTSA algorithmLTSA
 
DiffusionMaps algorithmDiffusionMaps
 
LLTSA algorithmLLTSA
 
LPP algorithmLPP
 
KernelPCA algorithmKernelPCA
 
ProbabilisticPCA algorithmProbabilisticPCA
 
LaplacianEigenmap algorithmLaplacianEigenmap
 
HessianLLE algorithmHessianLLE
 
NPE algorithmNPE
 
SPE algorithmSPE
 
- 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

Analyze cluster parameters.

Definition at line 38 of file transform_dimred.h.

Member Function Documentation

◆ defineParams()

void ProgTransformDimRed::defineParams ( )
virtual

Define parameters.

Reimplemented from ProgDimRed.

Definition at line 55 of file transform_dimred.cpp.

56 {
57  addUsageLine("This program takes an input metadata and projects each image onto a lower dimensional space using the selected method");
58  setDefaultComment("-i","Input metadata");
59  setDefaultComment("-o","Output metadata");
61  addParamsLine(" [--distance <d=Correlation>] : Distance between images");
62  addParamsLine(" where <d>");
63  addParamsLine(" Euclidean: Euclidean distance between images, no alignment");
64  addParamsLine(" Correlation: Correlation between images after alignment");
65  addParamsLine(" [--randomSample <file> <num=3>] : Generates a random sample of the reduced map with num grids in each direction");
66  addExampleLine("xmipp_transform_dimred -i images.xmd --randomSample randomSample.xmd");
67 }
void setDefaultComment(const char *param, const char *comment)
void addExampleLine(const char *example, bool verbatim=true)
virtual void defineParams()
Define parameters.
void addUsageLine(const char *line, bool verbatim=false)
void addParamsLine(const String &line)

◆ extractImageFromDataMatrix()

void ProgTransformDimRed::extractImageFromDataMatrix ( size_t  index,
MultidimArray< double > &  mImg 
)

From image to data matrix.

Definition at line 146 of file transform_dimred.cpp.

147 {
148  size_t index2 = 0;
149  const MultidimArray<int> &mMask=mask.get_binary_mask();
150  mImg.initZeros(mMask);
152  if (DIRECT_MULTIDIM_ELEM(mMask,n))
153  {
154  DIRECT_MULTIDIM_ELEM(mImg,n)=MAT_ELEM(X,index,index2);
155  index2++;
156  }
157 }
#define MAT_ELEM(m, i, j)
Definition: matrix2d.h:116
viol index
#define FOR_ALL_DIRECT_ELEMENTS_IN_MULTIDIMARRAY(v)
#define DIRECT_MULTIDIM_ELEM(v, n)
Matrix2D< double > X
Definition: matrix_dimred.h:67
void initZeros(const MultidimArray< T1 > &op)
const MultidimArray< int > & get_binary_mask() const
Definition: mask.h:707
int * n

◆ extractRandomProjections()

void ProgTransformDimRed::extractRandomProjections ( )

Definition at line 159 of file transform_dimred.cpp.

160 {
161  //number of grids in each axis
162  int num = numGrids;
163 
164  size_t numParticles = SFin.size();
165  std::vector<double> dimredProj;
166  std::vector< Matrix1D< double > > coor;
168  dummy.resizeNoCopy(numParticles);
169  for (int n = 0; n < outputDim; ++n)
170  coor.push_back(dummy);
171 
172  // Keep the reduced coefficients
173  size_t i = 0;
174  for (size_t objId : SFin.ids())
175  {
176  SFin.getValue(MDL_DIMRED, dimredProj, objId);
177  for (int n = 0; n < outputDim; ++n)
178  VEC_ELEM(coor[n],i) = dimredProj[n];
179  i++;
180  }
181 
182  // We obtain the max and min coordinate values
183  std::vector<double> minCoor, maxCoor;
184  for (int n=0; n<outputDim; ++n)
185  {
186  double minval, maxval;
187  coor[n].computeMinMax(minval, maxval);
188  minCoor.push_back(minval);
189  maxCoor.push_back(maxval);
190 
191  }
192 
193  Matrix2D <int> squares;
194  squares.resizeNoCopy(numParticles, (int)pow(num+1,outputDim));
195 
196  Matrix1D <int> numElems;
197  numElems.resizeNoCopy(MAT_XSIZE(squares));
198 
199  for (size_t i=0; i<numParticles; i++)
200  {
201  int index=0;
202  for (int n=(outputDim-1); n>=0; --n)
203  {
204  index*=num;
205  //std::cout << "minCoor : " << minCoor[n] << std::endl;
206  //std::cout << "maxCoor : " << maxCoor[n] << std::endl;
207  //std::cout << "VEC_ELEM(coor[n],i) : " << VEC_ELEM(coor[n],i) << std::endl;
208 
209  index+=(int)floor(( ( VEC_ELEM(coor[n],i) - minCoor[n]) / (maxCoor[n] - minCoor[n]))*num);
210  }
211 
212 
213  MAT_ELEM(squares,VEC_ELEM(numElems,index),index)=i;
214  VEC_ELEM(numElems,index)++;
215  }
216 
217  int numElemFirstRow = 0;
218  for (size_t k=0; k < MAT_XSIZE(squares); k++)
219  if (VEC_ELEM(numElems,k)!=0)
220  numElemFirstRow++;
221 
222  std::vector<Matrix1D<double> > selectedCoor;
223  dummy.resizeNoCopy(numElemFirstRow);
224  for (int n=0; n<outputDim; ++n)
225  selectedCoor.push_back(dummy);
226 
227  //Metadata with the well sampled projection and random projections assigned
228  MetaDataVec SFout;
229  int indx = 0;
231  std::vector<String> fnImg;
233  for (size_t k=0; k <MAT_XSIZE(squares); k++)
234  {
235  if (MAT_ELEM(squares,0,k)!=0)
236  {
237  int randomN = round((rnd_unif(0,1))*VEC_ELEM(numElems,k));
238  for (int n=0; n<outputDim; ++n)
239  VEC_ELEM(selectedCoor[n],indx)=VEC_ELEM(coor[n],MAT_ELEM(squares,randomN,k));
240  size_t id=SFout.addObject();
241  SFout.setValue(MDL_IMAGE,fnImg[MAT_ELEM(squares,randomN,k)],id);
242  SFout.setValue(MDL_ANGLE_ROT,(rnd_unif(0,360)-180),id);
243  SFout.setValue(MDL_ANGLE_TILT,(rnd_unif(0,180)),id);
244  SFout.setValue(MDL_ANGLE_TILT,(rnd_unif(0,180)),id);
245  SFout.setValue(MDL_ANGLE_PSI,(rnd_unif(0,360)),id);
246  indx++;
247  }
248  }
249 
250  SFout.write(fnRandomSampling);
251 }
Rotation angle of an image (double,degrees)
#define VEC_ELEM(v, i)
Definition: matrix1d.h:245
__host__ __device__ float2 floor(const float2 v)
Tilting angle of an image (double,degrees)
Special label to be used when gathering MDs in MpiMetadataPrograms.
void write(const FileName &outFile, WriteModeMetaData mode=MD_OVERWRITE) const
virtual IdIteratorProxy< false > ids()
size_t size() const override
#define i
ql0001_ & k(htemp+1),(cvec+1),(atemp+1),(bj+1),(bl+1),(bu+1),(x+1),(clamda+1), &iout, infoqp, &zero,(w+1), &lenw,(iw+1), &leniw, &glob_grd.epsmac
void resizeNoCopy(int Ydim, int Xdim)
Definition: matrix2d.h:534
#define MAT_ELEM(m, i, j)
Definition: matrix2d.h:116
double rnd_unif()
viol index
bool setValue(const MDObject &mdValueIn, size_t id)
size_t addObject() override
Projection onto a reduced manifold (vector double)
double dummy
bool getValue(MDObject &mdValueOut, size_t id) const override
void getColumnValues(const MDLabel label, std::vector< MDObject > &valuesOut) const override
int round(double x)
Definition: ap.cpp:7245
#define MAT_XSIZE(m)
Definition: matrix2d.h:120
void resizeNoCopy(int Xdim)
Definition: matrix1d.h:458
unsigned int randomize_random_generator()
int * n
Name of an image (std::string)

◆ insertImageInDataMatrix()

void ProgTransformDimRed::insertImageInDataMatrix ( size_t  index,
const MultidimArray< double > &  mImg 
)

From image to data matrix.

Definition at line 134 of file transform_dimred.cpp.

135 {
136  size_t index2 = 0;
137  const MultidimArray<int> &mMask=mask.get_binary_mask();
139  if (DIRECT_MULTIDIM_ELEM(mMask,n))
140  {
141  MAT_ELEM(X,index,index2)=DIRECT_MULTIDIM_ELEM(mImg,n);
142  index2++;
143  }
144 }
#define MAT_ELEM(m, i, j)
Definition: matrix2d.h:116
viol index
#define FOR_ALL_DIRECT_ELEMENTS_IN_MULTIDIMARRAY(v)
#define DIRECT_MULTIDIM_ELEM(v, n)
Matrix2D< double > X
Definition: matrix_dimred.h:67
const MultidimArray< int > & get_binary_mask() const
Definition: mask.h:707
int * n

◆ produceSideInfo()

void ProgTransformDimRed::produceSideInfo ( )
virtual

Produce side info.

Reimplemented from ProgDimRed.

Definition at line 85 of file transform_dimred.cpp.

86 {
88 
89  // Read input selfile
90  SFin.read(fnIn);
91  if (SFin.size()==0)
92  return;
94 
95  // Adjust number of grid points
96  //JV I do not know why is this line below here and who has written!
97  //numGrids=floor(sqrt((double)(SFin.size())));
98 
99  MetaDataVec SFaux;
101  SFin=SFaux;
102 
103  // Design Mask
104  size_t Xdim, Ydim, Zdim, Ndim;
105  getImageSize(SFin,Xdim,Ydim,Zdim,Ndim);
106 
108  mask.mode = INNER_MASK;
109  mask.R1 = std::sqrt(0.25*Xdim*Xdim+0.25*Ydim*Ydim);
110  mask.resize(Ydim,Xdim);
112 
113  const MultidimArray<int> &mMask=mask.get_binary_mask();
114  X.resizeNoCopy(SFin.size(),mMask.sum());
115 
116  // Copy images
117  Image<double> img;
118  size_t index = 0;
119  for (size_t objId : SFin.ids())
120  {
121  img.readApplyGeo(SFin, objId);
122  insertImageInDataMatrix(index++, img());
123  }
125 
126  // Set distance
127  prog=this;
128  if (distance=="Correlation")
130  else
131  algorithm->distance=NULL;
132 }
virtual void produceSideInfo()
Produce side info.
void removeDuplicates(MetaData &MDin, MDLabel label=MDL_UNDEFINED)
void read(const FileName &inFile, const std::vector< MDLabel > *desiredLabels=nullptr, bool decomposeStack=true) override
void setInputData(Matrix2D< double > &X)
Set input data.
void sqrt(Image< double > &op)
void getImageSize(const MetaData &md, size_t &Xdim, size_t &Ydim, size_t &Zdim, size_t &Ndim, MDLabel image_label)
void insertImageInDataMatrix(size_t index, const MultidimArray< double > &mImg)
From image to data matrix.
void resize(size_t Xdim)
Definition: mask.cpp:654
DimRedAlgorithm * algorithm
Definition: matrix_dimred.h:68
FileName fnIn
Definition: matrix_dimred.h:51
virtual IdIteratorProxy< false > ids()
int readApplyGeo(const FileName &name, const MDRow &row, const ApplyGeoParams &params=DefaultApplyGeoParams)
size_t size() const override
void resizeNoCopy(int Ydim, int Xdim)
Definition: matrix2d.h:534
ProgTransformDimRed * prog
double correlationDistance(const Matrix2D< double > &X, size_t i1, size_t i2)
viol index
double R1
Definition: mask.h:413
int type
Definition: mask.h:402
void generate_mask(bool apply_geo=false)
Definition: mask.cpp:1577
DimRedDistance2 distance
Distance function.
Definition: dimred_tools.h:150
virtual void removeDisabled()
Matrix2D< double > X
Definition: matrix_dimred.h:67
#define BINARY_CIRCULAR_MASK
Definition: mask.h:365
const MultidimArray< int > & get_binary_mask() const
Definition: mask.h:707
Name of an image (std::string)
double sum() const
int mode
Definition: mask.h:407
constexpr int INNER_MASK
Definition: mask.h:47

◆ progCorrelationDistance()

double ProgTransformDimRed::progCorrelationDistance ( size_t  i1,
size_t  i2 
)

Correlation distance between two images.

Definition at line 71 of file transform_dimred.cpp.

72 {
75  double corr=alignImages(I1,I2,M,true,aux,aux2,aux3);
76  return 1.-corr;
77 }
double alignImages(const MultidimArray< double > &Iref, const AlignmentTransforms &IrefTransforms, MultidimArray< double > &I, Matrix2D< double > &M, bool wrap, AlignmentAux &aux, CorrelationAux &aux2, RotationalCorrelationAux &aux3)
Definition: filters.cpp:2047
Matrix2D< double > M
CorrelationAux aux2
RotationalCorrelationAux aux3
MultidimArray< double > I1
MultidimArray< double > I2
void extractImageFromDataMatrix(size_t index, MultidimArray< double > &mImg)
From image to data matrix.

◆ readParams()

void ProgTransformDimRed::readParams ( )
virtual

Read argument from command line.

Reimplemented from ProgDimRed.

Definition at line 30 of file transform_dimred.cpp.

31 {
33  if (checkParam("--randomSample"))
34  {
35  fnRandomSampling = getParam("--randomSample",0);
36  numGrids = getIntParam("--randomSample",1);
37  }
38  distance=getParam("--distance");
39 }
const char * getParam(const char *param, int arg=0)
virtual void readParams()
Read argument from command line.
bool checkParam(const char *param)
int getIntParam(const char *param, int arg=0)

◆ run()

void ProgTransformDimRed::run ( )
virtual

Main routine.

Reimplemented from XmippProgram.

Definition at line 254 of file transform_dimred.cpp.

255 {
256  show();
257 
258  produceSideInfo();
259  if (outputDim<0)
261 
263  {
264 
266 
267  std::vector<double> dimredProj;
268  dimredProj.resize(outputDim);
269  int i=0;
271  for (size_t objId : SFin.ids())
272  {
273  memcpy(&dimredProj[0],&MAT_ELEM(Y,i,0),outputDim*sizeof(double));
274  SFin.setValue(MDL_DIMRED, dimredProj, objId);
275  i++;
276  }
277 
279  }
280 
281  if (fnRandomSampling!="")
283 }
void write(const FileName &outFile, WriteModeMetaData mode=MD_OVERWRITE) const
const Matrix2D< double > & getReducedData()
Get reduced data.
DimRedAlgorithm * algorithm
Definition: matrix_dimred.h:68
FileName fnIn
Definition: matrix_dimred.h:51
virtual IdIteratorProxy< false > ids()
void produceSideInfo()
Produce side info.
#define i
#define MAT_ELEM(m, i, j)
Definition: matrix2d.h:116
bool setValue(const MDObject &mdValueIn, size_t id)
virtual void reduceDimensionality()=0
Reduce dimensionality.
Projection onto a reduced manifold (vector double)
void estimateDimension()
Estimate dimensionality.
bool containsLabel(const MDLabel label) const override

◆ show()

void ProgTransformDimRed::show ( )
virtual

Show.

Reimplemented from ProgDimRed.

Definition at line 42 of file transform_dimred.cpp.

43 {
44  if (verbose>0)
45  {
47  std::cout << "Distance: " << distance << std::endl;
48  if (fnRandomSampling!="")
49  std::cout << "Random sample output: " << fnRandomSampling << std::endl
50  << "Number of sampling grids: " << numGrids << std::endl;
51  }
52 }
int verbose
Verbosity level.
virtual void show()
Show.

Member Data Documentation

◆ aux

AlignmentAux ProgTransformDimRed::aux

Definition at line 54 of file transform_dimred.h.

◆ aux2

CorrelationAux ProgTransformDimRed::aux2

Definition at line 55 of file transform_dimred.h.

◆ aux3

RotationalCorrelationAux ProgTransformDimRed::aux3

Definition at line 56 of file transform_dimred.h.

◆ distance

String ProgTransformDimRed::distance

Distance between images

Definition at line 46 of file transform_dimred.h.

◆ fnRandomSampling

FileName ProgTransformDimRed::fnRandomSampling

Filename selection file containing the images

Definition at line 42 of file transform_dimred.h.

◆ I1

MultidimArray<double> ProgTransformDimRed::I1

Definition at line 52 of file transform_dimred.h.

◆ I2

MultidimArray<double> ProgTransformDimRed::I2

Definition at line 52 of file transform_dimred.h.

◆ M

Matrix2D<double> ProgTransformDimRed::M

Definition at line 53 of file transform_dimred.h.

◆ mask

Mask ProgTransformDimRed::mask

Definition at line 49 of file transform_dimred.h.

◆ numGrids

int ProgTransformDimRed::numGrids

Number of grids for the random sampling

Definition at line 44 of file transform_dimred.h.

◆ SFin

MetaDataVec ProgTransformDimRed::SFin

Definition at line 48 of file transform_dimred.h.


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