9 #ifndef DP3_BASE_BDABUFFER_H_
10 #define DP3_BASE_BDABUFFER_H_
17 #include <aocommon/uvector.h>
83 void AddData(
const std::string& name =
"") {
84 aocommon::UVector<std::complex<float>>& new_data = data_[name];
85 new_data.reserve(original_capacity_);
98 const std::string& target_name =
"");
107 void RemoveData(
const std::string& name =
"") { data_.erase(name); }
112 bool HasData(
const std::string& name =
"")
const {
113 return data_.find(name) != data_.end();
118 std::vector<std::string> names;
119 names.reserve(data_.size());
120 for (
const auto& name_vector : data_) {
121 names.push_back(name_vector.first);
146 bool AddRow(
double time,
double interval,
double exposure,
147 std::size_t baseline_nr, std::size_t n_channels,
149 const std::complex<float>* data =
nullptr,
150 const bool* flags =
nullptr,
const float* weights =
nullptr,
151 const double* uvw =
nullptr);
166 return original_capacity_ - remaining_capacity_;
175 const std::complex<float>*
GetData(
const std::string& name =
"")
const;
176 std::complex<float>*
GetData(
const std::string& name =
"");
178 const std::complex<float>*
GetData(std::size_t row,
179 const std::string& name =
"")
const;
180 std::complex<float>*
GetData(std::size_t row,
const std::string& name =
"");
183 return flags_.empty() ? nullptr : flags_.data();
185 bool*
GetFlags() {
return flags_.empty() ? nullptr : flags_.data(); }
188 return flags_.empty() ? nullptr : flags_.data() + rows_[row].offset;
191 return flags_.empty() ? nullptr : flags_.data() + rows_[row].offset;
195 return weights_.empty() ? nullptr : weights_.data();
197 float*
GetWeights() {
return weights_.empty() ? nullptr : weights_.data(); }
200 return weights_.empty() ? nullptr : weights_.data() + rows_[row].offset;
203 return weights_.empty() ? nullptr : weights_.data() + rows_[row].offset;
207 const std::vector<Row>&
GetRows()
const {
return rows_; }
233 std::map<std::string, aocommon::UVector<std::complex<float>>> data_;
234 aocommon::UVector<bool> flags_;
235 aocommon::UVector<float> weights_;
238 std::vector<Row> rows_;
239 std::size_t original_capacity_;
240 std::size_t remaining_capacity_;
Definition: BdaBuffer.h:25
std::size_t GetRemainingCapacity() const
Definition: BdaBuffer.h:173
static constexpr bool TimeIsGreaterEqual(double x, double y)
Definition: BdaBuffer.h:215
void AddData(const std::string &name="")
Definition: BdaBuffer.h:83
void RemoveData(const std::string &name="")
Definition: BdaBuffer.h:107
void MoveData(BdaBuffer &source, const std::string &source_name="", const std::string &target_name="")
static constexpr double kTimeTolerance
Definition: BdaBuffer.h:227
static constexpr bool TimeIsLess(double x, double y)
Definition: BdaBuffer.h:209
bool HasData(const std::string &name="") const
Definition: BdaBuffer.h:112
bool * GetFlags(std::size_t row)
Definition: BdaBuffer.h:190
bool AddRow(double time, double interval, double exposure, std::size_t baseline_nr, std::size_t n_channels, std::size_t n_correlations, common::rownr_t row_nr, const std::complex< float > *data=nullptr, const bool *flags=nullptr, const float *weights=nullptr, const double *uvw=nullptr)
const bool * GetFlags(std::size_t row) const
Definition: BdaBuffer.h:187
float * GetWeights()
Definition: BdaBuffer.h:197
BdaBuffer(const BdaBuffer &other, const common::Fields &fields)
static constexpr bool TimeIsLessEqual(double x, double y)
Definition: BdaBuffer.h:212
std::complex< float > * GetData(const std::string &name="")
const std::complex< float > * GetData(std::size_t row, const std::string &name="") const
BdaBuffer(std::size_t pool_size, const common::Fields &fields)
float * GetWeights(std::size_t row)
Definition: BdaBuffer.h:202
std::vector< std::string > GetDataNames() const
Definition: BdaBuffer.h:117
BdaBuffer(const BdaBuffer &other)=delete
const bool * GetFlags() const
Definition: BdaBuffer.h:182
const float * GetWeights() const
Definition: BdaBuffer.h:194
std::vector< Row > & GetRows()
Definition: BdaBuffer.h:206
static constexpr bool TimeIsEqual(double x, double y)
Definition: BdaBuffer.h:218
std::size_t GetNumberOfElements() const
Definition: BdaBuffer.h:165
BdaBuffer & operator=(const BdaBuffer &other)=delete
const float * GetWeights(std::size_t row) const
Definition: BdaBuffer.h:199
bool IsMetadataEqual(const BdaBuffer &other) const
const std::vector< Row > & GetRows() const
Definition: BdaBuffer.h:207
bool * GetFlags()
Definition: BdaBuffer.h:185
std::complex< float > * GetData(std::size_t row, const std::string &name="")
const std::complex< float > * GetData(const std::string &name="") const
unsigned int rownr_t
Definition: Types.h:19
This file has generic helper routines for testing steps.
Definition: AntennaConfig.h:53
Definition: BdaBuffer.h:27
const double exposure
Exposure time for the measurements in seconds.
Definition: BdaBuffer.h:35
const std::size_t n_correlations
Definition: BdaBuffer.h:39
const double time
Centroid time for the measurements in MJD seconds.
Definition: BdaBuffer.h:33
const std::size_t baseline_nr
Definition: BdaBuffer.h:37
bool IsMetadataEqual(const BdaBuffer::Row &other) const
std::size_t GetDataSize() const
Definition: BdaBuffer.h:31
const std::size_t n_channels
Definition: BdaBuffer.h:38
const double interval
Duration time for the measurements in seconds.
Definition: BdaBuffer.h:34
double uvw[3]
Definition: BdaBuffer.h:41
Row(double time, double interval, double exposure, common::rownr_t row_nr, std::size_t baseline_nr, std::size_t n_channels, std::size_t n_correlations, std::size_t offset, const double *uvw)
const std::size_t offset
Relative position in BdaBuffer vectors.
Definition: BdaBuffer.h:40
common::rownr_t row_nr
Definition: BdaBuffer.h:36