DP3
BdaDdeCal.h
Go to the documentation of this file.
1 // Copyright (C) 2022 ASTRON (Netherlands Institute for Radio Astronomy)
2 // SPDX-License-Identifier: GPL-3.0-or-later
3 
4 #ifndef DP3_BDADDECAL_H_
5 #define DP3_BDADDECAL_H_
6 
7 #include "common/ParameterSet.h"
8 #include "common/Timer.h"
9 
10 #include "ddecal/Settings.h"
11 #include "ddecal/SolutionWriter.h"
14 
15 #include "steps/Step.h"
16 
17 #include "BDAResultStep.h"
18 #include "UVWFlagger.h"
19 
20 namespace dp3 {
21 namespace steps {
22 
70 class BdaDdeCal : public Step {
71  public:
77  BdaDdeCal(const common::ParameterSet& parset, const std::string& prefix);
78 
80 
81  common::Fields getProvidedFields() const override {
82  return (settings_.subtract ||
83  (settings_.only_predict && !settings_.keep_model_data))
84  ? kDataField
85  : common::Fields();
86  }
87 
88  bool process(std::unique_ptr<base::BdaBuffer>) override;
89 
90  void finish() override;
91 
92  void show(std::ostream&) const override;
93 
94  void showTimings(std::ostream&, double duration) const override;
95 
96  void updateInfo(const base::DPInfo&) override;
97 
98  bool accepts(MsType dt) const override { return dt == MsType::kBda; }
99 
100  MsType outputs() const override { return MsType::kBda; };
101 
106  size_t GetChanBlockIndex(size_t channel, size_t n_channels,
107  size_t n_channel_blocks) const;
108 
109  private:
110  void InitializeModelReuse();
111 
112  void InitializeColumnReaders(const common::ParameterSet& parset,
113  const std::string& prefix);
114 
115  void InitializePredictSteps(const common::ParameterSet& parset,
116  const std::string& prefix);
117 
119  void DetermineChannelBlocks();
120 
122  void SetSourceDirections();
123 
125  std::vector<double> GetChannelBlockFrequencies() const;
126 
128  void ExtractResults();
129 
131  bool HasAllDirections(const base::BdaBuffer& buffer) const;
132 
134  void SumModels(base::BdaBuffer& buffer) const;
135 
137  void ProcessCompleteDirections();
138 
141  void SolveCurrentInterval();
142 
143  void InitializeCurrentSolutions();
144 
147  void ProcessDone();
148 
149  void WriteSolutions();
150 
151  private:
152  ddecal::Settings settings_;
153  std::unique_ptr<ddecal::SolutionWriter> solution_writer_;
154 
156  std::vector<base::Direction> source_directions_;
157 
162  std::vector<std::shared_ptr<ModelDataStep>> steps_;
164  std::vector<std::shared_ptr<BDAResultStep>> result_steps_;
165 
166  std::unique_ptr<UVWFlagger> uvw_flagger_step_;
167  std::shared_ptr<BDAResultStep> uvw_flagger_result_step_;
168 
170  std::vector<std::vector<std::string>> patches_per_direction_;
171 
177  std::vector<std::string> direction_names_;
178 
180  std::deque<std::unique_ptr<base::BdaBuffer>> input_buffers_;
181 
189  std::unique_ptr<ddecal::BdaSolverBuffer> solver_buffer_;
190 
191  std::unique_ptr<ddecal::SolverBase> solver_;
192 
194  double solution_interval_duration_;
195 
200  std::vector<double> chan_block_start_freqs_;
201 
206  std::vector<int> antennas1_;
207  std::vector<int> antennas2_;
212  std::vector<std::vector<std::vector<casacore::DComplex>>> solutions_;
213 
215  std::vector<size_t> iterations_;
216  std::vector<size_t> approx_iterations_;
217 
220  std::vector<std::vector<std::vector<ddecal::ConstraintResult>>>
221  constraint_solutions_;
222 
223  common::NSTimer timer_;
224  common::NSTimer predict_timer_;
225  common::NSTimer solve_timer_;
226  common::NSTimer write_timer_;
227 };
228 
229 } // namespace steps
230 } // namespace dp3
231 
232 #endif
Class to hold code for virtual base class for Flaggers in DP3.
DP3 step class to flag data on UVW coordinates.
Definition: BdaBuffer.h:25
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: BdaDdeCal.h:70
size_t GetChanBlockIndex(size_t channel, size_t n_channels, size_t n_channel_blocks) const
void show(std::ostream &) const override
Show the step parameters.
bool process(std::unique_ptr< base::BdaBuffer >) override
common::Fields getProvidedFields() const override
Definition: BdaDdeCal.h:81
void finish() override
Finish the processing of this step and subsequent steps.
MsType outputs() const override
Return which datatype this step outputs.
Definition: BdaDdeCal.h:100
common::Fields getRequiredFields() const override
Get the fields required by the current step.
void showTimings(std::ostream &, double duration) const override
void updateInfo(const base::DPInfo &) override
bool accepts(MsType dt) const override
Boolean if this step can process this type of data.
Definition: BdaDdeCal.h:98
BdaDdeCal(const common::ParameterSet &parset, const std::string &prefix)
Abstract base class for a DP3 step.
Definition: Step.h:52
MsType
To check compatibility between steps before running.
Definition: Step.h:57
static constexpr dp3::common::Fields kDataField
Definition: Step.h:60
This file has generic helper routines for testing steps.
Definition: AntennaConfig.h:53
This struct parses the DDECal parset settings and stores them.
Definition: Settings.h:33
const bool only_predict
Definition: Settings.h:140
const bool subtract
Definition: Settings.h:141
const bool keep_model_data
Definition: Settings.h:142