Select Git revision
-
Jörn Künsemöller authoredJörn Künsemöller authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
Predict.cpp 2.39 KiB
// Predict.cppp: Compute visibilities for different model components types
// (implementation of ModelComponentVisitor).
//
// Copyright (C) 2020 ASTRON (Netherlands Institute for Radio Astronomy)
// SPDX-License-Identifier: GPL-3.0-or-later
//
// $Id$
#include <casacore/casa/Arrays/MatrixMath.h>
#include <casacore/casa/BasicSL/Constants.h>
#include <cmath>
#include "GaussianSourceCollection.h"
#include "PointSourceCollection.h"
#include "Predict.h"
#include "PredictPlanExec.h"
namespace {} // namespace
namespace dp3 {
namespace base {
void Predict::run(PredictPlanExec &plan, const PointSourceCollection &sources,
xt::xtensor<dcomplex, 3> &buffer)
const { // buffer dimensions are (nCor, nFreq, nBaselines)
plan.Precompute(sources);
plan.Compute(sources, buffer);
}
void Predict::run(PredictPlanExec &plan,
const GaussianSourceCollection &sources,
xt::xtensor<dcomplex, 3> &buffer)
const { // buffer dimensions are (nCor, nFreq, nBaselines)
plan.Precompute(sources);
plan.Compute(sources, buffer);
}
void Predict::run(PredictPlanExec &plan,
const GaussianSourceCollection &sources,
xt::xtensor<dcomplex, 4> &buffer) const {
plan.Precompute(sources);
xt::xtensor<dcomplex, 3>::shape_type tmp_buffer_shape = {
buffer.shape(1), buffer.shape(2), buffer.shape(3)};
for (auto &beam_id : sources.beam_ids) {
xt::xtensor<dcomplex, 3> direction_buffer(tmp_buffer_shape);
// TODO compute should be extended to accumulate per beam_id
plan.Compute(sources, direction_buffer);
xt::view(buffer, beam_id, xt::all(), xt::all(), xt::all()) =
direction_buffer;
}
}
void Predict::run(PredictPlanExec &plan, const PointSourceCollection &sources,
xt::xtensor<dcomplex, 4> &buffer) const {
// buffer dimensions are (nBean, nFreq, nBaselines, nSources)
plan.Precompute(sources);
xt::xtensor<dcomplex, 3>::shape_type tmp_buffer_shape = {
buffer.shape(1), buffer.shape(2), buffer.shape(3)};
for (auto &beam_id : sources.beam_ids) {
xt::xtensor<dcomplex, 3> direction_buffer(tmp_buffer_shape);
// TODO compute should be extended to accumulate per beam_id
plan.Compute(sources, direction_buffer);
xt::view(buffer, beam_id, xt::all(), xt::all(), xt::all()) =
direction_buffer;
}
}
// plan.Compute(sources, buffer);}
} // namespace base
} // namespace dp3