Select Git revision
GaussianSourceCollection.h
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
GaussianSourceCollection.h 1.93 KiB
// GaussianSourceCollection.h: A collection of gaussian sources
//
// Copyright (C) 2020 ASTRON (Netherlands Institute for Radio Astronomy)
// SPDX-License-Identifier: Apache2.0
/// \file
/// \brief A collection of gaussian sources
#ifndef GAUSSIAN_SOURCE_COLLECTION_H_
#define GAUSSIAN_SOURCE_COLLECTION_H_
#include <vector>
#include <GaussianSource.h>
#include <ObjectCollection.h>
#include <PointSourceCollection.h>
#include <common/SmartVector.h>
using GaussianSource = dp3::base::GaussianSource;
class GaussianSourceCollection : public PointSourceCollection {
public:
void Add(const GaussianSource &gaussian_source) {
PointSourceCollection::Add(gaussian_source);
position_angle.push_back(gaussian_source.GetPositionAngle());
major_axis.push_back(gaussian_source.GetMajorAxis());
minor_axis.push_back(gaussian_source.GetMinorAxis());
position_angle_is_absolute.push_back(
gaussian_source.GetPositionAngleIsAbsolute());
}
void Reserve(size_t new_size) {
position_angle.reserve(new_size);
major_axis.reserve(new_size);
minor_axis.reserve(new_size);
position_angle_is_absolute.reserve(new_size);
PointSourceCollection::Reserve(new_size);
}
GaussianSource operator[](size_t i) const {
return GaussianSource(direction_vector[i], spectrums[i], beam_id[i],
position_angle[i], major_axis[i], minor_axis[i],
position_angle_is_absolute[i]);
}
std::unique_ptr<GaussianSourceCollection> SelectBeamID(size_t beam_id) {
auto selected = std::make_unique<GaussianSourceCollection>();
for (size_t i = 0; i < Size(); ++i) {
if (this->beam_id[i] == beam_id) {
selected->Add(operator[](i));
}
}
return std::move(selected);
}
SmartVector<double> position_angle;
SmartVector<double> major_axis;
SmartVector<double> minor_axis;
SmartVector<bool> position_angle_is_absolute;
};
#endif // GAUSSIAN_SOURCE_COLLECTION_H_