DP3
RcuMode.h
Go to the documentation of this file.
1 // Copyright (C) 2023 ASTRON (Netherlands Institute for Radio Astronomy)
2 // SPDX-License-Identifier: GPL-3.0-or-later
3 
15 
16 #ifndef DP3_BASE_RCU_MODE_H_
17 #define DP3_BASE_RCU_MODE_H_
18 
19 #include <string>
20 #include <stdexcept>
21 
22 namespace dp3::base {
23 
24 class RcuMode {
25  public:
26  enum Mode {
27  Unused = 0, // 0 = Unused - Mode set when RCUs are disabled
28  LBAOuter10_90 = 1, // 1 = LBA_OUTER, 10-90 MHz Analog filter
29  LBAOuter30_90 = 2, // Mode 2 = LBA_OUTER, 30-90 MHz Analog filter
30  LBAInner10_90 = 3, // Mode 3 = LBA_INNER, 10-90 MHz Analog filter
31  LBAInner30_90 = 4, // Mode 4 = LBA_INNER, 30-90 MHz Analog filter
32  HBA110_190 = 5, // Mode 5 = HBA, 110-190MHz Analog filter
33  HBA170_230 = 6, // Mode 6 = HBA, 170-230MHz Analog filter
34  HBA210_270 = 7 // Mode 7 = HBA, 210-270MHz Analog filter
35  // The last mode should be HBA210_270
36  } mode;
37 
38  RcuMode(const Mode& m) : mode(m){};
39  RcuMode(){};
40 
41  std::string ToString() const {
42  switch (mode) {
43  default:
44  case Unused:
45  return "unused";
46  case LBAOuter10_90:
47  return "LBA_OUTER 10-90 MHz";
48  case LBAOuter30_90:
49  return "LBA_OUTER 30-90 MHz";
50  case LBAInner10_90:
51  return "LBA_INNER 10-90 MHz";
52  case LBAInner30_90:
53  return "LBA_INNER 30-90 MHz";
54  case HBA110_190:
55  return "HBA 110-190 MHz";
56  case HBA170_230:
57  return "HBA 170-230 MHz";
58  case HBA210_270:
59  return "HBA 210-270 MHz";
60  }
61  }
62 
63  std::string AntennaType() {
64  std::string antenna_type;
65  switch (mode) {
70  antenna_type = "LBA";
71  break;
75  antenna_type = "HBA";
76  break;
77  default:
78  antenna_type = "?";
79  break;
80  }
81  return antenna_type;
82  }
83  bool operator==(const Mode& _mode) const { return _mode == mode; }
84 
85  static RcuMode FromNumber(const int& mode_number) {
86  if (mode_number >= Mode::Unused && mode_number <= Mode::HBA210_270) {
87  return {static_cast<Mode>(mode_number)};
88  } else {
89  throw std::runtime_error("invalid mode " + std::to_string(mode_number));
90  }
91  }
92 
93  double Bandwidth() const {
94  switch (mode) {
95  case RcuMode::LBAInner10_90: // 200 MHz clock, Nyquist zone 1
99  case RcuMode::HBA110_190: // 200 MHz clock, Nyquist zone 2
100  case RcuMode::HBA210_270: // 200 MHz clock, Nyquist zone 3
101  return 195312.5; // 1/1024 x nu_{clock}
102  case RcuMode::HBA170_230: // 160 MHz clock, Nyquist zone 3
103  return 156250.0;
104  default:
105  throw std::runtime_error(
106  "Don't know how to handle this mode: not implemented yet");
107  }
108  }
109 
110  double CentralFrequency() const {
111  switch (mode) {
114  return 60.0;
117  return 50.0;
118  case RcuMode::HBA110_190:
119  return 150.0;
120  case RcuMode::HBA210_270:
121  return 240.0;
122  case RcuMode::HBA170_230:
123  return 200.0;
124  default:
125  throw std::runtime_error(
126  "Don't know how to handle this mode: not implemented yet");
127  }
128  }
129 
130  double FrequencyOffset() const {
131  switch (mode) {
132  case RcuMode::LBAInner10_90: // 200 MHz clock, Nyquist zone 1
136  return 0.0;
137  case RcuMode::HBA110_190: // 200 MHz clock, Nyquist zone 2
138  return 100.0e6;
139  case RcuMode::HBA170_230: // 160 MHz clock, Nyquist zone 3
140  return 160.0e6;
141  case RcuMode::HBA210_270: // 200 MHz clock, Nyquist zone 3
142  return 200.0e6;
143  default:
144  throw std::runtime_error(
145  "Don't know how to handle this mode: not implemented yet");
146  }
147  }
148 };
149 } // namespace dp3::base
150 #endif // DP3_BASE_RCU_MODE_H
Definition: RcuMode.h:24
Mode
Definition: RcuMode.h:26
@ LBAInner30_90
Definition: RcuMode.h:31
@ LBAOuter10_90
Definition: RcuMode.h:28
@ LBAInner10_90
Definition: RcuMode.h:30
@ HBA110_190
Definition: RcuMode.h:32
@ Unused
Definition: RcuMode.h:27
@ HBA170_230
Definition: RcuMode.h:33
@ LBAOuter30_90
Definition: RcuMode.h:29
@ HBA210_270
Definition: RcuMode.h:34
bool operator==(const Mode &_mode) const
Definition: RcuMode.h:83
double FrequencyOffset() const
Definition: RcuMode.h:130
RcuMode(const Mode &m)
Definition: RcuMode.h:38
double CentralFrequency() const
Definition: RcuMode.h:110
enum dp3::base::RcuMode::Mode mode
static RcuMode FromNumber(const int &mode_number)
Definition: RcuMode.h:85
RcuMode()
Definition: RcuMode.h:39
std::string ToString() const
Definition: RcuMode.h:41
std::string AntennaType()
Definition: RcuMode.h:63
double Bandwidth() const
Definition: RcuMode.h:93
Definition: Apply.h:15