Skip to content
Snippets Groups Projects
Select Git revision
  • 7c94f22995f3a1313b80ec4c8b74761b703331b1
  • master default protected
  • MAM-56-prepare-update-for-sip-version-3
  • TMSS-1777
  • SDC-545_update_SIP
  • lofar_repo
  • 2.7.1
  • 2.8.0
8 results

siplib.py

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