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

#include <reconstruct_ADMM.h>

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

Public Member Functions

 ProgReconsADMM ()
 
void defineParams ()
 
void readParams ()
 
void show ()
 
void run ()
 
void produceSideInfo ()
 
void project (double rot, double tilt, double psi, MultidimArray< double > &P, bool adjoint=false, double weight=1.)
 
void project (const Matrix1D< double > &r1, const Matrix1D< double > &r2, MultidimArray< double > &P, bool adjoint=false, double weight=1.)
 
void constructHtb ()
 
void computeHtKH (MultidimArray< double > &kernelV)
 
void addRegularizationTerms ()
 
void applyKernel3D (MultidimArray< double > &x, MultidimArray< double > &AtAx)
 
void applyLFilter (MultidimArray< std::complex< double > > &fourierL, bool adjoint=false)
 
void applyLtFilter (MultidimArray< std::complex< double > > &fourierL, MultidimArray< double > &u, MultidimArray< double > &d)
 
void applyConjugateGradient ()
 
void doPOCSProjection ()
 
void updateUD ()
 
void produceVolume ()
 
virtual void shareVolume (MultidimArray< double > &V)
 
virtual void synchronize ()
 
- 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 fnIn
 
FileName fnRoot
 
FileName fnFirst
 
FileName fnHtb
 
FileName fnHtKH
 
String kernelShape
 
double a
 
double alpha
 
double mu
 
double lambda
 
double lambda1
 
double Ti
 
double Tp
 
bool useWeights
 
bool useCTF
 
int Ncgiter
 
int Nadmmiter
 
bool positivity
 
bool applyMask
 
double Ts
 
Mask mask
 
String symmetry
 
bool saveIntermediate
 
size_t Nprocs
 
size_t rank
 
AdmmKernel kernel
 
Image< double > CHtb
 
Image< double > Ck
 
Image< double > Vk
 
MetaDataVec mdIn
 
MultidimArray< std::complex< double > > fourierKernelV
 
MultidimArray< double > paddedx
 
FourierTransformer transformerPaddedx
 
FourierTransformer transformerL
 
MultidimArray< double > ux
 
MultidimArray< double > uy
 
MultidimArray< double > uz
 
MultidimArray< double > dx
 
MultidimArray< double > dy
 
MultidimArray< double > dz
 
MultidimArray< double > ud
 
MultidimArray< std::complex< double > > fourierLx
 
MultidimArray< std::complex< double > > fourierLy
 
MultidimArray< std::complex< double > > fourierLz
 
SymList SL
 
- 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 69 of file reconstruct_ADMM.h.

Constructor & Destructor Documentation

◆ ProgReconsADMM()

ProgReconsADMM::ProgReconsADMM ( )

Definition at line 39 of file reconstruct_ADMM.cpp.

39  : XmippProgram()
40 {
41  rank=0;
42  Nprocs=1;
43 }

Member Function Documentation

◆ addRegularizationTerms()

void ProgReconsADMM::addRegularizationTerms ( )

Add regularization to the kernel

Definition at line 467 of file reconstruct_ADMM.cpp.

468 {
470  L.initZeros(2*ZSIZE(CHtb())-1,2*YSIZE(CHtb())-1,2*XSIZE(CHtb())-1);
471  L.setXmippOrigin();
472  FourierTransformer transformer;
473  transformer.setReal(L);
474 
475  if (mu>0)
476  {
477  addGradientTerm(mu, kernel,L,transformer,fourierKernelV, 'x');
478  addGradientTerm(mu, kernel,L,transformer,fourierKernelV, 'y');
479  addGradientTerm(mu, kernel,L,transformer,fourierKernelV, 'z');
480  }
481 
482  if (lambda1>0)
483  {
484  L.initZeros();
485  L(0,0,0)=lambda1;
486  transformer.FourierTransform();
489  }
490 }
void addGradientTerm(double mu, AdmmKernel &kernel, MultidimArray< double > &L, FourierTransformer &transformer, MultidimArray< std::complex< double > > &fourierKernelV, char direction)
#define YSIZE(v)
MultidimArray< std::complex< double > > fFourier
Definition: xmipp_fftw.h:70
void setReal(MultidimArray< double > &img)
Definition: xmipp_fftw.cpp:129
#define XSIZE(v)
Image< double > CHtb
#define FOR_ALL_DIRECT_ELEMENTS_IN_MULTIDIMARRAY(v)
#define ZSIZE(v)
#define DIRECT_MULTIDIM_ELEM(v, n)
void FourierTransform(T &v, T1 &V, bool getCopy=true)
Definition: xmipp_fftw.h:166
MultidimArray< std::complex< double > > fourierKernelV
void initZeros(const MultidimArray< T1 > &op)
int * n

◆ applyConjugateGradient()

void ProgReconsADMM::applyConjugateGradient ( )

Apply conjugate gradient

Definition at line 543 of file reconstruct_ADMM.cpp.

544 {
545  // Conjugate gradient is solving Ax=b, when A is symmetric (=> positive semidefinite) and we apply it
546  // to the problem
547  // (H^T K H+mu L^TL + lambda I) x = H^Tb + mu L^T(u-d)
548  // Being H the projection operator
549  // K the CTF operator
550  // L the gradient operator
551 
552  // Compute H^tb+mu*L^t(u-d)
555  r=ud;
557  r+=ud;
559  r+=ud;
560  r*=mu;
561 
562  r+=CHtb();
563 
564  // Apply A^tA to the current estimate of the reconstruction
565  MultidimArray<double> AtAVk;
566  applyKernel3D(Ck(),AtAVk);
567 
568  // Compute first residual. This is the negative gradient of ||Ax-b||^2
569  r-=AtAVk;
570  double d=r.sum2();
571 
572  // Search direction
573  MultidimArray<double> p, AtAp;
574  p=r;
575 
576  // Perform CG iterations
577  MultidimArray<double> &mCk=Ck();
578 
579  for (int iter=0; iter<Ncgiter; ++iter)
580  {
581  applyKernel3D(p,AtAp);
582  double alpha=d/p.dotProduct(AtAp);
583 
584  // Update residual and current estimate
586  {
587  DIRECT_MULTIDIM_ELEM(r,n) -=alpha*DIRECT_MULTIDIM_ELEM(AtAp,n);
589  }
590  double newd=r.sum2();
591  double beta=newd/d;
592  d=newd;
593 
594  // Update search direction
597 
598 // Image<double> save;
599 // save()=Vk();
600 // save.write("PPPVk.vol");
601 // std::cout << "Press any key" << std::endl;
602 // char c; std::cin >> c;
603  }
604 }
MultidimArray< std::complex< double > > fourierLx
MultidimArray< double > dx
MultidimArray< double > dz
MultidimArray< double > uz
double beta(const double a, const double b)
double dotProduct(const MultidimArray< T > &op1)
MultidimArray< std::complex< double > > fourierLz
glob_prnt iter
MultidimArray< double > ux
doublereal * d
MultidimArray< std::complex< double > > fourierLy
MultidimArray< double > ud
MultidimArray< double > uy
Image< double > CHtb
#define FOR_ALL_DIRECT_ELEMENTS_IN_MULTIDIMARRAY(v)
#define DIRECT_MULTIDIM_ELEM(v, n)
Image< double > Ck
MultidimArray< double > dy
double sum2() const
void applyLtFilter(MultidimArray< std::complex< double > > &fourierL, MultidimArray< double > &u, MultidimArray< double > &d)
void applyKernel3D(MultidimArray< double > &x, MultidimArray< double > &AtAx)
int * n

◆ applyKernel3D()

void ProgReconsADMM::applyKernel3D ( MultidimArray< double > &  x,
MultidimArray< double > &  AtAx 
)

Apply kernel 3D

Definition at line 492 of file reconstruct_ADMM.cpp.

493 {
494  paddedx.initZeros(2*ZSIZE(x)-1,2*YSIZE(x)-1,2*XSIZE(x)-1);
496 
497  // Copy Vk into paddedx
498  for (int k=STARTINGZ(x); k<=FINISHINGZ(x); ++k)
499  for (int i=STARTINGY(x); i<=FINISHINGY(x); ++i)
500  memcpy(&A3D_ELEM(paddedx,k,i,STARTINGX(x)),&A3D_ELEM(x,k,i,STARTINGX(x)),XSIZE(x)*sizeof(double));
501 
502  // Compute Fourier transform of paddedx
505 
506  // Apply kernel
507  double K=MULTIDIM_SIZE(paddedx);
509  {
512  }
513 
514  // Inverse Fourier transform
516  CenterFFT(paddedx,false);
517 
518  // Crop central region
519  AtAx.resize(x);
520  for (int k=STARTINGZ(x); k<=FINISHINGZ(x); ++k)
521  for (int i=STARTINGY(x); i<=FINISHINGY(x); ++i)
522  memcpy(&A3D_ELEM(AtAx,k,i,STARTINGX(x)),&A3D_ELEM(paddedx,k,i,STARTINGX(x)),XSIZE(x)*sizeof(double));
523 }
#define YSIZE(v)
void resize(size_t Ndim, size_t Zdim, size_t Ydim, size_t Xdim, bool copy=true)
void inverseFourierTransform()
Definition: xmipp_fftw.cpp:329
#define MULTIDIM_SIZE(v)
MultidimArray< std::complex< double > > fFourier
Definition: xmipp_fftw.h:70
#define FINISHINGZ(v)
#define STARTINGX(v)
#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
#define STARTINGY(v)
void CenterFFT(MultidimArray< T > &v, bool forward)
Definition: xmipp_fft.h:291
#define A3D_ELEM(V, k, i, j)
void setReal(MultidimArray< double > &img)
Definition: xmipp_fftw.cpp:129
#define XSIZE(v)
#define FOR_ALL_DIRECT_ELEMENTS_IN_MULTIDIMARRAY(v)
#define ZSIZE(v)
#define DIRECT_MULTIDIM_ELEM(v, n)
MultidimArray< double > paddedx
void FourierTransform(T &v, T1 &V, bool getCopy=true)
Definition: xmipp_fftw.h:166
MultidimArray< std::complex< double > > fourierKernelV
#define FINISHINGY(v)
constexpr int K
void initZeros(const MultidimArray< T1 > &op)
FourierTransformer transformerPaddedx
#define STARTINGZ(v)
int * n

◆ applyLFilter()

void ProgReconsADMM::applyLFilter ( MultidimArray< std::complex< double > > &  fourierL,
bool  adjoint = false 
)

Apply Lt filter

Definition at line 525 of file reconstruct_ADMM.cpp.

526 {
531  CenterFFT(ud,false);
532  if (adjoint)
533  ud*=-1;
534 }
void inverseFourierTransform()
Definition: xmipp_fftw.cpp:329
MultidimArray< std::complex< double > > fFourier
Definition: xmipp_fftw.h:70
void CenterFFT(MultidimArray< T > &v, bool forward)
Definition: xmipp_fft.h:291
MultidimArray< double > ud
#define FOR_ALL_DIRECT_ELEMENTS_IN_MULTIDIMARRAY(v)
FourierTransformer transformerL
#define DIRECT_MULTIDIM_ELEM(v, n)
void FourierTransform(T &v, T1 &V, bool getCopy=true)
Definition: xmipp_fftw.h:166
int * n

◆ applyLtFilter()

void ProgReconsADMM::applyLtFilter ( MultidimArray< std::complex< double > > &  fourierL,
MultidimArray< double > &  u,
MultidimArray< double > &  d 
)

Definition at line 536 of file reconstruct_ADMM.cpp.

537 {
540  applyLFilter(fourierL,true);
541 }
MultidimArray< double > ud
#define FOR_ALL_DIRECT_ELEMENTS_IN_MULTIDIMARRAY(v)
#define DIRECT_MULTIDIM_ELEM(v, n)
int * n
void applyLFilter(MultidimArray< std::complex< double > > &fourierL, bool adjoint=false)

◆ computeHtKH()

void ProgReconsADMM::computeHtKH ( MultidimArray< double > &  kernelV)

Compute H^t*K*H. H is the projection operator, K is the CTF operator

Definition at line 367 of file reconstruct_ADMM.cpp.

368 {
369  kernelV.initZeros(2*ZSIZE(CHtb())-1,2*YSIZE(CHtb())-1,2*XSIZE(CHtb())-1);
370  kernelV.setXmippOrigin();
371 
372  if (rank==0)
373  {
374  std::cerr << "Calculating H'KH ...\n";
376  }
377  size_t i=0;
378  double rot, tilt, psi, weight=1;
379  bool hasWeight=mdIn.containsLabel(MDL_WEIGHT) && useWeights;
381  CTFDescription ctf;
382  MultidimArray<double> kernelAutocorr;
383  if (!hasCTF)
384  kernel.getKernelAutocorrelation(kernelAutocorr);
386  Matrix1D<double> r1(3), r2(3);
387  for (size_t objId : mdIn.ids())
388  {
389  if ((i+1)%Nprocs==rank)
390  {
391  // COSS: Read also MIRROR
392  mdIn.getValue(MDL_ANGLE_ROT,rot,objId);
393  mdIn.getValue(MDL_ANGLE_TILT,tilt,objId);
394  mdIn.getValue(MDL_ANGLE_PSI,psi,objId);
395  if (hasWeight)
396  mdIn.getValue(MDL_WEIGHT,weight,objId);
397  if (hasCTF)
398  {
399  ctf.readFromMetadataRow(mdIn,objId);
400  ctf.produceSideInfo();
401  kernel.applyCTFToKernelAutocorrelation(ctf,Ts,kernelAutocorr);
402  }
403  kernelAutocorr.setXmippOrigin();
404 
405  // Update kernel
406  Euler_angles2matrix(rot,tilt,psi,E,false);
407  E.getRow(0,r1);
408  E.getRow(1,r2);
409  double iStep=1.0/kernel.autocorrStep;
410  for (auto k=(kernelV.zinit); k<=(kernelV.zinit + kernelV.zdim - 1); ++k)
411  {
412  double r1_z=k*ZZ(r1);
413  double r2_z=k*ZZ(r2);
414  for (auto i=(kernelV.yinit); i<=(kernelV.yinit + kernelV.ydim - 1); ++i)
415  {
416  double r1_yz=i*YY(r1)+r1_z;
417  double r2_yz=i*YY(r2)+r2_z;
418  for (auto j=(kernelV.xinit); j<=(kernelV.xinit + kernelV.xdim - 1); ++j)
419  {
420  double r1_xyz=j*XX(r1)+r1_yz;
421  double r2_xyz=j*XX(r2)+r2_yz;
422  A3D_ELEM(kernelV,k,i,j)+=weight*kernelAutocorr.interpolatedElement2D(r1_xyz*iStep,r2_xyz*iStep);
423  }
424  }
425  }
426  }
427 
428  i++;
429  if (i%100==0 && rank==0)
430  progress_bar(i);
431  }
432  if (rank==0)
434 
435 #ifndef SYMMETRIZE_PROJECTIONS
436  MultidimArray<double> kernelVsym;
437  symmetrizeVolume(SL, kernelV, kernelVsym, false, false, true);
438  kernelV=kernelVsym;
439 #endif
440 
441  shareVolume(kernelV);
442 }
void init_progress_bar(long total)
Rotation angle of an image (double,degrees)
#define YSIZE(v)
Defocus U (Angstroms)
void Euler_angles2matrix(T alpha, T beta, T gamma, Matrix2D< T > &A, bool homogeneous)
Definition: geometry.cpp:624
MetaDataVec mdIn
void symmetrizeVolume(const SymList &SL, const MultidimArray< double > &V_in, MultidimArray< double > &V_out, int spline, bool wrap, bool do_outside_avg, bool sum, bool helical, bool dihedral, bool helicalDihedral, double rotHelical, double rotPhaseHelical, double zHelical, double heightFraction, const MultidimArray< double > *mask, int Cn)
Definition: symmetrize.cpp:117
Tilting angle of an image (double,degrees)
Special label to be used when gathering MDs in MpiMetadataPrograms.
Name for the CTF Model (std::string)
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
T interpolatedElement2D(double x, double y, T outside_value=(T) 0) const
#define A3D_ELEM(V, k, i, j)
#define XX(v)
Definition: matrix1d.h:85
void readFromMetadataRow(const MetaData &MD, size_t id, bool disable_if_not_K=true)
Definition: ctf.cpp:1214
void applyCTFToKernelAutocorrelation(CTFDescription &ctf, double Ts, MultidimArray< double > &autocorrelationWithCTF)
#define XSIZE(v)
void progress_bar(long rlen)
Image< double > CHtb
#define ZSIZE(v)
void getKernelAutocorrelation(MultidimArray< double > &autocorrelation)
#define j
#define YY(v)
Definition: matrix1d.h:93
bool getValue(MDObject &mdValueOut, size_t id) const override
void produceSideInfo()
Produce Side information.
Definition: ctf.cpp:1392
double psi(const double x)
float r2
void initZeros(const MultidimArray< T1 > &op)
bool containsLabel(const MDLabel label) const override
virtual void shareVolume(MultidimArray< double > &V)
void getRow(size_t i, Matrix1D< T > &v) const
Definition: matrix2d.cpp:871
double autocorrStep
#define ZZ(v)
Definition: matrix1d.h:101
< Score 4 for volumes
float r1

◆ constructHtb()

void ProgReconsADMM::constructHtb ( )

H^t*b

Definition at line 243 of file reconstruct_ADMM.cpp.

244 {
245  size_t xdim, ydim, zdim, ndim;
246  getImageSize(mdIn,xdim,ydim,zdim,ndim);
247  CHtb().initZeros(xdim,xdim,xdim);
248  CHtb().setXmippOrigin();
249 
250  Image<double> I;
251  double rot, tilt, psi;
252  size_t i=0;
253  if (rank==0)
254  {
255  std::cerr << "Performing Htb ...\n";
257  }
258  double weight=1.;
259  ApplyGeoParams geoParams;
260  geoParams.only_apply_shifts=true;
261  geoParams.wrap=xmipp_transformation::DONT_WRAP;
262  for (size_t objId : mdIn.ids())
263  {
264  if ((i+1)%Nprocs==rank)
265  {
266  I.readApplyGeo(mdIn,objId,geoParams);
267  I().setXmippOrigin();
268  mdIn.getValue(MDL_ANGLE_ROT,rot,objId);
269  mdIn.getValue(MDL_ANGLE_TILT,tilt,objId);
270  mdIn.getValue(MDL_ANGLE_PSI,psi,objId);
272  mdIn.getValue(MDL_WEIGHT,weight,objId);
273 
274  project(rot,tilt,psi,I(),true,weight);
275  }
276  i++;
277  if (i%100==0 && rank==0)
278  progress_bar(i);
279  }
280  if (rank==0)
282 
283  // Symmetrize Htb
284 #ifndef SYMMETRIZE_PROJECTIONS
285  MultidimArray<double> CHtbsym;
286  symmetrizeVolume(SL, CHtb(), CHtbsym, false, false, true);
287  CHtb=CHtbsym;
288 #endif
289  shareVolume(CHtb());
290 }
void init_progress_bar(long total)
Rotation angle of an image (double,degrees)
MetaDataVec mdIn
void symmetrizeVolume(const SymList &SL, const MultidimArray< double > &V_in, MultidimArray< double > &V_out, int spline, bool wrap, bool do_outside_avg, bool sum, bool helical, bool dihedral, bool helicalDihedral, double rotHelical, double rotPhaseHelical, double zHelical, double heightFraction, const MultidimArray< double > *mask, int Cn)
Definition: symmetrize.cpp:117
Tilting angle of an image (double,degrees)
void getImageSize(const MetaData &md, size_t &Xdim, size_t &Ydim, size_t &Zdim, size_t &Ndim, MDLabel image_label)
Special label to be used when gathering MDs in MpiMetadataPrograms.
virtual IdIteratorProxy< false > ids()
int readApplyGeo(const FileName &name, const MDRow &row, const ApplyGeoParams &params=DefaultApplyGeoParams)
size_t size() const override
#define i
void progress_bar(long rlen)
Image< double > CHtb
void project(double rot, double tilt, double psi, MultidimArray< double > &P, bool adjoint=false, double weight=1.)
bool getValue(MDObject &mdValueOut, size_t id) const override
double psi(const double x)
bool containsLabel(const MDLabel label) const override
virtual void shareVolume(MultidimArray< double > &V)
< Score 4 for volumes

◆ defineParams()

void ProgReconsADMM::defineParams ( )
virtual

Function in which the param of each Program are defined.

Reimplemented from XmippProgram.

Definition at line 45 of file reconstruct_ADMM.cpp.

46 {
47  addUsageLine("Reconstruct with Alternative Direction Method of Multipliers");
48  addParamsLine(" -i <metadata>: Input metadata with images and angles");
49  addParamsLine(" [--oroot <root=reconstruct_admm>]: Rootname for output files");
50  addParamsLine(" [--Htb <volume=\"\">]: Filename of the Htb volume");
51  addParamsLine(" [--HtKH <volume=\"\">]: Filename of the HtKH volume");
52  addParamsLine(" [--firstVolume <volume=\"\">]: Filename of the first initial guess");
53  addParamsLine(" [--kernel <shape=KaiserBessel>]: Kernel shape");
54  addParamsLine(" where <shape>");
55  addParamsLine(" KaiserBessel: Kaiser-Bessel function as kernel");
56  addParamsLine(" [--downsamplingV <Ti=1>]: Downsampling factor for volume");
57  addParamsLine(" [--downsamplingI <Tp=1>]: Downsampling factor for projections");
58  addParamsLine(" [--dontUseWeights]: Do not use weights if available in the input metadata");
59  addParamsLine(" [--dontUseCTF]: Do not use CTF if available in the input metadata");
60  addParamsLine(" : If the CTF information is used, the algorithm assumes that the input images are phase flipped");
61  addParamsLine(" [--sampling <Ts=1>]: The sampling rate is only used to correct for the CTF");
62  addParamsLine(" [--mu <mu=1e-4>]: Augmented Lagrange penalty");
63  addParamsLine(" [--lambda <lambda=1e-5>]: Total variation parameter");
64  addParamsLine(" [--lambda1 <lambda1=1e-7>]: Tikhonov parameter");
65  addParamsLine(" [--cgiter <N=3>]: Conjugate Gradient iterations");
66  addParamsLine(" [--admmiter <N=30>]: ADMM iterations");
67  addParamsLine(" [--positivity]: Positivity constraint");
68  addParamsLine(" [--sym <s=c1>]: Symmetry constraint");
69  addParamsLine(" [--saveIntermediate]: Save Htb and HtKH volumes for posterior calls");
70 
72 }
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)

◆ doPOCSProjection()

void ProgReconsADMM::doPOCSProjection ( )

POCS projection

Definition at line 606 of file reconstruct_ADMM.cpp.

607 {
608  if (applyMask)
609  mask.apply_mask(Ck(),Ck());
610 
611  if (positivity)
612  {
613  Ck().threshold("below",0.,0.);
614 #ifdef NEVERDEFINED
615  MultidimArray<double> smallKernel3D(generate_mask2*a+1,2*a+1,2*a+1);
616  smallKernel3D.setXmippOrigin();
617  kernel.computeKernel3D(smallKernel3D);
618  smallKernel3D/=sqrt(smallKernel3D.sum2());
619 
620  produceVolume();
621  MultidimArray<double> &mVk=Vk();
622  MultidimArray<double> &mCk=Ck();
623  Ck.write("PPPCkBefore.vol");
624  int k0=STARTINGZ(mVk)+a;
625  int i0=STARTINGY(mVk)+a;
626  int j0=STARTINGX(mVk)+a;
627  int kF=FINISHINGZ(mVk)-a;
628  int iF=FINISHINGY(mVk)-a;
629  int jF=FINISHINGX(mVk)-a;
631  if (k<k0 || k>kF || i<i0 || i>iF || j<j0 || j>jF)
632  A3D_ELEM(mCk,k,i,j)=0.;
633  else if (A3D_ELEM(mVk,k,i,j)<0)
634  {
635  // Calculate dot product
636  double dot=0.;
637  for (int kk=-a; kk<=a; ++kk)
638  for (int ii=-a; ii<=a; ++ii)
639  for (int jj=-a; jj<=a; ++jj)
640  dot+=A3D_ELEM(mCk,k+kk,i+ii,j+jj)*A3D_ELEM(smallKernel3D,kk,ii,jj);
641 
642  // Update C
643  for (int kk=-a; kk<=a; ++kk)
644  for (int ii=-a; ii<=a; ++ii)
645  for (int jj=-a; jj<=a; ++jj)
646  A3D_ELEM(mCk,k+kk,i+ii,j+jj)-=dot*A3D_ELEM(smallKernel3D,kk,ii,jj);
647  }
648  Ck.write("PPPCkAfter.vol");
649 #endif
650  }
651 }
#define FINISHINGX(v)
void sqrt(Image< double > &op)
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)
#define FINISHINGZ(v)
#define STARTINGX(v)
#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
#define STARTINGY(v)
#define A3D_ELEM(V, k, i, j)
void apply_mask(const MultidimArray< T > &I, MultidimArray< T > &result, T subs_val=0, bool apply_geo=false)
Definition: mask.h:635
#define FOR_ALL_ELEMENTS_IN_ARRAY3D(V)
Image< double > Ck
#define j
#define FINISHINGY(v)
Image< double > Vk
#define STARTINGZ(v)
void computeKernel3D(MultidimArray< double > &kernel)
__host__ __device__ float dot(float2 a, float2 b)

◆ produceSideInfo()

void ProgReconsADMM::produceSideInfo ( )

Definition at line 106 of file reconstruct_ADMM.cpp.

107 {
108  // Read input images
109  mdIn.read(fnIn);
110 
111  // Symmetrize input images
112 #ifdef SYMMETRIZE_PROJECTIONS
113  Matrix2D<double> Lsym(3,3), Rsym(3,3);
114  MetaDataVec mdSym;
115  double rot, tilt, psi, newrot, newtilt, newpsi;
116  for (auto& row : mdIn)
117  {
118  row.getValue(MDL_ANGLE_ROT,rot);
119  row.getValue(MDL_ANGLE_TILT,tilt);
120  row.getValue(MDL_ANGLE_PSI,psi);
121  mdSym.addRow(dynamic_cast<MDRowVec&>(row));
122  for (int isym = 0; isym < SL.symsNo(); isym++)
123  {
124  SL.getMatrices(isym, Lsym, Rsym, false);
125  Euler_apply_transf(Lsym,Rsym,rot,tilt,psi,newrot,newtilt,newpsi);
126  row.setValue(MDL_ANGLE_ROT,newrot);
127  row.setValue(MDL_ANGLE_TILT,newtilt);
128  row.setValue(MDL_ANGLE_PSI,newpsi);
129  mdSym.addRow(dynamic_cast<MDRowVec&>(row));
130  }
131  }
132  mdIn=mdSym;
133  mdSym.clear();
134 #endif
135 
136  // Prepare kernel
137  if (kernelShape=="KaiserBessel")
138  kernel.initializeKernel(alpha,a,0.0001);
140 
141  // Get Htb reconstruction
142  if (fnHtb=="")
143  {
144  constructHtb();
145  if (saveIntermediate && rank==0)
146  CHtb.write(fnRoot+"_Htb.vol");
147  }
148  else
149  {
150  CHtb.read(fnHtb);
151  CHtb().setXmippOrigin();
152  }
153 
154  // Adjust regularization weights
155  //double Nimgs=mdIn.size();
156  //double CHtb_norm=sqrt(CHtb().sum2()/MULTIDIM_SIZE(CHtb()));
157  //COSS mu*=Nimgs/XSIZE(CHtb())*CHtb_norm;
158  //COSS lambda*=Nimgs/XSIZE(CHtb())*CHtb_norm;
159  //COSS lambda1*=Nimgs/XSIZE(CHtb());
160 
161  // Get first volume
162  if (fnFirst=="")
163  Ck().initZeros(CHtb());
164  else
165  {
166  Ck.read(fnFirst);
167  Ck().setXmippOrigin();
168  }
169 
170  // Compute H'*K*H+mu*L^T*L+lambda_1 I
171  Image<double> kernelV;
172  if (fnHtKH=="")
173  {
174  computeHtKH(kernelV());
175  if (saveIntermediate && rank==0)
176  kernelV.write(fnRoot+"_HtKH.vol");
177  }
178  else
179  {
180  kernelV.read(fnHtKH);
181  kernelV().setXmippOrigin();
182  }
183  FourierTransformer transformer;
184  transformer.FourierTransform(kernelV(),fourierKernelV,true);
185 
186  // Add regularization in Fourier space
188 
189  // Resize u and d volumes
190  ux.initZeros(CHtb());
191  ux.setXmippOrigin();
192  uy=ux;
193  uz=ux;
194  dx=ux;
195  dy=ux;
196  dz=ux;
197 
198  // Prepare Lt filters
200  L.resize(ux);
201  kernel.computeGradient(L,'x');
202  transformer.FourierTransform(L,fourierLx);
203  kernel.computeGradient(L,'y');
204  transformer.FourierTransform(L,fourierLy);
205  kernel.computeGradient(L,'z');
206  transformer.FourierTransform(L,fourierLz);
207 
208  ud=ux;
210 
211  // Prepare mask
212  if (applyMask)
214  synchronize();
215 }
MultidimArray< std::complex< double > > fourierLx
MultidimArray< double > dx
Rotation angle of an image (double,degrees)
void resize(size_t Ndim, size_t Zdim, size_t Ydim, size_t Xdim, bool copy=true)
MultidimArray< double > dz
void getMatrices(int i, Matrix2D< double > &L, Matrix2D< double > &R, bool homogeneous=true) const
Definition: symmetries.cpp:348
MultidimArray< double > uz
void read(const FileName &inFile, const std::vector< MDLabel > *desiredLabels=nullptr, bool decomposeStack=true) override
MetaDataVec mdIn
Tilting angle of an image (double,degrees)
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)
void convolveKernelWithItself(double _autocorrStep)
Special label to be used when gathering MDs in MpiMetadataPrograms.
MultidimArray< std::complex< double > > fourierLz
int symsNo() const
Definition: symmetries.h:268
MultidimArray< double > ux
void Euler_apply_transf(const Matrix2D< double > &L, const Matrix2D< double > &R, double rot, double tilt, double psi, double &newrot, double &newtilt, double &newpsi)
Definition: geometry.cpp:1038
void computeGradient(MultidimArray< double > &gradient, char direction, bool adjoint=false)
size_t addRow(const MDRow &row) override
void clear() override
void setReal(MultidimArray< double > &img)
Definition: xmipp_fftw.cpp:129
MultidimArray< std::complex< double > > fourierLy
MultidimArray< double > ud
MultidimArray< double > uy
Image< double > CHtb
FourierTransformer transformerL
void initializeKernel(double alpha, double a, double _projectionStep)
Image< double > Ck
void FourierTransform(T &v, T1 &V, bool getCopy=true)
Definition: xmipp_fftw.h:166
MultidimArray< std::complex< double > > fourierKernelV
MultidimArray< double > dy
void generate_mask(bool apply_geo=false)
Definition: mask.cpp:1577
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)
void computeHtKH(MultidimArray< double > &kernelV)
void initZeros(const MultidimArray< T1 > &op)
virtual void synchronize()

◆ produceVolume()

void ProgReconsADMM::produceVolume ( )

Convert from coefficients to voxel volume

Definition at line 679 of file reconstruct_ADMM.cpp.

680 {
681  MultidimArray<double> kernel3D;
682  kernel3D.resize(Ck());
683  kernel.computeKernel3D(kernel3D);
684  convolutionFFT(Ck(),kernel3D,Vk());
685  // Vk()*=kernel3D.sum();
686 }
void resize(size_t Ndim, size_t Zdim, size_t Ydim, size_t Xdim, bool copy=true)
void convolutionFFT(MultidimArray< double > &img, MultidimArray< double > &kernel, MultidimArray< double > &result)
Definition: xmipp_fftw.cpp:457
Image< double > Ck
Image< double > Vk
void computeKernel3D(MultidimArray< double > &kernel)

◆ project() [1/2]

void ProgReconsADMM::project ( double  rot,
double  tilt,
double  psi,
MultidimArray< double > &  P,
bool  adjoint = false,
double  weight = 1. 
)

Project the volume V onto P using rot,tilt,psi

Definition at line 292 of file reconstruct_ADMM.cpp.

293 {
295  Euler_angles2matrix(rot,tilt,psi,E,false);
296  Matrix1D<double> r1(3), r2(3);
297  E.getRow(0,r1);
298  E.getRow(1,r2);
299  project(r1,r2,P,adjoint,weight);
300 }
void Euler_angles2matrix(T alpha, T beta, T gamma, Matrix2D< T > &A, bool homogeneous)
Definition: geometry.cpp:624
void project(double rot, double tilt, double psi, MultidimArray< double > &P, bool adjoint=false, double weight=1.)
double psi(const double x)
float r2
void getRow(size_t i, Matrix1D< T > &v) const
Definition: matrix2d.cpp:871
float r1

◆ project() [2/2]

void ProgReconsADMM::project ( const Matrix1D< double > &  r1,
const Matrix1D< double > &  r2,
MultidimArray< double > &  P,
bool  adjoint = false,
double  weight = 1. 
)

Project the volume V onto P using r1 and r2 as the coordinate system

Definition at line 302 of file reconstruct_ADMM.cpp.

303 {
304  const MultidimArray<double> &mV=CHtb();
305  if (!adjoint)
306  {
307  P.initZeros(std::ceil(XSIZE(mV)/Tp),std::ceil(YSIZE(mV)/Tp));
308  P.setXmippOrigin();
309  }
310 
311  // Tomographic projection
312  for (int k=STARTINGZ(mV); k<=FINISHINGZ(mV); ++k) {
313  // initial computation
314  double rzn = k;
315  double rzn1= rzn*VEC_ELEM(r1,2);
316  double rzn2= rzn*VEC_ELEM(r2,2);
317  for (int i=STARTINGY(mV); i<=FINISHINGY(mV); ++i) {
318  // initial computation
319  double ryn = i;
320  double ryn1= ryn*VEC_ELEM(r1,1);
321  double ryn2= ryn*VEC_ELEM(r2,1);
322  double sx0=rzn1+ryn1;
323  double sy0=rzn2+ryn2;
324 
325  for (int j=STARTINGX(mV); j<=FINISHINGX(mV); ++j) {
326  double rxn = j;
327  double rxn1= rxn*VEC_ELEM(r1,0);
328  double rxn2= rxn*VEC_ELEM(r2,0);
329 
330  double sx = Ti*(sx0+rxn1);
331  double sy = Ti*(sy0+rxn2);
332 
333  int sxmin = std::floor(sx-kernel.supp);
334  int sxmax = std::ceil(sx+kernel.supp);
335  int symin = std::floor(sy-kernel.supp);
336  int symax = std::ceil(sy+kernel.supp);
337  if (sxmin<STARTINGX(P))
338  sxmin = STARTINGX(P);
339  if (sxmax>FINISHINGX(P))
340  sxmax = FINISHINGX(P);
341  if (symin<STARTINGY(P))
342  symin = STARTINGY(P);
343  if (symax>FINISHINGY(P))
344  symax = FINISHINGY(P);
345 
346  if (adjoint)
347  for (int ii=symin; ii<=symax; ii++) {
348  double u=(ii-sy)*Tp;
349  for (int jj=sxmin; jj<=sxmax; jj++) {
350  double v=(jj-sx)*Tp;
351  A3D_ELEM(mV,k,i,j)+=weight*A2D_ELEM(P,ii,jj)*kernel.projectionValueAt(u,v);
352  }
353  }
354  else
355  for (int ii=symin; ii<=symax; ii++) {
356  double u=(ii-sy)*Tp;
357  for (int jj=sxmin; jj<=sxmax; jj++) {
358  double v=(jj-sx)*Tp;
359  A2D_ELEM(P,ii,jj)+=weight*A3D_ELEM(mV,k,i,j)*kernel.projectionValueAt(u,v);
360  }
361  }
362  }
363  }
364  }
365 }
#define YSIZE(v)
#define A2D_ELEM(v, i, j)
#define VEC_ELEM(v, i)
Definition: matrix1d.h:245
__host__ __device__ float2 floor(const float2 v)
#define FINISHINGX(v)
double projectionValueAt(double u, double v)
#define FINISHINGZ(v)
#define STARTINGX(v)
#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
#define STARTINGY(v)
#define A3D_ELEM(V, k, i, j)
#define XSIZE(v)
Image< double > CHtb
#define j
#define FINISHINGY(v)
doublereal * u
void initZeros(const MultidimArray< T1 > &op)
#define STARTINGZ(v)

◆ readParams()

void ProgReconsADMM::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 74 of file reconstruct_ADMM.cpp.

75 {
76  fnIn=getParam("-i");
77  fnRoot=getParam("--oroot");
78  fnFirst=getParam("--firstVolume");
79  fnHtb=getParam("--Htb");
80  fnHtKH=getParam("--HtKH");
81  kernelShape=getParam("--kernel");
82  if (kernelShape=="KaiserBessel")
83  {
84  a=4; //getDoubleParam("--kernel",1);
85  alpha=19; // getDoubleParam("--kernel",2);
86  }
87  Ti=getDoubleParam("--downsamplingV");
88  Tp=getDoubleParam("--downsamplingI");
89  useWeights=!checkParam("--dontUseWeights");
90  useCTF=!checkParam("--dontUseCTF");
91  Ts=getDoubleParam("--sampling");
92  mu=getDoubleParam("--mu");
93  lambda=getDoubleParam("--lambda");
94  lambda1=getDoubleParam("--lambda1");
95  Ncgiter=getIntParam("--cgiter");
96  Nadmmiter=getIntParam("--admmiter");
97  positivity=checkParam("--positivity");
98  saveIntermediate=checkParam("--saveIntermediate");
99 
100  applyMask=checkParam("--mask");
101  if (applyMask)
102  mask.readParams(this);
103  SL.readSymmetryFile(getParam("--sym"));
104 }
double getDoubleParam(const char *param, int arg=0)
int readSymmetryFile(FileName fn_sym, double accuracy=SYM_ACCURACY)
Definition: symmetries.cpp:33
const char * getParam(const char *param, int arg=0)
void readParams(XmippProgram *program)
Definition: mask.cpp:1284
bool checkParam(const char *param)
int getIntParam(const char *param, int arg=0)

◆ run()

void ProgReconsADMM::run ( )
virtual

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

Reimplemented from XmippProgram.

Definition at line 222 of file reconstruct_ADMM.cpp.

223 {
224  produceSideInfo();
225  if (rank==0)
226  {
227  std::cout << "Running ADMM iterations ..." << std::endl;
229  for (int iter=0; iter<Nadmmiter; ++iter)
230  {
233  updateUD();
235  }
236  progress_bar(Nadmmiter);
237  produceVolume();
238  Vk.write(fnRoot+".vol");
239  }
240  synchronize();
241 }
void init_progress_bar(long total)
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)
glob_prnt iter
void progress_bar(long rlen)
Image< double > Vk
virtual void synchronize()

◆ shareVolume()

virtual void ProgReconsADMM::shareVolume ( MultidimArray< double > &  V)
inlinevirtual

Reimplemented in MpiProgReconstructADMM.

Definition at line 145 of file reconstruct_ADMM.h.

145 {}

◆ show()

void ProgReconsADMM::show ( )

Definition at line 217 of file reconstruct_ADMM.cpp.

218 {
219 
220 }

◆ synchronize()

virtual void ProgReconsADMM::synchronize ( )
inlinevirtual

Reimplemented in MpiProgReconstructADMM.

Definition at line 148 of file reconstruct_ADMM.h.

148 {}

◆ updateUD()

void ProgReconsADMM::updateUD ( )

Update u and d

Definition at line 653 of file reconstruct_ADMM.cpp.

654 {
655  double threshold;
656  if (mu>0)
657  threshold=lambda/mu;
658  else
659  threshold=0;
660 // std::cout << "lambda=" << lambda << std::endl;
661 // std::cout << "mu=" << mu << std::endl;
662 // std::cout << "Threshold=" << threshold << std::endl;
664 
665  // Update gradient and Lagrange parameters
666  ud=Ck(); applyLFilter(fourierLx); LCk=ud;
667  ux=LCk; ux+=dx; ux.threshold("soft",threshold);
668  dx+=LCk; dx-=ux;
669 
670  ud=Ck(); applyLFilter(fourierLy); LCk=ud;
671  uy=LCk; uy+=dy; uy.threshold("soft",threshold);
672  dy+=LCk; dy-=uy;
673 
674  ud=Ck(); applyLFilter(fourierLz); LCk=ud;
675  uz=LCk; uz+=dz; uz.threshold("soft",threshold);
676  dz+=LCk; dz-=uz;
677 }
MultidimArray< std::complex< double > > fourierLx
MultidimArray< double > dx
void threshold(const String &type, T a, T b=0, MultidimArray< int > *mask=NULL)
MultidimArray< double > dz
MultidimArray< double > uz
MultidimArray< std::complex< double > > fourierLz
MultidimArray< double > ux
void threshold(double *phi, unsigned long nvox, double limit)
Definition: lib_vwk.cpp:524
MultidimArray< std::complex< double > > fourierLy
MultidimArray< double > ud
MultidimArray< double > uy
Image< double > Ck
MultidimArray< double > dy
void applyLFilter(MultidimArray< std::complex< double > > &fourierL, bool adjoint=false)

Member Data Documentation

◆ a

double ProgReconsADMM::a

Definition at line 78 of file reconstruct_ADMM.h.

◆ alpha

double ProgReconsADMM::alpha

Definition at line 79 of file reconstruct_ADMM.h.

◆ applyMask

bool ProgReconsADMM::applyMask

Definition at line 91 of file reconstruct_ADMM.h.

◆ CHtb

Image<double> ProgReconsADMM::CHtb

Definition at line 152 of file reconstruct_ADMM.h.

◆ Ck

Image<double> ProgReconsADMM::Ck

Definition at line 153 of file reconstruct_ADMM.h.

◆ dx

MultidimArray<double> ProgReconsADMM::dx

Definition at line 159 of file reconstruct_ADMM.h.

◆ dy

MultidimArray<double> ProgReconsADMM::dy

Definition at line 159 of file reconstruct_ADMM.h.

◆ dz

MultidimArray<double> ProgReconsADMM::dz

Definition at line 159 of file reconstruct_ADMM.h.

◆ fnFirst

FileName ProgReconsADMM::fnFirst

Definition at line 74 of file reconstruct_ADMM.h.

◆ fnHtb

FileName ProgReconsADMM::fnHtb

Definition at line 75 of file reconstruct_ADMM.h.

◆ fnHtKH

FileName ProgReconsADMM::fnHtKH

Definition at line 76 of file reconstruct_ADMM.h.

◆ fnIn

FileName ProgReconsADMM::fnIn

Definition at line 72 of file reconstruct_ADMM.h.

◆ fnRoot

FileName ProgReconsADMM::fnRoot

Definition at line 73 of file reconstruct_ADMM.h.

◆ fourierKernelV

MultidimArray<std::complex<double> > ProgReconsADMM::fourierKernelV

Definition at line 155 of file reconstruct_ADMM.h.

◆ fourierLx

MultidimArray< std::complex<double> > ProgReconsADMM::fourierLx

Definition at line 160 of file reconstruct_ADMM.h.

◆ fourierLy

MultidimArray< std::complex<double> > ProgReconsADMM::fourierLy

Definition at line 160 of file reconstruct_ADMM.h.

◆ fourierLz

MultidimArray< std::complex<double> > ProgReconsADMM::fourierLz

Definition at line 160 of file reconstruct_ADMM.h.

◆ kernel

AdmmKernel ProgReconsADMM::kernel

Definition at line 151 of file reconstruct_ADMM.h.

◆ kernelShape

String ProgReconsADMM::kernelShape

Definition at line 77 of file reconstruct_ADMM.h.

◆ lambda

double ProgReconsADMM::lambda

Definition at line 81 of file reconstruct_ADMM.h.

◆ lambda1

double ProgReconsADMM::lambda1

Definition at line 82 of file reconstruct_ADMM.h.

◆ mask

Mask ProgReconsADMM::mask

Definition at line 93 of file reconstruct_ADMM.h.

◆ mdIn

MetaDataVec ProgReconsADMM::mdIn

Definition at line 154 of file reconstruct_ADMM.h.

◆ mu

double ProgReconsADMM::mu

Definition at line 80 of file reconstruct_ADMM.h.

◆ Nadmmiter

int ProgReconsADMM::Nadmmiter

Definition at line 89 of file reconstruct_ADMM.h.

◆ Ncgiter

int ProgReconsADMM::Ncgiter

Definition at line 88 of file reconstruct_ADMM.h.

◆ Nprocs

size_t ProgReconsADMM::Nprocs

Definition at line 96 of file reconstruct_ADMM.h.

◆ paddedx

MultidimArray<double> ProgReconsADMM::paddedx

Definition at line 156 of file reconstruct_ADMM.h.

◆ positivity

bool ProgReconsADMM::positivity

Definition at line 90 of file reconstruct_ADMM.h.

◆ rank

size_t ProgReconsADMM::rank

Definition at line 97 of file reconstruct_ADMM.h.

◆ saveIntermediate

bool ProgReconsADMM::saveIntermediate

Definition at line 95 of file reconstruct_ADMM.h.

◆ SL

SymList ProgReconsADMM::SL

Definition at line 161 of file reconstruct_ADMM.h.

◆ symmetry

String ProgReconsADMM::symmetry

Definition at line 94 of file reconstruct_ADMM.h.

◆ Ti

double ProgReconsADMM::Ti

Definition at line 84 of file reconstruct_ADMM.h.

◆ Tp

double ProgReconsADMM::Tp

Definition at line 85 of file reconstruct_ADMM.h.

◆ transformerL

FourierTransformer ProgReconsADMM::transformerL

Definition at line 157 of file reconstruct_ADMM.h.

◆ transformerPaddedx

FourierTransformer ProgReconsADMM::transformerPaddedx

Definition at line 157 of file reconstruct_ADMM.h.

◆ Ts

double ProgReconsADMM::Ts

Definition at line 92 of file reconstruct_ADMM.h.

◆ ud

MultidimArray<double> ProgReconsADMM::ud

Definition at line 159 of file reconstruct_ADMM.h.

◆ useCTF

bool ProgReconsADMM::useCTF

Definition at line 87 of file reconstruct_ADMM.h.

◆ useWeights

bool ProgReconsADMM::useWeights

Definition at line 86 of file reconstruct_ADMM.h.

◆ ux

MultidimArray<double> ProgReconsADMM::ux

Definition at line 159 of file reconstruct_ADMM.h.

◆ uy

MultidimArray<double> ProgReconsADMM::uy

Definition at line 159 of file reconstruct_ADMM.h.

◆ uz

MultidimArray<double> ProgReconsADMM::uz

Definition at line 159 of file reconstruct_ADMM.h.

◆ Vk

Image<double> ProgReconsADMM::Vk

Definition at line 153 of file reconstruct_ADMM.h.


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