File: tbdamsrowprovider.cpp

package info (click to toggle)
wsclean 3.6-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 16,224 kB
  • sloc: cpp: 128,109; python: 22,066; sh: 360; ansic: 230; makefile: 185
file content (110 lines) | stat: -rw-r--r-- 4,109 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include "../../msproviders/bdamsrowprovider.h"

#include "tbdamsrowproviderdata.h"

#include <boost/test/unit_test.hpp>

namespace wsclean {

BOOST_AUTO_TEST_SUITE(bda_ms_row_provider)

BOOST_AUTO_TEST_CASE(bda_ms_row_provider_constructor_no_bda_tables) {
  BOOST_CHECK_EXCEPTION(
      (BdaMsRowProvider({"test_data/MWA_MOCK.ms"}, MSSelection{},
                        std::map<size_t, size_t>{{0, 0}}, "DATA", "MODEL_DATA",
                        false)),
      std::runtime_error, [](const std::runtime_error& e) {
        return e.what() ==
               std::string(
                   "A BDA measurement set requires a BDA_FACTORS table.");
      });
}

static void create_bda_ms_row_provider_with_selection(
    const MSSelection& selection) {
  BdaMsRowProvider({"test_data/MWA_BDA_MOCK.ms"}, selection,
                   std::map<size_t, size_t>{{0, 0}}, "DATA", "MODEL_DATA",
                   false);
}

static void create_bda_ms_row_provider_with_selection_interval() {
  MSSelection selection;
  selection.SetInterval(0, 1);
  create_bda_ms_row_provider_with_selection(selection);
}

static void create_bda_ms_row_provider_with_selection_even_timesteps() {
  MSSelection selection;
  selection.SetEvenOrOddTimesteps(MSSelection::kEvenTimesteps);
  create_bda_ms_row_provider_with_selection(selection);
}

static void create_bda_ms_row_provider_with_selection_odd_timesteps() {
  MSSelection selection;
  selection.SetEvenOrOddTimesteps(MSSelection::kOddTimesteps);
  create_bda_ms_row_provider_with_selection(selection);
}

BOOST_AUTO_TEST_CASE(bda_ms_row_provider_constructor_invalid_selection) {
  BOOST_CHECK_EXCEPTION(create_bda_ms_row_provider_with_selection_interval(),
                        std::runtime_error, [](const std::runtime_error& e) {
                          return e.what() ==
                                 std::string(
                                     "An interval selection isn't supported "
                                     "for a BDA measurement set.");
                        });
  BOOST_CHECK_EXCEPTION(
      create_bda_ms_row_provider_with_selection_even_timesteps(),
      std::runtime_error, [](const std::runtime_error& e) {
        return e.what() == std::string(
                               "An interval selection isn't supported "
                               "for a BDA measurement set.");
      });
  BOOST_CHECK_EXCEPTION(
      create_bda_ms_row_provider_with_selection_odd_timesteps(),
      std::runtime_error, [](const std::runtime_error& e) {
        return e.what() == std::string(
                               "An interval selection isn't supported "
                               "for a BDA measurement set.");
      });
}

BOOST_AUTO_TEST_CASE(bda_ms_row_provider) {
  BdaMsRowProvider provider({"test_data/MWA_BDA_MOCK.ms"}, MSSelection{},
                            std::map<size_t, size_t>{{0, 0}}, "DATA",
                            "MODEL_DATA", false);

  BOOST_REQUIRE_EQUAL(provider.BeginRow(), 0);
  BOOST_REQUIRE_EQUAL(provider.EndRow(), 21);
  BOOST_CHECK_EQUAL(provider.CurrentProgress(), 0);

  for (const auto& row : MwaBdaMockMs::kMs) {
    BdaMsRowProvider::DataArray data;
    BdaMsRowProvider::FlagArray flag;
    BdaMsRowProvider::WeightArray weight;
    std::array<double, 3> uvw;
    uint32_t data_description_id;
    std::array<uint32_t, 2> antenna;
    uint32_t field_id;
    double time;
    provider.ReadData(data, flag, weight, uvw[0], uvw[1], uvw[2],
                      data_description_id, antenna[0], antenna[1], field_id,
                      time);

    BOOST_CHECK_EQUAL(uint64_t(time), row[MwaBdaMockMs::kTime]);
    BOOST_CHECK_EQUAL(antenna[0], row[MwaBdaMockMs::kAntenna1]);
    BOOST_CHECK_EQUAL(antenna[1], row[MwaBdaMockMs::kAntenna2]);

    // TODO Add tests for the model.

    // The last row in the real MWA_BDA_MOCK.ms is an autocorrelation so
    // always go to the next row to make sure we skip it.
    provider.NextRow();
  }
  BOOST_CHECK(provider.AtEnd());
  BOOST_CHECK_EQUAL(provider.CurrentProgress(), 21);
}

BOOST_AUTO_TEST_SUITE_END()

}  // namespace wsclean