DP3
DPInfo.h
Go to the documentation of this file.
1 // DPInfo.h: General info about DP3 data processing attributes like averaging
2 // Copyright (C) 2023 ASTRON (Netherlands Institute for Radio Astronomy)
3 // SPDX-License-Identifier: GPL-3.0-or-later
4 
8 
9 #ifndef DP3_BASE_DPINFO_H_
10 #define DP3_BASE_DPINFO_H_
11 
12 #include <set>
13 
14 #include <aocommon/polarization.h>
15 
16 #include <casacore/measures/Measures/MDirection.h>
17 #include <casacore/measures/Measures/MPosition.h>
18 #include <casacore/measures/Measures/MeasureHolder.h>
19 #include <casacore/casa/Arrays/Vector.h>
20 #include <casacore/casa/Containers/Record.h>
21 
22 #include "Direction.h"
23 
24 namespace dp3 {
25 namespace base {
26 
28 
34 
35 class DPInfo {
36  public:
37  explicit DPInfo(unsigned int n_correlations = 0,
38  unsigned int n_original_channels = 0,
39  std::string antenna_set = std::string());
40 
45  void setTimes(double first_time, double last_time, double time_interval);
46 
47  void setMsName(const std::string& ms_name) { ms_name_ = ms_name; }
48 
49  void setMsNames(const std::string& ms_name,
50  const std::string& data_column_name,
51  const std::string& flag_column_name,
52  const std::string& weight_column_name);
53 
54  void setIsBDAIntervalFactorInteger(bool isIntervalInteger) {
55  bda_interval_factor_is_integer_ = isIntervalInteger;
56  }
57 
59  void setTimeIntervalAndSteps(double timeInterval, unsigned int ntime) {
60  time_interval_ = timeInterval;
61  n_times_ = ntime;
62  }
63 
69  void setChannels(std::vector<double>&& chanFreqs,
70  std::vector<double>&& chanWidths,
71  std::vector<double>&& resolutions = std::vector<double>(),
72  std::vector<double>&& effectiveBW = std::vector<double>(),
73  double refFreq = 0, int spectralWindow = 0);
74 
84  // in Hz. If omitted/empty, channel widths are used.
89  void setChannels(std::vector<std::vector<double>>&& chanFreqs,
90  std::vector<std::vector<double>>&& chanWidths,
91  std::vector<std::vector<double>>&& resolutions =
92  std::vector<std::vector<double>>(),
93  std::vector<std::vector<double>>&& effectiveBW =
94  std::vector<std::vector<double>>(),
95  double refFreq = 0, int spectralWindow = 0);
96 
97  void setArrayInformation(const casacore::MPosition& arrayPos,
98  const casacore::MDirection& phaseCenter,
99  const casacore::MDirection& delayCenter,
100  const casacore::MDirection& tileBeamDir);
101 
103  void setAntennas(const std::vector<std::string>& antNames,
104  const std::vector<double>& antDiam,
105  const std::vector<casacore::MPosition>& antPos,
106  const std::vector<int>& ant1, const std::vector<int>& ant2);
107 
111  void SelectChannels(unsigned int start_channel, unsigned int n_channels);
112 
116  void SelectBaselines(const std::vector<unsigned int>& baselines);
117 
122  unsigned int update(unsigned int chanAvg, unsigned int timeAvg);
123 
125  void update(std::vector<unsigned int>&& timeAvg);
126 
129 
130  void setPhaseCenter(const casacore::MDirection& phase_center) {
131  phase_center_ = phase_center;
132  }
133 
135  const std::set<aocommon::PolarizationEnum>& polarizations) {
136  polarizations_ = polarizations;
137  }
138 
139  const std::string& msName() const { return ms_name_; }
140  const std::string& dataColumnName() const { return data_column_name_; }
141  const std::string& flagColumnName() const { return flag_column_name_; }
142  const std::string& weightColumnName() const { return weight_column_name_; }
143  const std::string& antennaSet() const { return antenna_set_; }
144  unsigned int ncorr() const { return n_correlations_; }
150  unsigned int nchan() const { return n_channels_; }
155  unsigned int startchan() const { return start_channel_; }
160  unsigned int origNChan() const { return original_n_channels_; }
161  unsigned int nchanAvg() const { return channel_averaging_factor_; }
162  unsigned int nantenna() const { return antenna_names_.size(); }
163  unsigned int nbaselines() const { return antenna1_.size(); }
164  unsigned int ntime() const { return n_times_; }
165  unsigned int ntimeAvg(unsigned int baseline = 0) const {
166  return time_averaging_factors_[baseline];
167  }
168  const std::vector<unsigned int>& ntimeAvgs() const {
169  return time_averaging_factors_;
170  }
171  double startTime() const { return first_time_ - 0.5 * time_interval_; }
172  double firstTime() const { return first_time_; }
173  double lastTime() const { return last_time_; }
179  double timeInterval() const { return time_interval_; }
181  return bda_interval_factor_is_integer_;
182  }
183  const std::vector<int>& getAnt1() const { return antenna1_; }
184  const std::vector<int>& getAnt2() const { return antenna2_; }
185  const std::vector<std::string>& antennaNames() const {
186  return antenna_names_;
187  }
188  const std::vector<std::string> GetUsedAntennaNames() const;
189  const std::vector<double>& antennaDiam() const { return antenna_diameters_; }
190  const std::vector<casacore::MPosition>& antennaPos() const {
191  return antenna_positions_;
192  }
193  const casacore::MPosition& arrayPos() const { return array_position_; }
194  const casacore::MPosition arrayPosCopy() const {
195  return copyMeasure(casacore::MeasureHolder(array_position_)).asMPosition();
196  }
197  const casacore::MDirection& originalPhaseCenter() const {
198  return original_phase_center_;
199  }
200  const casacore::MDirection& phaseCenter() const { return phase_center_; }
201  const casacore::MDirection phaseCenterCopy() const {
202  return copyMeasure(casacore::MeasureHolder(phase_center_)).asMDirection();
203  }
206  const casacore::MDirection& delayCenter() const { return delay_center_; }
207  const casacore::MDirection delayCenterCopy() const {
208  return copyMeasure(casacore::MeasureHolder(delay_center_)).asMDirection();
209  }
210  const casacore::MDirection& tileBeamDir() const {
211  return tile_beam_direction_;
212  }
213  const casacore::MDirection tileBeamDirCopy() const {
214  return copyMeasure(casacore::MeasureHolder(tile_beam_direction_))
215  .asMDirection();
216  }
217  const std::vector<double>& chanFreqs(std::size_t baseline = 0) const {
218  return channel_frequencies_[baseline];
219  }
220  const std::vector<std::vector<double>>& BdaChanFreqs() const {
221  return channel_frequencies_;
222  }
223  const std::vector<double>& chanWidths(std::size_t baseline = 0) const {
224  return channel_widths_[baseline];
225  }
226  const std::vector<std::vector<double>>& BdaChanWidths() const {
227  return channel_widths_;
228  }
229  const std::vector<double>& resolutions(std::size_t baseline = 0) const {
230  return resolutions_[baseline];
231  }
232  const std::vector<double>& effectiveBW(std::size_t baseline = 0) const {
233  return effective_bandwidth_[baseline];
234  }
235  bool hasBDAChannels() const {
236  return channel_frequencies_.size() == nbaselines();
237  }
238  double totalBW() const { return total_bandwidth_; }
239  double refFreq() const { return reference_frequency_; }
240  int spectralWindow() const { return spectral_window_; }
241 
244  const std::vector<int>& antennaUsed() const { return antennas_used_; }
245 
249  const std::vector<int>& antennaMap() const { return antenna_map_; }
250 
252  bool metaChanged() const { return meta_changed_; }
253 
255  void setMetaChanged() { meta_changed_ = true; }
256  void clearMetaChanged() { meta_changed_ = false; }
257 
260  const std::vector<int>& getAutoCorrIndex() const;
261 
263  const std::vector<double>& getBaselineLengths() const;
264 
267  int beamCorrectionMode() const { return beam_correction_mode_; }
268 
272  void setBeamCorrectionMode(int mode) { beam_correction_mode_ = mode; }
273 
274  const casacore::MDirection& beamCorrectionDir() const {
275  return beam_correction_direction_;
276  }
277  void setBeamCorrectionDir(const casacore::MDirection& dir) {
278  beam_correction_direction_ = dir;
279  }
280 
282  bool channelsAreRegular() const;
283 
284  const std::set<aocommon::PolarizationEnum>& polarizations() const {
285  return polarizations_;
286  }
287 
288  const std::map<std::string, Direction>& GetDirections() const {
289  return extra_directions_;
290  }
291 
292  std::map<std::string, Direction>& GetDirections() {
293  return extra_directions_;
294  }
295 
296  private:
298  void setAntUsed();
299 
301  static casacore::MeasureHolder copyMeasure(
302  const casacore::MeasureHolder fromMeas);
303 
304  bool meta_changed_;
305  std::string ms_name_;
306  std::string data_column_name_;
307  std::string flag_column_name_;
308  std::string weight_column_name_;
309  std::string antenna_set_;
310  unsigned int n_correlations_;
311  unsigned int start_channel_;
312  unsigned int original_n_channels_;
313  unsigned int n_channels_;
314  unsigned int channel_averaging_factor_;
315  std::vector<unsigned int> time_averaging_factors_;
316  double
317  first_time_;
318  double last_time_;
319  double time_interval_;
321  unsigned int n_times_;
322  bool bda_interval_factor_is_integer_{false}; // INTEGER_INTERVAL_FACTORS in
323  // [BDA_TIME_AXIS}
324  casacore::MDirection original_phase_center_;
325  casacore::MDirection phase_center_;
326  casacore::MDirection delay_center_;
327  casacore::MDirection tile_beam_direction_;
328  std::map<std::string, Direction> extra_directions_;
331  int beam_correction_mode_;
332  casacore::MDirection beam_correction_direction_;
333  casacore::MPosition array_position_;
337  std::vector<std::vector<double>> channel_frequencies_;
338  std::vector<std::vector<double>> channel_widths_;
339  std::vector<std::vector<double>> resolutions_;
340  std::vector<std::vector<double>> effective_bandwidth_;
341  double total_bandwidth_;
342  double reference_frequency_;
343  int spectral_window_;
344  std::vector<std::string> antenna_names_;
345  std::vector<double> antenna_diameters_;
346  std::vector<casacore::MPosition> antenna_positions_;
347  std::vector<int> antennas_used_;
348  std::vector<int> antenna_map_;
350  std::vector<int> antenna1_;
352  std::vector<int> antenna2_;
353  mutable std::vector<double> baseline_lengths_;
355  mutable std::vector<int> auto_correlation_indices_;
356  std::set<aocommon::PolarizationEnum> polarizations_;
357 };
358 
359 } // namespace base
360 } // namespace dp3
361 
362 #endif // DP3_BASE_DPINFO_H_
General info about DP3 data processing attributes like averaging.
Definition: DPInfo.h:35
const casacore::MDirection tileBeamDirCopy() const
Definition: DPInfo.h:213
const std::string & weightColumnName() const
Definition: DPInfo.h:142
double refFreq() const
Definition: DPInfo.h:239
const casacore::MDirection & beamCorrectionDir() const
Definition: DPInfo.h:274
DPInfo(unsigned int n_correlations=0, unsigned int n_original_channels=0, std::string antenna_set=std::string())
const std::vector< int > & getAnt2() const
Definition: DPInfo.h:184
const std::vector< std::string > & antennaNames() const
Definition: DPInfo.h:185
void setArrayInformation(const casacore::MPosition &arrayPos, const casacore::MDirection &phaseCenter, const casacore::MDirection &delayCenter, const casacore::MDirection &tileBeamDir)
void setTimeIntervalAndSteps(double timeInterval, unsigned int ntime)
Set the time interval and the number of time steps.
Definition: DPInfo.h:59
int spectralWindow() const
Definition: DPInfo.h:240
const casacore::MDirection delayCenterCopy() const
Definition: DPInfo.h:207
unsigned int nchan() const
Definition: DPInfo.h:150
const std::vector< int > & antennaUsed() const
Definition: DPInfo.h:244
std::map< std::string, Direction > & GetDirections()
Definition: DPInfo.h:292
unsigned int nantenna() const
Definition: DPInfo.h:162
unsigned int nchanAvg() const
Definition: DPInfo.h:161
const casacore::MDirection & originalPhaseCenter() const
Definition: DPInfo.h:197
const std::set< aocommon::PolarizationEnum > & polarizations() const
Definition: DPInfo.h:284
const casacore::MDirection & tileBeamDir() const
Definition: DPInfo.h:210
const std::vector< std::vector< double > > & BdaChanFreqs() const
Definition: DPInfo.h:220
const std::vector< double > & effectiveBW(std::size_t baseline=0) const
Definition: DPInfo.h:232
unsigned int ntime() const
Definition: DPInfo.h:164
double totalBW() const
Definition: DPInfo.h:238
double firstTime() const
Definition: DPInfo.h:172
const std::vector< double > & getBaselineLengths() const
Get the lengths of the baselines (in meters).
void setChannels(std::vector< double > &&chanFreqs, std::vector< double > &&chanWidths, std::vector< double > &&resolutions=std::vector< double >(), std::vector< double > &&effectiveBW=std::vector< double >(), double refFreq=0, int spectralWindow=0)
int beamCorrectionMode() const
Definition: DPInfo.h:267
const std::vector< double > & antennaDiam() const
Definition: DPInfo.h:189
const casacore::MDirection phaseCenterCopy() const
Definition: DPInfo.h:201
const std::vector< std::vector< double > > & BdaChanWidths() const
Definition: DPInfo.h:226
const casacore::MPosition & arrayPos() const
Definition: DPInfo.h:193
unsigned int update(unsigned int chanAvg, unsigned int timeAvg)
unsigned int ntimeAvg(unsigned int baseline=0) const
Definition: DPInfo.h:165
const std::string & msName() const
Definition: DPInfo.h:139
void SelectBaselines(const std::vector< unsigned int > &baselines)
void setTimes(double first_time, double last_time, double time_interval)
bool metaChanged() const
Has the meta data been changed in a step (precluding an update)?
Definition: DPInfo.h:252
unsigned int origNChan() const
Definition: DPInfo.h:160
void RemoveUnusedAntennas()
Remove unused stations from the antenna lists.
const std::map< std::string, Direction > & GetDirections() const
Definition: DPInfo.h:288
void setMsNames(const std::string &ms_name, const std::string &data_column_name, const std::string &flag_column_name, const std::string &weight_column_name)
const std::vector< std::string > GetUsedAntennaNames() const
void clearMetaChanged()
Definition: DPInfo.h:256
void setPhaseCenter(const casacore::MDirection &phase_center)
Definition: DPInfo.h:130
bool hasBDAChannels() const
Definition: DPInfo.h:235
void setMsName(const std::string &ms_name)
Definition: DPInfo.h:47
const std::vector< int > & getAutoCorrIndex() const
void setIsBDAIntervalFactorInteger(bool isIntervalInteger)
Definition: DPInfo.h:54
void setBeamCorrectionMode(int mode)
Definition: DPInfo.h:272
bool channelsAreRegular() const
Determine if the channels have a regular layout.
const casacore::MPosition arrayPosCopy() const
Definition: DPInfo.h:194
const std::vector< unsigned int > & ntimeAvgs() const
Definition: DPInfo.h:168
const std::vector< double > & chanFreqs(std::size_t baseline=0) const
Definition: DPInfo.h:217
unsigned int nbaselines() const
Definition: DPInfo.h:163
const std::string & antennaSet() const
Definition: DPInfo.h:143
void setChannels(std::vector< std::vector< double >> &&chanFreqs, std::vector< std::vector< double >> &&chanWidths, std::vector< std::vector< double >> &&resolutions=std::vector< std::vector< double >>(), std::vector< std::vector< double >> &&effectiveBW=std::vector< std::vector< double >>(), double refFreq=0, int spectralWindow=0)
const std::string & flagColumnName() const
Definition: DPInfo.h:141
const casacore::MDirection & delayCenter() const
Definition: DPInfo.h:206
void setPolarizations(const std::set< aocommon::PolarizationEnum > &polarizations)
Definition: DPInfo.h:134
unsigned int startchan() const
Definition: DPInfo.h:155
double lastTime() const
Definition: DPInfo.h:173
const std::string & dataColumnName() const
Definition: DPInfo.h:140
unsigned int ncorr() const
Definition: DPInfo.h:144
const std::vector< casacore::MPosition > & antennaPos() const
Definition: DPInfo.h:190
void setMetaChanged()
Set change of meta data.
Definition: DPInfo.h:255
const std::vector< double > & resolutions(std::size_t baseline=0) const
Definition: DPInfo.h:229
const std::vector< int > & getAnt1() const
Definition: DPInfo.h:183
double startTime() const
Definition: DPInfo.h:171
void update(std::vector< unsigned int > &&timeAvg)
Update the info for the given average factors.
const casacore::MDirection & phaseCenter() const
Definition: DPInfo.h:200
const std::vector< int > & antennaMap() const
Definition: DPInfo.h:249
double timeInterval() const
Definition: DPInfo.h:179
void setBeamCorrectionDir(const casacore::MDirection &dir)
Definition: DPInfo.h:277
void SelectChannels(unsigned int start_channel, unsigned int n_channels)
bool isBDAIntervalFactorInteger() const
Definition: DPInfo.h:180
const std::vector< double > & chanWidths(std::size_t baseline=0) const
Definition: DPInfo.h:223
void setAntennas(const std::vector< std::string > &antNames, const std::vector< double > &antDiam, const std::vector< casacore::MPosition > &antPos, const std::vector< int > &ant1, const std::vector< int > &ant2)
Set the info for the given antennae and baselines.
Direction phaseCenterDirection() const
This file has generic helper routines for testing steps.
Definition: AntennaConfig.h:53
A direction on the celestial sphere.
Definition: Direction.h:15