PURIFY
Next-generation radio interferometric imaging
Functions
b_utilities Namespace Reference

Functions

void Arguments (benchmark::internal::Benchmark *b)
 
double duration (std::chrono::high_resolution_clock::time_point start, std::chrono::high_resolution_clock::time_point end)
 
bool updateImage (t_uint newSize, Image< t_complex > &image, t_uint &sizex, t_uint &sizey)
 
bool updateEmptyImage (t_uint newSize, Vector< t_complex > &image, t_uint &sizex, t_uint &sizey)
 
bool updateMeasurements (t_uint newSize, utilities::vis_params &data)
 
bool updateMeasurements (t_uint newSize, utilities::vis_params &data, t_real &epsilon, bool newImage, Image< t_complex > &image)
 
std::tuple< utilities::vis_params, t_real > dirty_measurements (Image< t_complex > const &ground_truth_image, t_uint number_of_vis, t_real snr, const t_real &cellsize)
 
utilities::vis_params random_measurements (t_int size, const t_real max_w, const t_int id, const bool cache_visibilities)
 

Function Documentation

◆ Arguments()

void b_utilities::Arguments ( benchmark::internal::Benchmark *  b)

Definition at line 16 of file utilities.cc.

16  {
17  int im_size_max = 4096; // 4096
18  int uv_size_max = 10000000; // 1M, 10M, 100M
19  int kernel_max = 16; // 16
20  for (int i = 128; i <= im_size_max; i *= 2)
21  for (int j = 1000000; j <= uv_size_max; j *= 10)
22  for (int k = 2; k <= kernel_max; k *= 2)
23  if (k * k < i) b->Args({i, j, k});
24 }

◆ dirty_measurements()

std::tuple< utilities::vis_params, t_real > b_utilities::dirty_measurements ( Image< t_complex > const &  ground_truth_image,
t_uint  number_of_vis,
t_real  snr,
const t_real &  cellsize 
)

Definition at line 77 of file utilities.cc.

79  {
80  auto uv_data = random_measurements(number_of_vis);
81  // creating operator to generate measurements
82  auto measurement_op = measurementoperator::init_degrid_operator_2d<Vector<t_complex>>(
83  uv_data, ground_truth_image.rows(), ground_truth_image.cols(), cellsize, cellsize, 2,
84  kernels::kernel::kb, 8, 8, false);
85  // Generates measurements from image
86  uv_data.vis = (*measurement_op) *
87  Image<t_complex>::Map(ground_truth_image.data(), ground_truth_image.size(), 1);
88 
89  // working out value of signal given SNR
90  auto const sigma = utilities::SNR_to_standard_deviation(uv_data.vis, snr);
91  // adding noise to visibilities
92  uv_data.vis = utilities::add_noise(uv_data.vis, 0., sigma);
93  return std::make_tuple(uv_data, sigma);
94 }
utilities::vis_params random_measurements(t_int size, const t_real max_w, const t_int id, const bool cache_visibilities)
Definition: utilities.cc:96
t_real SNR_to_standard_deviation(const Vector< t_complex > &y0, const t_real &SNR)
Converts SNR to RMS noise.
Definition: utilities.cc:101
Vector< t_complex > add_noise(const Vector< t_complex > &y0, const t_complex &mean, const t_real &standard_deviation)
Add guassian noise to vector.
Definition: utilities.cc:113

References purify::utilities::add_noise(), purify::kernels::kb, random_measurements(), and purify::utilities::SNR_to_standard_deviation().

Referenced by updateMeasurements().

◆ duration()

double b_utilities::duration ( std::chrono::high_resolution_clock::time_point  start,
std::chrono::high_resolution_clock::time_point  end 
)

Definition at line 26 of file utilities.cc.

27  {
28  auto elapsed_seconds = std::chrono::duration_cast<std::chrono::duration<double>>(end - start);
29  return elapsed_seconds.count();
30 }

Referenced by BENCHMARK_DEFINE_F(), degrid_operator_ctor(), and wavelet_operator_constructor().

◆ random_measurements()

utilities::vis_params b_utilities::random_measurements ( t_int  size,
const t_real  max_w,
const t_int  id,
const bool  cache_visibilities 
)

Definition at line 96 of file utilities.cc.

97  {
98  utilities::vis_params uv_data;
99 
100  std::stringstream filename;
101  filename << "random_" << size << "_";
102  filename << std::to_string(id) << ".vis";
103  std::string const vis_file = visibility_filename(filename.str());
104  std::ifstream vis_file_str(vis_file);
105 
106  if (cache_visibilities and vis_file_str.good()) {
107  PURIFY_INFO("Reading random visibilities from file {}", vis_file);
108  uv_data = utilities::read_visibility(vis_file, true);
109  uv_data.units = utilities::vis_units::radians;
110  } else {
111  PURIFY_INFO("Generating random visibilities");
112  t_real const sigma_m = constant::pi / 3;
113  uv_data = utilities::random_sample_density(size, 0, sigma_m, max_w);
114  uv_data.units = utilities::vis_units::radians;
115  if (cache_visibilities) {
116  utilities::write_visibility(uv_data, vis_file, true);
117  }
118  }
119  return uv_data;
120 }
#define PURIFY_INFO(...)
Definition: logging.h:195
utilities::vis_params read_visibility(const std::string &vis_name, const bool w_term)
Reads an HDF5 file with u,v visibilities, constructs a vis_params object and returns it.
Definition: h5reader.h:166
void write_visibility(const utilities::vis_params &uv_vis, const std::string &h5name, const bool w_term, const size_t chunksize=0)
Write an HDF5 file with u,v visibilities from a vis_params object.
Definition: h5reader.h:244
const t_real pi
mathematical constant
Definition: types.h:70
utilities::vis_params random_sample_density(const t_int vis_num, const t_real mean, const t_real standard_deviation, const t_real rms_w)
Generates a random visibility coverage.
std::string visibility_filename(std::string const &filename)
Visibility filename.

References purify::constant::pi, PURIFY_INFO, purify::utilities::radians, purify::utilities::random_sample_density(), purify::utilities::read_visibility(), purify::utilities::vis_params::units, purify::visibility_filename(), and purify::utilities::write_visibility().

Referenced by degrid_operator_ctor(), dirty_measurements(), DegridOperatorCtorFixturePar::SetUp(), and updateMeasurements().

◆ updateEmptyImage()

bool b_utilities::updateEmptyImage ( t_uint  newSize,
Vector< t_complex > &  image,
t_uint &  sizex,
t_uint &  sizey 
)

Definition at line 44 of file utilities.cc.

44  {
45  if (sizex == newSize) {
46  return false;
47  }
48  image.resize(newSize * newSize);
49  sizex = newSize;
50  sizey = newSize;
51  return true;
52 }

Referenced by DegridOperatorAdjointFixture::updateImage(), and DegridOperatorAdjointFixturePar::updateImage().

◆ updateImage()

bool b_utilities::updateImage ( t_uint  newSize,
Image< t_complex > &  image,
t_uint &  sizex,
t_uint &  sizey 
)

Definition at line 32 of file utilities.cc.

32  {
33  if (sizex == newSize) {
34  return false;
35  }
36  image = Image<t_complex>::Random(newSize, newSize);
37  sizex = image.cols();
38  sizey = image.rows();
39  t_real const max = image.array().abs().maxCoeff();
40  image = image * 1. / max;
41  return true;
42 }

Referenced by AlgoFixture::SetUp(), AlgoFixtureMPI::SetUp(), DegridOperatorFixture::SetUp(), DegridOperatorFixturePar::SetUp(), DegridOperatorDirectFixture::updateImage(), and DegridOperatorDirectFixturePar::updateImage().

◆ updateMeasurements() [1/2]

bool b_utilities::updateMeasurements ( t_uint  newSize,
utilities::vis_params data 
)

Definition at line 54 of file utilities.cc.

54  {
55  if (data.vis.size() == newSize) {
56  return false;
57  }
58  data = b_utilities::random_measurements(newSize);
59  return true;
60 }
Vector< t_complex > vis
Definition: uvw_utilities.h:22

References random_measurements(), and purify::utilities::vis_params::vis.

Referenced by AlgoFixture::SetUp(), AlgoFixtureMPI::SetUp(), DegridOperatorFixture::SetUp(), DegridOperatorCtorFixturePar::SetUp(), and DegridOperatorFixturePar::SetUp().

◆ updateMeasurements() [2/2]

bool b_utilities::updateMeasurements ( t_uint  newSize,
utilities::vis_params data,
t_real &  epsilon,
bool  newImage,
Image< t_complex > &  image 
)

Definition at line 62 of file utilities.cc.

63  {
64  if (data.vis.size() == newSize && !newImage) {
65  return false;
66  }
67  const t_real FoV = 1; // deg
68  const t_real cellsize = FoV / image.size() * 60. * 60.;
69  std::tuple<utilities::vis_params, t_real> temp =
70  b_utilities::dirty_measurements(image, newSize, 30., cellsize);
71  data = std::get<0>(temp);
72  epsilon = utilities::calculate_l2_radius(data.vis.size(), std::get<1>(temp));
73 
74  return true;
75 }
std::tuple< utilities::vis_params, t_real > dirty_measurements(Image< t_complex > const &ground_truth_image, t_uint number_of_vis, t_real snr, const t_real &cellsize)
Definition: utilities.cc:77
t_real calculate_l2_radius(const t_uint y_size, const t_real &sigma, const t_real &n_sigma, const std::string distirbution)
A function that calculates the l2 ball radius for sopt.
Definition: utilities.cc:75

References purify::utilities::calculate_l2_radius(), dirty_measurements(), and purify::utilities::vis_params::vis.