File: contiguousms.h

package info (click to toggle)
wsclean 3.7-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 10,968 kB
  • sloc: cpp: 85,742; python: 3,526; sh: 245; makefile: 21
file content (131 lines) | stat: -rw-r--r-- 3,832 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#ifndef CONTIGUOUSMS_H
#define CONTIGUOUSMS_H

#include "msprovider.h"

#include "../structures/msselection.h"

#include <aocommon/multibanddata.h>
#include <aocommon/vectormap.h>

#include <schaapcommon/reordering/channelrange.h>
#include <schaapcommon/reordering/msselection.h>
#include <schaapcommon/reordering/storagemanagertype.h>

#include <casacore/ms/MeasurementSets/MeasurementSet.h>

#include <casacore/tables/Tables/ArrayColumn.h>
#include <casacore/tables/Tables/ScalarColumn.h>

#include <memory>

namespace wsclean {

class ContiguousMSReader;

class ContiguousMS final : public MSProvider {
  friend class ContiguousMSReader;

 public:
  ContiguousMS(
      const string& msPath, const std::string& dataColumnName,
      const std::string& modelColumnName,
      schaapcommon::reordering::StorageManagerType modelStorageManager,
      const schaapcommon::reordering::MSSelection& selection,
      const aocommon::VectorMap<schaapcommon::reordering::ChannelRange>&
          channel_selection,
      aocommon::PolarizationEnum polOut, bool useMPI);

  ContiguousMS(const ContiguousMS&) = delete;

  ContiguousMS& operator=(const ContiguousMS&) = delete;

  std::unique_ptr<MSReader> MakeReader() override;

  void NextOutputRow() override;

  void ResetWritePosition() override;

  void WriteModel(const std::complex<float>* buffer, bool addToMS) override;

  void ReopenRW() override { _ms->reopenRW(); }

  double StartTime() override;

  aocommon::PolarizationEnum Polarization() override {
    return _outputPolarization;
  }

  size_t NMaxChannels() override;

  bool IsRegular() const override;

  bool HasFrequencyBda() const override { return has_frequency_bda_; }

  std::string PartDescription() const final { return _msPath; }

  size_t NPolarizations() override;

  size_t NAntennas() override { return _nAntenna; }

  size_t NRows() final { return _endRow - _startRow; }

  const aocommon::MultiBandData& SelectedBands() final {
    return selected_bands_;
  }

  double Interval() final;

  ObservationInfo GetObservationInfo() final;

  std::vector<std::string> GetAntennaNames() final;

  std::optional<SynchronizedMS> MsIfAvailable() final { return _ms; }

 private:
  void open();

  size_t _currentOutputRow = 0;
  size_t _currentOutputTimestep = 0;
  double _currentOutputTime = 0.0;
  bool _useMPI;
  size_t _nAntenna = 0;
  bool _isDataRead, _isModelRead, _isWeightRead;
  bool _isModelColumnPrepared = false;
  size_t _startRow, _endRow;
  aocommon::VectorMap<std::set<aocommon::PolarizationEnum>>
      input_polarizations_;
  schaapcommon::reordering::MSSelection selection_;
  aocommon::VectorMap<schaapcommon::reordering::ChannelRange> channel_ranges_;
  bool has_frequency_bda_ = false;
  aocommon::PolarizationEnum _outputPolarization;
  std::string _msPath;
  SynchronizedMS _ms;
  aocommon::MultiBandData original_bands_;
  aocommon::MultiBandData selected_bands_;
  bool _msHasWeightSpectrum;

  casacore::ScalarColumn<int> _antenna1Column, _antenna2Column, _fieldIdColumn,
      _dataDescIdColumn;
  casacore::ScalarColumn<double> _timeColumn;
  casacore::ArrayColumn<double> _uvwColumn;
  std::unique_ptr<casacore::ArrayColumn<float>> _weightSpectrumColumn;
  std::unique_ptr<casacore::ArrayColumn<float>> _weightScalarColumn;
  std::string _dataColumnName;
  std::string _modelColumnName;
  casacore::ArrayColumn<casacore::Complex> _dataColumn;
  casacore::ArrayColumn<bool> _flagColumn;
  casacore::ArrayColumn<casacore::Complex> _modelColumn;
  schaapcommon::reordering::StorageManagerType _modelStorageManager;

  casacore::Array<std::complex<float>> _dataArray, _modelArray;
  casacore::Array<float> _weightSpectrumArray, _weightScalarArray,
      _imagingWeightSpectrumArray;
  casacore::Array<bool> _flagArray;

  void prepareModelColumn();
};

}  // namespace wsclean

#endif