diff --git a/DualDipoleAntenna.cc b/DualDipoleAntenna.cc index dd165612d41950d56a76a7501d59a9af9cbfcf2e..89985fe35cecf2fc1fcca8de8f9ed3f27ba1936b 100644 --- a/DualDipoleAntenna.cc +++ b/DualDipoleAntenna.cc @@ -31,11 +31,6 @@ namespace LOFAR namespace StationResponse { -DualDipoleAntenna::DualDipoleAntenna() -{ - m_element_response.reset(new HamakerElementResponseHBA()); -} - matrix22c_t DualDipoleAntenna::response(real_t freq, const vector3r_t &direction) const { @@ -51,5 +46,7 @@ matrix22c_t DualDipoleAntenna::response(real_t freq, return response; } +std::unique_ptr<ElementResponse> DualDipoleAntenna::m_element_response = nullptr; + } //# namespace StationResponse } //# namespace LOFAR diff --git a/DualDipoleAntenna.h b/DualDipoleAntenna.h index ae397025051b5cb9fe75c0a8be89de07c0ff64ac..a51b420dfb00324e9e6cb4a5cd6433ba520cfec2 100644 --- a/DualDipoleAntenna.h +++ b/DualDipoleAntenna.h @@ -47,15 +47,12 @@ public: typedef std::shared_ptr<DualDipoleAntenna> Ptr; typedef std::shared_ptr<const DualDipoleAntenna> ConstPtr; - explicit DualDipoleAntenna(); - virtual ~DualDipoleAntenna() final override { }; virtual matrix22c_t response(real_t freq, const vector3r_t &direction) const final override; -private: - std::unique_ptr<ElementResponse> m_element_response; + static std::unique_ptr<ElementResponse> m_element_response; }; // @} diff --git a/Station.cc b/Station.cc index 518ddf8f35d10880425b4b886aa58ca0211f1ccb..6c1e0639dc6d4af2c4dd6c613992e87c5ab371db 100644 --- a/Station.cc +++ b/Station.cc @@ -24,6 +24,8 @@ #include "MathUtil.h" #include "HamakerElementResponse.h" +#include "DualDipoleAntenna.h" +#include "TileAntenna.h" namespace LOFAR { @@ -35,6 +37,12 @@ Station::Station(const string &name, const vector3r_t &position) itsPosition(position), itsPhaseReference(position) { + if (DualDipoleAntenna::m_element_response == nullptr) { + DualDipoleAntenna::m_element_response.reset(new HamakerElementResponseLBA); + } + if (TileAntenna::m_element_response == nullptr) { + TileAntenna::m_element_response.reset(new HamakerElementResponseHBA); + } } const string &Station::name() const diff --git a/TileAntenna.cc b/TileAntenna.cc index 1a8944a1d2f67e7c07e9dcbc50df16d4d3a3fa44..339848120595eebb8184beb6d255fef1ac53494a 100644 --- a/TileAntenna.cc +++ b/TileAntenna.cc @@ -31,10 +31,7 @@ namespace StationResponse { TileAntenna::TileAntenna(const TileConfig &config) - : itsConfig(config) -{ - m_element_response.reset(new HamakerElementResponseHBA()); -} + : itsConfig(config) {} void TileAntenna::setConfig(const TileConfig &config) { @@ -96,5 +93,7 @@ matrix22c_t TileAntenna::elementResponse(real_t freq, return response; } +std::unique_ptr<ElementResponse> TileAntenna::m_element_response = nullptr; + } //# namespace StationResponse } //# namespace LOFAR diff --git a/TileAntenna.h b/TileAntenna.h index 1521735f3584b73aedc7aa1d827ca487129aeaac..8e4eca54782ca0ed3467411aacfa083f19d0a69d 100644 --- a/TileAntenna.h +++ b/TileAntenna.h @@ -63,9 +63,10 @@ public: virtual matrix22c_t elementResponse(real_t freq, const vector3r_t &direction) const final override; + static std::unique_ptr<ElementResponse> m_element_response; + private: TileConfig itsConfig; - std::unique_ptr<ElementResponse> m_element_response; }; // @}