Skip to content
Snippets Groups Projects
Select Git revision
  • f59c9bd2402a46eb1591adf7c4b2c3400e6cdd76
  • master default protected
  • gec-84-c-compiler-dependency
  • gec-50-only-test-plot-with-gtkmm
  • make-baseline-aoqplot-nicer
  • use-system-pybind11
  • fix-filterbank-imagesets
  • fix-drawing-large-images
  • allow-writing-to-filterbanksets
  • implement-nroamlize-bandpass-for-non-complex-data
  • support-multiple-pols-in-filterbank
  • solve-flipped-axis-crashes
  • improve-statistics-speed
  • avoid-deprecated-gtkmm
  • ast-1621-deprecated-deletetable
  • ast-1613-update-hdf5-url
  • rename-use-input-flags-variable
  • dockerfile-fix
  • open-correct-data-column
  • add-target-cpu
  • add-git-to-format-conatiner
  • v3.4.0
  • v3.3.0
  • v3.2.0
  • test-vx.y
  • v3.1.0
  • v3.0.0
  • v2.15.0
  • v2.14.0
  • v2.13.0
  • v2.12.1
  • v2.12.0
  • v2.11.0
  • v2.10.0
  • v2.9.0
  • v2.8.0
  • v2.7.0
  • v2.6.0
  • v2.5.0
  • v2.4.0
  • v2.3.0
41 results

antennaselector.cpp

Blame
  • user avatar
    André Offringa authored
    f59c9bd2
    History
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    antennaselector.cpp 1.49 KiB
    #include "antennaselector.h"
    
    #include "../../quality/statisticscollection.h"
    #include "../../quality/statisticsderivator.h"
    
    using std::size_t;
    
    namespace algorithms {
    
    std::vector<size_t> AntennaSelector::Run(
        const StatisticsCollection& statisticsCollection) {
      std::map<size_t, DefaultStatistics> antStatistics =
          statisticsCollection.GetAntennaStatistics();
    
      std::vector<double> stddevs;
      std::set<size_t> badAntennas;
      for (size_t p = 0; p != 4; ++p) {
        double meanStddev = 0.0;
        stddevs.clear();
        for (const std::pair<const size_t, DefaultStatistics>& antenna : antStatistics) {
          double stddev = StatisticsDerivator::GetStatisticAmplitude(
              QualityTablesFormatter::StandardDeviationStatistic, antenna.second,
              p);
          stddevs.emplace_back(stddev);
          meanStddev += stddev;
        }
        double stddevOfStddev = 0.0;
        meanStddev /= stddevs.size();
        for (double& s : stddevs) {
          stddevOfStddev += (s - meanStddev) * (s - meanStddev);
        }
        stddevOfStddev = sqrt(stddevOfStddev / stddevs.size());
    
        size_t index = 0;
        double limit = _threshold * stddevOfStddev;
        for (const std::pair<const size_t, DefaultStatistics>& antenna : antStatistics) {
          if (std::fabs(stddevs[index] - meanStddev) > limit ||
              stddevs[index] == 0.0) {
            if (antenna.second.count[p] != 0) badAntennas.insert(antenna.first);
          }
          ++index;
        }
      }
      return std::vector<size_t>(badAntennas.begin(), badAntennas.end());
    }
    
    }  // namespace algorithms