DP3
BDAAverager.h
Go to the documentation of this file.
1 // Copyright (C) 2020 ASTRON (Netherlands Institute for Radio Astronomy)
2 // SPDX-License-Identifier: GPL-3.0-or-later
3 
7 
8 #ifndef DP3_STEPS_BDAAVERAGER_H_
9 #define DP3_STEPS_BDAAVERAGER_H_
10 
11 #include "Step.h"
12 #include "common/Timer.h"
13 
14 #include <vector>
15 #include <queue>
16 
17 namespace dp3 {
18 namespace common {
19 class ParameterSet;
20 }
21 } // namespace dp3
22 
23 namespace dp3 {
24 namespace steps {
25 
26 class BdaAverager : public Step {
27  public:
36  BdaAverager(const common::ParameterSet& parset, const std::string& prefix,
37  const bool use_weights_and_flags = true);
38 
39  ~BdaAverager() override;
40 
41  common::Fields getRequiredFields() const override {
43  if (use_weights_and_flags_) fields |= kFlagsField | kWeightsField;
44  return fields;
45  }
46 
47  common::Fields getProvidedFields() const override {
48  // BdaAverager always creates BdaBuffers with all fields.
50  }
51 
52  bool process(std::unique_ptr<base::DPBuffer> buffer) override;
53 
54  void finish() override;
55 
56  void show(std::ostream&) const override;
57 
58  void updateInfo(const base::DPInfo&) override;
59 
60  bool accepts(MsType t) const override { return t == MsType::kRegular; }
61 
62  MsType outputs() const override { return MsType::kBda; };
63 
78 
85  void PushBufferSizeRequest(size_t buffersize);
86 
94  float TotalAveragingFactor() const;
95 
96  private:
97  struct BaselineBuffer {
98  BaselineBuffer(std::size_t time_factor, std::size_t n_input_channels,
99  std::size_t n_output_channels, std::size_t n_correlations);
100  void Clear();
101 
102  std::size_t times_added;
103  const std::size_t time_factor;
109  std::vector<std::size_t> input_channel_indices;
110  double starttime;
111  double interval;
112  double exposure;
113  std::map<std::string, std::vector<std::complex<float>>> data;
114  std::vector<float> weights;
115  double uvw[3];
116  };
117 
118  void AddBaseline(std::size_t baseline_nr);
119 
120  void InitializeBdaBuffer(const std::vector<std::string>& data_names);
121 
122  common::NSTimer timer_;
123 
125  const double bl_threshold_time_;
127  const double bl_threshold_channel_;
129  const double max_interval_;
131  std::size_t min_channels_;
133  std::string name_;
134 
136  std::size_t maxfreqfactor_;
138  std::size_t maxtimefactor_;
139 
140  common::rownr_t next_rownr_;
141  std::size_t bda_pool_size_;
142  std::unique_ptr<base::BdaBuffer> bda_buffer_;
143  std::vector<BaselineBuffer> baseline_buffers_;
144 
145  std::array<std::size_t, 3> expected_input_shape_;
146 
149  std::vector<unsigned int> baseline_factors_;
152  std::vector<std::vector<double>> freqs_;
155  std::vector<std::vector<double>> widths_;
156 
157  const bool use_weights_and_flags_;
158 
159  std::queue<size_t> size_requests_;
160  std::vector<std::string> data_names_;
161  common::rownr_t row_counter_ = 0;
162 };
163 
164 } // namespace steps
165 } // namespace dp3
166 
167 #endif // DP3_STEPS_BDAAVERAGER_H_
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: BDAAverager.h:26
void updateInfo(const base::DPInfo &) override
void show(std::ostream &) const override
Show the step parameters.
void PushBufferSizeRequest(size_t buffersize)
bool accepts(MsType t) const override
Boolean if this step can process this type of data.
Definition: BDAAverager.h:60
float TotalAveragingFactor() const
BdaAverager(const common::ParameterSet &parset, const std::string &prefix, const bool use_weights_and_flags=true)
void SetAveragingParameters(const base::DPInfo &info)
common::Fields getRequiredFields() const override
Get the fields required by the current step.
Definition: BDAAverager.h:41
MsType outputs() const override
Return which datatype this step outputs.
Definition: BDAAverager.h:62
common::Fields getProvidedFields() const override
Definition: BDAAverager.h:47
void finish() override
Finish the processing of this step and subsequent steps.
bool process(std::unique_ptr< base::DPBuffer > buffer) override
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
MsType
To check compatibility between steps before running.
Definition: Step.h:57
static constexpr dp3::common::Fields kDataField
Definition: Step.h:60
static constexpr dp3::common::Fields kFlagsField
Definition: Step.h:62
unsigned int rownr_t
Definition: Types.h:19
This file has generic helper routines for testing steps.
Definition: AntennaConfig.h:53