Select Git revision
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
lofar.cc 5.81 KiB
#include "lofar.h"
#include "./../common/MathUtil.h"
#include "./../common/casa_utils.h"
#include <cassert>
using namespace everybeam;
using namespace everybeam::telescope;
using namespace casacore;
// LOFAR Telescope specific utils
namespace {
constexpr Antenna::CoordinateSystem::Axes lofar_antenna_orientation = {
{
-std::sqrt(.5),
-std::sqrt(.5),
0.0,
},
{
std::sqrt(.5),
-std::sqrt(.5),
0.0,
},
{0.0, 0.0, 1.0},
};
// TODO: move to common utils?
vector3r_t transformToFieldCoordinates(
const vector3r_t &position, const Antenna::CoordinateSystem::Axes &axes) {
const vector3r_t result{dot(position, axes.p), dot(position, axes.q),
dot(position, axes.r)};
return result;
}
// // Seems LOFAR specific?
// void transformToFieldCoordinates(TileConfig &config,
// const Antenna::CoordinateSystem::Axes &axes)
// {
// for (unsigned int i = 0; i < config.size(); ++i) {
// const vector3r_t position = config[i];
// config[i][0] = dot(position, axes.p);
// config[i][1] = dot(position, axes.q);
// config[i][2] = dot(position, axes.r);
// }
// }
// LOFAR specific? Or is this generic for each telescope?
BeamFormer::Ptr readAntennaField(const Table &table, std::size_t id,
ElementResponse::Ptr element_response) {
Antenna::CoordinateSystem coordinate_system =
common::readCoordinateSystem(table, id);
BeamFormer::Ptr beam_former(new BeamFormer(coordinate_system));
ROScalarColumn<String> c_name(table, "NAME");
ROArrayQuantColumn<Double> c_offset(table, "ELEMENT_OFFSET", "m");
ROArrayColumn<Bool> c_flag(table, "ELEMENT_FLAG");
const string &name = c_name(id);
// Read element offsets and flags.
Matrix<Quantity> aips_offset = c_offset(id);
assert(aips_offset.shape().isEqual(IPosition(2, 3, aips_offset.ncolumn())));
Matrix<Bool> aips_flag = c_flag(id);
assert(aips_flag.shape().isEqual(IPosition(2, 2, aips_offset.ncolumn())));
// TileConfig tile_config;
// if(name != "LBA") readTileConfig(table, id);
// transformToFieldCoordinates(tile_config, coordinate_system.axes);