Skip to content
Snippets Groups Projects
Select Git revision
  • fe6510db9b883a906018f27abb29a4a538a31fd4
  • main default protected
2 results

Calibrationlib.py

Blame
  • 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_