File: generate_vis_data.cc

package info (click to toggle)
purify 2.0.0-5
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 58,688 kB
  • sloc: cpp: 8,410; python: 375; makefile: 7
file content (46 lines) | stat: -rw-r--r-- 1,772 bytes parent folder | download | duplicates (3)
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
#include "purify/config.h"
#include <array>
#include <memory>
#include <random>
#include "purify/MeasurementOperator.h"
#include "purify/directories.h"
#include "purify/logging.h"
#include "purify/pfitsio.h"
#include "purify/types.h"
#include "purify/utilities.h"

int main(int nargs, char const **args) {
  using namespace purify;
  using namespace purify::notinstalled;
  purify::logging::initialize();
  purify::logging::set_level(purify::default_logging_level());

  std::string const fitsfile = image_filename("M31.fits");
  std::string const inputfile = output_filename("M31_input.fits");

  std::string const kernel = "kb";
  t_real const over_sample = 5.;
  t_int const J = 24;
  t_real const m_over_n = std::stod(static_cast<std::string>(args[1]));
  std::string const test_number = static_cast<std::string>(args[2]);

  std::string const vis_file = output_filename("M31_vis_" + test_number + ".vis");

  auto M31 = pfitsio::read2d(fitsfile);
  t_real const max = M31.array().abs().maxCoeff();
  M31 = M31 * 1. / max;
  pfitsio::write2d(M31.real(), inputfile);
  // Following same formula in matlab example
  t_real const sigma_m = constant::pi / 3;
  // t_int const number_of_vis = std::floor(p * rho * M31.size());
  t_int const number_of_vis = std::floor(m_over_n * M31.size());
  // Generating random uv(w) coverage
  auto uv_data = utilities::random_sample_density(number_of_vis, 0, sigma_m);
  uv_data.units = "radians";

  PURIFY_HIGH_LOG("Number of measurements: {}", uv_data.u.size());
  // uv_data = utilities::uv_symmetry(uv_data); //reflect uv measurements
  MeasurementOperator measurements(uv_data, J, J, kernel, M31.cols(), M31.rows(), 20, over_sample);
  uv_data.vis = measurements.degrid(M31);
  utilities::write_visibility(uv_data, vis_file);
}