CARMA C++
CorrelatorDataFrameManager.h
Go to the documentation of this file.
1 #ifndef SZA_UTIL_CORRELATORDATAFRAMEMANAGER_H
2 #define SZA_UTIL_CORRELATORDATAFRAMEMANAGER_H
3 
11 #include <map>
12 
13 #include "carma/szautil/Directives.h"
14 
15 #if DIR_USE_CORR
17 #endif
18 
19 // C header files from the array control code
20 
21 #include "carma/szaarrayutils/szaregs.h"
22 
23 #include "carma/szautil/CorrelatorBand.h"
25 #include "carma/szautil/TimeVal.h"
26 
27 
28 #include <complex>
29 
30 namespace cobra {
31  class CorrelatorBand;
32  class CorrelatorData;
33  class AutoSpectra;
34  class CrossSpectra;
35 }
36 
37 namespace sza {
38  namespace util {
39 
40  class DataFrame;
41 
42  class CorrelatorDataFrameManager : public RegMapDataFrameManager {
43  public:
44 
48  CorrelatorDataFrameManager(CorrelatorDataFrameManager& fm);
49 
53  CorrelatorDataFrameManager(bool archivedOnly=false, DataFrame* frame=0);
54 
55 #if DIR_USE_CORR
56 
59  CorrelatorDataFrameManager(bool archivedOnly,
60  carma::correlator::lib::
61  CorrelatorData& corrData);
62 
66  void setTo(carma::correlator::lib::CorrelatorData& corrData);
67 
71  void setTo(cobra::CorrelatorBand& band, unsigned char antMask=0xff);
72 
73 #endif
74 
78  virtual ~CorrelatorDataFrameManager();
79 
83  void initialize(bool archivedOnly=false, sza::util::DataFrame* frame = 0);
84 
88  void reinitialize();
89 
94  std::map<unsigned int, std::map<unsigned int, unsigned int> >
95  crossBaselineIndex_;
96 
97  void setAntennaBasedGain(Complex<float> gain,
98  unsigned iAnt, unsigned iBand, unsigned iChan);
99 
100  void printAntennaBasedGains();
101 
105  void setBandReceived(CorrelatorBand::Id id, bool received);
106 
110  void setBandReceived(CorrelatorBand& iBand, bool received);
111 
115  void setCrossBaselineReceived(unsigned int iBase, bool received);
116 
121  void initializeSources();
122 
127  bool isNoise();
128 
132  bool isRf();
133 
134  private:
135 
136  // Statistics about correlator sources
137 
138  bool isRf_;
139  bool isNoise_;
140 
141  // Arrays in which visibilities will be stored until ready to write
142 
143  std::vector<Complex<float>::Data> usbAvg_;
144  std::vector<Complex<float>::Data> lsbAvg_;
145  std::vector<Complex<float>::Data> usbVar_;
146  std::vector<Complex<float>::Data> lsbVar_;
147 
148  std::vector<float> usbAmplitude_;
149  std::vector<float> lsbAmplitude_;
150 
151  std::vector<float> usbAvgAmplitude_;
152  std::vector<float> lsbAvgAmplitude_;
153 
154  std::vector<Complex<float>::Data> usb_;
155  std::vector<Complex<float>::Data> lsb_;
156 
157  std::vector<float> autoAvg_;
158  std::vector<float> autoVar_;
159  std::vector<float> auto_;
160 
161  std::vector<unsigned char> baselineReceived_;
162 
163  // A static array of antennaBasedComplexGains
164 
165  static std::vector<std::vector<std::vector<Complex<float> > > >
166  antennaBasedGains_;
167 
168  static bool gainsAreInitialized_;
169 
170 #if DIR_USE_CORR
171 
174  void packCorrData(carma::correlator::lib::CorrelatorData& corrData);
175 
179  void packBand(carma::correlator::lib::CorrelatorBand& corrBand);
180 
184  void packBaseline(carma::correlator::lib::CorrelatorBaseline& baseline);
185 
189  void packSideBand(carma::correlator::lib::CorrelatorSideband* sideband,
190  unsigned int iAnt1, unsigned int iAnt2);
191 
195  std::string bandName(carma::correlator::lib::CorrelatorBand& corrBand);
196 
197 #endif
198 
199 #if DIR_USE_CORR
200 
204  void packCorrData(cobra::CorrelatorBand& corrBand, unsigned char antMask=0xff);
205 
209  void packSpectrum(cobra::CorrelatorData* spectrum, bool reverseFreqOrder=false, unsigned char antMask=0xff);
210 
214  void packAutoSpectrum(cobra::AutoSpectra* spectrum, bool reverseFreqOrder=false);
215 
219  void packCrossSpectrum(cobra::CrossSpectra* spectrum, bool reverseFreqOrder=false, unsigned char antMask=0xff);
220 
224  void packAuto(unsigned iAnt, float* data, bool reverseFreqOrder=false);
225 
229  void packLsb(unsigned iBase, std::complex<float>* data, bool reverseFreqOrder=false);
230 
234  void packUsb(unsigned iBase, std::complex<float>* data, bool reverseFreqOrder=false);
235 
239  void packCross(unsigned iBase, std::complex<float>* data,
240  Complex<float>::Data* ptr,
241  Complex<float>::Data* avgPtr,
242  Complex<float>::Data* varPtr,
243  float* ampPtr,
244  float* avgAmpPtr,
245  bool reverseFreqOrder=false);
246 
247 #endif
248 
252  std::string bandName(unsigned iBand);
253 
257  void writeRegisters(std::string& bName, bool swapSidebands);
258 
263  void addSource(std::string& source);
264 
265  }; // End class CorrelatorDataFrameManager
266 
267  } // End namespace util
268 } // End namespace sza
269 
270 
271 
272 #endif // End #ifndef SZA_UTIL_CORRELATORDATAFRAMEMANAGER_H
Id
Enumerate known bands.
Class to hold a Band of Correlator Data.
Tagged: Sat Aug 14 13:12:19 UTC 2004.
Tagged: Fri Nov 14 12:39:38 UTC 2003.
Class used to represents bands of Correlator Data.
Class to hold Correlator Baseline data.
A generic interface for a data frame consisting of contiguous blocks of arbitrary-sized types...
Definition: DataFrame.h:27
Base class for Correlator Sideband data.