Select Git revision
-
Bas van der Tol authored
This is needed in cases where the ElementResponse needs additional arguments in the construction.
Bas van der Tol authoredThis is needed in cases where the ElementResponse needs additional arguments in the construction.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
station.cc 9.25 KiB
// Station.cc: Representation of the station beam former.
//
// Copyright (C) 2013
// ASTRON (Netherlands Institute for Radio Astronomy)
// P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
//
// This file is part of the LOFAR software suite.
// The LOFAR software suite is free software: you can redistribute it and/or
// modify it under the terms of the GNU General Public License as published
// by the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// The LOFAR software suite is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
//
// $Id$
#include "station.h"
#include "common/mathutils.h"
#include "hamaker/hamakerelementresponse.h"
#include "oskar/oskarelementresponse.h"
#include "lobes/lobeselementresponse.h"
using namespace everybeam;
Station::Station(const std::string &name, const vector3r_t &position,
const ElementResponseModel model)
: name_(name),
position_(position),
phase_reference_(position),
element_response_(nullptr) {
SetResponseModel(model);
vector3r_t ncp = {{0.0, 0.0, 1.0}};
ncp_.reset(new coords::ITRFDirection(ncp));
vector3r_t ncppol0 = {{1.0, 0.0, 0.0}};
ncp_pol0_.reset(new coords::ITRFDirection(ncppol0));
}
void Station::SetResponseModel(const ElementResponseModel model) {
switch (model) {
case kHamaker:
element_response_.set(HamakerElementResponse::GetInstance(name_));
break;
case kOSKARDipole:
element_response_.set(OSKARElementResponseDipole::GetInstance());
break;
case kOSKARSphericalWave:
element_response_.set(OSKARElementResponseSphericalWave::GetInstance());
break;
case kLOBES:
element_response_.set(LOBESElementResponse::GetInstance(name_));
break;
default:
std::stringstream message;
message << "The requested element response model '" << model
<< "' is not implemented.";
throw std::runtime_error(message.str());
}
}
void Station::SetResponse(std::shared_ptr<ElementResponse> element_response) {
element_response_.set(element_response);
}