PURIFY
Next-generation radio interferometric imaging
distribute.cc
Go to the documentation of this file.
1 #include "purify/distribute.h"
2 #include "purify/types.h"
3 #include "catch2/catch_all.hpp"
4 #include "purify/directories.h"
5 #include "purify/utilities.h"
6 
7 using namespace purify;
8 TEST_CASE("Distribute") {
9  // Test splitting up of data for separate nodes
10  auto const uv_data = utilities::read_visibility(vla_filename("at166B.3C129.c0.vis"));
11  std::printf("Distributing groups\n");
12  t_int number_of_groups = 4;
13  t_int number_of_vis = uv_data.u.size();
14  std::vector<t_int> groups_equal = distribute::distribute_measurements(
15  uv_data.u.segment(0, number_of_vis), uv_data.v.segment(0, number_of_vis),
16  uv_data.w.segment(0, number_of_vis), number_of_groups, distribute::plan::equal, 1024);
17  // Testing number of visiblities in groups adds to total
18  CHECK(number_of_vis == groups_equal.size());
19  for (t_int i = 0; i < groups_equal.size(); i++) {
20  // checking nodes are in allowable values
21  CHECK(groups_equal[i] >= 0);
22  CHECK(groups_equal[i] < number_of_groups);
23  }
24  std::vector<t_int> groups_distance = distribute::distribute_measurements(
25  uv_data.u.segment(0, number_of_vis), uv_data.v.segment(0, number_of_vis),
26  uv_data.w.segment(0, number_of_vis), number_of_groups, distribute::plan::radial);
27  // Testing number of visiblities in groups adds to total
28  CHECK(number_of_vis == groups_distance.size());
29  for (t_int i = 0; i < groups_distance.size(); i++) {
30  // checking nodes are in allowable values
31  CHECK(groups_distance[i] >= 0);
32  CHECK(groups_distance[i] < number_of_groups);
33  }
34  std::vector<t_int> groups_noorder = distribute::distribute_measurements(
35  uv_data.u.segment(0, number_of_vis), uv_data.v.segment(0, number_of_vis),
36  uv_data.w.segment(0, number_of_vis), number_of_groups, distribute::plan::none);
37  // Testing number of visiblities in groups adds to total
38  CHECK(number_of_vis == groups_noorder.size());
39  for (t_int i = 0; i < groups_noorder.size(); i++) {
40  // checking nodes are in allowable values
41  CHECK(groups_noorder[i] >= 0);
42  CHECK(groups_noorder[i] < number_of_groups);
43  }
44  std::vector<t_int> groups_w_term = distribute::distribute_measurements(
45  uv_data.u.segment(0, number_of_vis), uv_data.v.segment(0, number_of_vis),
46  uv_data.w.segment(0, number_of_vis), number_of_groups, distribute::plan::w_term);
47  // Testing number of visiblities in groups adds to total
48  CHECK(number_of_vis == groups_distance.size());
49  for (t_int i = 0; i < groups_distance.size(); i++) {
50  // checking nodes are in allowable values
51  CHECK(groups_distance[i] >= 0);
52  CHECK(groups_distance[i] < number_of_groups);
53  }
54 }
#define CHECK(CONDITION, ERROR)
Definition: casa.cc:6
std::vector< t_int > distribute_measurements(Vector< t_real > const &u, Vector< t_real > const &v, Vector< t_real > const &w, t_int const number_of_nodes, distribute::plan const distribution_plan, t_int const &grid_size)
Distribute visiblities into groups.
Definition: distribute.cc:6
utilities::vis_params read_visibility(const std::vector< std::string > &names, const bool w_term)
Read visibility files from name of vector.
std::string vla_filename(std::string const &filename)
Specific vla data.
TEST_CASE("Distribute")
Definition: distribute.cc:8