File: uvfits.cc

package info (click to toggle)
purify 5.0.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 186,836 kB
  • sloc: cpp: 17,731; python: 510; xml: 182; makefile: 7; sh: 6
file content (72 lines) | stat: -rw-r--r-- 2,787 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
65
66
67
68
69
70
71
72
#include "purify/config.h"
#include "purify/types.h"
#include "catch2/catch_all.hpp"
#include "purify/logging.h"

#include <iostream>
#include "purify/directories.h"
#include "purify/uvfits.h"
using namespace purify;
using Catch::Approx;

TEST_CASE("readfile") {
  purify::logging::set_level("debug");
  const std::string filename = atca_filename("0332-391");
  SECTION("filter") {
    const auto uvfits = pfitsio::read_uvfits(filename + ".uvfits", true, stokes::I);
    const auto vis = utilities::read_visibility(filename + ".vis", true);
    REQUIRE(299792458. == constant::c);
    REQUIRE(1483999958.029309988 == Approx(uvfits.frequencies(0)).epsilon(1e-12));
    REQUIRE(13 == uvfits.frequencies.size());
    CHECK(uvfits.size() / 22675 == 10);
    CHECK(vis.size() / 22675 == 10);
    CHECK(uvfits.size() == vis.size());
    for (int i = 0; i < uvfits.size(); i++) {
      CAPTURE(i);
      CAPTURE(vis.u(i));
      CAPTURE(uvfits.u(i));
      CAPTURE(vis.v(i));
      CAPTURE(uvfits.v(i));
      CAPTURE(vis.w(i));
      CAPTURE(uvfits.w(i));
      CAPTURE(vis.vis(i));
      CAPTURE(uvfits.vis(i));
      CAPTURE(vis.weights(i));
      CAPTURE(uvfits.weights(i));
      REQUIRE(std::abs((uvfits.u(i) - vis.u(i)) / vis.u(i)) < 1e-4);
      REQUIRE(std::abs((uvfits.v(i) - vis.v(i)) / vis.v(i)) < 1e-4);
      REQUIRE(std::abs((uvfits.w(i) - vis.w(i)) / vis.w(i)) < 1e-4);
      if (std::abs(vis.weights(i)) > 0)
        REQUIRE(std::abs((uvfits.weights(i) - vis.weights(i)) / vis.weights(i)) < 1e-4);
      if (std::abs(uvfits.weights(i)) > 0)
        REQUIRE(std::abs((uvfits.weights(i) - vis.weights(i)) / uvfits.weights(i)) < 1e-4);
      if (std::abs(vis.vis(i)) > 0)
        REQUIRE(std::abs((uvfits.vis(i) - vis.vis(i)) / vis.vis(i)) < 1e-4);
      if (std::abs(uvfits.vis(i)) > 0)
        REQUIRE(std::abs((uvfits.vis(i) - vis.vis(i)) / uvfits.vis(i)) < 1e-4);
    }
  }
  SECTION("no_filter") {
    const auto uvfits = pfitsio::read_uvfits(filename + ".uvfits", false, stokes::I);
    const auto vis = utilities::read_visibility(filename + "_nofilter.vis", true);
    REQUIRE(299792458. == constant::c);
    REQUIRE(1483999958.029309988 == Approx(uvfits.frequencies(0)).epsilon(1e-12));
    REQUIRE(uvfits.size() == vis.size());
    for (int i = 0; i < uvfits.size(); i++) {
      CAPTURE(i);
      CAPTURE(vis.u(i));
      CAPTURE(uvfits.u(i));
      CAPTURE(vis.v(i));
      CAPTURE(uvfits.v(i));
      CAPTURE(vis.w(i));
      CAPTURE(uvfits.w(i));
      CAPTURE(vis.vis(i));
      CAPTURE(uvfits.vis(i));
      CAPTURE(vis.weights(i));
      CAPTURE(uvfits.weights(i));
      REQUIRE(uvfits.u(i) == Approx(vis.u(i)).epsilon(1e-4));
      REQUIRE(uvfits.v(i) == Approx(vis.v(i)).epsilon(1e-4));
      REQUIRE(uvfits.w(i) == Approx(vis.w(i)).epsilon(1e-4));
    }
  }
}