DP3
SourceDBUtil.h
Go to the documentation of this file.
1 // SourceDBUtil.h: Helper functions to extract patch and source information
2 // from a SourceDB.
3 //
4 // Copyright (C) 2022 ASTRON (Netherlands Institute for Radio Astronomy)
5 // SPDX-License-Identifier: GPL-3.0-or-later
6 
9 
10 #ifndef DP3_BASE_SOURCEDBUTIL_H_
11 #define DP3_BASE_SOURCEDBUTIL_H_
12 
13 #include <string>
14 #include <string_view>
15 #include <variant>
16 #include <vector>
17 
18 #include "parmdb/SourceDB.h"
20 
21 #include "Patch.h"
22 
23 namespace dp3 {
24 namespace model {
25 
26 inline bool HasSkymodelExtension(const std::string &source_db_name) {
27  static const std::string_view kSymodelExtension = ".skymodel";
28  static const std::string_view kTxtExtension = ".txt";
29  return (source_db_name.size() >= kSymodelExtension.size() &&
30  std::equal(kSymodelExtension.rbegin(), kSymodelExtension.rend(),
31  source_db_name.rbegin())) ||
32  (source_db_name.size() >= kTxtExtension.size() &&
33  std::equal(kTxtExtension.rbegin(), kTxtExtension.rend(),
34  source_db_name.rbegin()));
35 }
36 
37 std::vector<std::shared_ptr<Patch>> makePatches(
38  parmdb::SourceDB &sourceDB, const std::vector<std::string> &patchNames,
39  unsigned int nModel);
40 
41 std::vector<std::shared_ptr<Patch>> MakePatches(
42  const parmdb::SourceDBSkymodel &source_db,
43  const std::vector<std::string> &patch_names);
44 
47 std::vector<
48  std::pair<std::shared_ptr<base::ModelComponent>, std::shared_ptr<Patch>>>
49 makeSourceList(std::vector<std::shared_ptr<Patch>> &patchList);
50 
55 void SetPatchIndices(std::vector<std::shared_ptr<Patch>> &patch_list);
56 
58 std::vector<std::shared_ptr<Patch>> makeOnePatchPerComponent(
59  const std::vector<std::shared_ptr<Patch>> &);
60 
61 std::vector<std::shared_ptr<Patch>> clusterProximateSources(
62  const std::vector<std::shared_ptr<Patch>> &patchList,
63  double proximityLimit);
64 
65 std::vector<std::string> makePatchList(parmdb::SourceDB &sourceDB,
66  std::vector<std::string> patterns);
67 
68 std::vector<std::string> MakePatchList(
69  const parmdb::SourceDBSkymodel &source_db,
70  const std::vector<std::string> &patterns);
71 
80 std::vector<std::vector<std::string>> MakeDirectionList(
81  const std::vector<std::string> &packed_directions,
82  const std::string &source_db_filename);
83 
85  const std::vector<std::string> &patchNames,
86  unsigned int nModel);
87 
89  const std::vector<std::string> &patch_names);
90 
93  const std::vector<std::string> &patch_names);
94 
97  const std::vector<std::string> &patch_names);
98 
105  public:
107  enum class FilterMode {
112  kPattern,
117  kValue
118  };
119 
125  explicit SourceDBWrapper(const std::string &source_db_name);
126 
130  SourceDBWrapper &Filter(const std::vector<std::string> &filter,
131  FilterMode filter_mode);
132 
133  std::vector<std::shared_ptr<Patch>> MakePatchList();
134 
136 
138 
139  private:
140  std::vector<std::string> patch_names_;
141  std::variant<std::monostate, parmdb::SourceDB, parmdb::SourceDBSkymodel>
142  source_db_;
143 
144  template <class T>
145  T &Get() {
146  return std::get<T>(source_db_);
147  }
148 
149  template <class T>
150  bool HoldsAlternative() const {
151  return std::holds_alternative<T>(source_db_);
152  }
153 };
154 
155 } // namespace model
156 } // namespace dp3
157 
158 #endif
Base class for a table holding sources and their parameters.
Definition: SourceDBUtil.h:104
std::vector< std::shared_ptr< Patch > > MakePatchList()
SourceDBWrapper(const std::string &source_db_name)
SourceDBWrapper & Filter(const std::vector< std::string > &filter, FilterMode filter_mode)
FilterMode
The method used to filter the supplied patches.
Definition: SourceDBUtil.h:107
Definition: SourceDBSkymodel.h:15
Envelope class for a table holding source parameters.
Definition: SourceDB.h:193
bool HasSkymodelExtension(const std::string &source_db_name)
Definition: SourceDBUtil.h:26
bool CheckAnyOrientationIsAbsolute(const parmdb::SourceDBSkymodel &source_db, const std::vector< std::string > &patch_names)
Check whether any source in a sourcedb has absolute orientation.
std::vector< std::string > makePatchList(parmdb::SourceDB &sourceDB, std::vector< std::string > patterns)
void SetPatchIndices(std::vector< std::shared_ptr< Patch >> &patch_list)
std::vector< std::string > MakePatchList(const parmdb::SourceDBSkymodel &source_db, const std::vector< std::string > &patterns)
std::vector< std::shared_ptr< Patch > > MakePatches(const parmdb::SourceDBSkymodel &source_db, const std::vector< std::string > &patch_names)
std::vector< std::shared_ptr< Patch > > makePatches(parmdb::SourceDB &sourceDB, const std::vector< std::string > &patchNames, unsigned int nModel)
std::vector< std::shared_ptr< Patch > > makeOnePatchPerComponent(const std::vector< std::shared_ptr< Patch >> &)
From a given patch list, create a new one with one patch per component.
std::vector< std::vector< std::string > > MakeDirectionList(const std::vector< std::string > &packed_directions, const std::string &source_db_filename)
bool CheckPolarized(const parmdb::SourceDBSkymodel &source_db, const std::vector< std::string > &patch_names)
bool checkPolarized(parmdb::SourceDB &sourceDB, const std::vector< std::string > &patchNames, unsigned int nModel)
std::vector< std::pair< std::shared_ptr< base::ModelComponent >, std::shared_ptr< Patch > > > makeSourceList(std::vector< std::shared_ptr< Patch >> &patchList)
std::vector< std::shared_ptr< Patch > > clusterProximateSources(const std::vector< std::shared_ptr< Patch >> &patchList, double proximityLimit)
This file has generic helper routines for testing steps.
Definition: AntennaConfig.h:53