DP3
WGridderPredict.h
Go to the documentation of this file.
1 // Copyright (C) 2024 ASTRON (Netherlands Institute for Radio Astronomy)
2 // SPDX-License-Identifier: GPL-3.0-or-later
3 
4 #ifndef DP3_STEPS_WGRIDDERPREDICT_H_
5 #define DP3_STEPS_WGRIDDERPREDICT_H_
6 
7 #include <complex>
8 #include <functional>
9 #include <string>
10 #include <vector>
11 #include <utility>
12 
13 #include <casacore/ms/MeasurementSets/MeasurementSet.h>
14 
15 #include <schaapcommon/facets/facetimage.h>
16 #include <schaapcommon/facets/facet.h>
17 
18 #include <aocommon/fits/fitsreader.h>
19 #include <aocommon/uvector.h>
20 
21 #include "steps/Step.h"
22 
23 #include "common/ParameterSet.h"
24 #include "common/Timer.h"
25 
26 namespace dp3 {
27 namespace steps {
28 
30  public:
31  WGridderPredict(const common::ParameterSet& parset, const std::string& prefix,
32  std::vector<aocommon::FitsReader>&& readers,
33  std::vector<schaapcommon::facets::Facet>&& facets,
34  const std::string& ds9_regions_file = "");
35 
36  WGridderPredict(const common::ParameterSet&, const std::string& prefix);
37 
38  common::Fields getRequiredFields() const override { return kUvwField; }
39 
40  common::Fields getProvidedFields() const override {
41  common::Fields fields;
42  if (sum_facets_) {
43  // The predicted visibilities go to the main data buffer
44  fields |= kDataField;
45  } else {
46  // TODO(AST-1241): Handle these dependencies using Fields.
47  }
48  return fields;
49  }
50 
51  void updateInfo(const base::DPInfo& info) override;
52 
55  bool process(std::unique_ptr<base::DPBuffer> buffer) override;
56 
57  void finish() override;
58 
59  void show(std::ostream&) const override;
60 
61  void showTimings(std::ostream&, double duration) const override;
62 
65  void flush();
66 
71  void Predict(size_t direction,
72  std::vector<base::DPBuffer::DataType*>& destinations);
73 
75 
76  void SetBufferSize(size_t nTimesteps);
77  size_t GetBufferSize() const;
78 
80  static std::vector<aocommon::FitsReader> GetReaders(
81  const std::vector<std::string>& fits_model_files);
82 
85  static std::vector<schaapcommon::facets::Facet> GetFacets(
86  const std::string& ds9_regions_file, const double ra, const double dec,
87  const double pixel_size_x, const double pixel_size_y,
88  const size_t full_width, const size_t full_height);
89 
92  static std::vector<schaapcommon::facets::Facet> GetFacets(
93  const std::string& ds9_regions_file, const aocommon::FitsReader& reader);
94 
95  private:
99  size_t GetAllocatableBuffers(size_t memory);
100 
102  std::vector<aocommon::Image> GetModelImages();
103 
104  std::string name_;
105  common::ParameterSet parset_;
106 
107  std::vector<schaapcommon::facets::FacetImage> images_;
108 
109  struct FacetMetaData {
110  FacetMetaData(double _dl, double _dm, double _dp)
111  : dl(_dl), dm(_dm), dp(_dp) {}
112  double dl, dm, dp;
113  };
114  std::vector<FacetMetaData> meta_data_;
115 
116  std::vector<std::unique_ptr<base::DPBuffer>> buffers_;
117 
118  double reference_frequency_;
119  double pixel_size_x_, pixel_size_y_;
120  std::vector<aocommon::FitsReader> readers_;
121 
122  size_t buffer_size_;
123 
124  common::NSTimer timer_;
125  std::vector<dp3::base::Direction> directions_;
126  std::vector<std::string> direction_labels_;
127  bool save_facets_;
128  bool sum_facets_;
129 
130  xt::xtensor<double, 3> uvw_;
131 };
132 
133 } // namespace steps
134 } // namespace dp3
135 
136 #endif // header guard
Class to hold code for virtual base class for Flaggers in DP3.
General info about DP3 data processing attributes like averaging.
Definition: DPInfo.h:35
Definition: Fields.h:16
Implements a map of Key-Value pairs.
Definition: ParameterSet.h:31
Common interface for steps that produce model data.
Definition: Step.h:172
static constexpr dp3::common::Fields kUvwField
Definition: Step.h:66
static constexpr dp3::common::Fields kDataField
Definition: Step.h:60
Definition: WGridderPredict.h:29
void showTimings(std::ostream &, double duration) const override
common::Fields getRequiredFields() const override
Get the fields required by the current step.
Definition: WGridderPredict.h:38
WGridderPredict(const common::ParameterSet &parset, const std::string &prefix, std::vector< aocommon::FitsReader > &&readers, std::vector< schaapcommon::facets::Facet > &&facets, const std::string &ds9_regions_file="")
base::Direction GetFirstDirection() const override
static std::vector< aocommon::FitsReader > GetReaders(const std::vector< std::string > &fits_model_files)
Read the fits files (nterms) for image based prediction.
bool process(std::unique_ptr< base::DPBuffer > buffer) override
void finish() override
Finish the processing of this step and subsequent steps.
static std::vector< schaapcommon::facets::Facet > GetFacets(const std::string &ds9_regions_file, const double ra, const double dec, const double pixel_size_x, const double pixel_size_y, const size_t full_width, const size_t full_height)
static std::vector< schaapcommon::facets::Facet > GetFacets(const std::string &ds9_regions_file, const aocommon::FitsReader &reader)
void SetBufferSize(size_t nTimesteps)
common::Fields getProvidedFields() const override
Definition: WGridderPredict.h:40
void Predict(size_t direction, std::vector< base::DPBuffer::DataType * > &destinations)
size_t GetBufferSize() const
void updateInfo(const base::DPInfo &info) override
WGridderPredict(const common::ParameterSet &, const std::string &prefix)
void show(std::ostream &) const override
Show the step parameters.
This file has generic helper routines for testing steps.
Definition: AntennaConfig.h:53
A direction on the celestial sphere.
Definition: Direction.h:15