Xmipp  v3.23.11-Nereus
Functions
forward_zernike_images.cpp File Reference
#include "forward_zernike_images.h"
#include "core/transformations.h"
#include "core/xmipp_image_extension.h"
#include "core/xmipp_image_generic.h"
#include "data/projection.h"
#include "data/mask.h"
Include dependency graph for forward_zernike_images.cpp:

Go to the source code of this file.

Functions

double continuousZernikeCost (double *x, void *_prm)
 

Function Documentation

◆ continuousZernikeCost()

double continuousZernikeCost ( double *  x,
void *  _prm 
)

Definition at line 520 of file forward_zernike_images.cpp.

521 {
523  int idx = 3*(prm->vecSize);
524  // TODO: Optimize parameters for each image (not sharing)
525  // prm->deltaDefocusU[0]=x[idx+6]; prm->deltaDefocusU[1]=x[idx+6];
526  // prm->deltaDefocusV[0]=x[idx+7]; prm->deltaDefocusV[1]=x[idx+7];
527  // prm->deltaDefocusAngle[0]=x[idx+8]; prm->deltaDefocusAngle[1]=x[idx+8];
528 
529  switch (prm->num_images)
530  {
531  case 2:
532  prm->deltaX[0] = x[idx + 1];
533  prm->deltaY[0] = x[idx + 3];
534  prm->deltaRot[0] = x[idx + 5];
535  prm->deltaTilt[0] = x[idx + 7];
536  prm->deltaPsi[0] = x[idx + 9];
537  // prm->deltaDefocusU[0]=x[idx + 11];
538  // prm->deltaDefocusV[0]=x[idx + 13];
539  // prm->deltaDefocusAngle[0]=x[idx + 15];
540 
541  prm->deltaX[1] = x[idx + 2];
542  prm->deltaY[1] = x[idx + 4];
543  prm->deltaRot[1] = x[idx + 6];
544  prm->deltaTilt[1] = x[idx + 8];
545  prm->deltaPsi[1] = x[idx + 10];
546  // prm->deltaDefocusU[1]=x[idx + 12];
547  // prm->deltaDefocusV[1]=x[idx + 14];
548  // prm->deltaDefocusAngle[1]=x[idx + 16];
549 
550  MAT_ELEM(prm->A1, 0, 2) = prm->old_shiftX[0] + prm->deltaX[0];
551  MAT_ELEM(prm->A1, 1, 2) = prm->old_shiftY[0] + prm->deltaY[0];
552  MAT_ELEM(prm->A1, 0, 0) = 1;
553  MAT_ELEM(prm->A1, 0, 1) = 0;
554  MAT_ELEM(prm->A1, 1, 0) = 0;
555  MAT_ELEM(prm->A1, 1, 1) = 1;
556 
557  MAT_ELEM(prm->A2, 0, 2) = prm->old_shiftX[1] + prm->deltaX[1];
558  MAT_ELEM(prm->A2, 1, 2) = prm->old_shiftY[1] + prm->deltaY[1];
559  MAT_ELEM(prm->A2, 0, 0) = 1;
560  MAT_ELEM(prm->A2, 0, 1) = 0;
561  MAT_ELEM(prm->A2, 1, 0) = 0;
562  MAT_ELEM(prm->A2, 1, 1) = 1;
563  break;
564 
565  case 3:
566  prm->deltaX[0] = x[idx + 1];
567  prm->deltaY[0] = x[idx + 4];
568  prm->deltaRot[0] = x[idx + 7];
569  prm->deltaTilt[0] = x[idx + 10];
570  prm->deltaPsi[0] = x[idx + 13];
571  // prm->deltaDefocusU[0]=x[idx + 16];
572  // prm->deltaDefocusV[0]=x[idx + 19];
573  // prm->deltaDefocusAngle[0]=x[idx + 22];
574 
575  prm->deltaX[1] = x[idx + 2];
576  prm->deltaY[1] = x[idx + 5];
577  prm->deltaRot[1] = x[idx + 8];
578  prm->deltaTilt[1] = x[idx + 11];
579  prm->deltaPsi[1] = x[idx + 14];
580  // prm->deltaDefocusU[1]=x[idx + 17];
581  // prm->deltaDefocusV[1]=x[idx + 20];
582  // prm->deltaDefocusAngle[1]=x[idx + 23];
583 
584  prm->deltaX[2] = x[idx + 3];
585  prm->deltaY[2] = x[idx + 6];
586  prm->deltaRot[2] = x[idx + 9];
587  prm->deltaTilt[2] = x[idx + 12];
588  prm->deltaPsi[2] = x[idx + 15];
589  // prm->deltaDefocusU[2]=x[idx + 18];
590  // prm->deltaDefocusV[2]=x[idx + 21];
591  // prm->deltaDefocusAngle[2]=x[idx + 24];
592 
593  MAT_ELEM(prm->A1, 0, 2) = prm->old_shiftX[0] + prm->deltaX[0];
594  MAT_ELEM(prm->A1, 1, 2) = prm->old_shiftY[0] + prm->deltaY[0];
595  MAT_ELEM(prm->A1, 0, 0) = 1;
596  MAT_ELEM(prm->A1, 0, 1) = 0;
597  MAT_ELEM(prm->A1, 1, 0) = 0;
598  MAT_ELEM(prm->A1, 1, 1) = 1;
599 
600  MAT_ELEM(prm->A2, 0, 2) = prm->old_shiftX[1] + prm->deltaX[1];
601  MAT_ELEM(prm->A2, 1, 2) = prm->old_shiftY[1] + prm->deltaY[1];
602  MAT_ELEM(prm->A2, 0, 0) = 1;
603  MAT_ELEM(prm->A2, 0, 1) = 0;
604  MAT_ELEM(prm->A2, 1, 0) = 0;
605  MAT_ELEM(prm->A2, 1, 1) = 1;
606 
607  MAT_ELEM(prm->A3, 0, 2) = prm->old_shiftX[2] + prm->deltaX[2];
608  MAT_ELEM(prm->A3, 1, 2) = prm->old_shiftY[2] + prm->deltaY[2];
609  MAT_ELEM(prm->A3, 0, 0) = 1;
610  MAT_ELEM(prm->A3, 0, 1) = 0;
611  MAT_ELEM(prm->A3, 1, 0) = 0;
612  MAT_ELEM(prm->A3, 1, 1) = 1;
613  break;
614 
615 
616  default:
617  prm->deltaX[0] = x[idx + 1];
618  prm->deltaY[0] = x[idx + 2];
619  prm->deltaRot[0] = x[idx + 3];
620  prm->deltaTilt[0] = x[idx + 4];
621  prm->deltaPsi[0] = x[idx + 5];
622  prm->deltaDefocusU[0]=x[idx + 6];
623  prm->deltaDefocusV[0]=x[idx + 7];
624  prm->deltaDefocusAngle[0]=x[idx + 8];
625 
626  MAT_ELEM(prm->A1, 0, 2) = prm->old_shiftX[0] + prm->deltaX[0];
627  MAT_ELEM(prm->A1, 1, 2) = prm->old_shiftY[0] + prm->deltaY[0];
628  MAT_ELEM(prm->A1, 0, 0) = 1;
629  MAT_ELEM(prm->A1, 0, 1) = 0;
630  MAT_ELEM(prm->A1, 1, 0) = 0;
631  MAT_ELEM(prm->A1, 1, 1) = 1;
632  break;
633  }
634 
635  return prm->transformImageSph(x);
636 
637 }
std::vector< double > old_shiftY
std::vector< double > deltaPsi
std::vector< double > deltaTilt
std::vector< double > deltaDefocusAngle
std::vector< double > deltaDefocusU
std::vector< double > deltaX
doublereal * x
#define MAT_ELEM(m, i, j)
Definition: matrix2d.h:116
std::vector< double > deltaY
std::vector< double > old_shiftX
ProgClassifyCL2D * prm
std::vector< double > deltaDefocusV
double transformImageSph(double *pclnm)
std::vector< double > deltaRot