841 Eulerg = proj.
euler * D;
852 double rot, tilt,
psi;
854 std::cout <<
"rot= " << rot <<
" tilt= " << tilt
855 <<
" psi= " << psi << std::endl;
856 std::cout <<
"D\n" << D << std::endl;
857 std::cout <<
"Eulerf\n" << proj.
euler << std::endl;
858 std::cout <<
"Eulerg\n" << Eulerg << std::endl;
859 std::cout <<
"aint " << aint.
transpose() << std::endl;
860 std::cout <<
"bint " << bint.
transpose() << std::endl;
861 std::cout <<
"prjaint " << prjaint.
transpose() << std::endl;
862 std::cout <<
"prjbint " << prjbint.
transpose() << std::endl;
885 prjOrigin +=
XX(shift) * prjaint +
YY(shift) * prjbint;
889 std::cout <<
"prjX " << prjX.transpose() << std::endl;
890 std::cout <<
"prjY " << prjY.transpose() << std::endl;
891 std::cout <<
"prjZ " << prjZ.transpose() << std::endl;
892 std::cout <<
"prjOrigin " << prjOrigin.transpose() << std::endl;
902 A(0, 0) =
YY(prjbint) *
xDim;
903 A(0, 1) = -
XX(prjbint) *
xDim;
904 A(1, 0) = -
YY(prjaint) *
yDim;
905 A(1, 1) =
XX(prjaint) *
yDim;
906 double nor = 1 / (
XX(prjaint) *
YY(prjbint) -
XX(prjbint) *
YY(prjaint));
912 std::cout <<
"A\n" << A << std::endl;
913 std::cout <<
"Ainv\n" << Ainv << std::endl;
914 std::cout <<
"Check that A*prjaint=(Xdim,0) " 916 std::cout <<
"Check that A*prjbint=(0,Ydim) " 918 std::cout <<
"Check that Ainv*(Xdim,0)=prjaint " 920 std::cout <<
"Check that Ainv*(0,Ydim)=prjbint " 936 XX(c1) =
XX(footprint_size);
937 YY(c1) =
YY(footprint_size);
942 XX(deffootprint_size) =
fmax(fabs(
XX(c1)), fabs(
XX(c2)));
943 YY(deffootprint_size) =
fmax(fabs(
YY(c1)), fabs(
YY(c2)));
947 std::cout <<
"Footprint_size " << footprint_size.transpose() << std::endl;
948 std::cout <<
"c1: " << c1.transpose() << std::endl;
949 std::cout <<
"c2: " << c2.transpose() << std::endl;
950 std::cout <<
"Deformed Footprint_size " << deffootprint_size.transpose()
956 auto ZZ_lowest = (int)
ZZ(grid.
lowest);
959 auto ZZ_highest = (int)
ZZ(grid.
highest);
972 beginZ = (double)XX_lowest * prjX + (
double)YY_lowest * prjY + (double)ZZ_lowest * prjZ + prjOrigin;
976 std::cout <<
"BeginZ " << beginZ.transpose() << std::endl;
977 std::cout <<
"Mask ";
979 std::cout << std::endl;
982 std::cout << std::endl;
983 std::cout <<
"Proj ";
985 std::cout << std::endl;
986 std::cout <<
"Norm Proj ";
987 norm_proj().printShape();
988 std::cout << std::endl;
998 for (k = ZZ_lowest; k <= ZZ_highest; k++)
1002 for (i = YY_lowest; i <= YY_highest; i++)
1006 for (j = XX_lowest; j <= XX_highest; j++)
1011 std::cout <<
"Visiting " << i <<
" " << j << std::endl;
1023 XX_corner1 =
CEIL(
XX(defactprj) -
XX(deffootprint_size));
1024 YY_corner1 =
CEIL(
YY(defactprj) -
YY(deffootprint_size));
1025 XX_corner2 =
FLOOR(
XX(defactprj) +
XX(deffootprint_size));
1026 YY_corner2 =
FLOOR(
YY(defactprj) +
YY(deffootprint_size));
1030 std::cout <<
" k= " << k <<
" i= " << i <<
" j= " << j << std::endl;
1031 std::cout <<
" Actual position: " << actprj.transpose() << std::endl;
1032 std::cout <<
" Deformed position: " << defactprj.transpose() << std::endl;
1033 std::cout <<
" Blob corners: (" << XX_corner1 <<
"," << YY_corner1
1034 <<
") (" << XX_corner2 <<
"," << YY_corner2 <<
")\n";
1054 for (
y = YY_corner1;
y <= YY_corner2;
y++)
1055 for (
x = XX_corner1;
x <= XX_corner2;
x++)
1065 std::cout <<
" Studying: " << r.transpose()
1066 <<
"--> " << rc.transpose()
1067 <<
"dist (" <<
xc -
XX(actprj)
1068 <<
"," <<
yc -
YY(actprj) <<
") --> " 1069 << foot_U <<
" " << foot_V << std::endl;
1082 std::cout <<
" After wrapping " << xw <<
" " << yw << std::endl;
1083 std::cout <<
" Value added = " <<
VOLVOXEL(vol, k, i, j) *
1106 vol_corr +=
IMGPIXEL(norm_proj, yw, xw) *
1112 #ifdef DEBUG_INTERMIDIATE 1113 proj.
write(
"inter.xmp");
1114 norm_proj.
write(
"inter_norm.xmp");
1115 std::cout <<
"Press any key\n";
1124 VOLVOXEL(vol, k, i, j) += vol_corr;
1127 VOLVOXEL(vol, k, i, j) += vol_corr / N_eq;
1140 #ifdef DEBUG_AT_THE_END 1141 proj.
write(
"inter.xmp");
1142 norm_proj.
write(
"inter_norm.xmp");
1143 std::cout <<
"Press any key\n";
1152 #undef wrap_as_Crystal
#define A2D_ELEM(v, i, j)
#define VOLVOXEL(V, k, i, j)
Matrix1D< double > highest
void printShape(std::ostream &out=std::cout) const
#define REPORT_ERROR(nerr, ErrormMsg)
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)
tBasisFunction type
Basis function to use.
ImageOver blobprint2
Square of the footprint.
bool is_interesting(const Matrix1D< double > &uv) const
Matrix1D< double > lowest
#define V2_PLUS_V2(a, b, c)
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
Matrix1D< T > transpose() const
#define M2x2_BY_V2x1(a, M, b)
void transpose(double *array, int size)
Matrix1D< double > vectorR2(double x, double y)
#define M2x2_BY_CT(M2, M1, k)
Matrix1D< double > origin
Origin of the grid in the Universal coordinate system.
double psi(const double x)
void Euler_matrix2angles(const Matrix2D< double > &A, double &alpha, double &beta, double &gamma, bool homogeneous)
#define VECTOR_R3(v, x, y, z)
#define OVER2IMG(IO, v, u, iv, iu)
void Gdir_project_to_plane(const Matrix1D< double > &gr, double rot, double tilt, double psi, Matrix1D< double > &result) const
#define wrap_as_Crystal(x, y, xw, yw)
#define M2x2_INV(Ainv, A)
Incorrect value received.
void Uproject_to_plane(const Matrix1D< double > &point, const Matrix1D< double > &direction, double distance, Matrix1D< double > &result)
#define IMGPIXEL(I, i, j)
ImageOver blobprint
Blob footprint.