DP3
tDdeCalCommon.h
Go to the documentation of this file.
1 // Common test code for tDdeCal.cc and tBdaDdeCal.cc.
2 // Copyright (C) 2023 ASTRON (Netherlands Institute for Radio Astronomy)
3 // SPDX-License-Identifier: GPL-3.0-or-later
4 
5 #include "tPredict.h"
6 #include "tStepCommon.h"
7 
9 
10 namespace {
11 
14 dp3::common::ParameterSet DdeParameterSet() {
15  return CreateParameterSet(
16  {{"directions", "[[" + dp3::steps::test::kPredictDirection + "]]"},
18  {"h5parm", "test.h5"},
19  {"solint", "2"},
20  {"nchan", "42"}});
21 }
22 
23 } // namespace
24 
25 template <class DdeStep>
27  bool keep_model_data) {
28  reader.setInfo(dp3::base::DPInfo());
29 
30  dp3::common::ParameterSet parset = DdeParameterSet();
31  if (keep_model_data) parset.add("keepmodel", "true");
32 
33  auto bdaddecal = std::make_shared<DdeStep>(parset, "");
34  BOOST_TEST(parset.unusedKeys().empty());
35  bdaddecal->updateInfo(reader.getInfoOut());
36 
37  const std::map<std::string, dp3::base::Direction>& directions =
38  bdaddecal->getInfoOut().GetDirections();
39  if (keep_model_data) {
40  BOOST_TEST_REQUIRE(directions.size() == 1);
41  BOOST_TEST(directions.begin()->first ==
43  } else {
44  BOOST_TEST_REQUIRE(directions.empty());
45  }
46 }
47 
48 template <class DdeStep>
50  bool keep_model_data) {
51  const std::vector<std::string> kReusePatterns = {
52  "[dir3,dir1,dir2]", "[*]", "[d?r?]", "[dir1]", "[*2]", "[???3]"};
53 
54  // When keep_model_data is true, the output DPInfo should contain everything.
55  const std::vector<std::string> kAllDirections = {
56  dp3::steps::test::kPredictDirection, "dir1", "dir2", "dir3"};
57 
58  // When keep_model_data is false, the output DPInfo should only contain the
59  // directions that do not match the reuse pattern.
60  const std::vector<std::vector<std::string>> kRemainingDirections = {
61  {}, {}, {}, {"dir2", "dir3"}, {"dir1", "dir3"}, {"dir1", "dir2"}};
62 
63  reader.setInfo(dp3::base::DPInfo());
64 
65  for (std::size_t i = 0; i < kReusePatterns.size(); ++i) {
66  dp3::common::ParameterSet parset = DdeParameterSet();
67  parset.add("keepmodel", keep_model_data ? "true" : "false");
68  parset.add("reusemodel", kReusePatterns[i]);
69 
70  dp3::base::DPInfo info_in = reader.getInfoOut();
71  std::map<std::string, dp3::base::Direction>& input_directions =
72  info_in.GetDirections();
73  input_directions.emplace("dir1", dp3::base::Direction());
74  input_directions.emplace("dir2", dp3::base::Direction());
75  input_directions.emplace("dir3", dp3::base::Direction());
76 
77  auto bdaddecal = std::make_shared<DdeStep>(parset, "");
78  BOOST_TEST(parset.unusedKeys().empty());
79  bdaddecal->updateInfo(info_in);
80 
81  const std::map<std::string, dp3::base::Direction>& output_directions =
82  bdaddecal->getInfoOut().GetDirections();
83  const std::vector<std::string>& expected_directions =
84  keep_model_data ? kAllDirections : kRemainingDirections[i];
85 
86  BOOST_TEST_REQUIRE(output_directions.size() == expected_directions.size());
87  auto output_direction = output_directions.begin();
88  for (const std::string& expected_direction : expected_directions) {
89  BOOST_TEST(output_direction->first == expected_direction);
90  ++output_direction;
91  }
92  }
93 }
94 
95 } // namespace dp3::steps::test::ddecal
General info about DP3 data processing attributes like averaging.
Definition: DPInfo.h:35
const std::map< std::string, Direction > & GetDirections() const
Definition: DPInfo.h:288
Implements a map of Key-Value pairs.
Definition: ParameterSet.h:31
std::vector< std::string > unusedKeys() const
Definition: ParameterSet.h:788
void add(const std::string &aKey, const std::string &aValue)
Definition: ParameterSet.h:431
Abstract base class for a DP3 step.
Definition: Step.h:52
void setInfo(const base::DPInfo &)
const base::DPInfo & getInfoOut() const
Get access to the info of the output.
Definition: Step.h:110
Definition: tDdeCalCommon.h:8
void TestInfoDirectionsWithoutReuse(dp3::steps::Step &reader, bool keep_model_data)
Definition: tDdeCalCommon.h:26
void TestInfoDirectionsWithReuse(dp3::steps::Step &reader, bool keep_model_data)
Definition: tDdeCalCommon.h:49
const std::string kPredictSkymodel
MS name for the predict tests.
Definition: tPredict.h:17
const std::string kPredictDirection
Definition: tPredict.h:19
dp3::common::ParameterSet CreateParameterSet(const std::vector< std::pair< std::string, std::string >> &parameters)
A direction on the celestial sphere.
Definition: Direction.h:15