WSClean
multibanddata.h
1 #ifndef MULTIBANDDATA_H
2 #define MULTIBANDDATA_H
3 
4 #include <stdexcept>
5 
6 #include <casacore/ms/MeasurementSets/MeasurementSet.h>
7 
8 #include <casacore/tables/Tables/ArrayColumn.h>
9 #include <casacore/tables/Tables/ScalarColumn.h>
10 
11 #include "banddata.h"
12 
19 {
20  public:
25  { }
26 
32  MultiBandData(casacore::MSSpectralWindow& spwTable, casacore::MSDataDescription& dataDescTable) :
33  _dataDescToBand(dataDescTable.nrow()),
34  _bandData(spwTable.nrow())
35  {
36  for(size_t spw=0; spw!=_bandData.size(); ++spw)
37  {
38  _bandData[spw] = BandData(spwTable, spw);
39  }
40 
41  casacore::ROScalarColumn<int> spwColumn( dataDescTable, casacore::MSDataDescription::columnName(casacore::MSDataDescriptionEnums::SPECTRAL_WINDOW_ID));
42  for(size_t id=0; id!=_dataDescToBand.size(); ++id)
43  _dataDescToBand[id] = spwColumn(id);
44  }
45 
53  MultiBandData(const MultiBandData& source, size_t startChannel, size_t endChannel) :
54  _dataDescToBand(source._dataDescToBand)
55  {
56  _bandData.resize(source.BandCount());
57  for(size_t spw=0; spw!=source.BandCount(); ++spw)
58  _bandData[spw] = BandData(source._bandData[spw], startChannel, endChannel);
59  }
60 
66  const BandData& operator[](size_t dataDescID) const
67  {
68  return _bandData[_dataDescToBand[dataDescID]];
69  }
70 
75  const BandData& FirstBand() const
76  {
77  return _bandData.front();
78  }
79 
84  size_t BandCount() const
85  {
86  return _bandData.size();
87  }
88 
93  size_t DataDescCount() const
94  {
95  return _dataDescToBand.size();
96  }
97 
102  double LowestFrequency() const
103  {
104  double freq = _bandData[0].LowestFrequency();
105  for(size_t i=0; i!=_bandData.size(); ++i)
106  freq = std::min(freq, _bandData[i].LowestFrequency());
107  return freq;
108  }
109 
114  double CentreFrequency() const
115  {
116  return (LowestFrequency() + HighestFrequency()) * 0.5;
117  }
118 
123  double HighestFrequency() const
124  {
125  double freq = _bandData[0].HighestFrequency();
126  for(size_t i=0; i!=_bandData.size(); ++i)
127  freq = std::max(freq, _bandData[i].HighestFrequency());
128  return freq;
129  }
130 
135  double Bandwidth() const
136  {
137  return BandEnd() - BandStart();
138  }
139 
144  double BandStart() const
145  {
146  double freq = std::min(_bandData[0].BandStart(), _bandData[0].BandEnd());
147  for(size_t i=0; i!=_bandData.size(); ++i)
148  freq = std::min(freq, std::min(_bandData[i].BandStart(), _bandData[i].BandEnd()));
149  return freq;
150  }
151 
156  double BandEnd() const
157  {
158  double freq = std::max(_bandData[0].BandStart(), _bandData[0].BandEnd());
159  for(size_t i=0; i!=_bandData.size(); ++i)
160  freq = std::max(freq, std::max(_bandData[i].BandStart(), _bandData[i].BandEnd()));
161  return freq;
162  }
163 
168  size_t MaxChannels() const
169  {
170  size_t maxChannels = 0;
171  for(std::vector<BandData>::const_iterator i=_bandData.begin(); i!=_bandData.end(); ++i)
172  {
173  if(i->ChannelCount() > maxChannels)
174  maxChannels = i->ChannelCount();
175  }
176  return maxChannels;
177  }
178 
179  private:
180  std::vector<size_t> _dataDescToBand;
181  std::vector<BandData> _bandData;
182 };
183 
184 #endif
double LowestFrequency() const
Get lowest frequency.
Definition: multibanddata.h:102
MultiBandData()
Construct an empty MultiBandData.
Definition: multibanddata.h:24
size_t DataDescCount() const
Returns the unique number of data description IDs.
Definition: multibanddata.h:93
size_t BandCount() const
Get number of bands stored.
Definition: multibanddata.h:84
double BandStart() const
Get the start frequency of the lowest frequency channel.
Definition: multibanddata.h:144
Contains information about a single band ("spectral window").
Definition: banddata.h:15
const BandData & FirstBand() const
Retrieve the first band.
Definition: multibanddata.h:75
const BandData & operator[](size_t dataDescID) const
Index operator to retrieve a band data given a dataDescID.
Definition: multibanddata.h:66
Contains information about a set of bands.
Definition: multibanddata.h:18
MultiBandData(const MultiBandData &source, size_t startChannel, size_t endChannel)
Construct a MultiBandData from another instance but only select a part of each band data...
Definition: multibanddata.h:53
double Bandwidth() const
Get total bandwidth covered.
Definition: multibanddata.h:135
double BandEnd() const
Get the end frequency of the highest frequency channel.
Definition: multibanddata.h:156
MultiBandData(casacore::MSSpectralWindow &spwTable, casacore::MSDataDescription &dataDescTable)
Construct a MultiBandData from the Measurement Set tables.
Definition: multibanddata.h:32
double HighestFrequency() const
Get highest frequency.
Definition: multibanddata.h:123
double CentreFrequency() const
Get centre frequency.
Definition: multibanddata.h:114
size_t MaxChannels() const
Get the maximum number of channels in a band.
Definition: multibanddata.h:168