Skip to content
Snippets Groups Projects
Select Git revision
  • 24e07296024740e2e7aadcd1c4378d70377bfdb1
  • main default protected
  • extend_to_support_multi_evaluation
  • compute-smearterms-gpu
  • fix-radec2lmn
  • enable-radec2lmn-avx2
  • new-implementation
  • remove-duo-matrix
  • temp_initial_split
9 results

Predict.cpp

Blame
  • 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;
      }
    }