Cheetah - SKA - PSS - Prototype Time Domain Search Pipeline
MetricsTest.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/rfim/test/MetricsTest.h"
25 
26 
27 namespace ska {
28 namespace cheetah {
29 namespace rfim {
30 namespace test {
31 
32 
33 MetricsTest::MetricsTest()
34  : ::testing::Test()
35 {
36 }
37 
38 MetricsTest::~MetricsTest()
39 {
40 }
41 
42 void MetricsTest::SetUp()
43 {
44 }
45 
46 void MetricsTest::TearDown()
47 {
48 }
49 
50 TEST_F(MetricsTest, test_empty)
51 {
52  typedef rfim::Metrics::TimeFrequencyFlagsType Flags;
53  Flags expected;
54  expected.reset();
55  Flags given;
56  given.reset();
57  rfim::Metrics m(expected, given);
58  ASSERT_EQ(m.num_correct(), 0U);
59  ASSERT_EQ(m.num_rfi(), 0U);
60  ASSERT_EQ(m.num_false_positives(), 0U);
61  ASSERT_EQ(m.num_false_negatives(), 0U);
62 }
63 
64 TEST_F(MetricsTest, test_true_positive)
65 {
66  typedef rfim::Metrics::TimeFrequencyFlagsType Flags;
67  DimensionSize<data::Time> num_spectra(20);
68  DimensionSize<data::Frequency> num_channels(10);
69  Flags expected(num_spectra, num_channels);
70  expected.reset();
71  expected[DimensionIndex<data::Time>(2)][DimensionIndex<data::Frequency>(3)] = true;
72  expected[DimensionIndex<data::Time>(4)][DimensionIndex<data::Frequency>(4)] = true;
73  Flags given(num_spectra, num_channels);
74  given.reset();
75  given[DimensionIndex<data::Time>(2)][DimensionIndex<data::Frequency>(3)] = true;
76  given[DimensionIndex<data::Time>(4)][DimensionIndex<data::Frequency>(4)] = true;
77 
78  rfim::Metrics m(expected, given);
79  ASSERT_EQ(m.num_correct(), 2U);
80  ASSERT_DOUBLE_EQ(m.correct_percentage(), 100.0);
81  ASSERT_EQ(m.num_rfi(), 2U);
82  ASSERT_EQ(m.num_false_positives(), 0U);
83  ASSERT_DOUBLE_EQ(m.false_positives_percentage(), 0.0);
84  ASSERT_EQ(m.num_false_negatives(), 0U);
85  ASSERT_DOUBLE_EQ(m.false_negatives_percentage(), 0.0);
86 }
87 
88 TEST_F(MetricsTest, test_false_positive_rfi_present)
89 {
90  typedef rfim::Metrics::TimeFrequencyFlagsType Flags;
91  DimensionSize<data::Time> num_spectra(20);
92  DimensionSize<data::Frequency> num_channels(10);
93  Flags expected(num_spectra, num_channels);
94  expected.reset();
95  expected[DimensionIndex<data::Time>(2)][DimensionIndex<data::Frequency>(3)] = true;
96  expected[DimensionIndex<data::Time>(4)][DimensionIndex<data::Frequency>(4)] = true;
97  Flags given(num_spectra, num_channels);
98  given.reset();
99  given[DimensionIndex<data::Time>(2)][DimensionIndex<data::Frequency>(6)] = true;
100  given[DimensionIndex<data::Time>(4)][DimensionIndex<data::Frequency>(9)] = true;
101 
102  rfim::Metrics m(expected, given);
103  ASSERT_EQ(m.num_correct(), 0U);
104  ASSERT_DOUBLE_EQ(m.rfi_detected_percentage(), 0.0);
105  ASSERT_EQ(m.num_rfi(), 2U);
106  ASSERT_EQ(m.num_false_positives(), 2U);
107  ASSERT_DOUBLE_EQ(m.false_positives_percentage(), (2.0/expected.data_size()) * 100.0);
108  ASSERT_EQ(m.num_false_negatives(), 2U);
109  ASSERT_DOUBLE_EQ(m.false_negatives_percentage(), (2.0/expected.data_size()) * 100.0);
110  ASSERT_DOUBLE_EQ(m.correct_percentage(), 100.0*(((double)(num_channels * num_spectra) - 4)/(num_channels * num_spectra)));
111 }
112 
113 TEST_F(MetricsTest, test_false_positive_no_rfi_present)
114 {
115  typedef rfim::Metrics::TimeFrequencyFlagsType Flags;
116  DimensionSize<data::Time> num_spectra(20);
117  DimensionSize<data::Frequency> num_channels(10);
118  Flags expected(num_spectra, num_channels);
119  expected.reset();
120  Flags given(num_spectra, num_channels);
121  given.reset();
122  given[DimensionIndex<data::Time>(2)][DimensionIndex<data::Frequency>(6)] = true;
123  given[DimensionIndex<data::Time>(4)][DimensionIndex<data::Frequency>(9)] = true;
124 
125  rfim::Metrics m(expected, given);
126  ASSERT_EQ(m.num_correct(), 0U);
127  ASSERT_DOUBLE_EQ(m.rfi_detected_percentage(), 100.0);
128  ASSERT_EQ(m.num_rfi(), 0U);
129  ASSERT_EQ(m.num_false_positives(), 2U);
130  ASSERT_DOUBLE_EQ(m.false_positives_percentage(), (2.0/expected.data_size()) * 100.0);
131  ASSERT_EQ(m.num_false_negatives(), 0U);
132  ASSERT_DOUBLE_EQ(m.false_negatives_percentage(), 0.0);
133  ASSERT_DOUBLE_EQ(m.correct_percentage(), 100.0*(((double)(num_channels * num_spectra) - 2)/(num_channels * num_spectra)));
134 }
135 
136 TEST_F(MetricsTest, test_no_detections_rfi_present)
137 {
138  typedef rfim::Metrics::TimeFrequencyFlagsType Flags;
139  DimensionSize<data::Time> num_spectra(20);
140  DimensionSize<data::Frequency> num_channels(10);
141  Flags expected(num_spectra, num_channels);
142  expected.reset();
143  expected[DimensionIndex<data::Time>(2)][DimensionIndex<data::Frequency>(3)] = true;
144  expected[DimensionIndex<data::Time>(4)][DimensionIndex<data::Frequency>(4)] = true;
145  Flags given(num_spectra, num_channels);
146  given.reset();
147 
148  rfim::Metrics m(expected, given);
149  ASSERT_EQ(m.num_correct(), 0U);
150  ASSERT_DOUBLE_EQ(m.rfi_detected_percentage(), 0.0);
151  ASSERT_EQ(m.num_rfi(), 2U);
152  ASSERT_EQ(m.num_false_positives(), 0U);
153  ASSERT_DOUBLE_EQ(m.false_positives_percentage(), (0.0/expected.data_size()) * 100.0);
154  ASSERT_EQ(m.num_false_negatives(), 2U);
155  ASSERT_DOUBLE_EQ(m.false_negatives_percentage(), (2.0/expected.data_size()) * 100.0);
156  ASSERT_DOUBLE_EQ(m.correct_percentage(), 100.0*(((double)(num_channels * num_spectra) - 2)/(num_channels * num_spectra)));
157 }
158 
159 } // namespace test
160 } // namespace rfim
161 } // namespace cheetah
162 } // namespace ska
Some limits and constants for FLDO.
Definition: Brdz.h:35