File: reorderedmsreader.h

package info (click to toggle)
wsclean 3.7-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 10,968 kB
  • sloc: cpp: 85,742; python: 3,526; sh: 245; makefile: 21
file content (64 lines) | stat: -rw-r--r-- 1,646 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#ifndef MSPROVIDERS_MSREADERS_REORDEREDMSREADER_H_
#define MSPROVIDERS_MSREADERS_REORDEREDMSREADER_H_

#include "msreader.h"

#include <aocommon/uvector.h>

#include <cstdint>
#include <fstream>

namespace wsclean {

class ReorderedMsProvider;

class ReorderedMsReader final : public MSReader {
 public:
  ReorderedMsReader(ReorderedMsProvider* reordered_ms);
  virtual ~ReorderedMsReader(){};

  size_t RowId() const override { return current_input_row_; }

  bool CurrentRowAvailable() override;

  void NextInputRow() override;

  void ReadMeta(MSProvider::MetaData& metadata) override;

  void ReadData(std::complex<float>* buffer) override;

  void ReadModel(std::complex<float>* buffer) override;

  void ReadWeights(float* buffer) override;

  void WriteImagingWeights(const float* buffer) override;

  size_t CurrentDataDescId() const { return metadata_.data_desc_id; }

 private:
  uint64_t NVisibilitiesPerRow(size_t data_desc_id) const;
  void CacheMeta();

  size_t current_input_row_ = 0;
  size_t current_value_position_ = 0;
  MSProvider::MetaData metadata_;

  // Chunkoffset counts the amount of data rows we are ahead or behind.
  // Positive values mean we are lagging, whereas negative values mean we are
  //  ahead of the current time step.
  bool has_data_ = false;
  bool has_weights_ = false;

  std::ifstream meta_file_;
  std::ifstream weight_file_;
  std::ifstream data_file_;

  aocommon::UVector<float> imaging_weight_buffer_;
  aocommon::UVector<std::complex<float>> data_buffer_;
  aocommon::UVector<float> weight_buffer_;
  std::unique_ptr<std::fstream> imaging_weights_file_;
};

}  // namespace wsclean

#endif