File: msprovider.cpp

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 (68 lines) | stat: -rw-r--r-- 2,098 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
#include "msprovider.h"

#include "msreaders/msreader.h"

#include <aocommon/logger.h>

#include <schaapcommon/reordering/handledata.h>

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

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

using aocommon::Logger;
using schaapcommon::reordering::MSSelection;
using schaapcommon::reordering::StorageManagerType;

namespace wsclean {

aocommon::MultiBandData MakeSelectedPartBands(
    const aocommon::MultiBandData& input,
    const aocommon::VectorMap<schaapcommon::reordering::ChannelRange>& ranges) {
  aocommon::MultiBandData result;
  for (const schaapcommon::reordering::ChannelRange& range : ranges) {
    if (!range.Empty()) {
      const aocommon::BandData& band = input[range.data_desc_id];
      result.SetBand(range.data_desc_id,
                     aocommon::BandData(band, range.start, range.end));
    }
  }
  return result;
}

std::vector<aocommon::MultiBandData> MakeSelectedBands(
    const aocommon::MultiBandData& input,
    const std::vector<
        aocommon::VectorMap<schaapcommon::reordering::ChannelRange>>&
        channels) {
  std::vector<aocommon::MultiBandData> result;
  for (const aocommon::VectorMap<schaapcommon::reordering::ChannelRange>&
           ranges : channels) {
    result.emplace_back(MakeSelectedPartBands(input, ranges));
  }
  return result;
}

bool HasFrequencyBda(const casacore::MeasurementSet& ms) {
  // This is a simple test that works in all current use-cases. Formally, we
  // should check if there are rows with the same BDA_SET_ID to conclude BDA is
  // enabled.
  return ms.spectralWindow().actualTableDesc().isColumn("BDA_SET_ID");
}

MSProvider::~MSProvider() = default;

void MSProvider::ResetModelColumn() {
  std::unique_ptr<MSReader> msReader = MakeReader();
  const std::vector<std::complex<float>> buffer(
      NMaxChannels() * NPolarizations(), {0.0f, 0.0f});
  while (msReader->CurrentRowAvailable()) {
    // Always overwrite
    const bool addToMS = false;
    WriteModel(buffer.data(), addToMS);
    NextOutputRow();
    msReader->NextInputRow();
  }
}

}  // namespace wsclean