9 #ifndef DP3_BASE_DPBUFFER_H_
10 #define DP3_BASE_DPBUFFER_H_
16 #include <xtensor/containers/xtensor.hpp>
18 #include <casacore/casa/Arrays/Vector.h>
19 #include <aocommon/xt/utensor.h>
95 using DataType = aocommon::xt::UTensor<std::complex<float>, 3>;
103 explicit DPBuffer(
double time = 0.0,
double exposure = 0.0);
130 const bool extra_data =
false);
147 bool HasData(
const std::string& name =
"")
const {
148 return name.empty() || (extra_data_.find(name) != extra_data_.end());
153 std::vector<std::string> names;
154 names.reserve(1 + extra_data_.size());
156 for (
const auto& name_vector : extra_data_) {
157 names.push_back(name_vector.first);
172 auto found = extra_data_.find(name);
173 if (found == extra_data_.end()) {
174 throw std::runtime_error(
"No data named '" + name +
175 "' is found in the current DPBuffer");
178 return found->second;
185 auto found = extra_data_.find(name);
186 if (found == extra_data_.end()) {
187 throw std::runtime_error(
"No data named '" + name +
188 "' is found in the current DPBuffer");
190 return found->second;
201 std::swap(result, data_);
212 const std::string& target_name);
221 const std::string& target_name);
244 std::swap(result, weights_);
259 row_numbers_.reference(rownrs);
278 casacore::Vector<common::rownr_t> row_numbers_;
283 std::map<std::string, DataType> extra_data_;
Buffer holding the data of a timeslot/band.
Definition: DPBuffer.h:92
WeightsType & GetWeights()
Definition: DPBuffer.h:235
void MoveData(DPBuffer &source, const std::string &source_name, const std::string &target_name)
WeightsType TakeWeights()
Definition: DPBuffer.h:242
xt::xtensor< double, 2 > UvwType
Definition: DPBuffer.h:98
const SolutionType & GetSolution() const
Definition: DPBuffer.h:273
void SetSolution(const SolutionType &solution)
Definition: DPBuffer.h:272
const casacore::Vector< common::rownr_t > & GetRowNumbers() const
Definition: DPBuffer.h:261
double GetTime() const
Definition: DPBuffer.h:250
double GetExposure() const
Definition: DPBuffer.h:254
const WeightsType & GetWeights() const
Definition: DPBuffer.h:234
xt::xtensor< bool, 3 > FlagsType
Definition: DPBuffer.h:97
DPBuffer & operator=(const DPBuffer &)
void RemoveData(const std::string &name="")
const DataType & GetData(const std::string &name="") const
Definition: DPBuffer.h:168
void SetRowNumbers(const casacore::Vector< common::rownr_t > &rownrs)
Definition: DPBuffer.h:258
DPBuffer(const DPBuffer &)=default
void Copy(const DPBuffer &that, const common::Fields &fields, const bool extra_data=false)
DPBuffer(const DPBuffer &that, const common::Fields &fields)
const FlagsType & GetFlags() const
Definition: DPBuffer.h:227
xt::xtensor< float, 3 > WeightsType
Definition: DPBuffer.h:96
std::vector< std::vector< std::complex< double > >> SolutionType
For every channel, contains n_antennas x n_polarizations solutions.
Definition: DPBuffer.h:100
void CopyData(const DPBuffer &source, const std::string &source_name, const std::string &target_name)
DPBuffer(double time=0.0, double exposure=0.0)
Construct object with empty arrays.
DataType TakeData()
Definition: DPBuffer.h:199
void SetExposure(double exposure)
Get or set the exposure.
Definition: DPBuffer.h:253
bool HasData(const std::string &name="") const
Definition: DPBuffer.h:147
FlagsType & GetFlags()
Definition: DPBuffer.h:228
UvwType & GetUvw()
Definition: DPBuffer.h:270
void SetTime(double time)
Get or set the time.
Definition: DPBuffer.h:249
aocommon::xt::UTensor< std::complex< float >, 3 > DataType
Definition: DPBuffer.h:95
DPBuffer(DPBuffer &&)
The move constructor moves all data without using reference semantics.
DPBuffer & operator=(DPBuffer &&)
Move assignment moves all data without using reference semantics.
void AddData(const std::string &name)
const UvwType & GetUvw() const
Definition: DPBuffer.h:269
std::vector< std::string > GetDataNames() const
Definition: DPBuffer.h:152
DataType & GetData(const std::string &name="")
Definition: DPBuffer.h:181
This file has generic helper routines for testing steps.
Definition: AntennaConfig.h:53