558 double SinPhi, CosPhi, SinPsi, CosPsi, SinTheta, CosTheta;
562 int half_Xwidth = Xwidth / 2;
563 int half_Ywidth = Ywidth / 2;
567 for (
int i = 0; i < dim + 5; i++) {
571 theta = Parameters(1);
585 SinTheta = sin(theta);
586 CosTheta = cos(theta);
587 std::vector<double> Rz1(16,0);
588 std::vector<double> Ry(16,0);
589 std::vector<double> Rz2(16,0);
594 double *hlp = Rz2.data();
597 hlp += (std::ptrdiff_t) 3L;
609 hlp += (std::ptrdiff_t) 3L;
619 hlp += (std::ptrdiff_t) 2L;
621 hlp += (std::ptrdiff_t) 6L;
623 hlp += (std::ptrdiff_t) 2L;
626 std::vector<double> R(16,0);
632 std::vector<double> DRz1(16,0);
633 std::vector<double> DRy(16,0);
634 std::vector<double> DRz2(16,0);
639 hlp += (std::ptrdiff_t) 3L;
646 hlp += (std::ptrdiff_t) 3L;
652 hlp += (std::ptrdiff_t) 2L;
654 hlp += (std::ptrdiff_t) 6L;
656 hlp += (std::ptrdiff_t) 2L;
659 std::vector<double> DR0(16,0);
660 std::vector<double> DR1(16,0);
661 std::vector<double> DR2(16,0);
678 std::vector<double> Tr(16,0);
685 hlp += (std::ptrdiff_t) 3L;
687 hlp += (std::ptrdiff_t) 5L;
690 Xwidth, Ywidth, sigmalocal);
696 if (
partialpfunction(Parameters, centerOfMass, R.data(), Tr.data(), DR0.data(), DR1.data(), DR2.data(), DP_Rx,
697 DP_Ry, DP_Rz2, DP_x, DP_y, P_esp_image, Xwidth,
703 std::vector<double> helpgr(trialSize,0);
705 for (i = 0; i < trialSize; i++) {
707 for (j = 0; j < trialSize; j++) {
708 Hessian[i * trialSize +
j] = 0.0;
712 for (
int kx = 0; kx < Xwidth; kx++)
713 for (
int ky = 0; ky < Ywidth; ky++) {
714 difference = rg_projimage(kx - half_Xwidth, ky - half_Ywidth)
715 - P_esp_image(kx - half_Xwidth, ky - half_Ywidth);
716 helpgr[0] = DP_Rx(kx, ky);
717 helpgr[1] = DP_Ry(kx, ky);
718 helpgr[2] = DP_Rz2(kx, ky);
719 helpgr[3] = DP_x(kx, ky);
720 helpgr[4] = DP_y(kx, ky);
721 for (j = 0; j < dim; j++) {
722 helpgr[5 +
j] = DP_q(j, kx, ky);
727 for (
int i = 0; i < trialSize; i++) {
728 Hessian[i * trialSize +
i] += lambda * Hessian[i * trialSize +
i];
729 if (i + 1 < trialSize)
730 for (
int j = i + 1; j < trialSize; j++) {
731 Hessian[i * trialSize +
j] = Hessian[j * trialSize +
i];
ProgFlexibleAlignment * global_flexible_prog
void ProjectionRefencePoint(Matrix1D< double > &Parameters, int dim, double *R, double *Tr, MultidimArray< double > &proj_help_test, MultidimArray< double > &P_esp_image, int Xwidth, int Ywidth, double sigma)
#define WRITE_ERROR(FunctionName, String)
void gradhesscost_atpixel(double *Gradient, double *Hessian, double *helpgr, double difference)
int return_gradhesscost(Matrix1D< double > ¢erOfMass, double *Gradient, double *Hessian, Matrix1D< double > &Parameters, int dim, MultidimArray< double > &rg_projimage, MultidimArray< double > &P_esp_image, int Xwidth, int Ywidth)
double psi(const double x)
int GetIdentitySquareMatrix(double *A, long Size)
int multiply_3Matrices(double *A, double *B, double *C, double *X, long Lines, long CommonSizeH, long CommonSizeW, long Columns)
int partialpfunction(Matrix1D< double > &Parameters, Matrix1D< double > ¢erOfMass, double *R, double *Tr, double *DR0, double *DR1, double *DR2, MultidimArray< double > &DP_Rz1, MultidimArray< double > &DP_Ry, MultidimArray< double > &DP_Rz2, MultidimArray< double > &DP_x, MultidimArray< double > &DP_y, MultidimArray< double > &DP_q, int Xwidth, int Ywidth)