DP3
IDGImager.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_IDGIMAGER_H_
5 #define DP3_STEPS_IDGIMAGER_H_
6 
7 #ifdef HAVE_IDG
8 #include <idg-api.h>
9 #endif
10 
11 #include "steps/Step.h"
12 
13 #include "common/ParameterSet.h"
14 #include "common/Timer.h"
15 namespace dp3::steps {
16 
17 class IDGImager : public Step {
18  public:
19  IDGImager(const common::ParameterSet&, const std::string& prefix);
20 
21  common::Fields getRequiredFields() const override {
23  }
24 
25  common::Fields getProvidedFields() const override { return kDataField; }
27  bool process(std::unique_ptr<base::DPBuffer>) override;
28 
30  void finish() override;
31 
33  void updateInfo(const base::DPInfo&) override;
34 
36  void show(std::ostream&) const override;
37 
39  void showTimings(std::ostream&, double duration) const override;
40 
41  size_t GetImageSize() { return grid_size_; }
42 
43  private:
44  void ConfigureIDG();
45  void InitBuffers(const double max_w, const double max_baseline);
46 
47 #ifdef HAVE_IDG
48  static idg::api::Type ProxyTypeFromString(const std::string& idg_type);
49  static void CopyVisibilitiesToBuffer(
50  idg::api::GridderBuffer& buffer, const std::vector<int>& antenna1,
51  const std::vector<int>& antenna2, const base::DPBuffer::UvwType& uvw,
52  const base::DPBuffer::WeightsType& weights,
53  const base::DPBuffer::DataType& visibilities);
54 #endif
55 
56  static void PrepareVisibilities(base::DPBuffer::DataType& visibilities,
58  const base::DPBuffer::FlagsType& flags);
59 
60  static xt::xtensor<float, 2> ComputeWeightMap(
61  size_t grid_size_, const base::DPBuffer::WeightsType& weights,
62  const xt::xtensor<size_t, 3>& uv_pixels);
63 
64  static void ComputeUVPixels(const base::DPBuffer::UvwType& uvw,
65  const float uv_max,
66  const std::vector<double>& frequencies,
67  xt::xtensor<size_t, 3>& uv_pixels,
68  size_t grid_size);
69 
70  static void ApplyWeights(const xt::xtensor<float, 2>& weight_map,
71  const xt::xtensor<size_t, 3>& uv_pixels,
72  base::DPBuffer::DataType& visibilities);
73 
74  static void WeightVisibilities(const base::DPBuffer::UvwType& uvw,
75  const base::DPBuffer::WeightsType& weights,
76  const std::vector<double> frequencies,
77  const size_t grid_size,
78  base::DPBuffer::DataType& visibilities);
79 
80  static void WriteFITS(const std::string file_path, const base::DPInfo& info,
81  double time, double dl, double dm, double pixel_scale,
82  xt::xtensor<double, 3> image);
83 
84  static inline double DegToRad(double angle);
85  static std::string FormatName(std::string name, int time);
86 
87  std::string name_;
88  common::NSTimer timer_;
89  size_t grid_size_;
90  float pixel_scale_;
91  double dl_;
92  double dm_;
93  std::string image_name_;
94  int buffer_size_;
95  int current_image_idx_ = 0;
96  bool init_buffers_ = false;
97 
98 #ifdef HAVE_IDG
99  idg::api::Type proxy_;
100  std::unique_ptr<idg::api::BufferSet> buffer_set_;
101  idg::api::options_type options_;
102 #endif
103 };
104 
105 } // namespace dp3::steps
106 
107 #endif
Class to hold code for virtual base class for Flaggers in DP3.
xt::xtensor< double, 2 > UvwType
Definition: DPBuffer.h:98
xt::xtensor< bool, 3 > FlagsType
Definition: DPBuffer.h:97
xt::xtensor< float, 3 > WeightsType
Definition: DPBuffer.h:96
aocommon::xt::UTensor< std::complex< float >, 3 > DataType
Definition: DPBuffer.h:95
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: IDGImager.h:17
void show(std::ostream &) const override
Show the step parameters.
bool process(std::unique_ptr< base::DPBuffer >) override
Process the data. The dummy step forwards the data to its next step.
common::Fields getRequiredFields() const override
Get the fields required by the current step.
Definition: IDGImager.h:21
IDGImager(const common::ParameterSet &, const std::string &prefix)
common::Fields getProvidedFields() const override
Definition: IDGImager.h:25
void finish() override
Finish the processing of this step and subsequent steps.
void updateInfo(const base::DPInfo &) override
Update the general info.
size_t GetImageSize()
Definition: IDGImager.h:41
void showTimings(std::ostream &, double duration) const override
Show the timings.
Abstract base class for a DP3 step.
Definition: Step.h:52
static constexpr dp3::common::Fields kWeightsField
Definition: Step.h:64
static constexpr dp3::common::Fields kUvwField
Definition: Step.h:66
static constexpr dp3::common::Fields kDataField
Definition: Step.h:60
static constexpr dp3::common::Fields kFlagsField
Definition: Step.h:62
Definition: AntennaFlagger.h:17