Skip to content
Snippets Groups Projects
Select Git revision
  • 196f1676c44133b475c1c1a859958f18cfd8a3b1
  • master default protected
  • add_aartfaac_packet_header
  • padre-8-imager
  • add_correlator_stream_step
  • add_aartfaac_rcumode
  • singleton_in_sagecalpredict
  • ast-1408-remove_bl_check
  • spectral-smoothness-exponent
  • RAP-299-solver
  • update-docs-IDGpredict
  • diagonal-antenna-solver
  • azelgeo-revised
  • time-concatenation
  • demixer_test_for_bas
  • ast-1330-merge-extra_data_-and-data_
  • ast-1328-transition-to-xtensor
  • ast-1301-bugfix-numthreads-too-high
  • ast-1238-use-xtensor-char
  • ast-1241-extra-data-in-fields
  • ast-1209-ddecal-model-data-in-dpbuffer
  • v6.0
  • v5.3
  • v5.2
  • v5.1
  • v5.0
  • v4.2
  • v4.1
  • v4.0
  • LOFAR-Release-3_1_0
  • LOFAR-Release-3_1_1
  • LOFAR-Release-3_1_2
  • LOFAR-Release-3_1_3
  • LOFAR-Release-3_1_4
  • LOFAR-Release-3_1_5
  • LOFAR-Release-3_1_6
  • LOFAR-Release-3_1_7
  • LOFAR-Release-3_0_0
  • LOFAR-Release-3_0_10
  • LOFAR-Release-3_0_11
  • LOFAR-Release-3_0_12
41 results

RCUMode.h

Blame
  • Forked from ResearchAndDevelopment / DP3
    Source project has a limited visibility.
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    RCUMode.h 3.87 KiB
    // Copyright (C) 2023 ASTRON (Netherlands Institute for Radio Astronomy)
    // SPDX-License-Identifier: GPL-3.0-or-later
    
    /// This code was taken from https://git.astron.nl/RD/aartfaac-tools.git
    /// and adapted to fit into DP3 codebase.
    
    #ifndef AARTFAAC_MODE_H
    #define AARTFAAC_MODE_H
    
    #include <string>
    #include <stdexcept>
    
    class RCUMode {
     public:
      enum Mode {
        Unused = 0,         // 0 = Unused
        LBAOuter10_90 = 1,  // 1 = LBA_OUTER, 10-90 MHz Analog filter
        LBAOuter30_90 = 2,  // Mode 2 = LBA_OUTER, 30-90 MHz Analog filter
        LBAInner10_90 = 3,  // Mode 3 = LBA_INNER, 10-90 MHz Analog filter
        LBAInner30_90 = 4,  // Mode 4 = LBA_INNER, 30-90 MHz Analog filter
        HBA110_190 = 5,     // Mode 5 = HBA, 110-190MHz Analog filter
        HBA170_230 = 6,     // Mode 6 = HBA, 170-230MHz Analog filter
        HBA210_270 = 7      // Mode 7 = HBA, 210-270MHz Analog filter
      } mode;
    
      RCUMode(Mode m) : mode(m){};
      RCUMode(){};
    
      std::string ToString() const {
        switch (mode) {
          default:
          case Unused:
            return "unused";
          case LBAOuter10_90:
            return "LBA_OUTER 10-90 MHz";
          case LBAOuter30_90:
            return "LBA_OUTER 30-90 MHz";
          case LBAInner10_90:
            return "LBA_INNER 10-90 MHz";
          case LBAInner30_90:
            return "LBA_INNER 30-90 MHz";
          case HBA110_190:
            return "HBA 110-190 MHz";
          case HBA170_230:
            return "HBA 170-230 MHz";
          case HBA210_270:
            return "HBA 210-270 MHz";
        }
      }
    
      std::string AntennaType() {
        std::string antenna_type;
        switch (mode) {
          case RCUMode::LBAInner10_90:
          case RCUMode::LBAInner30_90:
          case RCUMode::LBAOuter10_90:
          case RCUMode::LBAOuter30_90:
            antenna_type = "LBA";
            break;
          case RCUMode::HBA110_190:
          case RCUMode::HBA170_230:
          case RCUMode::HBA210_270:
            antenna_type = "HBA";
            break;
          default:
            antenna_type = "?";
            break;
        }
        return antenna_type;
      }
      bool operator==(Mode _mode) const { return _mode == mode; }
    
      static RCUMode FromNumber(int modeNumber) {
        return {static_cast<Mode>(modeNumber)};
      }
    
      double Bandwidth() const {
        switch (mode) {
          case RCUMode::LBAInner10_90:  // 200 MHz clock, Nyquist zone 1
          case RCUMode::LBAInner30_90:
          case RCUMode::LBAOuter10_90:
          case RCUMode::LBAOuter30_90:
          case RCUMode::HBA110_190:  // 200 MHz clock, Nyquist zone 2
          case RCUMode::HBA210_270:  // 200 MHz clock, Nyquist zone 3
            return 195312.5;         // 1/1024 x nu_{clock}
          case RCUMode::HBA170_230:  // 160 MHz clock, Nyquist zone 3
            return 156250.0;
          default:
            throw std::runtime_error(
                "Don't know how to handle this mode: not implemented yet");
        }
      }
    
      double CentralFrequency() const {
        switch (mode) {
          case RCUMode::LBAOuter30_90:
          case RCUMode::LBAInner30_90:
            return 60.;
          case RCUMode::LBAOuter10_90:
          case RCUMode::LBAInner10_90:
            return 50.;
          case RCUMode::HBA110_190:
            return 150.;
          case RCUMode::HBA210_270:
            return 240.;
          case RCUMode::HBA170_230:
            return 200.;
          default:
            throw std::runtime_error(
                "Don't know how to handle this mode: not implemented yet");
        }
      }
    
      double FrequencyOffset() const {
        switch (mode) {
          case RCUMode::LBAInner10_90:  // 200 MHz clock, Nyquist zone 1
          case RCUMode::LBAInner30_90:
          case RCUMode::LBAOuter10_90:
          case RCUMode::LBAOuter30_90:
            return 0.0;
          case RCUMode::HBA110_190:  // 200 MHz clock, Nyquist zone 2
            return 100e6;
          case RCUMode::HBA170_230:  // 160 MHz clock, Nyquist zone 3
            return 160e6;
          case RCUMode::HBA210_270:  // 200 MHz clock, Nyquist zone 3
            return 200e6;
          default:
            throw std::runtime_error(
                "Don't know how to handle this mode: not implemented yet");
        }
      }
    };
    
    #endif