43 aux.
rot = 3. *
PI / 5.;
47 aux.
rot = 5. *
PI / 5.;
51 aux.
rot = -3. *
PI / 5.;
59 aux.
rot = 2. *
PI / 5.;
63 aux.
rot = 4. *
PI / 5.;
67 aux.
rot = -4. *
PI / 5.;
71 aux.
rot = -2. *
PI / 5.;
127 std::cerr <<
"maximum value of angular sampling rate is " 144 else if(neighborhood>180.001)
146 Use any negative value to cover the whole space ");
160 std::vector <Matrix1D<double> > edge_vector_start;
162 std::vector <Matrix1D<double> > edge_vector_end;
170 max_z=cos(
PI * max_tilt / 180.);
171 min_z=cos(
PI * min_tilt / 180.);
172 if ( (min_tilt > max_tilt) ||
178 std::cerr <<
"tilt angles cannot be negative or min_tilt > max_tilt" << std::endl;
179 std::cerr <<
"min_tilt=" << min_tilt <<
"max_tilt=" << max_tilt << std::endl;
193 fillEdge(starting_point, ending_point, edge_vector_start,
false);
196 fillEdge(starting_point, ending_point, edge_vector_start,
true);
200 fillEdge(starting_point, ending_point, edge_vector_end,
false);
203 fillEdge(starting_point, ending_point, edge_vector_end,
true);
207 fillEdge(starting_point, ending_point, edge_vector_start,
false);
210 fillEdge(starting_point, ending_point, edge_vector_start,
true);
214 fillEdge(starting_point, ending_point, edge_vector_end,
false);
217 fillEdge(starting_point, ending_point, edge_vector_end,
true);
222 fillEdge(starting_point, ending_point, edge_vector_start,
false);
225 fillEdge(starting_point, ending_point, edge_vector_start,
true);
229 fillEdge(starting_point, ending_point, edge_vector_end,
false);
232 fillEdge(starting_point, ending_point, edge_vector_end,
true);
237 fillEdge(starting_point, ending_point, edge_vector_start,
false);
240 fillEdge(starting_point, ending_point, edge_vector_start,
true);
244 fillEdge(starting_point, ending_point, edge_vector_end,
false);
247 fillEdge(starting_point, ending_point, edge_vector_end,
true);
252 fillEdge(starting_point, ending_point, edge_vector_start,
false);
255 fillEdge(starting_point, ending_point, edge_vector_start,
true);
259 fillEdge(starting_point, ending_point, edge_vector_end,
false);
262 fillEdge(starting_point, ending_point, edge_vector_end,
true);
267 fillEdge(starting_point, ending_point, edge_vector_start,
false);
270 fillEdge(starting_point, ending_point, edge_vector_start,
true);
274 fillEdge(starting_point, ending_point, edge_vector_end,
false);
277 fillEdge(starting_point, ending_point, edge_vector_end,
true);
282 fillEdge(starting_point, ending_point, edge_vector_start,
false);
285 fillEdge(starting_point, ending_point, edge_vector_start,
true);
289 fillEdge(starting_point, ending_point, edge_vector_end,
false);
292 fillEdge(starting_point, ending_point, edge_vector_end,
true);
297 fillEdge(starting_point, ending_point, edge_vector_start,
false);
300 fillEdge(starting_point, ending_point, edge_vector_start,
true);
304 fillEdge(starting_point, ending_point, edge_vector_end,
false);
307 fillEdge(starting_point, ending_point, edge_vector_end,
true);
312 fillEdge(starting_point, ending_point, edge_vector_start,
false);
315 fillEdge(starting_point, ending_point, edge_vector_start,
true);
319 fillEdge(starting_point, ending_point, edge_vector_end,
false);
322 fillEdge(starting_point, ending_point, edge_vector_end,
true);
327 fillEdge(starting_point, ending_point, edge_vector_start,
false);
330 fillEdge(starting_point, ending_point, edge_vector_start,
true);
334 fillEdge(starting_point, ending_point, edge_vector_end,
false);
337 fillEdge(starting_point, ending_point, edge_vector_end,
true);
342 std::ofstream filestr1;
343 filestr1.open (
"computeSamplingPoints_1.bild");
346 i < edge_vector_start.size();
349 filestr1 <<
".sphere " 350 << edge_vector_start[
i](0) <<
" " 351 << edge_vector_start[
i](1) <<
" " 352 << edge_vector_start[
i](2) <<
" " 353 <<
" .025" << std::endl;
354 filestr1 <<
".sphere " 355 << edge_vector_end[
i](0) <<
" " 356 << edge_vector_end[
i](1) <<
" " 357 << edge_vector_end[
i](2) <<
" " 358 <<
" .025" << std::endl;
391 i < edge_vector_start.size();
396 if ( (only_half_sphere &&
ZZ(edge_vector_start[
i]) < 0.0)
397 ||
ZZ(edge_vector_start[i]) < min_z
398 ||
ZZ(edge_vector_start[i]) > max_z
407 if ( (only_half_sphere &&
ZZ(edge_vector_end[
i]) < 0.0)
408 ||
ZZ(edge_vector_end[i]) < min_z
409 ||
ZZ(edge_vector_end[i]) > max_z
419 std::ofstream filestr;
420 filestr.open (
"computeSamplingPoints_2.bild");
425 filestr <<
".color 1 0 0" << std::endl
430 <<
" .025" << std::endl;
433 filestr <<
".color 0 0 1" << std::endl
438 <<
" .027" << std::endl;
449 i < edge_vector_start.size();
466 only_half_sphere,min_z,max_z);
471 std::ofstream filestr3;
472 filestr3.open (
"computeSamplingPoints_3.bild");
477 filestr3 <<
".color 1 0 0" << std::endl
482 <<
" .025" << std::endl;
507 std::cout <<
".color 0 1 0" << std::endl
540 for (k = 0; k < bound; k++)
562 std::ofstream filestr4;
563 filestr4.open (
"computeSamplingPoints_4.bild");
565 filestr4 <<
".color yellow" 572 filestr4 <<
".sphere " 576 <<
" .025" << std::endl;
588 if (
YY(t) - 0.000001 >
YY(a))
592 else if (
YY(t) + 0.000001 <
YY(a))
618 double upsilon = acos(
dotProduct(starting_point, ending_point));
621 gamma = (double)i1 / (number_of_samples - 1);
622 alpha = sin((1. - gamma) * upsilon) / (sin(upsilon));
623 beta = sin(gamma * upsilon) / sin(upsilon);
624 v_aux = alpha * starting_point + beta * ending_point;
626 if (beta > 0.9999 && END_FLAG)
628 edge_vector.push_back(v_aux);
635 int my_number_of_samples,
636 bool only_half_sphere,
647 double upsilon = acos(
dotProduct(starting_point, ending_point));
649 for (
int i1 = 1; i1 < my_number_of_samples; i1++)
651 gamma = (double)i1 / my_number_of_samples;
652 alpha = sin((1. - gamma) * upsilon) / (sin(upsilon));
653 beta = sin(gamma * upsilon) / sin(upsilon);
654 v_aux = alpha * starting_point + beta * ending_point;
656 if ( (only_half_sphere &&
ZZ(v_aux) < 0.0)
679 #define CLEAR_VECTORS() \ 680 no_redundant_sampling_points_vector.clear();\ 681 no_redundant_sampling_points_angles.clear();\ 682 no_redundant_sampling_points_index.clear() 684 #define CREATE_INDEXES() \ 685 size_t __size = no_redundant_sampling_points_angles.size();\ 686 no_redundant_sampling_points_index.resize(__size, 0);\ 687 size_t * __ptrIndex = &(no_redundant_sampling_points_index[0]);\ 688 for (size_t i = 1; i < __size; ++i)\ 702 if (symmetry ==
pg_CN)
714 else if (symmetry ==
pg_CI ||
726 else if (symmetry ==
pg_CNV )
738 else if (symmetry ==
pg_CNH )
752 else if (symmetry ==
pg_SN )
766 else if (symmetry ==
pg_DN )
780 else if (symmetry ==
pg_DNV )
794 else if (symmetry ==
pg_DNH )
808 else if (symmetry ==
pg_T )
811 _3_fold_axis_1_by_3_fold_axis_2 =
vectorR3(-0.942809, 0., 0.);
814 _3_fold_axis_2_by_3_fold_axis_3 =
vectorR3(0.471405, 0.272165, 0.7698);
817 _3_fold_axis_3_by_3_fold_axis_1 =
vectorR3(0.471404, 0.816497, 0.);
836 else if (symmetry ==
pg_TD )
839 _2_fold_axis_1_by_3_fold_axis_2 =
vectorR3(-0.942809, 0., 0.);
842 _3_fold_axis_2_by_3_fold_axis_5 =
vectorR3(0.471405, 0.272165, 0.7698);
845 _3_fold_axis_5_by_2_fold_axis_1 =
vectorR3(0., 0.471405, -0.666667);
864 else if (symmetry ==
pg_TH )
867 _3_fold_axis_1_by_2_fold_axis_1 =
vectorR3(-0.816496, 0., 0.);
870 _2_fold_axis_1_by_2_fold_axis_2 =
vectorR3(0.707107, 0.408248, -0.57735);
873 _2_fold_axis_2_by_3_fold_axis_1 =
vectorR3(-0.408248, -0.707107, 0.);
892 else if (symmetry ==
pg_O )
895 _3_fold_axis_1_by_3_fold_axis_2 =
vectorR3(0., -1., 1.);
898 _3_fold_axis_2_by_4_fold_axis =
vectorR3(1., 1., 0.);
901 _4_fold_axis_by_3_fold_axis_1 =
vectorR3(-1., 1., 0.);
921 else if (symmetry ==
pg_OH )
924 _3_fold_axis_1_by_3_fold_axis_2 =
vectorR3(0., -1., 1.);
927 _3_fold_axis_2_by_4_fold_axis =
vectorR3(1., 1., 0.);
930 _4_fold_axis_by_3_fold_axis_1 =
vectorR3(-1., 1., 0.);
948 else if (symmetry ==
pg_I || symmetry ==
pg_I2)
951 _5_fold_axis_1_by_5_fold_axis_2 =
vectorR3(0., 1., 0.);
954 _5_fold_axis_2_by_3_fold_axis =
vectorR3(-0.4999999839058737,
959 _3_fold_axis_by_5_fold_axis_1 =
vectorR3(0.4999999839058737,
976 else if (symmetry ==
pg_I1)
981 _5_fold_axis_1_by_5_fold_axis_2 = A *
vectorR3(0., 1., 0.);
984 _5_fold_axis_2_by_3_fold_axis = A *
vectorR3(-0.4999999839058737,
989 _3_fold_axis_by_5_fold_axis_1 = A *
vectorR3(0.4999999839058737,
1007 else if (symmetry ==
pg_I3)
1012 _5_fold_axis_1_by_5_fold_axis_2 = A *
vectorR3(0., 1., 0.);
1015 _5_fold_axis_2_by_3_fold_axis = A *
vectorR3(-0.4999999839058737,
1016 -0.8090170074556163,
1017 0.3090169861701543);
1020 _3_fold_axis_by_5_fold_axis_1 = A *
vectorR3(0.4999999839058737,
1021 -0.8090170074556163,
1022 0.3090169861701543);
1038 else if (symmetry ==
pg_I4)
1043 _5_fold_axis_1_by_5_fold_axis_2 = A *
vectorR3(0., 0., 1.);
1046 _5_fold_axis_2_by_3_fold_axis = A *
vectorR3(0.187592467856686,
1048 -0.491123477863004);
1051 _3_fold_axis_by_5_fold_axis_1 = A *
vectorR3(0.187592467856686,
1053 -0.491123477863004);
1060 _5_fold_axis_2_by_3_fold_axis) <= 0 &&
1062 _3_fold_axis_by_5_fold_axis_1) <= 0 &&
1064 _5_fold_axis_1_by_5_fold_axis_2) <= 0
1072 else if (symmetry ==
pg_I5)
1074 std::cerr <<
"ERROR: Symmetry pg_I5 not implemented" << std::endl;
1080 _5_fold_axis_1_by_5_fold_axis_2 =
vectorR3(0., 1., 0.);
1083 _5_fold_axis_2_by_3_fold_axis =
vectorR3(-0.4999999839058737,
1084 -0.8090170074556163,
1085 0.3090169861701543);
1088 _3_fold_axis_by_5_fold_axis_1 =
vectorR3(0.4999999839058737,
1089 -0.8090170074556163,
1090 0.3090169861701543);
1093 _3_fold_axis_by_2_fold_axis =
vectorR3(1.,0.,0.);
1108 else if (symmetry ==
pg_I1H)
1113 _5_fold_axis_1_by_5_fold_axis_2 = A *
vectorR3(0., 1., 0.);
1116 _5_fold_axis_2_by_3_fold_axis = A *
vectorR3(-0.4999999839058737,
1117 -0.8090170074556163,
1118 0.3090169861701543);
1121 _3_fold_axis_by_5_fold_axis_1 = A *
vectorR3(0.4999999839058737,
1122 -0.8090170074556163,
1123 0.3090169861701543);
1126 _3_fold_axis_by_2_fold_axis = A *
vectorR3(1.,0.,0.);
1141 else if (symmetry ==
pg_I3H)
1146 _5_fold_axis_1_by_5_fold_axis_2 = A *
vectorR3(0., 0., 1.);
1149 _5_fold_axis_2_by_3_fold_axis = A *
vectorR3(0.187592467856686,
1151 -0.491123477863004);
1154 _3_fold_axis_by_5_fold_axis_1 = A *
vectorR3(0.187592467856686,
1156 -0.491123477863004);
1159 _3_fold_axis_by_2_fold_axis =
vectorR3(0.,1.,0.);
1165 _5_fold_axis_2_by_3_fold_axis) >= 0 &&
1167 _3_fold_axis_by_5_fold_axis_1) >= 0 &&
1169 _5_fold_axis_1_by_5_fold_axis_2) >= 0 &&
1171 _3_fold_axis_by_2_fold_axis) >= 0
1179 else if (symmetry ==
pg_I4H)
1184 _5_fold_axis_1_by_5_fold_axis_2 = A *
vectorR3(0., 0., 1.);
1187 _5_fold_axis_2_by_3_fold_axis = A *
vectorR3(0.187592467856686,
1189 -0.491123477863004);
1192 _3_fold_axis_by_5_fold_axis_1 = A *
vectorR3(0.187592467856686,
1194 -0.491123477863004);
1197 _3_fold_axis_by_2_fold_axis =
vectorR3(0.,1.,0.);
1203 _5_fold_axis_2_by_3_fold_axis) <= 0 &&
1205 _3_fold_axis_by_5_fold_axis_1) <= 0 &&
1207 _5_fold_axis_1_by_5_fold_axis_2) <= 0 &&
1209 _3_fold_axis_by_2_fold_axis) >= 0
1217 else if (symmetry ==
pg_I5H)
1219 std::cerr <<
"ERROR: pg_I5H Symmetry not implemented" << std::endl;
1224 std::cerr <<
"ERROR: Symmetry " << symmetry <<
"is not known" << std::endl;
1233 std::ofstream filestr5;
1234 filestr5.open (
"removeRedundantPoints.bild");
1235 filestr5 <<
".color 0 0 1" << std::endl;
1240 filestr5 <<
".color 1 0 0" << std::endl
1245 <<
" .03" << std::endl;
1255 bool only_half_sphere,
1259 double cos_max_ang = cos(
DEG2RAD(max_ang));
1260 double my_dotProduct;
1277 for (
size_t i = 0;
i < old_angles.size();
i++)
1280 direction1=old_vector[
i];
1291 if (only_half_sphere)
1292 my_dotProduct =
ABS(my_dotProduct);
1294 if (my_dotProduct > cos_max_ang)
1322 std::ofstream SymFile;
1324 if (symmetry ==
pg_CN)
1326 SymFile <<
"rot_axis " << sym_order <<
" 0 0 1";
1328 else if (symmetry ==
pg_CI)
1330 SymFile <<
"inversion ";
1332 else if (symmetry ==
pg_CS)
1334 SymFile <<
"mirror_plane 0 0 1";
1336 else if (symmetry ==
pg_CNV)
1338 SymFile <<
"rot_axis " << sym_order <<
" 0 0 1";
1339 SymFile << std::endl;
1340 SymFile <<
"mirror_plane 0 1 0";
1342 else if (symmetry ==
pg_CNH)
1344 SymFile <<
"rot_axis " << sym_order <<
" 0 0 1";
1345 SymFile << std::endl;
1346 SymFile <<
"mirror_plane 0 0 -1";
1348 else if (symmetry ==
pg_SN)
1350 int order = sym_order / 2;
1351 SymFile <<
"rot_axis " << order <<
" 0 0 1";
1352 SymFile << std::endl;
1353 SymFile <<
"inversion ";
1355 else if (symmetry ==
pg_DN)
1357 SymFile <<
"rot_axis " << sym_order <<
" 0 0 1";
1358 SymFile << std::endl;
1359 SymFile <<
"rot_axis " <<
"2" <<
" 0 1 0";
1361 else if (symmetry ==
pg_DNV)
1363 SymFile <<
"rot_axis " << sym_order <<
" 0 0 1";
1364 SymFile << std::endl;
1365 SymFile <<
"rot_axis " <<
"2" <<
" 0 1 0";
1366 SymFile << std::endl;
1367 SymFile <<
"mirror_plane 0 1 0";
1369 else if (symmetry ==
pg_DNH)
1371 SymFile <<
"rot_axis " << sym_order <<
" 0 0 1";
1372 SymFile << std::endl;
1373 SymFile <<
"rot_axis " <<
"2" <<
" 1 0 0";
1374 SymFile << std::endl;
1375 SymFile <<
"mirror_plane 0 0 1";
1377 else if (symmetry ==
pg_T)
1379 SymFile <<
"rot_axis " <<
"3" <<
" 0. 0. 1.";
1380 SymFile << std::endl;
1381 SymFile <<
"rot_axis " <<
"2" <<
" 0. 0.816496 0.577350";
1383 else if (symmetry ==
pg_TD)
1385 SymFile <<
"rot_axis " <<
"3" <<
" 0. 0. 1.";
1386 SymFile << std::endl;
1387 SymFile <<
"rot_axis " <<
"2" <<
" 0. 0.816496 0.577350";
1388 SymFile << std::endl;
1389 SymFile <<
"mirror_plane 1.4142136 2.4494897 0.0000000";
1391 else if (symmetry ==
pg_TH)
1393 SymFile <<
"rot_axis " <<
"3" <<
" 0. 0. 1.";
1394 SymFile << std::endl;
1395 SymFile <<
"rot_axis " <<
"2" <<
" 0. -0.816496 -0.577350";
1396 SymFile << std::endl;
1397 SymFile <<
"inversion";
1399 else if (symmetry ==
pg_O)
1401 SymFile <<
"rot_axis " <<
"3" <<
" .5773502 .5773502 .5773502";
1402 SymFile << std::endl;
1403 SymFile <<
"rot_axis " <<
"4" <<
" 0 0 1";
1405 else if (symmetry ==
pg_OH)
1407 SymFile <<
"rot_axis " <<
"3" <<
" .5773502 .5773502 .5773502";
1408 SymFile << std::endl;
1409 SymFile <<
"rot_axis " <<
"4" <<
" 0 0 1";
1410 SymFile << std::endl;
1411 SymFile <<
"mirror_plane 0 1 1";
1413 else if (symmetry ==
pg_I)
1415 SymFile <<
"rot_axis 2 0 0 1";
1416 SymFile << std::endl;
1417 SymFile <<
"rot_axis 5 -1.618033989 -1 0";
1418 SymFile << std::endl;
1419 SymFile <<
"rot_axis 3 -0.53934467 -1.4120227 0";
1421 else if (symmetry ==
pg_IH)
1423 SymFile <<
"rot_axis 2 0 0 1";
1424 SymFile << std::endl;
1425 SymFile <<
"rot_axis 5 -1.618033989 -1 0";
1426 SymFile << std::endl;
1427 SymFile <<
"rot_axis 3 -0.53934467 -1.4120227 0";
1428 SymFile << std::endl;
1429 SymFile <<
"mirror_plane 1 0 0";
1433 std::cerr <<
"ERROR:: Symmetry " << symmetry <<
"is not known" << std::endl;
1447 std::ofstream filestr;
1448 filestr.open (
"create_asym_unit_file.bild");
1449 filestr <<
".color white" 1451 <<
".sphere 0 0 0 .95" 1454 filestr <<
".color green" 1463 filestr <<
".sphere " 1485 tmp_filename = docfilename +
"_angles.doc";
1486 DF.
setComment(
"REF refers to the projection directions BEFORE delete those not in a neighborhood, ");
1487 DF.
write(tmp_filename);
1490 #define FN_SAMPLING_NEI(base) formatString("neighbors@%s_sampling.xmd", base.c_str()) 1491 #define FN_SAMPLING_PROJ(base) formatString("projectionDirections@%s_sampling.xmd", base.c_str()) 1492 #define FN_SAMPLING_EXTRA(base) formatString("extra@%s_sampling.xmd", base.c_str()) 1493 #define FN_SAMPLING_SPHERE(base) formatString("projectionDirectionsSphere@%s_sampling.xmd", base.c_str()) 1503 md.
setComment(
"data_extra -> sampling description;"\
1504 " data_neighbors --> List with order of each"\
1505 "experimental images and its neighbors"\
1518 for(
size_t i = 0;
i < size; ++
i)
1536 for (
size_t i = 0;
i < size; ++
i)
1557 if (write_sampling_sphere)
1562 for (
size_t i = 0;
i < size; ++
i)
1581 md.
setComment(
"NEIGHBOR index points to the slice in a stack file in which the projection projected in the direction defined by ref is stored");
1594 bool read_sampling_sphere)
1614 size_t i = 0, ii = 0;
1615 for (
size_t objId : md.
ids())
1626 size_t size = md.
size();
1634 for (
size_t objId : md.
ids())
1664 std::ofstream filestr5;
1665 filestr5.open (
"/tmp/loadsamplingfile_removeRedundantPoints.bild");
1666 filestr5 <<
".color 0 0 1" << std::endl;
1671 filestr5 <<
".color 1 0 0" << std::endl
1676 <<
" .03" << std::endl;
1682 if (read_sampling_sphere)
1686 size_t size = md.
size();
1692 for (
size_t objId : md.
ids())
1718 double my_dotProduct;
1719 double winner_dotProduct;
1721 std::vector<size_t> aux_neighbors;
1722 bool new_reference=
true;
1725 std::vector<double> aux_neighbors_psi;
1726 my_neighbors_psi.clear();
1735 std::cout <<
"Find valid sampling points based on the neighborhood" <<std::endl;
1738 size_t ratio = exp_data_projection_direction_by_L_R_size / 60;
1741 for(
size_t j = 0;
j < exp_data_projection_direction_by_L_R_size;)
1748 aux_neighbors_psi.clear();
1751 aux_neighbors.clear();
1759 size_t * aux_neighborsArray =
nullptr;
1762 winner_dotProduct = -1.;
1763 for (
size_t i = 0;
i < no_redundant_sampling_points_vector_size; ++
i)
1770 if(aux_neighbors.size()==0)
1773 winner_dotProduct=my_dotProduct;
1777 aux_neighbors_psi.push_back(exp_data_projection_direction_by_L_R_psi[j]);
1783 new_reference =
true;
1786 if(winner_dotProduct<my_dotProduct)
1788 if(winner_dotProduct!=-1)
1789 aux_neighbors.pop_back();
1792 if(winner_dotProduct!=-1)
1793 aux_neighbors_psi.pop_back();
1796 winner_dotProduct=my_dotProduct;
1800 new_reference=
false;
1807 aux_neighborsArray = &aux_neighbors[0];
1808 size_t _size = aux_neighbors.size();
1812 for(
size_t l=0;l< _size;l++)
1817 new_reference=
false;
1834 aux_neighbors_psi.push_back(exp_data_projection_direction_by_L_R_psi[j]);
1851 my_neighbors_psi.push_back(aux_neighbors_psi);
1856 progress_bar(exp_data_projection_direction_by_L_R_size);
1871 std::ofstream filestr;
1872 filestr.open (
"compute_neighbors.bild");
1873 filestr <<
".color white" 1874 << std::endl <<
".sphere 0 0 0 .95" << std::endl
1877 filestr <<
".color yellow" << std::endl
1888 filestr <<
".color red" << std::endl
1894 <<
" .017" << std::endl;
1902 blue = (my_neighbors_psi[exp_image][
i]+180.)/360.;
1908 filestr <<
".color 0 0 " << blue << std::endl
1915 <<
" .019" << std::endl;
1926 #define REMOVE_LAST(vector) vector[i] = vector[my_end]; vector.pop_back(); 1930 double my_dotProduct;
1936 for (
size_t i = 0;
i <= my_end;
i++)
1938 bool my_delete=
true;
1958 std::ofstream filestr;
1959 filestr.open (
"remove_points_far_away_from_experimental_data.bild");
1960 filestr <<
".color white" 1962 <<
".sphere 0 0 0 .95" 1965 filestr <<
".color green" 1973 filestr <<
".color green" << std::endl
1975 " .018" << std::endl;
1987 DFi.
read(FnexperimentalImages);
1994 double my_dotProduct,my_dotProduct_aux;
1999 int winner_sampling=-1;
2000 #if defined(CHIMERA) || defined(MYPSI) 2002 int winner_exp_L_R=-1;
2008 DFo.
setComment(
"Original rot, tilt, psi, Xoff, Yoff are stored as comments");
2013 std::ofstream filestr;
2014 filestr.open (
"find_closest_sampling_point.bild");
2018 auto idIter(DFi.
ids().begin());
2028 filestr <<
".color red" << std::endl
2030 <<
" .019" << std::endl;
2039 if ( my_dotProduct_aux > my_dotProduct)
2041 my_dotProduct = my_dotProduct_aux;
2042 winner_sampling =
j;
2043 #if defined(CHIMERA) || defined(MYPSI) 2054 filestr <<
".color yellow" << std::endl
2056 <<
" .020" << std::endl;
2060 std::string fnImg, comment;
2062 size_t objId = *idIter;
2080 DFo.set(6, exp_data_projection_direction_by_L_R_psi[winner_exp_L_R]);
2091 if (output_file_root.size() > 0)
2092 DFo.
write(output_file_root+
"_closest_sampling_points.doc");
2102 double my_dotProduct,my_dotProduct_aux;
2104 int winner_sampling=-1;
2109 std::vector<std::vector<int> > aux_vec;
2113 std::vector<std::vector<size_t> > aux_my_exp_img_per_sampling_point;
2116 aux_my_exp_img_per_sampling_point.resize(
2130 if ( my_dotProduct_aux > my_dotProduct)
2132 my_dotProduct = my_dotProduct_aux;
2133 winner_sampling =
j;
2143 aux_my_exp_img_per_sampling_point[winner_sampling].push_back(winner_exp);
2146 aux_vec[winner_sampling].push_back(winner_exp_L_R);
2150 for(
size_t i=0;
i< aux_my_exp_img_per_sampling_point.size();
i++)
2151 if(aux_my_exp_img_per_sampling_point[
i].size()!=0)
2155 std::ofstream filestr;
2156 filestr.open (
"find_closest_experimental_point.bild");
2157 filestr <<
".color white" 2159 <<
".sphere 0 0 0 .95" 2162 filestr <<
".color red" 2170 " .018" << std::endl;
2172 int my_sample_point=5;
2173 filestr <<
".color green" 2181 ii=aux_vec[my_sample_point][
i];
2182 filestr <<
".sphere " 2184 <<
" .017" << std::endl;
2193 std::ofstream filestr;
2194 filestr.open (
"find_closest_experimental_point.txt");
2200 filestr << i << std::endl;
2208 filestr << std::endl;
2226 for (
int isym = 0; isym <
SL.
symsNo(); isym++)
2236 std::cout <<
"==============================\n" ;
2242 std::cout <<
"-------------------------------\n";
2248 const FileName &FnexperimentalImages)
2252 DFi.
read(FnexperimentalImages);
2258 std::vector <Matrix1D<double> > exp_data_projection_direction;
2264 std::ofstream filestr;
2265 filestr.open (
"exp_data_projection_direction_by_L_R.bild");
2266 filestr <<
".color white" 2268 <<
".sphere 0 0 0 .95" 2271 filestr <<
".color green" 2276 double img_tilt,img_rot,img_psi;
2279 for (
size_t objId : DFi.
ids())
2285 exp_data_projection_direction.push_back(direction);
2293 exp_data_projection_direction_by_L_R_psi.clear();
2296 for (
size_t i = 0;
i < exp_data_projection_direction.size();
i++)
2300 (exp_data_projection_direction[
i].transpose() *
2312 exp_data_projection_direction_by_L_R_psi.push_back(psip);
2317 filestr <<
".sphere " << direction.
transpose()
2318 <<
" 0.02" << std::endl
#define REMOVE_LAST(vector)
void init_progress_bar(long total)
std::vector< std::vector< size_t > > my_exp_img_per_sampling_point
void setSampling(double sampling)
void removeRedundantPoints(const int symmetry, int sym_order)
void setNoise(double deviation, int my_seed=-1)
std::vector< Matrix1D< double > > vertices_vectors
void getMatrices(int i, Matrix2D< double > &L, Matrix2D< double > &R, bool homogeneous=true) const
#define REPORT_ERROR(nerr, ErrormMsg)
void Euler_angles2matrix(T alpha, T beta, T gamma, Matrix2D< T > &A, bool homogeneous)
void Euler_direction(double alpha, double beta, double gamma, Matrix1D< double > &v)
void createAsymUnitFile(const FileName &docfilename)
double beta(const double a, const double b)
std::vector< Matrix1D< double > > sampling_points_angles
void setNeighborhoodRadius(double neighborhood)
std::vector< Matrix2D< double > > R_repository
double neighborhood_radius_rad
void findClosestSamplingPoint(const MetaData &DFi, const FileName &output_file_root)
void setValue(const MDObject &object) override
int readSymmetryFile(FileName fn_sym, double accuracy=SYM_ACCURACY)
Matrix1D< double > vectorR3(double x, double y, double z)
#define FN_SAMPLING_PROJ(base)
void findClosestExperimentalPoint()
std::vector< Matrix1D< double > > no_redundant_sampling_points_vector
void computeNeighbors(bool only_winner=false)
#define FN_SAMPLING_SPHERE(base)
void removeRedundantPointsExhaustive(const int symmetry, int sym_order, bool only_half_sphere, double max_ang)
void saveSamplingFile(const FileName &fn_base, bool write_vectors=true, bool write_sampling_sphere=false)
String floatToString(float F, int _width, int _prec)
void Euler_apply_transf(const Matrix2D< double > &L, const Matrix2D< double > &R, double rot, double tilt, double psi, double &newrot, double &newtilt, double &newpsi)
void init_random_generator(int seed)
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 XMIPP_EQUAL_REAL(x, y)
std::vector< Matrix1D< double > > exp_data_projection_direction_by_L_R
bool operator==(const Sampling &op) const
#define FOR_ALL_ELEMENTS_IN_MATRIX1D(v)
std::vector< size_t > no_redundant_sampling_points_index
void computeSamplingPoints(bool only_half_sphere=true, double max_tilt=180, double min_tilt=0)
size_t numberSamplesAsymmetricUnit
void transpose(double *array, int size)
Incorrect argument received.
Vect_angles vertices_angles
void progress_bar(long rlen)
double cos_neighborhood_radius
void direction(const MultidimArray< double > &orMap, MultidimArray< double > &qualityMap, double lambda, int size, MultidimArray< double > &dirMap, int x, int y)
#define FN_SAMPLING_NEI(base)
void fillLRRepository(void)
void fillDistance(const Matrix1D< double > &starting_point, const Matrix1D< double > &ending_point, std::vector< Matrix1D< double > > &edge_vector, int number, bool only_half_spheree, double min_z=-10., double max_z=+10.)
#define FN_SAMPLING_EXTRA(base)
std::vector< std::vector< size_t > > my_neighbors
void readSamplingFile(const FileName &infilename, bool read_vectors=true, bool read_sampling_sphere=false)
void fillEdge(const Matrix1D< double > &starting_point, const Matrix1D< double > &ending_point, std::vector< Matrix1D< double > > &edge_vector, bool FLAG_END)
std::vector< Matrix1D< double > > no_redundant_sampling_points_angles
std::vector< Matrix2D< double > > L_repository
T dotProduct(const Matrix1D< T > &v1, const Matrix1D< T > &v2)
int sortFunc(const Matrix1D< double > &a, const Matrix1D< double > &b)
void resizeNoCopy(int Xdim)
std::vector< Matrix1D< double > > sampling_points_vector
std::vector< FileName > exp_data_fileNames
void fillExpDataProjectionDirectionByLR(const MetaData &DFi)
void removePointsFarAwayFromExperimentalData()
void createSymFile(const FileName &simFp, int symmetry, int sym_order)
void resize(size_t Ydim, size_t Xdim, bool noCopy=false)