File: directmsgridder.h

package info (click to toggle)
wsclean 3.6-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 16,296 kB
  • sloc: cpp: 129,246; python: 22,066; sh: 360; ansic: 230; makefile: 185
file content (56 lines) | stat: -rw-r--r-- 1,594 bytes parent folder | download | duplicates (2)
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
#ifndef DIRECT_MS_GRIDDER_H
#define DIRECT_MS_GRIDDER_H

#include <aocommon/image.h>
#include <aocommon/lane.h>

#include "msgridder.h"

#include "../main/progressbar.h"
#include "../structures/resources.h"

namespace wsclean {

class ProgressBar;

template <typename num_t>
class DirectMSGridder final : public MsGridder {
 public:
  DirectMSGridder(const Settings& settings, const Resources& resources,
                  MsProviderCollection& ms_provider_collection);

  void StartInversion() final;
  size_t GridMeasurementSet(const MsProviderCollection::MsData& ms_data) final;
  void FinishInversion() final;

  void StartPredict(std::vector<aocommon::Image>&& images) final;
  size_t PredictMeasurementSet(
      const MsProviderCollection::MsData& ms_data) final;
  void FinishPredict() final;

  std::vector<aocommon::Image> ResultImages() final {
    return {std::move(_image)};
  }
  size_t GetSuggestedWGridSize() const final { return 1; }

 private:
  struct InversionSample {
    num_t uInLambda, vInLambda, wInLambda;
    std::complex<float> sample;
  };
  const Resources _resources;
  aocommon::Image _image;
  aocommon::ImageBase<num_t> _sqrtLMTable;
  std::vector<aocommon::ImageBase<num_t>> _layers;
  aocommon::Lane<InversionSample> _inversionLane;

  void InvertMeasurementSet(const MsProviderCollection::MsData& ms_data,
                            size_t ms_index);
  void gridSample(const InversionSample& sample, size_t layer);
  aocommon::ImageBase<num_t> GetSqrtLMLookupTable() const;
  std::unique_ptr<ProgressBar> progress_bar_;
};

}  // namespace wsclean

#endif