CARMA C++
AntennaMapper.h
Go to the documentation of this file.
1 // $Id: AntennaMapper.h,v 1.1 2013/11/05 00:20:29 eml Exp $
2 
3 #ifndef CARMA_UI_RTD_ANTENNAMAPPER_H
4 #define CARMA_UI_RTD_ANTENNAMAPPER_H
5 
16 #include "carma/monitor/SignalPathSubsystem.h"
17 
18 #include "carma/szautil/Angle.h"
19 #include "carma/szautil/Frequency.h"
20 #include "carma/szautil/Length.h"
21 
22 #include <map>
23 #include <vector>
24 
25 namespace carma {
26  namespace ui {
27  namespace rtd {
28 
29  // Class to maintain a mapping of Antennas and subarrays
30 
31  class AntennaMapper {
32  public:
33 
34  enum AntennaType {
35  ANT_UNKNOWN = 0x0,
36  ANT_OVRO = 0x1,
37  ANT_BIMA = 0x2,
38  ANT_SZA = 0x4
39  };
40 
41  // A class for managing a single antenna
42 
43  class Antenna {
44 
45  public:
46 
47  AntennaType type_;
48  unsigned carmaAntNo_;
49  unsigned typeAntNo_;
50  unsigned subarrayNo_;
51  sza::util::Frequency frequency_;
52  sza::util::Length diameter_;
53 
54  std::vector<Antenna*>* antennasBySubarray_;
55  std::vector<Antenna*>* antennasByType_;
56 
57  Antenna(unsigned carmaAntNo) {
58 
59  carmaAntNo_ = carmaAntNo;
60  subarrayNo_ = 0;
61 
62  if(carmaAntNo_ < 7) {
63  type_ = ANT_OVRO;
64  typeAntNo_ = carmaAntNo_;
65  diameter_.setMeters(10.4);
66  } else if(carmaAntNo_ < 16) {
67  type_ = ANT_BIMA;
68  typeAntNo_ = carmaAntNo_ - 6;
69  diameter_.setMeters(6.1);
70  } else {
71  type_ = ANT_SZA;
72  typeAntNo_ = carmaAntNo_ - 15;
73  diameter_.setMeters(3.5);
74  }
75  };
76 
77  ~Antenna() {};
78 
79  sza::util::Angle beamFwhm(sza::util::Frequency freq) {
80  sza::util::Angle fwhm;
81  fwhm.setRadians(1.2 * freq.centimeters() / diameter_.centimeters());
82  return fwhm;
83  };
84 
85  };
86 
90  AntennaMapper(carma::monitor::CarmaMonitorSystem& cms);
91 
95  virtual ~AntennaMapper();
96 
97  void rebuildSubarrayMaps();
98  void initializeTypeMaps();
99  bool mapsNeedRebuilding();
100  void printSubarrayMaps();
101 
102  Antenna* getAntenna(AntennaType type, unsigned iAnt);
103 
104  friend std::ostream& operator<<(std::ostream& os, AntennaType& type);
105 
106  public:
107 
108  carma::monitor::SignalPathSubsystem::Mapping* mappingMs_;
110 
111  std::vector<Antenna*> antennas_;
112  static const unsigned nAntenna_;
113  static const unsigned nOvro_;
114  static const unsigned nBima_;
115  static const unsigned nSza_;
116 
117  std::vector<Antenna*> subarray0Map_;
118  std::vector<Antenna*> subarray1Map_;
119  std::vector<Antenna*> subarray2Map_;
120  std::vector<Antenna*> subarray3Map_;
121  std::vector<Antenna*> subarray4Map_;
122  std::vector<Antenna*> subarray5Map_;
123 
124  std::vector<Antenna*> szaMap_;
125  std::vector<Antenna*> bimaMap_;
126  std::vector<Antenna*> ovroMap_;
127 
128  std::map<unsigned, std::vector<Antenna*>* > antennaMapsBySubarray_;
129  std::map<AntennaType, std::vector<Antenna*>* > antennaMapsByType_;
130 
131  }; // End class AntennaMapper
132 
133  std::ostream& operator<<(std::ostream& os, AntennaMapper::AntennaType& type);
134 
135  } // End namespace rtd
136  } // End namespace ui
137 } // End namespace carma
138 
139 
140 
141 #endif // End #ifndef CARMA_UI_RTD_ANTENNAMAPPER_H
The monitor system base class.
AntennaType
Enumeration of possible types for antennas.
Definition: Types.h:210