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 
145  void SetTelescopeName(const std::string& telescope_name) {
146  telescope_name_ = telescope_name;
147  }
148  const std::string& GetTelescopeName() const { return telescope_name_; }
149 
150  void SetObserver(const std::string& observer) { observer_ = observer; }
151  const std::string& GetObserver() const { return observer_; }
152 
153  void SetFieldName(const std::string& field_name) { field_name_ = field_name; }
154  const std::string& GetFieldName() const { return field_name_; }
155 
156  unsigned int ncorr() const { return n_correlations_; }
162  unsigned int nchan() const { return n_channels_; }
167  unsigned int startchan() const { return start_channel_; }
172  unsigned int origNChan() const { return original_n_channels_; }
173  unsigned int nchanAvg() const { return channel_averaging_factor_; }
174  unsigned int nantenna() const { return antenna_names_.size(); }
175  unsigned int nbaselines() const { return antenna1_.size(); }
176  unsigned int ntime() const { return n_times_; }
177  unsigned int ntimeAvg(unsigned int baseline = 0) const {
178  return time_averaging_factors_[baseline];
179  }
180  const std::vector<unsigned int>& ntimeAvgs() const {
181  return time_averaging_factors_;
182  }
183  double startTime() const { return first_time_ - 0.5 * time_interval_; }
184  double firstTime() const { return first_time_; }
185  double lastTime() const { return last_time_; }
191  double timeInterval() const { return time_interval_; }
193  return bda_interval_factor_is_integer_;
194  }
195  const std::vector<int>& getAnt1() const { return antenna1_; }
196  const std::vector<int>& getAnt2() const { return antenna2_; }
197  const std::vector<std::string>& antennaNames() const {
198  return antenna_names_;
199  }
200  const std::vector<std::string> GetUsedAntennaNames() const;
201  const std::vector<double>& antennaDiam() const { return antenna_diameters_; }
202  const std::vector<casacore::MPosition>& antennaPos() const {
203  return antenna_positions_;
204  }
205  const casacore::MPosition& arrayPos() const { return array_position_; }
206  const casacore::MPosition arrayPosCopy() const {
207  return copyMeasure(casacore::MeasureHolder(array_position_)).asMPosition();
208  }
209  const casacore::MDirection& originalPhaseCenter() const {
210  return original_phase_center_;
211  }
212  const casacore::MDirection& phaseCenter() const { return phase_center_; }
213  const casacore::MDirection phaseCenterCopy() const {
214  return copyMeasure(casacore::MeasureHolder(phase_center_)).asMDirection();
215  }
218  const casacore::MDirection& delayCenter() const { return delay_center_; }
219  const casacore::MDirection delayCenterCopy() const {
220  return copyMeasure(casacore::MeasureHolder(delay_center_)).asMDirection();
221  }
222  const casacore::MDirection& tileBeamDir() const {
223  return tile_beam_direction_;
224  }
225  const casacore::MDirection tileBeamDirCopy() const {
226  return copyMeasure(casacore::MeasureHolder(tile_beam_direction_))
227  .asMDirection();
228  }
229  const std::vector<double>& chanFreqs(std::size_t baseline = 0) const {
230  return channel_frequencies_[baseline];
231  }
232  const std::vector<std::vector<double>>& BdaChanFreqs() const {
233  return channel_frequencies_;
234  }
235  const std::vector<double>& chanWidths(std::size_t baseline = 0) const {
236  return channel_widths_[baseline];
237  }
238  const std::vector<std::vector<double>>& BdaChanWidths() const {
239  return channel_widths_;
240  }
241  const std::vector<double>& resolutions(std::size_t baseline = 0) const {
242  return resolutions_[baseline];
243  }
244  const std::vector<double>& effectiveBW(std::size_t baseline = 0) const {
245  return effective_bandwidth_[baseline];
246  }
247  bool hasBDAChannels() const {
248  return channel_frequencies_.size() == nbaselines();
249  }
250  double totalBW() const { return total_bandwidth_; }
251  double refFreq() const { return reference_frequency_; }
252  int spectralWindow() const { return spectral_window_; }
253 
256  const std::vector<int>& antennaUsed() const { return antennas_used_; }
257 
261  const std::vector<int>& antennaMap() const { return antenna_map_; }
262 
264  bool metaChanged() const { return meta_changed_; }
265 
267  void setMetaChanged() { meta_changed_ = true; }
268  void clearMetaChanged() { meta_changed_ = false; }
269 
272  const std::vector<int>& getAutoCorrIndex() const;
273 
275  const std::vector<double>& getBaselineLengths() const;
276 
279  int beamCorrectionMode() const { return beam_correction_mode_; }
280 
284  void setBeamCorrectionMode(int mode) { beam_correction_mode_ = mode; }
285 
286  const casacore::MDirection& beamCorrectionDir() const {
287  return beam_correction_direction_;
288  }
289  void setBeamCorrectionDir(const casacore::MDirection& dir) {
290  beam_correction_direction_ = dir;
291  }
292 
294  bool channelsAreRegular() const;
295 
296  const std::set<aocommon::PolarizationEnum>& polarizations() const {
297  return polarizations_;
298  }
299 
300  const std::map<std::string, Direction>& GetDirections() const {
301  return extra_directions_;
302  }
303 
304  std::map<std::string, Direction>& GetDirections() {
305  return extra_directions_;
306  }
307 
308  private:
310  void setAntUsed();
311 
313  static casacore::MeasureHolder copyMeasure(
314  const casacore::MeasureHolder fromMeas);
315 
316  bool meta_changed_;
317  std::string ms_name_;
318  std::string data_column_name_;
319  std::string flag_column_name_;
320  std::string weight_column_name_;
321  std::string antenna_set_;
322  std::string telescope_name_;
323  std::string observer_;
324  std::string field_name_;
325  unsigned int n_correlations_;
326  unsigned int start_channel_;
327  unsigned int original_n_channels_;
328  unsigned int n_channels_;
329  unsigned int channel_averaging_factor_;
330  std::vector<unsigned int> time_averaging_factors_;
331  double
332  first_time_;
333  double last_time_;
334  double time_interval_;
336  unsigned int n_times_;
337  bool bda_interval_factor_is_integer_{false}; // INTEGER_INTERVAL_FACTORS in
338  // [BDA_TIME_AXIS}
339  casacore::MDirection original_phase_center_;
340  casacore::MDirection phase_center_;
341  casacore::MDirection delay_center_;
342  casacore::MDirection tile_beam_direction_;
343  std::map<std::string, Direction> extra_directions_;
346  int beam_correction_mode_;
347  casacore::MDirection beam_correction_direction_;
348  casacore::MPosition array_position_;
352  std::vector<std::vector<double>> channel_frequencies_;
353  std::vector<std::vector<double>> channel_widths_;
354  std::vector<std::vector<double>> resolutions_;
355  std::vector<std::vector<double>> effective_bandwidth_;
356  double total_bandwidth_;
357  double reference_frequency_;
358  int spectral_window_;
359  std::vector<std::string> antenna_names_;
360  std::vector<double> antenna_diameters_;
361  std::vector<casacore::MPosition> antenna_positions_;
362  std::vector<int> antennas_used_;
363  std::vector<int> antenna_map_;
365  std::vector<int> antenna1_;
367  std::vector<int> antenna2_;
368  mutable std::vector<double> baseline_lengths_;
370  mutable std::vector<int> auto_correlation_indices_;
371  std::set<aocommon::PolarizationEnum> polarizations_;
372 };
373 
374 } // namespace base
375 } // namespace dp3
376 
377 #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:225
const std::string & weightColumnName() const
Definition: DPInfo.h:142
double refFreq() const
Definition: DPInfo.h:251
const casacore::MDirection & beamCorrectionDir() const
Definition: DPInfo.h:286
DPInfo(unsigned int n_correlations=0, unsigned int n_original_channels=0, std::string antenna_set=std::string())
void SetObserver(const std::string &observer)
Definition: DPInfo.h:150
const std::vector< int > & getAnt2() const
Definition: DPInfo.h:196
const std::vector< std::string > & antennaNames() const
Definition: DPInfo.h:197
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:252
const casacore::MDirection delayCenterCopy() const
Definition: DPInfo.h:219
unsigned int nchan() const
Definition: DPInfo.h:162
const std::vector< int > & antennaUsed() const
Definition: DPInfo.h:256
std::map< std::string, Direction > & GetDirections()
Definition: DPInfo.h:304
unsigned int nantenna() const
Definition: DPInfo.h:174
unsigned int nchanAvg() const
Definition: DPInfo.h:173
const casacore::MDirection & originalPhaseCenter() const
Definition: DPInfo.h:209
const std::set< aocommon::PolarizationEnum > & polarizations() const
Definition: DPInfo.h:296
const casacore::MDirection & tileBeamDir() const
Definition: DPInfo.h:222
const std::string & GetObserver() const
Definition: DPInfo.h:151
const std::vector< std::vector< double > > & BdaChanFreqs() const
Definition: DPInfo.h:232
const std::vector< double > & effectiveBW(std::size_t baseline=0) const
Definition: DPInfo.h:244
unsigned int ntime() const
Definition: DPInfo.h:176
const std::string & GetTelescopeName() const
Definition: DPInfo.h:148
double totalBW() const
Definition: DPInfo.h:250
double firstTime() const
Definition: DPInfo.h:184
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:279
const std::vector< double > & antennaDiam() const
Definition: DPInfo.h:201
const casacore::MDirection phaseCenterCopy() const
Definition: DPInfo.h:213
const std::vector< std::vector< double > > & BdaChanWidths() const
Definition: DPInfo.h:238
const casacore::MPosition & arrayPos() const
Definition: DPInfo.h:205
unsigned int update(unsigned int chanAvg, unsigned int timeAvg)
unsigned int ntimeAvg(unsigned int baseline=0) const
Definition: DPInfo.h:177
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)
const std::string & GetFieldName() const
Definition: DPInfo.h:154
bool metaChanged() const
Has the meta data been changed in a step (precluding an update)?
Definition: DPInfo.h:264
unsigned int origNChan() const
Definition: DPInfo.h:172
void RemoveUnusedAntennas()
Remove unused stations from the antenna lists.
const std::map< std::string, Direction > & GetDirections() const
Definition: DPInfo.h:300
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:268
void setPhaseCenter(const casacore::MDirection &phase_center)
Definition: DPInfo.h:130
bool hasBDAChannels() const
Definition: DPInfo.h:247
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:284
bool channelsAreRegular() const
Determine if the channels have a regular layout.
const casacore::MPosition arrayPosCopy() const
Definition: DPInfo.h:206
const std::vector< unsigned int > & ntimeAvgs() const
Definition: DPInfo.h:180
const std::vector< double > & chanFreqs(std::size_t baseline=0) const
Definition: DPInfo.h:229
unsigned int nbaselines() const
Definition: DPInfo.h:175
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:218
void setPolarizations(const std::set< aocommon::PolarizationEnum > &polarizations)
Definition: DPInfo.h:134
unsigned int startchan() const
Definition: DPInfo.h:167
void SetTelescopeName(const std::string &telescope_name)
Definition: DPInfo.h:145
double lastTime() const
Definition: DPInfo.h:185
const std::string & dataColumnName() const
Definition: DPInfo.h:140
unsigned int ncorr() const
Definition: DPInfo.h:156
const std::vector< casacore::MPosition > & antennaPos() const
Definition: DPInfo.h:202
void setMetaChanged()
Set change of meta data.
Definition: DPInfo.h:267
const std::vector< double > & resolutions(std::size_t baseline=0) const
Definition: DPInfo.h:241
const std::vector< int > & getAnt1() const
Definition: DPInfo.h:195
double startTime() const
Definition: DPInfo.h:183
void update(std::vector< unsigned int > &&timeAvg)
Update the info for the given average factors.
void SetFieldName(const std::string &field_name)
Definition: DPInfo.h:153
const casacore::MDirection & phaseCenter() const
Definition: DPInfo.h:212
const std::vector< int > & antennaMap() const
Definition: DPInfo.h:261
double timeInterval() const
Definition: DPInfo.h:191
void setBeamCorrectionDir(const casacore::MDirection &dir)
Definition: DPInfo.h:289
void SelectChannels(unsigned int start_channel, unsigned int n_channels)
bool isBDAIntervalFactorInteger() const
Definition: DPInfo.h:192
const std::vector< double > & chanWidths(std::size_t baseline=0) const
Definition: DPInfo.h:235
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