DP3
ImageStep.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_STEPS_CADENCEIMAGER_H_
5 #define DP3_STEPS_CADENCEIMAGER_H_
6 
7 #include "steps/Step.h"
8 
9 #include "base/DPBuffer.h"
10 #include "common/ParameterSet.h"
11 #include "common/Timer.h"
12 
13 #include <memory>
14 #include <string>
15 
16 #include <wsclean/inmemoryms.h>
17 
18 namespace dp3::steps {
19 
33 class ImageStep final : public Step {
34  public:
35  ImageStep(const common::ParameterSet&, const std::string& prefix);
36 
37  common::Fields getRequiredFields() const override {
39  }
40 
41  common::Fields getProvidedFields() const final { return {}; }
42 
43  bool process(std::unique_ptr<base::DPBuffer>) override;
44 
45  // TODO: implement the BDA processing.
46  bool process(std::unique_ptr<base::BdaBuffer>) override;
47 
48  void finish() override;
49 
50  void updateInfo(const base::DPInfo&) override;
51 
52  void show(std::ostream&) const override;
53 
54  void showTimings(std::ostream&, double duration) const override;
55 
56  private:
59  void InitializeInMemoryMs();
60 
62  void AddCurrentBufferToInMemoryMs(const base::DPBuffer::DataType& data,
63  const base::DPBuffer::WeightsType& weights,
64  const base::DPBuffer::UvwType& uvws,
65  double time);
66 
69  std::string FormatImageNamePrefix() const;
70 
71  std::string name_;
72  common::NSTimer timer_;
73 
75  double cadence_;
76 
77  std::string wsclean_options_;
78 
82  std::string fits_prefix_;
83  size_t image_counter_ = 0;
84 
85  // Number of timesteps added to the in-memory MS.
86  // Resets when the desired cadence is reached.
87  size_t timestep_counter_ = 0;
88  size_t n_timesteps_per_image_;
89 
90  bool has_frequency_bda_ = false;
91  bool has_time_bda_ = false;
92 
95  std::unique_ptr<wsclean::InMemoryMs> in_memory_ms_;
96 };
97 
98 } // namespace dp3::steps
99 
100 #endif
Buffer holding the data of a timeslot/band.
Class to hold code for virtual base class for Flaggers in DP3.
xt::xtensor< double, 2 > UvwType
Definition: DPBuffer.h:98
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:28
DP3 step class that creates images using WSClean. This class provides a step that uses the in-memory ...
Definition: ImageStep.h:33
void updateInfo(const base::DPInfo &) override
bool process(std::unique_ptr< base::BdaBuffer >) override
ImageStep(const common::ParameterSet &, const std::string &prefix)
common::Fields getRequiredFields() const override
Get the fields required by the current step.
Definition: ImageStep.h:37
void finish() override
Finish the processing of this step and subsequent steps.
bool process(std::unique_ptr< base::DPBuffer >) override
common::Fields getProvidedFields() const final
Definition: ImageStep.h:41
void show(std::ostream &) const override
Show the step parameters.
void showTimings(std::ostream &, double duration) const 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
static constexpr dp3::common::Fields kDataField
Definition: Step.h:60
static constexpr dp3::common::Fields kFlagsField
Definition: Step.h:62
Definition: AntennaFlagger.h:17