DP3
IDGPredict.h
Go to the documentation of this file.
1 // Copyright (C) 2023 ASTRON (Netherlands Institute for Radio Astronomy)
2 // SPDX-License-Identifier: GPL-3.0-or-later
3 
4 #ifndef DP3_STEPS_IDGPREDICT_H_
5 #define DP3_STEPS_IDGPREDICT_H_
6 
7 #include <complex>
8 #include <functional>
9 #include <string>
10 #include <vector>
11 #include <utility>
12 
13 #ifdef HAVE_IDG
14 #include <idg-api.h>
15 #endif
16 
17 #include <casacore/ms/MeasurementSets/MeasurementSet.h>
18 
19 #include <EveryBeam/aterms/atermbase.h>
20 
21 #include <schaapcommon/facets/facetimage.h>
22 #include <schaapcommon/facets/facet.h>
23 
24 #include <aocommon/fits/fitsreader.h>
25 #include <aocommon/uvector.h>
26 
27 #include "steps/Step.h"
28 
29 #include "common/ParameterSet.h"
30 #include "common/Timer.h"
31 
32 namespace dp3 {
33 namespace steps {
34 
35 class IDGPredict : public ModelDataStep {
36  public:
37  IDGPredict(const common::ParameterSet& parset, const std::string& prefix,
38  const std::vector<aocommon::FitsReader>& readers,
39  std::vector<schaapcommon::facets::Facet>&& facets,
40  const std::string& ds9_regions_file = "");
41 
42  IDGPredict(const common::ParameterSet&, const std::string& prefix);
43 
44  common::Fields getRequiredFields() const override { return kUvwField; }
45 
46  void updateInfo(const base::DPInfo& info) override;
47 
50  bool process(std::unique_ptr<base::DPBuffer> buffer) override;
51 
52  void finish() override;
53 
54  void show(std::ostream&) const override;
55 
56  void showTimings(std::ostream&, double duration) const override;
57 
60  void flush();
61 
66  std::vector<aocommon::xt::UTensor<std::complex<float>, 3>> Predict(
67  size_t direction);
68 
69  bool IsStarted() const;
70 
72 
73  void SetBufferSize(size_t nTimesteps);
74  size_t GetBufferSize() const;
75 
77  static std::vector<aocommon::FitsReader> GetReaders(
78  const std::vector<std::string>& fits_model_files);
79 
82  static std::vector<schaapcommon::facets::Facet> GetFacets(
83  const std::string& ds9_regions_file, const double ra, const double dec,
84  const double pixel_size_x, const double pixel_size_y,
85  const size_t full_width, const size_t full_height);
86 
89  static std::vector<schaapcommon::facets::Facet> GetFacets(
90  const std::string& ds9_regions_file, const aocommon::FitsReader& reader);
91 
92 #ifdef HAVE_IDG
93  private:
96  std::vector<aocommon::UVector<float>> GetModelImages();
97 
99  void StartIDG();
100 
102  void InitializeATerms(const casacore::MeasurementSet& ms);
103 
107  aocommon::UVector<std::complex<float>> GetAtermValues(size_t direction) const;
108 
111  std::vector<const double*> InitializeUVWs();
112 
119  std::vector<aocommon::xt::UTensor<std::complex<float>, 3>>
120  ComputeVisibilities(size_t direction, const std::vector<const double*>& uvws,
121  std::complex<float>* term_data) const;
122 
127  void CorrectVisibilities(
128  std::vector<aocommon::xt::UTensor<std::complex<float>, 3>>& result,
129  const std::complex<float>* term_data);
130 
134  size_t GetAllocatableBuffers(size_t memory);
135 
137  size_t GetSubgridCount(size_t direction) const;
138 
139  std::string name_;
140  common::ParameterSet parset_;
141 
142  std::vector<schaapcommon::facets::FacetImage> images_;
143  std::vector<std::unique_ptr<idg::api::BufferSet>> buffersets_;
144 
145  struct FacetMetaData {
146  FacetMetaData(double _dl, double _dm, double _dp)
147  : dl(_dl), dm(_dm), dp(_dp) {}
148  double dl, dm, dp;
149  };
150  std::vector<FacetMetaData> meta_data_;
151 
152  std::vector<std::unique_ptr<base::DPBuffer>> buffers_;
153 
154  double ref_frequency_;
155  double pixel_size_x_, pixel_size_y_;
156  std::vector<aocommon::FitsReader> readers_;
157 
158  size_t buffer_size_;
159 
160  std::vector<std::size_t> ant1_;
161  std::vector<std::size_t> ant2_;
162 
163  common::NSTimer timer_;
164  double max_w_;
165  double max_baseline_;
166  std::vector<std::pair<double, double>> directions_;
167  bool save_facets_;
168 
169  // Required for aterms (beam)
170  std::vector<std::unique_ptr<everybeam::aterms::ATermBase>> aterms_;
174  mutable std::vector<aocommon::UVector<std::complex<float>>> aterm_values_;
175 #endif
176 };
177 
178 } // namespace steps
179 } // namespace dp3
180 
181 #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
Definition: IDGPredict.h:35
void updateInfo(const base::DPInfo &info) override
static std::vector< schaapcommon::facets::Facet > GetFacets(const std::string &ds9_regions_file, const aocommon::FitsReader &reader)
void finish() override
Finish the processing of this step and subsequent steps.
void SetBufferSize(size_t nTimesteps)
IDGPredict(const common::ParameterSet &, const std::string &prefix)
size_t GetBufferSize() const
static std::vector< aocommon::FitsReader > GetReaders(const std::vector< std::string > &fits_model_files)
Read the fits files (nterms) for the idg prediction.
IDGPredict(const common::ParameterSet &parset, const std::string &prefix, const std::vector< aocommon::FitsReader > &readers, std::vector< schaapcommon::facets::Facet > &&facets, const std::string &ds9_regions_file="")
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)
void showTimings(std::ostream &, double duration) const override
void show(std::ostream &) const override
Show the step parameters.
base::Direction GetFirstDirection() const override
bool IsStarted() const
bool process(std::unique_ptr< base::DPBuffer > buffer) override
common::Fields getRequiredFields() const override
Get the fields required by the current step.
Definition: IDGPredict.h:44
std::vector< aocommon::xt::UTensor< std::complex< float >, 3 > > Predict(size_t direction)
Common interface for steps that produce model data.
Definition: Step.h:172
static constexpr dp3::common::Fields kUvwField
Definition: Step.h:66
This file has generic helper routines for testing steps.
Definition: AntennaConfig.h:53
A direction on the celestial sphere.
Definition: Direction.h:15