File: restorechannelrange.h

package info (click to toggle)
aoflagger 3.1.0-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 4,868 kB
  • sloc: cpp: 52,164; python: 152; sh: 60; makefile: 17
file content (40 lines) | stat: -rw-r--r-- 1,403 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
#ifndef RESTORE_CHANNEL_RANGE_H
#define RESTORE_CHANNEL_RANGE_H

#include "../../structures/timefrequencydata.h"
#include "../../structures/timefrequencymetadata.h"

class RestoreChannelRange {
 public:
  static void Execute(TimeFrequencyData& lhs, const TimeFrequencyData& rhs,
                      const TimeFrequencyMetaData& metaData, double startMHz,
                      double endMHz) {
    size_t maskCount = lhs.MaskCount();
    std::vector<Mask2DPtr> cMasks(maskCount);
    for (size_t m = 0; m != maskCount; ++m)
      cMasks[m] = Mask2D::MakePtr(*lhs.GetMask(m));

    std::vector<Mask2DCPtr> originalMasks(maskCount);
    if (rhs.MaskCount() == 1 && maskCount != 1) {
      for (size_t m = 0; m != maskCount; ++m) originalMasks[m] = rhs.GetMask(0);
    } else {
      for (size_t m = 0; m != maskCount; ++m) originalMasks[m] = rhs.GetMask(m);
    }

    const std::vector<ChannelInfo>& band = metaData.Band().channels;
    for (size_t ch = 0; ch != band.size(); ++ch) {
      if (band[ch].frequencyHz >= startMHz * 1e6 &&
          band[ch].frequencyHz <= endMHz * 1e6) {
        for (size_t m = 0; m != maskCount; ++m) {
          for (size_t x = 0; x != originalMasks[m]->Width(); ++x)
            cMasks[m]->SetValue(x, ch, originalMasks[m]->Value(x, ch));
        }
      }
    }

    for (size_t m = 0; m != maskCount; ++m)
      lhs.SetMask(m, std::move(cMasks[m]));
  }
};

#endif