DP3
Interpolate.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 
4 #ifndef INTERPOLATE_H
5 #define INTERPOLATE_H
6 
7 #include <deque>
8 #include <string>
9 
10 #include "InputStep.h"
11 
12 #include "base/DPBuffer.h"
13 
14 #include "common/ParameterSet.h"
15 
16 #include <aocommon/lane.h>
17 
18 namespace dp3 {
19 namespace steps {
20 
21 class Interpolate : public Step {
22  public:
25  Interpolate(const common::ParameterSet&, const std::string& prefix);
26 
27  ~Interpolate() override = default;
28 
29  common::Fields getRequiredFields() const override {
30  return kDataField | kFlagsField;
31  }
32 
33  common::Fields getProvidedFields() const override {
34  return kDataField | kFlagsField;
35  }
36 
40  bool process(std::unique_ptr<base::DPBuffer> input_buffer) override;
41 
43  void finish() override;
44 
46  void show(std::ostream&) const override;
47 
49  void showTimings(std::ostream&, double duration) const override;
50 
51  private:
52  void interpolateTimestep(size_t index);
53  void interpolateSample(size_t timestep, size_t baseline, size_t channel,
54  size_t pol);
55  void sendFrontBufferToNextStep();
56  void interpolationThread();
57 
58  struct Sample {
59  Sample() = default;
60  Sample(size_t timestep_, size_t baseline_, size_t channel_, size_t pol_)
61  : timestep(timestep_),
62  baseline(baseline_),
63  channel(channel_),
64  pol(pol_) {}
65  size_t timestep;
66  size_t baseline;
67  size_t channel;
68  size_t pol;
69  };
70 
71  std::string name_;
72  size_t interpolated_pos_;
73  std::deque<std::unique_ptr<base::DPBuffer>> buffers_;
74  size_t window_size_;
75  common::NSTimer timer_;
76  aocommon::Lane<Sample> lane_;
77  std::vector<float> kernel_lookup_;
78 };
79 
80 } // namespace steps
81 } // namespace dp3
82 
83 #endif
Buffer holding the data of a timeslot/band.
Abstract base class for a Step generating input.
Definition: Fields.h:16
Implements a map of Key-Value pairs.
Definition: ParameterSet.h:31
Definition: Interpolate.h:21
common::Fields getRequiredFields() const override
Get the fields required by the current step.
Definition: Interpolate.h:29
~Interpolate() override=default
Interpolate(const common::ParameterSet &, const std::string &prefix)
void show(std::ostream &) const override
Show the step parameters.
common::Fields getProvidedFields() const override
Definition: Interpolate.h:33
void finish() override
Finish the processing of this step and subsequent steps.
void showTimings(std::ostream &, double duration) const override
Show the timings.
bool process(std::unique_ptr< base::DPBuffer > input_buffer) override
Abstract base class for a DP3 step.
Definition: Step.h:52
static constexpr dp3::common::Fields kDataField
Definition: Step.h:60
static constexpr dp3::common::Fields kFlagsField
Definition: Step.h:62
This file has generic helper routines for testing steps.
Definition: AntennaConfig.h:53