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
|