casacore
rowtimeblockencoder.h
Go to the documentation of this file.
1 #ifndef DYSCO_ROW_TIME_BLOCK_ENCODER_H
2 #define DYSCO_ROW_TIME_BLOCK_ENCODER_H
3 
4 #include "stochasticencoder.h"
5 #include "timeblockbuffer.h"
6 #include "uvector.h"
7 
8 #include <complex>
9 #include <random>
10 #include <vector>
11 
12 #include "timeblockencoder.h"
13 
15  public:
16  RowTimeBlockEncoder(size_t nPol, size_t nChannels);
17 
18  virtual ~RowTimeBlockEncoder() override {}
19 
20  virtual void EncodeWithDithering(
21  const dyscostman::StochasticEncoder<float> &gausEncoder, FBuffer &buffer,
22  float *metaBuffer, symbol_t *symbolBuffer, size_t antennaCount,
23  std::mt19937 &rnd) final override {
24  encode<true>(gausEncoder, buffer, metaBuffer, symbolBuffer, antennaCount,
25  &rnd);
26  }
27 
28  virtual void EncodeWithoutDithering(
29  const dyscostman::StochasticEncoder<float> &gausEncoder, FBuffer &buffer,
30  float *metaBuffer, symbol_t *symbolBuffer,
31  size_t antennaCount) final override {
32  encode<false>(gausEncoder, buffer, metaBuffer, symbolBuffer, antennaCount,
33  0);
34  }
35 
36  virtual void InitializeDecode(const float *metaBuffer, size_t nRow,
37  size_t nAntennae) final override;
38 
39  virtual void Decode(const dyscostman::StochasticEncoder<float> &gausEncoder,
40  FBuffer &buffer, const symbol_t *symbolBuffer,
41  size_t blockRow, size_t antenna1,
42  size_t antenna2) final override;
43 
44  virtual size_t SymbolCount(size_t nRow, size_t nPol,
45  size_t nChannels) const final override {
46  return nRow * nChannels * nPol * 2 /*complex*/;
47  }
48 
49  virtual size_t SymbolCount(size_t nRow) const final override {
50  return nRow * _nChannels * _nPol * 2 /*complex*/;
51  }
52 
53  virtual size_t SymbolsPerRow() const final override {
54  return _nChannels * _nPol * 2 /*complex*/;
55  }
56 
57  virtual size_t MetaDataCount(size_t nRow, size_t /*nPol*/,
58  size_t /*nChannels*/,
59  size_t /*nAntennae*/) const final override {
60  return nRow;
61  }
62 
63  private:
64  template <bool UseDithering>
66  const FBuffer &buffer, float *metaBuffer, symbol_t *symbolBuffer,
67  size_t antennaCount, std::mt19937 *rnd);
68 
69  size_t _nPol, _nChannels;
70 
71  std::uniform_int_distribution<unsigned> _ditherDist;
73 };
74 
75 #endif
virtual size_t SymbolCount(size_t nRow) const final override
RowTimeBlockEncoder(size_t nPol, size_t nChannels)
virtual void Decode(const dyscostman::StochasticEncoder< float > &gausEncoder, FBuffer &buffer, const symbol_t *symbolBuffer, size_t blockRow, size_t antenna1, size_t antenna2) final override
virtual void InitializeDecode(const float *metaBuffer, size_t nRow, size_t nAntennae) final override
virtual void EncodeWithDithering(const dyscostman::StochasticEncoder< float > &gausEncoder, FBuffer &buffer, float *metaBuffer, symbol_t *symbolBuffer, size_t antennaCount, std::mt19937 &rnd) final override
ao::uvector< double > _rowFactors
virtual size_t MetaDataCount(size_t nRow, size_t, size_t, size_t) const final override
virtual size_t SymbolCount(size_t nRow, size_t nPol, size_t nChannels) const final override
virtual void EncodeWithoutDithering(const dyscostman::StochasticEncoder< float > &gausEncoder, FBuffer &buffer, float *metaBuffer, symbol_t *symbolBuffer, size_t antennaCount) final override
virtual ~RowTimeBlockEncoder() override
virtual size_t SymbolsPerRow() const final override
void encode(const dyscostman::StochasticEncoder< float > &gausEncoder, const FBuffer &buffer, float *metaBuffer, symbol_t *symbolBuffer, size_t antennaCount, std::mt19937 *rnd)
std::uniform_int_distribution< unsigned > _ditherDist
Lossy encoder for stochastic values.
Header file for uvector and its relational and swap functions.