Cheetah - SKA - PSS - Prototype Time Domain Search Pipeline
TimeFrequencyMetadataTest.cpp
1 /*
2  * The MIT License (MIT)
3  *
4  * Copyright (c) 2016 The SKA organisation
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a copy
7  * of this software and associated documentation files (the "Software"), to deal
8  * in the Software without restriction, including without limitation the rights
9  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10  * copies of the Software, and to permit persons to whom the Software is
11  * furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in all
14  * copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22  * SOFTWARE.
23  */
24 #include "cheetah/data/test/TimeFrequencyMetadataTest.h"
25 #include "cheetah/data/TimeFrequencyMetadata.h"
26 
27 
28 namespace ska {
29 namespace cheetah {
30 namespace data {
31 namespace test {
32 
33 
34 TimeFrequencyMetadataTest::TimeFrequencyMetadataTest()
35  : ::testing::Test()
36 {
37 }
38 
39 TimeFrequencyMetadataTest::~TimeFrequencyMetadataTest()
40 {
41 }
42 
43 void TimeFrequencyMetadataTest::SetUp()
44 {
45 }
46 
47 void TimeFrequencyMetadataTest::TearDown()
48 {
49 }
50 
51 TEST_F(TimeFrequencyMetadataTest, test_start_time)
52 {
53  typedef TimeFrequencyMetadata DataType;
54 
55  DataType meta;
56  typename utils::ModifiedJulianClock::time_point epoch(utils::julian_day(50000.0));
57  typename DataType::TimeIntervalType interval(1.0 * boost::units::si::milli * boost::units::si::seconds);
58  meta.sample_interval(interval);
59  meta.start_time(epoch);
60  ASSERT_EQ(meta.start_time(), epoch);
61 }
62 
63 TEST_F(TimeFrequencyMetadataTest, test_start_time_offset)
64 {
65  typedef TimeFrequencyMetadata DataType;
66 
67  DataType meta;
68  typename utils::ModifiedJulianClock::time_point epoch(utils::julian_day(50000.0));
69  typename DataType::TimeIntervalType interval(1.0 * boost::units::si::milli * boost::units::si::seconds);
70  meta.sample_interval(interval);
71  meta.start_time(epoch);
72  epoch += std::chrono::duration<double>(meta.sample_interval().value()*std::size_t(12));
73  ASSERT_EQ(meta.start_time(12L), epoch);
74 }
75 
76 TEST_F(TimeFrequencyMetadataTest, test_copy)
77 {
78  typedef TimeFrequencyMetadata DataType;
79  data::DimensionSize<data::Frequency> number_of_channels(10U);
80 
81  DataType meta;
82  auto f1 = typename DataType::FrequencyType(10.0 * boost::units::si::hertz);
83  auto f2 = typename DataType::FrequencyType(20.0 * boost::units::si::hertz);
84  typename utils::ModifiedJulianClock::time_point epoch(utils::julian_day(50000.0));
85  auto delta = (f2 - f1)/ (double)(number_of_channels-1);
86 
87  meta.channel_frequencies_const_width( f1, delta, number_of_channels );
88  meta.start_time(epoch);
89 
90  DataType meta_copy(meta);
91  ASSERT_EQ(meta_copy.channel_frequencies().size(), number_of_channels);
92  for(std::size_t i =0; i < number_of_channels; ++i) {
93  ASSERT_EQ(meta_copy.channel_frequencies()[i], meta.channel_frequencies()[i]);
94  }
95  ASSERT_EQ(meta_copy.start_time(), meta.start_time());
96 }
97 
98 TEST_F(TimeFrequencyMetadataTest, test_low_high_freq)
99 {
100  typedef TimeFrequencyMetadata DataType;
101  data::DimensionSize<data::Frequency> number_of_channels(10U);
102 
103  DataType meta;
104  typedef std::pair<typename DataType::FrequencyType, typename DataType::FrequencyType> ReturnType;
105 
106  // eexpect 0 values if channel_freq are not set
107  ReturnType r = meta.low_high_frequencies();
108  ASSERT_EQ(0.0, r.first.value());
109  ASSERT_EQ(0.0, r.second.value());
110 
111  auto f1 = typename DataType::FrequencyType(10.0 * boost::units::si::hertz);
112  auto f2 = typename DataType::FrequencyType(20.0 * boost::units::si::hertz);
113  auto delta = (f2 - f1)/ (double)(number_of_channels-1);
114 
115  // low to haigh channel freq ordering
116  meta.channel_frequencies_const_width( f1, delta, number_of_channels );
117  ASSERT_EQ(meta.channel_frequencies().size(), number_of_channels);
118  r = meta.low_high_frequencies();
119  ASSERT_EQ(f1, r.first);
120  ASSERT_EQ(f2, r.second);
121 
122  // high to low metareq ordering
123  meta.channel_frequencies_const_width( f2, -1.0 *delta, number_of_channels );
124  ASSERT_EQ(meta.channel_frequencies().size(), number_of_channels);
125  r = meta.low_high_frequencies();
126  ASSERT_EQ(f1, r.first);
127  ASSERT_EQ(f2, r.second);
128 
129 }
130 
131 } // namespace test
132 } // namespace data
133 } // namespace cheetah
134 } // namespace ska
Some limits and constants for FLDO.
Definition: Brdz.h:35