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

#include <angular_continuous_assign2.h>

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

Public Member Functions

 ProgAngularContinuousAssign2 ()
 Empty constructor. More...
 
 ~ProgAngularContinuousAssign2 ()
 Destructor. More...
 
void readParams ()
 Read argument from command line. More...
 
void show ()
 Show. More...
 
void defineParams ()
 Define parameters. More...
 
void startProcessing ()
 
void preProcess ()
 
void processImage (const FileName &fnImg, const FileName &fnImgOut, const MDRow &rowIn, MDRow &rowOut)
 
void updateCTFImage (double defocusU, double defocusV, double angle)
 
void postProcess ()
 
- Public Member Functions inherited from XmippMetadataProgram
MetaDatagetInputMd ()
 
MetaDataVecgetOutputMd ()
 
 XmippMetadataProgram ()
 Empty constructor. More...
 
virtual int tryRead (int argc, const char **argv, bool reportErrors=true)
 
virtual void init ()
 
virtual void setup (MetaData *md, const FileName &o="", const FileName &oroot="", bool applyGeo=false, MDLabel label=MDL_IMAGE)
 
virtual ~XmippMetadataProgram ()
 
void setMode (WriteModeMetaData _mode)
 
void setupRowOut (const FileName &fnImgIn, const MDRow &rowIn, const FileName &fnImgOut, MDRow &rowOut) const
 Prepare rowout. More...
 
virtual void wait ()
 Wait for the distributor to finish. More...
 
virtual void checkPoint ()
 For very long programs, it may be needed to write checkpoints. More...
 
virtual void run ()
 Run over all images. 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)
 
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 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 fnVol
 
FileName fnResiduals
 
FileName fnProjections
 
double maxShift
 
double maxScale
 
double maxAngularChange
 
double maxResol
 
double maxDefocusChange
 
double maxA
 
double maxB
 
double Ts
 
int Rmax
 
int pad
 
bool optimizeGrayValues
 
bool optimizeShift
 
bool optimizeScale
 
bool optimizeAngles
 
bool optimizeDefocus
 
bool ignoreCTF
 
String originalImageLabel
 
bool phaseFlipped
 
bool sameDefocus
 
int rank
 
MultidimArray< int > mask2D
 
double iMask2Dsum
 
FourierProjectorprojector
 
size_t Xdim
 
Image< double > I
 
Image< double > Ip
 
Image< double > E
 
Image< double > Ifiltered
 
Image< double > Ifilteredp
 
Projection P
 
FourierFilter filter
 
Matrix2D< double > A
 
double old_rot
 
double old_tilt
 
double old_psi
 
double old_shiftX
 
double old_shiftY
 
bool old_flip
 
double old_grayA
 
double old_grayB
 
bool hasCTF
 
double old_defocusU
 
double old_defocusV
 
double old_defocusAngle
 
CTFDescription ctf
 
Matrix2D< double > C0
 
Matrix2D< double > C
 
double Istddev
 
int contCost
 
double currentDefocusU
 
double currentDefocusV
 
double currentAngle
 
MultidimArray< double > * ctfImage
 
std::unique_ptr< MultidimArray< double > > ctfEnvelope
 
FourierTransformer fftTransformer
 
MultidimArray< std::complex< double > > fftE
 
- Public Attributes inherited from XmippMetadataProgram
FileName fn_in
 Filenames of input and output Metadata. More...
 
FileName fn_out
 
FileName baseName
 
FileName pathBaseName
 
FileName oextBaseName
 
bool apply_geo
 Apply geo. More...
 
size_t ndimOut
 Output dimensions. More...
 
size_t zdimOut
 
size_t ydimOut
 
size_t xdimOut
 
DataType datatypeOut
 
size_t mdInSize
 Number of input elements. More...
 
- Public Attributes inherited from XmippProgram
bool doRun
 
bool runWithoutArgs
 
int verbose
 Verbosity level. More...
 
int debug
 

Additional Inherited Members

- Protected Member Functions inherited from XmippMetadataProgram
virtual void initComments ()
 
virtual bool getImageToProcess (size_t &objId, size_t &objIndex)
 
void show () const override
 
virtual void finishProcessing ()
 
virtual void writeOutput ()
 
virtual void showProgress ()
 
virtual void defineLabelParam ()
 
- Protected Member Functions inherited from XmippProgram
void defineCommons ()
 
- Protected Attributes inherited from XmippMetadataProgram
WriteModeMetaData mode
 Metadata writing mode: OVERWRITE, APPEND. More...
 
FileName oext
 Output extension and root. More...
 
FileName oroot
 
MDLabel image_label
 MDLabel to be used to read/write images, usually will be MDL_IMAGE. More...
 
bool produces_an_output
 Indicate that a unique final output is produced. More...
 
bool produces_a_metadata
 Indicate that the unique final output file is a Metadata. More...
 
bool each_image_produces_an_output
 Indicate that an output is produced for each image in the input. More...
 
bool allow_apply_geo
 
bool decompose_stacks
 Input Metadata will treat a stack file as a set of images instead of a unique file. More...
 
bool delete_output_stack
 Delete previous output stack file prior to process images. More...
 
bool get_image_info
 Get the input image file dimensions to further operations. More...
 
bool save_metadata_stack
 Save the associated output metadata when output file is a stack. More...
 
bool track_origin
 Include the original input image filename in the output stack. More...
 
bool keep_input_columns
 Keep input metadata columns. More...
 
bool remove_disabled
 Remove disabled images from the input selfile. More...
 
bool allow_time_bar
 Show process time bar. More...
 
bool input_is_metadata
 Input is a metadata. More...
 
bool single_image
 Input is a single image. More...
 
bool input_is_stack
 Input is a stack. More...
 
bool output_is_stack
 Output is a stack. More...
 
bool create_empty_stackfile
 
bool delete_mdIn
 
size_t time_bar_step
 Some time bar related counters. More...
 
size_t time_bar_size
 
size_t time_bar_done
 
- 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

Predict Continuous Parameters.

Definition at line 46 of file angular_continuous_assign2.h.

Constructor & Destructor Documentation

◆ ProgAngularContinuousAssign2()

ProgAngularContinuousAssign2::ProgAngularContinuousAssign2 ( )

Empty constructor.

Definition at line 33 of file angular_continuous_assign2.cpp.

34 {
35  produces_a_metadata = true;
37  projector = nullptr;
38  ctfImage = nullptr;
39  rank = 0;
40 }
bool each_image_produces_an_output
Indicate that an output is produced for each image in the input.
bool produces_a_metadata
Indicate that the unique final output file is a Metadata.

◆ ~ProgAngularContinuousAssign2()

ProgAngularContinuousAssign2::~ProgAngularContinuousAssign2 ( )

Destructor.

Definition at line 42 of file angular_continuous_assign2.cpp.

43 {
44  delete projector;
45  delete ctfImage;
46 }

Member Function Documentation

◆ defineParams()

void ProgAngularContinuousAssign2::defineParams ( )
virtual

Define parameters.

Reimplemented from XmippMetadataProgram.

Definition at line 112 of file angular_continuous_assign2.cpp.

113 {
114  addUsageLine("Make a continuous angular assignment");
115  defaultComments["-i"].clear();
116  defaultComments["-i"].addComment("Metadata with initial alignment");
117  defaultComments["-o"].clear();
118  defaultComments["-o"].addComment("Stack of images prepared for 3D reconstruction");
120  addParamsLine(" --ref <volume> : Reference volume");
121  addParamsLine(" [--max_shift <s=-1>] : Maximum shift allowed in pixels");
122  addParamsLine(" [--max_scale <s=0.02>] : Maximum scale change");
123  addParamsLine(" [--max_angular_change <a=5>] : Maximum angular change allowed (in degrees)");
124  addParamsLine(" [--max_defocus_change <d=500>] : Maximum defocus change allowed (in Angstroms)");
125  addParamsLine(" [--max_resolution <f=4>] : Maximum resolution (A)");
126  addParamsLine(" [--max_gray_scale <a=0.05>] : Maximum gray scale change");
127  addParamsLine(" [--max_gray_shift <b=0.05>] : Maximum gray shift change as a factor of the image standard deviation");
128  addParamsLine(" [--sampling <Ts=1>] : Sampling rate (A/pixel)");
129  addParamsLine(" [--Rmax <R=-1>] : Maximum radius (px). -1=Half of volume size");
130  addParamsLine(" [--padding <p=2>] : Padding factor");
131  addParamsLine(" [--optimizeGray] : Optimize gray values");
132  addParamsLine(" [--optimizeShift] : Optimize shift");
133  addParamsLine(" [--optimizeScale] : Optimize scale");
134  addParamsLine(" [--optimizeAngles] : Optimize angles");
135  addParamsLine(" [--optimizeDefocus] : Optimize defocus");
136  addParamsLine(" [--ignoreCTF] : Ignore CTF");
137  addParamsLine(" [--applyTo <label=image>] : Which is the source of images to apply the final transformation");
138  addParamsLine(" [--phaseFlipped] : Input images have been phase flipped");
139  // addParamsLine(" [--penalization <l=100>] : Penalization for the average term");
140  addParamsLine(" [--sameDefocus] : Force defocusU = defocusV");
141  addParamsLine(" [--oresiduals <stack=\"\">] : Output stack for the residuals");
142  addParamsLine(" [--oprojections <stack=\"\">] : Output stack for the projections");
143  addExampleLine("A typical use is:",false);
144  addExampleLine("xmipp_angular_continuous_assign2 -i anglesFromDiscreteAssignment.xmd --ref reference.vol -o assigned_angles.stk");
145 }
void addExampleLine(const char *example, bool verbatim=true)
void addUsageLine(const char *line, bool verbatim=false)
void addParamsLine(const String &line)
std::map< String, CommentList > defaultComments
Definition: xmipp_program.h:83

◆ postProcess()

void ProgAngularContinuousAssign2::postProcess ( )
virtual

Post process

Reimplemented from XmippMetadataProgram.

Definition at line 688 of file angular_continuous_assign2.cpp.

689 {
690  MetaData &ptrMdOut = getOutputMd();
691  ptrMdOut.removeDisabled();
692  if (contCost==CONTCOST_L1)
693  {
694  double minCost=1e38;
695  for (size_t objId : ptrMdOut.ids())
696  {
697  double cost;
698  ptrMdOut.getValue(MDL_COST,cost,objId);
699  if (cost<minCost)
700  minCost=cost;
701  }
702  for (size_t objId : ptrMdOut.ids())
703  {
704  double cost;
705  ptrMdOut.getValue(MDL_COST,cost,objId);
706  ptrMdOut.setValue(MDL_WEIGHT_CONTINUOUS2,minCost/cost,objId);
707  }
708  }
709  else
710  {
711  double maxCost=-1e38;
712  for (size_t objId : ptrMdOut.ids())
713  {
714  double cost;
715  ptrMdOut.getValue(MDL_COST,cost,objId);
716  if (cost>maxCost)
717  maxCost=cost;
718  }
719  for (size_t objId : ptrMdOut.ids())
720  {
721  double cost;
722  ptrMdOut.getValue(MDL_COST,cost,objId);
723  ptrMdOut.setValue(MDL_WEIGHT_CONTINUOUS2,cost/maxCost,objId);
724  }
725  }
726 
727  ptrMdOut.write(fn_out.replaceExtension("xmd"));
728 }
FileName replaceExtension(const String &newExt) const
virtual void write(const FileName &outFile, WriteModeMetaData mode=MD_OVERWRITE) const =0
constexpr int CONTCOST_L1
virtual IdIteratorProxy< false > ids()
virtual bool getValue(MDObject &mdValueOut, size_t id) const =0
Cost for the image (double)
bool setValue(const MDLabel label, const T &valueIn, size_t id)
Weight due to angular continuous assignment.
virtual void removeDisabled()
double cost
Cost, scaled between 0 and 1.
Definition: micrograph.h:66

◆ preProcess()

void ProgAngularContinuousAssign2::preProcess ( )
virtual

Produce side info. An exception is thrown if any of the files is not found

Reimplemented from XmippMetadataProgram.

Definition at line 157 of file angular_continuous_assign2.cpp.

158 {
159  // Read the reference volume
160  Image<double> V;
161  if (rank==0)
162  {
163  V.read(fnVol);
164  V().setXmippOrigin();
165  Xdim=XSIZE(V());
166  }
167  else
168  {
169  size_t ydim, zdim, ndim;
170  getImageSize(fnVol, Xdim, ydim, zdim, ndim);
171  }
172 
173  Ip().initZeros(Xdim,Xdim);
174  E().initZeros(Xdim,Xdim);
175  Ifilteredp().initZeros(Xdim,Xdim);
176  Ifilteredp().setXmippOrigin();
177 
178  // Construct mask
179  if (Rmax<0)
180  Rmax=Xdim/2;
181  Mask mask;
182  mask.type = BINARY_CIRCULAR_MASK;
183  mask.mode = INNER_MASK;
184  mask.R1 = Rmax;
185  mask.generate_mask(Xdim,Xdim);
186  mask2D=mask.get_binary_mask();
187  iMask2Dsum=1.0/mask2D.sum();
188 
189  // Construct reference covariance
193  covarianceMatrix(E(),C0);
195  {
196  double val=MAT_ELEM(C0,i,j);
197  if (val<0.5)
198  MAT_ELEM(C0,i,j)=0;
199  else
200  MAT_ELEM(C0,i,j)=1;
201  }
202 
203  // Construct projector
204  if (rank==0)
206  else
208 
209  // Low pass filter
212  filter.raised_w=0.02;
213 
214  // Transformation matrix
215  A.initIdentity(3);
216 
217  // Continuous cost
218  if (optimizeGrayValues)
220  else
222 }
#define FOR_ALL_ELEMENTS_IN_MATRIX2D(m)
Definition: matrix2d.h:104
Definition: mask.h:360
void getImageSize(const MetaData &md, size_t &Xdim, size_t &Ydim, size_t &Zdim, size_t &Ndim, MDLabel image_label)
constexpr int CONTCOST_L1
#define i
#define MAT_ELEM(m, i, j)
Definition: matrix2d.h:116
double R1
Definition: mask.h:413
#define XSIZE(v)
#define FOR_ALL_DIRECT_ELEMENTS_IN_MULTIDIMARRAY(v)
int type
Definition: mask.h:402
#define DIRECT_MULTIDIM_ELEM(v, n)
#define j
void generate_mask(bool apply_geo=false)
Definition: mask.cpp:1577
#define BINARY_CIRCULAR_MASK
Definition: mask.h:365
double rnd_gaus()
int read(const FileName &name, DataMode datamode=DATA, size_t select_img=ALL_IMAGES, bool mapData=false, int mode=WRITE_READONLY)
const MultidimArray< int > & get_binary_mask() const
Definition: mask.h:707
int * n
double sum() const
#define LOWPASS
void initIdentity()
Definition: matrix2d.h:673
int mode
Definition: mask.h:407
void covarianceMatrix(const MultidimArray< double > &I, Matrix2D< double > &C)
Definition: filters.cpp:1582
constexpr int CONTCOST_CORR
constexpr int INNER_MASK
Definition: mask.h:47

◆ processImage()

void ProgAngularContinuousAssign2::processImage ( const FileName fnImg,
const FileName fnImgOut,
const MDRow rowIn,
MDRow rowOut 
)
virtual

Predict angles and shift. At the input the pose parameters must have an initial guess of the parameters. At the output they have the estimated pose.

Implements XmippMetadataProgram.

Definition at line 399 of file angular_continuous_assign2.cpp.

400 {
401  // Read input image and initial parameters
402 // ApplyGeoParams geoParams;
403 // geoParams.only_apply_shifts=false;
404 // geoParams.wrap=DONT_WRAP;
405 
406  //AJ some definitions
407  double corrIdx=0.0;
408  double corrMask = 0.0;
409  double corrWeight = 0.0;
410  double imedDist = 0.0;
411 
412  if (verbose>=2)
413  std::cout << "Processing " << fnImg << std::endl;
414  I.read(fnImg);
415  I().setXmippOrigin();
416  Istddev=I().computeStddev();
417 
418  Ifiltered()=I();
420 
426  old_flip = rowIn.getValueOrDefault(MDL_FLIP, false);
427  double old_scaleX=0, old_scaleY=0, old_scaleAngle=0;
428  old_grayA=1;
429  old_grayB=0;
431  {
432  old_scaleX = rowIn.getValue<double>(MDL_CONTINUOUS_SCALE_X);
433  old_scaleY = rowIn.getValue<double>(MDL_CONTINUOUS_SCALE_Y);
435  old_scaleAngle = rowIn.getValue<double>(MDL_CONTINUOUS_SCALE_ANGLE);
436  old_shiftX = rowIn.getValue<double>(MDL_CONTINUOUS_X);
437  old_shiftY = rowIn.getValue<double>(MDL_CONTINUOUS_Y);
438  old_flip = rowIn.getValue<bool>(MDL_CONTINUOUS_FLIP);
439  }
440 
442  {
443  old_grayA = rowIn.getValue<double>(MDL_CONTINUOUS_GRAY_A);
444  old_grayB = rowIn.getValue<double>(MDL_CONTINUOUS_GRAY_B);
445  }
446 
448  {
449  hasCTF=true;
450  ctf.readFromMdRow(rowIn);
460  }
461  else
462  hasCTF=false;
463 
464  Matrix1D<double> p(13), steps(13);
465  // COSS: Gray values are optimized in transform_image_adjust_gray_values
466  if (optimizeGrayValues)
467  {
468  p(0)=old_grayA; // a in I'=a*I+b
469  p(1)=old_grayB; // b in I'=a*I+b
470  }
471  else
472  {
473  p(0)=1; // a in I'=a*I+b
474  p(1)=0; // b in I'=a*I+b
475  }
476  p(4)=old_scaleX;
477  p(5)=old_scaleY;
478  p(6)=old_scaleAngle;
479 
480  // default values
481  if (fnResiduals != "") {
482  rowOut.setValue<String>(MDL_IMAGE_RESIDUAL, "");
483  }
484  if (fnProjections != "") {
485  rowOut.setValue<String>(MDL_IMAGE_REF, "");
486  }
487 
488  // Optimize
489  double cost=-1;
490  if (fabs(old_scaleX)>maxScale || fabs(old_scaleY)>maxScale)
491  rowOut.setValue(MDL_ENABLED,-1);
492  else
493  {
494  try
495  {
496  cost=1e38;
497  int iter;
498  steps.initZeros();
499  if (optimizeGrayValues)
500  steps(0)=steps(1)=1.;
501  if (optimizeShift)
502  steps(2)=steps(3)=1.;
503  if (optimizeScale)
504  steps(4)=steps(5)=steps(6)=1.;
505  if (optimizeAngles)
506  steps(7)=steps(8)=steps(9)=1.;
507  if (optimizeDefocus) {
508  if (sameDefocus)
509  steps(10)=steps(12)=1.;
510  else {
511  steps(10)=steps(11)=steps(12)=1.;
512  if (hasCTF)
513  {
517  }
518  else
520  }
521  }
522  powellOptimizer(p, 1, 13, &continuous2cost, this, 0.01, cost, iter, steps, verbose>=2);
523  if (cost>1e30 || (cost>0 && contCost==CONTCOST_CORR))
524  {
525  rowOut.setValue(MDL_ENABLED,-1);
526  p.initZeros();
527  if (optimizeGrayValues)
528  {
529  p(0)=old_grayA; // a in I'=a*I+b
530  p(1)=old_grayB; // b in I'=a*I+b
531  }
532  else
533  {
534  p(0)=1;
535  p(1)=0;
536  }
537  p(4)=old_scaleX;
538  p(5)=old_scaleY;
539  p(6)=old_scaleAngle;
540  }
541  else
542  {
543  //Calculating several similarity measures between P and Ifilteredp (correlations and imed)
544  corrIdx = correlationIndex(P(), Ifilteredp());
545  corrMask = correlationMasked(P(), Ifilteredp());
546  corrWeight = correlationWeighted(P(), Ifilteredp());
547  imedDist = imedDistance(P(), Ifilteredp());
548 
549  if (fnResiduals!="")
550  {
551  FileName fnResidual;
552  fnResidual.compose(fnImgOut.getPrefixNumber(),fnResiduals);
553  E.write(fnResidual);
554  rowOut.setValue(MDL_IMAGE_RESIDUAL,fnResidual);
555  }
556  if (fnProjections!="")
557  {
558  FileName fnProjection;
559  fnProjection.compose(fnImgOut.getPrefixNumber(),fnProjections);
560  P.write(fnProjection);
561  rowOut.setValue(MDL_IMAGE_REF,fnProjection);
562  }
563  }
564  if (contCost==CONTCOST_CORR)
565  cost=-cost;
566  if (verbose>=2)
567  std::cout << "I'=" << p(0) << "*I" << "+" << p(1) << " Dshift=(" << p(2) << "," << p(3) << ") "
568  << "scale=(" << 1+p(4) << "," << 1+p(5) << ", angle=" << p(6) << ") Drot=" << p(7) << " Dtilt=" << p(8)
569  << " Dpsi=" << p(9) << " DU=" << p(10) << " DV=" << p(11) << " Dalpha=" << p(12) << std::endl;
570  // Apply
571  FileName fnOrig;
573  I.read(fnImg);
574  if (XSIZE(Ip())!=XSIZE(I()))
575  {
577  I()=Ip();
578  }
579  A(0,2)=p(2)+old_shiftX;
580  A(1,2)=p(3)+old_shiftY;
581  double scalex=p(4);
582  double scaley=p(5);
583  double scaleAngle=p(6);
584  double sin2_t=sin(scaleAngle)*sin(scaleAngle);
585  double sin_2t=sin(2*scaleAngle);
586  A(0,0)=1+scalex+(scaley-scalex)*sin2_t;
587  A(0,1)=0.5*(scaley-scalex)*sin_2t;
588  A(1,0)=A(0,1);
589  A(1,1)=1+scaley-(scaley-scalex)*sin2_t;
590 // A(0,0)=1+p(4);
591 // A(1,1)=1+p(5);
592 
593  if (old_flip)
594  {
595  MAT_ELEM(A,0,0)*=-1;
596  MAT_ELEM(A,0,1)*=-1;
597  MAT_ELEM(A,0,2)*=-1;
598  }
599  applyGeometry(xmipp_transformation::BSPLINE3,Ip(),I(),A,xmipp_transformation::IS_NOT_INV,xmipp_transformation::DONT_WRAP);
600  if (optimizeGrayValues)
601  {
602  MultidimArray<double> &mIp=Ip();
603  double ia=1.0/p(0);
604  double b=p(1);
606  {
609  else
610  DIRECT_MULTIDIM_ELEM(mIp,n)=0.0;
611  }
612  }
613  Ip.write(fnImgOut);
614  }
615  catch (XmippError &XE)
616  {
617  std::cerr << XE.what() << std::endl;
618  std::cerr << "Warning: Cannot refine " << fnImg << std::endl;
619  rowOut.setValue(MDL_ENABLED,-1);
620  }
621  }
622  rowOut.setValue(MDL_IMAGE_ORIGINAL, fnImg);
623  rowOut.setValue(MDL_IMAGE, fnImgOut);
624  rowOut.setValue(MDL_ANGLE_ROT, old_rot+p(7));
625  rowOut.setValue(MDL_ANGLE_TILT, old_tilt+p(8));
626  rowOut.setValue(MDL_ANGLE_PSI, old_psi+p(9));
627  rowOut.setValue(MDL_SHIFT_X, 0.);
628  rowOut.setValue(MDL_SHIFT_Y, 0.);
629  rowOut.setValue(MDL_FLIP, false);
630  rowOut.setValue(MDL_COST, cost);
631  if (optimizeGrayValues)
632  {
633  rowOut.setValue(MDL_CONTINUOUS_GRAY_A,p(0));
634  rowOut.setValue(MDL_CONTINUOUS_GRAY_B,p(1));
635  }
636  rowOut.setValue(MDL_CONTINUOUS_SCALE_X,p(4));
637  rowOut.setValue(MDL_CONTINUOUS_SCALE_Y,p(5));
639  rowOut.setValue(MDL_CONTINUOUS_X,p(2)+old_shiftX);
640  rowOut.setValue(MDL_CONTINUOUS_Y,p(3)+old_shiftY);
642  if (hasCTF)
643  {
644  rowOut.setValue(MDL_CTF_DEFOCUSU,old_defocusU+p(10));
645  if (sameDefocus)
646  rowOut.setValue(MDL_CTF_DEFOCUSV,old_defocusU+p(10));
647  else
648  rowOut.setValue(MDL_CTF_DEFOCUSV,old_defocusV+p(11));
650  if (sameDefocus)
651  rowOut.setValue(MDL_CTF_DEFOCUS_CHANGE,0.5*(p(10)+p(10)));
652  else
653  rowOut.setValue(MDL_CTF_DEFOCUS_CHANGE,0.5*(p(10)+p(11)));
654  if (old_defocusU+p(10)<0 || old_defocusU+p(11)<0)
655  rowOut.setValue(MDL_ENABLED,-1);
656  }
657  //Saving correlation and imed values in the metadata
658  rowOut.setValue(MDL_CORRELATION_IDX, corrIdx);
659  rowOut.setValue(MDL_CORRELATION_MASK, corrMask);
660  rowOut.setValue(MDL_CORRELATION_WEIGHT, corrWeight);
661  rowOut.setValue(MDL_IMED, imedDist);
662 
663 
664 #ifdef DEBUG
665  std::cout << "p=" << p << std::endl;
666  MetaDataVec MDaux;
667  MDaux.addRow(rowOut);
668  MDaux.write("PPPmd.xmd");
669  Image<double> save;
670  save()=P();
671  save.write("PPPprojection.xmp");
672  save()=I();
673  save.write("PPPexperimental.xmp");
674  //save()=C;
675  //save.write("PPPC.xmp");
676  Ip.write("PPPexperimentalp.xmp");
677  Ifiltered.write("PPPexperimentalFiltered.xmp");
678  Ifilteredp.write("PPPexperimentalFilteredp.xmp");
679  E.write("PPPresidual.xmp");
680  std::cout << A << std::endl;
681  std::cout << fnImgOut << " rewritten\n";
682  std::cout << "Press any key" << std::endl;
683  char c; std::cin >> c;
684 #endif
685 }
scale y of continuous assignment
X shift of continuous assignment.
Rotation angle of an image (double,degrees)
#define YSIZE(v)
Defocus U (Angstroms)
weighted correlation value between a particle and its assigned projection taking into the difference ...
scale angle of continuous assignment
static MDLabel str2Label(const String &labelName)
void inverseFourierTransform()
Definition: xmipp_fftw.cpp:329
std::unique_ptr< MultidimArray< double > > ctfEnvelope
Defocus angle (degrees)
#define FOR_ALL_DIRECT_ELEMENTS_IN_ARRAY2D(m)
doublereal * c
double correlationMasked(const MultidimArray< double > &I1, const MultidimArray< double > &I2)
Definition: filters.cpp:1397
Flip of continuous assignment.
Tilting angle of an image (double,degrees)
double DeltafV
Defocus in V (in Angstroms). Negative values are underfocused.
Definition: ctf.h:830
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)
#define DIRECT_A2D_ELEM(v, i, j)
void write(const FileName &name="", size_t select_img=ALL_IMAGES, bool isStack=false, int mode=WRITE_OVERWRITE, CastWriteMode castMode=CW_CAST, int _swapWrite=0)
double correlationIndex(const MultidimArray< T > &x, const MultidimArray< T > &y, const MultidimArray< int > *mask=NULL, MultidimArray< double > *Contributions=NULL)
void compose(const String &str, const size_t no, const String &ext="")
Special label to be used when gathering MDs in MpiMetadataPrograms.
Name for the CTF Model (std::string)
void write(const FileName &outFile, WriteModeMetaData mode=MD_OVERWRITE) const
void powellOptimizer(Matrix1D< double > &p, int i0, int n, double(*f)(double *x, void *), void *prm, double ftol, double &fret, int &iter, const Matrix1D< double > &steps, bool show)
glob_prnt iter
Y shift of continuous assignment.
correlation value between a particle and its assigned projection
#define i
Is this image enabled? (int [-1 or 1])
size_t addRow(const MDRow &row) override
double DeltafU
Global gain. By default, 1.
Definition: ctf.h:828
#define MAT_ELEM(m, i, j)
Definition: matrix2d.h:116
double azimuthal_angle
Azimuthal angle (between X and U) in degrees.
Definition: ctf.h:832
doublereal * b
T & getValue(MDLabel label)
Name of an image from which MDL_IMAGE is coming from.
double continuous2cost(double *x, void *_prm)
a value of continuous assignment
double correlationWeighted(MultidimArray< double > &I1, MultidimArray< double > &I2)
Definition: filters.cpp:1457
Cost for the image (double)
size_t getPrefixNumber(size_t pos=0) const
Flip the image? (bool)
double imedDistance(const MultidimArray< double > &I1, const MultidimArray< double > &I2)
Definition: filters.cpp:1269
#define XSIZE(v)
#define FOR_ALL_DIRECT_ELEMENTS_IN_MULTIDIMARRAY(v)
#define DIRECT_MULTIDIM_ELEM(v, n)
Name of a residual image associated to this image.
void readFromMdRow(const MDRow &row, bool disable_if_not_K=true)
Definition: ctf.cpp:1172
int verbose
Verbosity level.
void FourierTransform(T &v, T1 &V, bool getCopy=true)
Definition: xmipp_fftw.h:166
#define j
void scaleToSize(int SplineDegree, MultidimArrayGeneric &V2, const MultidimArrayGeneric &V1, int Xdim, int Ydim, int Zdim)
double steps
const T & getValueOrDefault(MDLabel label, const T &def) const
void setValue(MDLabel label, const T &d, bool addLabel=true)
b value of continuous assignment
virtual bool containsLabel(MDLabel label) const =0
std::string String
Definition: xmipp_strings.h:34
void produceSideInfo()
Produce Side information.
Definition: ctf.cpp:1392
double cost
Cost, scaled between 0 and 1.
Definition: micrograph.h:66
scale x of continuous assignment
int read(const FileName &name, DataMode datamode=DATA, size_t select_img=ALL_IMAGES, bool mapData=false, int mode=WRITE_READONLY)
Defocus change with respect to previous defoucs (Angstroms)
Shift for the image in the Y axis (double)
Defocus V (Angstroms)
int * n
Name of an image (std::string)
MultidimArray< std::complex< double > > fftE
Name of of the class image from which MDL_IMAGE is coming from.
void updateCTFImage(double defocusU, double defocusV, double angle)
void applyMaskSpace(MultidimArray< double > &v)
imed value between a particle and its assigned projection
masked correlation value between a particle and its assigned projection inside the region with pixel ...
constexpr int CONTCOST_CORR

◆ readParams()

void ProgAngularContinuousAssign2::readParams ( )
virtual

Read argument from command line.

Reimplemented from XmippMetadataProgram.

Definition at line 49 of file angular_continuous_assign2.cpp.

50 {
52  fnVol = getParam("--ref");
53  maxShift = getDoubleParam("--max_shift");
54  maxScale = getDoubleParam("--max_scale");
55  maxDefocusChange = getDoubleParam("--max_defocus_change");
56  maxAngularChange = getDoubleParam("--max_angular_change");
57  maxResol = getDoubleParam("--max_resolution");
58  maxA = getDoubleParam("--max_gray_scale");
59  maxB = getDoubleParam("--max_gray_shift");
60  Ts = getDoubleParam("--sampling");
61  Rmax = getIntParam("--Rmax");
62  pad = getIntParam("--padding");
63  optimizeGrayValues = checkParam("--optimizeGray");
64  optimizeShift = checkParam("--optimizeShift");
65  optimizeScale = checkParam("--optimizeScale");
66  optimizeAngles = checkParam("--optimizeAngles");
67  optimizeDefocus = checkParam("--optimizeDefocus");
68  ignoreCTF = checkParam("--ignoreCTF");
69  originalImageLabel = getParam("--applyTo");
70  phaseFlipped = checkParam("--phaseFlipped");
71  // penalization = getDoubleParam("--penalization");
72  fnResiduals = getParam("--oresiduals");
73  fnProjections = getParam("--oprojections");
74  sameDefocus = checkParam("--sameDefocus");
75  keep_input_columns = true; // each output metadata row is a deep copy of the input metadata row
76 }
double getDoubleParam(const char *param, int arg=0)
const char * getParam(const char *param, int arg=0)
bool keep_input_columns
Keep input metadata columns.
bool checkParam(const char *param)
int getIntParam(const char *param, int arg=0)

◆ show()

void ProgAngularContinuousAssign2::show ( )

Show.

Definition at line 79 of file angular_continuous_assign2.cpp.

80 {
81  if (!verbose)
82  return;
84  std::cout
85  << "Reference volume: " << fnVol << std::endl
86  << "Max. Shift: " << maxShift << std::endl
87  << "Max. Scale: " << maxScale << std::endl
88  << "Max. Angular Change: " << maxAngularChange << std::endl
89  << "Max. Resolution: " << maxResol << std::endl
90  << "Max. Defocus Change: " << maxDefocusChange << std::endl
91  << "Max. Gray Scale: " << maxA << std::endl
92  << "Max. Gray Shift: " << maxB << std::endl
93  << "Sampling: " << Ts << std::endl
94  << "Max. Radius: " << Rmax << std::endl
95  << "Padding factor: " << pad << std::endl
96  << "Optimize gray: " << optimizeGrayValues << std::endl
97  << "Optimize shifts: " << optimizeShift << std::endl
98  << "Optimize scale: " << optimizeScale << std::endl
99  << "Optimize angles: " << optimizeAngles << std::endl
100  << "Optimize defocus: " << optimizeDefocus << std::endl
101  << "Ignore CTF: " << ignoreCTF << std::endl
102  << "Apply to: " << originalImageLabel << std::endl
103  << "Phase flipped: " << phaseFlipped << std::endl
104  // << "Penalization: " << penalization << std::endl
105  << "Force same defocus: " << sameDefocus << std::endl
106  << "Output residuals: " << fnResiduals << std::endl
107  << "Output projections: " << fnProjections << std::endl
108  ;
109 }
int verbose
Verbosity level.
void show() const override

◆ startProcessing()

void ProgAngularContinuousAssign2::startProcessing ( )
virtual

Start processing

Reimplemented from XmippMetadataProgram.

Definition at line 147 of file angular_continuous_assign2.cpp.

148 {
150  if (fnResiduals!="")
152  if (fnProjections!="")
154 }
size_t mdInSize
Number of input elements.
void createEmptyFile(const FileName &filename, int xdim, int ydim, int Zdim, size_t select_img, bool isStack, int mode, int _swapWrite, const MDRowVec *md)

◆ updateCTFImage()

void ProgAngularContinuousAssign2::updateCTFImage ( double  defocusU,
double  defocusV,
double  angle 
)

Update CTF image

Definition at line 225 of file angular_continuous_assign2.cpp.

226 {
227  ctf.K=1; // get pure CTF with no envelope
228  currentDefocusU=ctf.DeltafU=defocusU;
229  currentDefocusV=ctf.DeltafV=defocusV;
232  if (ctfImage==nullptr)
233  {
235  ctfImage->resizeNoCopy(I());
237 
238  ctfEnvelope = std::make_unique<MultidimArray<double>>();
239  ctfEnvelope->resizeNoCopy(I());
241  }
242  ctf.generateCTF((int)YSIZE(I()),(int)XSIZE(I()),*ctfImage,Ts);
243  ctf.generateEnvelope((int)YSIZE(I()),(int)XSIZE(I()),*ctfEnvelope,Ts);
244  if (phaseFlipped)
246  A2D_ELEM(*ctfImage,i,j)=fabs(A2D_ELEM(*ctfImage,i,j));
247 }
#define YSIZE(v)
#define A2D_ELEM(v, i, j)
void generateEnvelope(int Ydim, int Xdim, MultidimArray< T > &CTF, double Ts=-1)
Definition: ctf.h:1271
std::unique_ptr< MultidimArray< double > > ctfEnvelope
void resizeNoCopy(const MultidimArray< T1 > &v)
double DeltafV
Defocus in V (in Angstroms). Negative values are underfocused.
Definition: ctf.h:830
#define STARTINGX(v)
#define i
#define FOR_ALL_ELEMENTS_IN_ARRAY2D(m)
double DeltafU
Global gain. By default, 1.
Definition: ctf.h:828
#define STARTINGY(v)
double azimuthal_angle
Azimuthal angle (between X and U) in degrees.
Definition: ctf.h:832
#define XSIZE(v)
#define j
void generateCTF(const MultidimArray< T1 > &sample_image, MultidimArray< T2 > &CTF, double Ts=-1)
Definition: ctf.h:1194
double K
Global gain. By default, 1.
Definition: ctf.h:238
void produceSideInfo()
Produce Side information.
Definition: ctf.cpp:1392

Member Data Documentation

◆ A

Matrix2D<double> ProgAngularContinuousAssign2::A

Definition at line 116 of file angular_continuous_assign2.h.

◆ C

Matrix2D<double> ProgAngularContinuousAssign2::C

Definition at line 132 of file angular_continuous_assign2.h.

◆ C0

Matrix2D<double> ProgAngularContinuousAssign2::C0

Definition at line 132 of file angular_continuous_assign2.h.

◆ contCost

int ProgAngularContinuousAssign2::contCost

Definition at line 136 of file angular_continuous_assign2.h.

◆ ctf

CTFDescription ProgAngularContinuousAssign2::ctf

Definition at line 130 of file angular_continuous_assign2.h.

◆ ctfEnvelope

std::unique_ptr<MultidimArray<double> > ProgAngularContinuousAssign2::ctfEnvelope

Definition at line 141 of file angular_continuous_assign2.h.

◆ ctfImage

MultidimArray<double>* ProgAngularContinuousAssign2::ctfImage

Definition at line 140 of file angular_continuous_assign2.h.

◆ currentAngle

double ProgAngularContinuousAssign2::currentAngle

Definition at line 138 of file angular_continuous_assign2.h.

◆ currentDefocusU

double ProgAngularContinuousAssign2::currentDefocusU

Definition at line 138 of file angular_continuous_assign2.h.

◆ currentDefocusV

double ProgAngularContinuousAssign2::currentDefocusV

Definition at line 138 of file angular_continuous_assign2.h.

◆ E

Image<double> ProgAngularContinuousAssign2::E

Definition at line 110 of file angular_continuous_assign2.h.

◆ fftE

MultidimArray< std::complex<double> > ProgAngularContinuousAssign2::fftE

Definition at line 145 of file angular_continuous_assign2.h.

◆ fftTransformer

FourierTransformer ProgAngularContinuousAssign2::fftTransformer

Definition at line 143 of file angular_continuous_assign2.h.

◆ filter

FourierFilter ProgAngularContinuousAssign2::filter

Definition at line 114 of file angular_continuous_assign2.h.

◆ fnProjections

FileName ProgAngularContinuousAssign2::fnProjections

Filename of projections

Definition at line 54 of file angular_continuous_assign2.h.

◆ fnResiduals

FileName ProgAngularContinuousAssign2::fnResiduals

Filename of residuals

Definition at line 52 of file angular_continuous_assign2.h.

◆ fnVol

FileName ProgAngularContinuousAssign2::fnVol

Filename of the reference volume

Definition at line 50 of file angular_continuous_assign2.h.

◆ hasCTF

bool ProgAngularContinuousAssign2::hasCTF

Definition at line 126 of file angular_continuous_assign2.h.

◆ I

Image<double> ProgAngularContinuousAssign2::I

Definition at line 110 of file angular_continuous_assign2.h.

◆ Ifiltered

Image<double> ProgAngularContinuousAssign2::Ifiltered

Definition at line 110 of file angular_continuous_assign2.h.

◆ Ifilteredp

Image<double> ProgAngularContinuousAssign2::Ifilteredp

Definition at line 110 of file angular_continuous_assign2.h.

◆ ignoreCTF

bool ProgAngularContinuousAssign2::ignoreCTF

Definition at line 86 of file angular_continuous_assign2.h.

◆ iMask2Dsum

double ProgAngularContinuousAssign2::iMask2Dsum

Definition at line 104 of file angular_continuous_assign2.h.

◆ Ip

Image<double> ProgAngularContinuousAssign2::Ip

Definition at line 110 of file angular_continuous_assign2.h.

◆ Istddev

double ProgAngularContinuousAssign2::Istddev

Definition at line 134 of file angular_continuous_assign2.h.

◆ mask2D

MultidimArray<int> ProgAngularContinuousAssign2::mask2D

Definition at line 102 of file angular_continuous_assign2.h.

◆ maxA

double ProgAngularContinuousAssign2::maxA

Maximum gray scale change

Definition at line 66 of file angular_continuous_assign2.h.

◆ maxAngularChange

double ProgAngularContinuousAssign2::maxAngularChange

Maximum angular change allowed

Definition at line 60 of file angular_continuous_assign2.h.

◆ maxB

double ProgAngularContinuousAssign2::maxB

Maximum gray shift change

Definition at line 68 of file angular_continuous_assign2.h.

◆ maxDefocusChange

double ProgAngularContinuousAssign2::maxDefocusChange

Maximum defocus change (A)

Definition at line 64 of file angular_continuous_assign2.h.

◆ maxResol

double ProgAngularContinuousAssign2::maxResol

Maximum frequency (A)

Definition at line 62 of file angular_continuous_assign2.h.

◆ maxScale

double ProgAngularContinuousAssign2::maxScale

Maximum scale allowed

Definition at line 58 of file angular_continuous_assign2.h.

◆ maxShift

double ProgAngularContinuousAssign2::maxShift

Maximum shift allowed

Definition at line 56 of file angular_continuous_assign2.h.

◆ old_defocusAngle

double ProgAngularContinuousAssign2::old_defocusAngle

Definition at line 128 of file angular_continuous_assign2.h.

◆ old_defocusU

double ProgAngularContinuousAssign2::old_defocusU

Definition at line 128 of file angular_continuous_assign2.h.

◆ old_defocusV

double ProgAngularContinuousAssign2::old_defocusV

Definition at line 128 of file angular_continuous_assign2.h.

◆ old_flip

bool ProgAngularContinuousAssign2::old_flip

Definition at line 122 of file angular_continuous_assign2.h.

◆ old_grayA

double ProgAngularContinuousAssign2::old_grayA

Definition at line 124 of file angular_continuous_assign2.h.

◆ old_grayB

double ProgAngularContinuousAssign2::old_grayB

Definition at line 124 of file angular_continuous_assign2.h.

◆ old_psi

double ProgAngularContinuousAssign2::old_psi

Definition at line 118 of file angular_continuous_assign2.h.

◆ old_rot

double ProgAngularContinuousAssign2::old_rot

Definition at line 118 of file angular_continuous_assign2.h.

◆ old_shiftX

double ProgAngularContinuousAssign2::old_shiftX

Definition at line 120 of file angular_continuous_assign2.h.

◆ old_shiftY

double ProgAngularContinuousAssign2::old_shiftY

Definition at line 120 of file angular_continuous_assign2.h.

◆ old_tilt

double ProgAngularContinuousAssign2::old_tilt

Definition at line 118 of file angular_continuous_assign2.h.

◆ optimizeAngles

bool ProgAngularContinuousAssign2::optimizeAngles

Definition at line 82 of file angular_continuous_assign2.h.

◆ optimizeDefocus

bool ProgAngularContinuousAssign2::optimizeDefocus

Definition at line 84 of file angular_continuous_assign2.h.

◆ optimizeGrayValues

bool ProgAngularContinuousAssign2::optimizeGrayValues

Definition at line 76 of file angular_continuous_assign2.h.

◆ optimizeScale

bool ProgAngularContinuousAssign2::optimizeScale

Definition at line 80 of file angular_continuous_assign2.h.

◆ optimizeShift

bool ProgAngularContinuousAssign2::optimizeShift

Definition at line 78 of file angular_continuous_assign2.h.

◆ originalImageLabel

String ProgAngularContinuousAssign2::originalImageLabel

Definition at line 88 of file angular_continuous_assign2.h.

◆ P

Projection ProgAngularContinuousAssign2::P

Definition at line 112 of file angular_continuous_assign2.h.

◆ pad

int ProgAngularContinuousAssign2::pad

Padding factor

Definition at line 74 of file angular_continuous_assign2.h.

◆ phaseFlipped

bool ProgAngularContinuousAssign2::phaseFlipped

Definition at line 90 of file angular_continuous_assign2.h.

◆ projector

FourierProjector* ProgAngularContinuousAssign2::projector

Definition at line 106 of file angular_continuous_assign2.h.

◆ rank

int ProgAngularContinuousAssign2::rank

Definition at line 99 of file angular_continuous_assign2.h.

◆ Rmax

int ProgAngularContinuousAssign2::Rmax

Maximum radius

Definition at line 72 of file angular_continuous_assign2.h.

◆ sameDefocus

bool ProgAngularContinuousAssign2::sameDefocus

Definition at line 95 of file angular_continuous_assign2.h.

◆ Ts

double ProgAngularContinuousAssign2::Ts

Sampling rate

Definition at line 70 of file angular_continuous_assign2.h.

◆ Xdim

size_t ProgAngularContinuousAssign2::Xdim

Definition at line 108 of file angular_continuous_assign2.h.


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