9 #ifndef DP3_STEPS_APPLYBEAM_H_
10 #define DP3_STEPS_APPLYBEAM_H_
18 #include <EveryBeam/telescope/telescope.h>
20 #include <aocommon/matrix2x2.h>
21 #include <aocommon/xt/utensor.h>
23 #include <casacore/casa/Arrays/Cube.h>
24 #include <casacore/measures/Measures/MDirection.h>
33 const everybeam::vector3r_t& srcdir,
34 const everybeam::telescope::Telescope* telescope,
35 aocommon::MC2x2* beam_values,
bool invert,
36 everybeam::BeamMode mode, std::mutex* mutex,
37 const std::vector<size_t>& skip_station_indices);
41 const everybeam::vector3r_t& srcdir,
42 const everybeam::telescope::Telescope* telescope,
43 std::complex<double>* beam_values,
bool invert,
45 const std::vector<size_t>& skip_station_indices);
59 const aocommon::xt::UTensor<std::complex<double>, 3>& data,
60 aocommon::xt::UTensor<std::complex<double>, 3>& model_data,
61 const aocommon::MC2x2* beam_values);
78 const aocommon::xt::UTensor<std::complex<double>, 3>& data,
79 aocommon::xt::UTensor<std::complex<double>, 3>& model_data,
80 const std::complex<double>* beam_values);
93 bool substep =
false);
107 bool process(std::unique_ptr<base::DPBuffer> buffer)
override {
108 if (use_model_data_) {
109 return ProcessModelData(std::move(buffer));
111 return ProcessData(std::move(buffer));
122 void show(std::ostream&)
const override;
136 const base::DPInfo& info,
double time, std::complex<double>* data0,
137 float* weight0,
const everybeam::vector3r_t& srcdir,
138 const everybeam::telescope::Telescope* telescope,
139 aocommon::MC2x2* beam_values,
140 const std::pair<size_t, size_t>& baseline_range,
141 const std::pair<size_t, size_t>& station_range, std::barrier<>& barrier,
142 bool invert, everybeam::BeamMode mode,
bool do_update_weights =
false,
143 std::mutex* mutex =
nullptr,
144 const std::vector<size_t>& skip_station_indices = std::vector<size_t>());
150 const base::DPInfo& info,
double time, std::complex<double>* data0,
151 const everybeam::vector3r_t& srcdir,
152 const everybeam::telescope::Telescope* telescope,
153 std::complex<double>* beam_values,
154 const std::pair<size_t, size_t>& baseline_range,
155 const std::pair<size_t, size_t>& station_range, std::barrier<>& barrier,
156 bool invert, everybeam::BeamMode mode, std::mutex* mutex =
nullptr,
157 const std::vector<size_t>& skip_station_indices = std::vector<size_t>());
160 everybeam::vector3r_t dir2Itrf(
const casacore::MDirection& dir,
161 casacore::MDirection::Convert& measConverter);
162 bool ProcessData(std::unique_ptr<base::DPBuffer> buffer);
163 bool ProcessModelData(std::unique_ptr<base::DPBuffer> buffer);
167 bool itsUpdateWeights;
168 std::vector<std::string> itsDirectionStr;
169 casacore::MDirection itsDirection;
170 bool itsUseChannelFreq;
171 std::vector<std::string> itsSkipStationNames;
172 std::vector<size_t> itsSkipStationIndices;
173 everybeam::BeamMode itsMode;
174 everybeam::ElementResponseModel itsElementResponseModel;
175 std::string coefficients_path_;
180 casacore::MDirection itsDirectionAtStart;
181 everybeam::BeamMode itsModeAtStart = everybeam::BeamMode::kNone;
184 unsigned int itsDebugLevel;
188 std::unique_ptr<everybeam::telescope::Telescope> telescope_;
189 casacore::MeasFrame measure_frame_;
190 casacore::MDirection::Convert measure_converter_;
191 std::vector<aocommon::MC2x2> beam_values_;
192 std::vector<size_t> ant_to_msindex_;
193 bool use_model_data_;
Buffer holding the data of a timeslot/band.
General info about DP3 data processing attributes like averaging.
Definition: DPInfo.h:35
Implements a map of Key-Value pairs.
Definition: ParameterSet.h:31
DP3 step class to ApplyBeam visibilities from a source model.
Definition: ApplyBeam.h:88
void showTimings(std::ostream &, double duration) const override
Show the timings.
bool process(std::unique_ptr< base::DPBuffer > buffer) override
Definition: ApplyBeam.h:107
static void ApplyBaselineBasedBeam(const base::DPInfo &info, double time, std::complex< double > *data0, float *weight0, const everybeam::vector3r_t &srcdir, const everybeam::telescope::Telescope *telescope, aocommon::MC2x2 *beam_values, const std::pair< size_t, size_t > &baseline_range, const std::pair< size_t, size_t > &station_range, std::barrier<> &barrier, bool invert, everybeam::BeamMode mode, bool do_update_weights=false, std::mutex *mutex=nullptr, const std::vector< size_t > &skip_station_indices=std::vector< size_t >())
bool invert()
Definition: ApplyBeam.h:127
common::Fields getRequiredFields() const override
Get the fields required by the current step.
Definition: ApplyBeam.h:95
common::Fields getProvidedFields() const override
Definition: ApplyBeam.h:101
void updateInfo(const base::DPInfo &) override
Update the general info.
static void ApplyBaselineBasedArrayFactor(const base::DPInfo &info, double time, std::complex< double > *data0, const everybeam::vector3r_t &srcdir, const everybeam::telescope::Telescope *telescope, std::complex< double > *beam_values, const std::pair< size_t, size_t > &baseline_range, const std::pair< size_t, size_t > &station_range, std::barrier<> &barrier, bool invert, everybeam::BeamMode mode, std::mutex *mutex=nullptr, const std::vector< size_t > &skip_station_indices=std::vector< size_t >())
ApplyBeam(const common::ParameterSet &, const std::string &prefix, bool substep=false)
void show(std::ostream &) const override
Show the step parameters.
void finish() override
Finish the processing of this step and subsequent steps.
Abstract base class for a DP3 step.
Definition: Step.h:52
static constexpr dp3::common::Fields kWeightsField
Definition: Step.h:64
static constexpr dp3::common::Fields kDataField
Definition: Step.h:60
void ApplyArrayFactorAndAdd(const base::DPInfo &info, size_t n_stations, const aocommon::xt::UTensor< std::complex< double >, 3 > &data, aocommon::xt::UTensor< std::complex< double >, 3 > &model_data, const std::complex< double > *beam_values)
size_t ComputeArrayFactor(const base::DPInfo &info, double time, const everybeam::vector3r_t &srcdir, const everybeam::telescope::Telescope *telescope, std::complex< double > *beam_values, bool invert, std::mutex *mutex, const std::vector< size_t > &skip_station_indices)
Computes the array factor scalar values.
size_t ComputeBeam(const base::DPInfo &info, double time, const everybeam::vector3r_t &srcdir, const everybeam::telescope::Telescope *telescope, aocommon::MC2x2 *beam_values, bool invert, everybeam::BeamMode mode, std::mutex *mutex, const std::vector< size_t > &skip_station_indices)
Computes full 2x2 Jones beam matrices using EveryBeam.
void ApplyBeamToDataAndAdd(const base::DPInfo &info, size_t n_stations, const aocommon::xt::UTensor< std::complex< double >, 3 > &data, aocommon::xt::UTensor< std::complex< double >, 3 > &model_data, const aocommon::MC2x2 *beam_values)
This file has generic helper routines for testing steps.
Definition: AntennaConfig.h:53