DP3
Simulate.h
Go to the documentation of this file.
1 // Simulate.h: Simulate visibilities for a patch of sources.
2 //
3 // Copyright (C) 2023 ASTRON (Netherlands Institute for Radio Astronomy)
4 // SPDX-License-Identifier: GPL-3.0-or-later
5 
8 
9 #ifndef DP3_BASE_SIMULATE_H_
10 #define DP3_BASE_SIMULATE_H_
11 
12 #include <memory>
13 
14 #include <xtensor/containers/xtensor.hpp>
15 
16 #include <aocommon/xt/span.h>
17 
18 #include "Baseline.h"
19 #include "Cursor.h"
20 
21 #include "model/Patch.h"
22 
23 #include "Direction.h"
24 #include "DPBuffer.h"
25 
26 namespace dp3 {
27 namespace base {
28 
39 std::vector<int> SetupUvwSplitting(unsigned int nant,
40  const std::vector<int>& ant1,
41  const std::vector<int>& ant2);
42 
47 std::vector<size_t> GetBaselinesSortedByLength(
48  const std::vector<int>& antennas1, const std::vector<int>& antennas2,
49  const std::vector<std::array<double, 3>>& antenna_positions);
50 
55 std::vector<size_t> GetBaselineSelection(
56  size_t n_antennas, const std::vector<size_t>& bl_idx_sorted,
57  const std::vector<int>& antennas1, const std::vector<int>& antennas2);
58 
64 std::vector<int> SetupUvwSplitting(
65  unsigned int nant, const std::vector<int>& ant1,
66  const std::vector<int>& ant2,
67  const std::vector<std::array<double, 3>>& antenna_positions);
68 
71 void SplitUvw(const std::vector<int>& baseline_indices,
72  const std::vector<Baseline>& baselines,
73  const DPBuffer::UvwType& uvw_bl, xt::xtensor<double, 2>& uvw_ant);
74 
86 void rotateUVW(const Direction& from, const Direction& to, size_t nUVW,
87  double* uvw);
88 
112 void simulate(const Direction& reference,
113  const std::shared_ptr<const model::Patch>& patch, size_t nStation,
114  size_t nBaseline, size_t nChannel,
116  const_cursor<double> uvw, cursor<std::complex<double>> buffer);
117 
118 } // namespace base
119 } // namespace dp3
120 
121 #endif
Pair of stations that together form a baseline (interferometer).
Buffer holding the data of a timeslot/band.
xt::xtensor< double, 2 > UvwType
Definition: DPBuffer.h:98
Definition: Cursor.h:97
Multi-dimensional iterators.
Definition: Cursor.h:20
void simulate(const Direction &reference, const std::shared_ptr< const model::Patch > &patch, size_t nStation, size_t nBaseline, size_t nChannel, const_cursor< Baseline > baselines, const_cursor< double > freq, const_cursor< double > uvw, cursor< std::complex< double >> buffer)
void rotateUVW(const Direction &from, const Direction &to, size_t nUVW, double *uvw)
std::vector< size_t > GetBaselinesSortedByLength(const std::vector< int > &antennas1, const std::vector< int > &antennas2, const std::vector< std::array< double, 3 >> &antenna_positions)
void SplitUvw(const std::vector< int > &baseline_indices, const std::vector< Baseline > &baselines, const DPBuffer::UvwType &uvw_bl, xt::xtensor< double, 2 > &uvw_ant)
std::vector< int > SetupUvwSplitting(unsigned int nant, const std::vector< int > &ant1, const std::vector< int > &ant2)
std::vector< size_t > GetBaselineSelection(size_t n_antennas, const std::vector< size_t > &bl_idx_sorted, const std::vector< int > &antennas1, const std::vector< int > &antennas2)
This file has generic helper routines for testing steps.
Definition: AntennaConfig.h:53
A direction on the celestial sphere.
Definition: Direction.h:15