1 #ifndef CORRELATORSIDEBAND_H
2 #define CORRELATORSIDEBAND_H
18 namespace correlator {
21 class CorrelatorSideband;
23 typedef ::std::vector< CorrelatorSideband > SidebandVector;
24 typedef ::std::vector< ::std::complex< float > >
DataVector;
25 typedef ::std::vector< int > DataValidVector;
39 NO_REASON = 0x00000000,
40 A1_PHASELOCK = 0x00000001,
41 A2_PHASELOCK = 0x00000002,
42 A1_MAJOR_TRACKING = 0x00000004,
43 A2_MAJOR_TRACKING = 0x00000008,
44 A1_TSYS_BAD = 0x00000010,
45 A2_TSYS_BAD = 0x00000020,
46 A1_SHADOWED = 0x00000040,
47 A2_SHADOWED = 0x00000080,
48 A1_OFFLINE = 0x00000100,
49 A2_OFFLINE = 0x00000200,
50 A1_MINOR_TRACKING = 0x00000400,
51 A2_MINOR_TRACKING = 0x00000800,
52 A1_CALSTATE = 0x00001000,
53 A2_CALSTATE = 0x00002000,
54 UNKNOWN12 = 0x00004000,
55 UNKNOWN13 = 0x00008000,
56 UNKNOWN14 = 0x00010000,
57 UNKNOWN15 = 0x00020000,
58 UNKNOWN16 = 0x00040000,
59 UNKNOWN17 = 0x00080000,
60 UNKNOWN18 = 0x00100000,
61 UNKNOWN19 = 0x00200000,
62 UNKNOWN20 = 0x00400000,
63 MANUAL_FLAG = 0x00800000,
64 BAND_OFFLINE = 0x01000000,
65 UNMAPPED_SIGNAL = 0x02000000,
66 MONITOR_DATA_BAD = 0x04000000,
67 BAD_CHANNEL_COUNT = 0x08000000,
68 NO_RX_IN_SIDEBAND = 0x10000000,
69 CORR_DATA_MISSING = 0x20000000,
70 CORR_DATA_INVALID = 0x40000000,
71 DO_NOT_USE = 0x80000000,
97 void mySerialize(
char * byteArray,
int * offset )
const;
106 void deserializeVer1(
const char * byteArray,
117 void deserializeSwapVer1(
const char * byteArray,
150 bool isValid(
int channelIndex)
const;
163 void setValid(
int channelIndex,
bool val);
248 void setData( const ::std::vector< ::std::complex< float > > & data );
250 void swapData( ::std::vector< ::std::complex< float > > & data );
288 void flagData(
unsigned int reason );
289 void unflagData(
unsigned int reason );
313 std::pair< unsigned int, unsigned int >
316 std::string getSummary()
const;
318 std::string getSpectra()
const;
322 void setDataValidAllPrivate(
bool b);
323 void setBlankFlagStatus(
unsigned int reason );
324 void unsetBlankFlagStatus(
unsigned int reason );
329 bool dataHasBeenSet_;
330 bool dataValidAllHasBeenSet_;
331 bool dataValidAllValue_;
343 float deltaFrequency_;
344 float offsetFrequency_;
345 mutable DataVector data_;
357 DataValidVector dataValid_;
358 unsigned int validReason_;
360 std::pair< unsigned int, unsigned int > minorTrackBfCountNoSerialize_;
371 const Flavor initialFlavor ) :
372 autoSideband_( initialFlavor == AUTO_FLAVOR ),
373 usb_( initialFlavor == UPPER_FLAVOR ),
374 dataHasBeenSet_( false ),
375 dataValidAllHasBeenSet_( false ),
376 dataValidAllValue_( false ),
381 deltaFrequency_( 0.0 ),
382 offsetFrequency_( 0.0 ),
386 bfStatus_(monitor::MonitorPoint::UNDETERMINED ),
387 minorTrackBfCountNoSerialize_( 0, 0 )
395 autoSideband_( rhs.autoSideband_ ),
397 dataHasBeenSet_( rhs.dataHasBeenSet_ ),
398 dataValidAllHasBeenSet_( rhs.dataValidAllHasBeenSet_ ),
399 dataValidAllValue_( rhs.dataValidAllValue_ ),
400 numberOfChans_( rhs.numberOfChans_ ),
401 numberOfLags_( rhs.numberOfLags_ ),
402 stats_( rhs.stats_ ),
403 frequency_( rhs.frequency_ ),
404 deltaFrequency_( rhs.deltaFrequency_ ),
405 offsetFrequency_( rhs.offsetFrequency_ ),
407 dataValid_( rhs.dataValid_ ),
408 validReason_( rhs.validReason_ ),
409 bfStatus_(rhs.bfStatus_),
410 minorTrackBfCountNoSerialize_( rhs.minorTrackBfCountNoSerialize_ )
418 ::std::swap( autoSideband_, rhs.autoSideband_ );
419 ::std::swap( usb_, rhs.usb_ );
420 ::std::swap( dataHasBeenSet_, rhs.dataHasBeenSet_ );
421 ::std::swap( dataValidAllHasBeenSet_, rhs.dataValidAllHasBeenSet_ );
422 ::std::swap( dataValidAllValue_, rhs.dataValidAllValue_ );
423 ::std::swap( numberOfChans_, rhs.numberOfChans_ );
424 ::std::swap( numberOfLags_, rhs.numberOfLags_ );
425 stats_.swap( rhs.stats_ );
426 ::std::swap( frequency_, rhs.frequency_ );
427 ::std::swap( deltaFrequency_, rhs.deltaFrequency_ );
428 ::std::swap( offsetFrequency_, rhs.offsetFrequency_ );
429 data_.swap( rhs.data_ );
430 dataValid_.swap( rhs.dataValid_ );
431 ::std::swap( validReason_, rhs.validReason_ );
432 ::std::swap( bfStatus_, rhs.bfStatus_ );
433 ::std::swap( minorTrackBfCountNoSerialize_,
434 rhs.minorTrackBfCountNoSerialize_ );
442 if ( &rhs !=
this ) {
443 autoSideband_ = rhs.autoSideband_;
445 dataHasBeenSet_ = rhs.dataHasBeenSet_;
446 dataValidAllHasBeenSet_ = rhs.dataValidAllHasBeenSet_;
447 dataValidAllValue_ = rhs.dataValidAllValue_;
448 numberOfChans_ = rhs.numberOfChans_;
449 numberOfLags_ = rhs.numberOfLags_;
450 frequency_ = rhs.frequency_;
451 deltaFrequency_ = rhs.deltaFrequency_;
452 offsetFrequency_ = rhs.offsetFrequency_;
455 dataValid_ = rhs.dataValid_;
456 validReason_ = rhs.validReason_;
457 bfStatus_ = rhs.bfStatus_;
458 minorTrackBfCountNoSerialize_ = rhs.minorTrackBfCountNoSerialize_;
474 return autoSideband_;
488 return ((usb_ !=
true) && (autoSideband_ !=
true));
491 inline carma::correlator::lib::CorrelatorSideband::Flavor
494 if ( autoSideband_ ) {
495 return carma::correlator::lib::CorrelatorSideband::AUTO_FLAVOR;
498 return carma::correlator::lib::CorrelatorSideband::UPPER_FLAVOR;
500 return carma::correlator::lib::CorrelatorSideband::LOWER_FLAVOR;
504 inline ::std::vector< ::std::complex< float > > &
511 inline const ::std::vector< int > &
521 return numberOfChans_;
528 return numberOfLags_;
549 return offsetFrequency_;
556 return deltaFrequency_;
571 numberOfLags_ = numLags;
593 const float offsetFreq )
595 offsetFrequency_ = offsetFreq;
601 const float delFreq )
603 deltaFrequency_ = delFreq;
void blankData(unsigned int reason)
Blank data with specified reason (removes all data).
Abstract Class used to allow object to serialize themselves into a byte array.
void setRxOutFrequency(float freq)
Set receiver output freq.
Abstract base class for all monitor points.
Class to hold some statistics related to Sideband data.
void setNumberOfLags(int numLags)
Set the number of Lags used to create Spectra.
float getSkyFrequency() const
Return sky freq.
int getNumberOfLags() const
Get Number of Lags used to create Spectra.
virtual ~CorrelatorSideband()
Destructor.
float getOffsetFrequency() const
Return the offset frquency the center of the first channel is from the edge of the band...
void deserializeVer0(const char *byteArray, int *offset, int byteArraySize)
Uset to deserialize contents.
BLANKING_FLAGGING
Blanking/flagging status of the data.
const DataValidVector & getDataValid() const
Get valid channel vector.
DataVector & getData() const
Get Spectra.
void normalize()
normalize object.
void swap(CorrelatorSideband &rhs)
Swap this instance with another CorrelatorSideband instance.
Flavor getFlavor() const
Get flavor.
void setOffsetFrequency(float offsetFreq)
Set the offset frquency the center of the first channel is from the edge of the band.
unsigned int getValidReason() const
Get reason for blanking & flagging.
void computeStats(bool keepEndChannels=true)
Convenience method to compute the Stats from the internally stored spectra.
void deserializeSwapVer0(const char *byteArray, int *offset, int byteArraySize)
Uset to deserialize contents.
void mySerialize(char *byteArray, int *offset) const
Use to serialize contents.
float getDeltaFrequency() const
Get delta freq.
CorrelatorSideband & operator=(const CorrelatorSideband &rhs)
Assignment.
bool isUSB() const
True if Sideband is an UpperSideband Spectra.
void setDeltaFrequency(float freq)
Set delta freq.
int getSizeInBytes() const
Return size in bytes.
::std::vector< ::carma::canbus::byteType > DataVector
Alias for CAN data.
void setValidAll(bool val)
Set all channels to same validity.
bool isAuto() const
True if Sideband is an Auto-Spectra.
void setValid(int channelIndex, bool val)
Set validity for channel index.
void setSkyFrequency(float freq)
Set sky freq.
carma::monitor::MonitorPoint::BLANKING_FLAGGING getBlankFlagStatus() const
Get blank flag status for this baseline.
int getNumberOfChans() const
Get Number of Channels in Spectra.
CorrelatorSideband(Flavor initialFlavor)
Constructor.
void setStats(const carma::correlator::lib::CorrelatorStats &stats)
Set the Stats object.
bool isLSB() const
True if Sideband is an UpperSideband Spectra.
void flagData(unsigned int reason)
Flag data with specified reason.
bool isValid() const
True if this sideband is valid which means at least 1 channel is valid.
void addIn(const CorrelatorSideband &rhs)
Add a CorrelatorSideband into this one.
void setData(const ::std::vector< ::std::complex< float > > &data)
Set Spectra.
const carma::correlator::lib::CorrelatorStats & getStats() const
Get the Stats object.
float getRxOutFrequency() const
Return receiver output freq.
Base class for Correlator Sideband data.
std::pair< unsigned int, unsigned int > getMinorTrackBfCount() const
Retrieve the minor track blanking and flagging counters.