24 #include "cheetah/ddtr/test/DedispersionTrialPlanTest.h" 25 #include "cheetah/ddtr/DedispersionTrialPlan.h" 26 #include "panda/Log.h" 34 DedispersionTrialPlanTest::DedispersionTrialPlanTest()
39 DedispersionTrialPlanTest::~DedispersionTrialPlanTest()
43 void DedispersionTrialPlanTest::SetUp()
47 void DedispersionTrialPlanTest::TearDown()
51 TEST_F(DedispersionTrialPlanTest, test_dm_constant)
53 DedispersionTrialPlan plan(
"test");
54 ASSERT_DOUBLE_EQ(plan.dm_constant().value(), data::dm_constant::s_mhz::dm_constant.value());
57 TEST_F(DedispersionTrialPlanTest, test_max_dm)
59 DedispersionTrialPlan plan(
"test");
60 ASSERT_DOUBLE_EQ(0.0, plan.max_dm().value());
62 plan.add_dm_range(40 * data::parsecs_per_cube_cm, 100 * data::parsecs_per_cube_cm, 20 * data::parsecs_per_cube_cm);
63 ASSERT_DOUBLE_EQ(100.0, plan.max_dm().value());
65 plan.add_dm_range(0 * data::parsecs_per_cube_cm, 40 * data::parsecs_per_cube_cm, 20 * data::parsecs_per_cube_cm);
66 ASSERT_DOUBLE_EQ(100.0, plan.max_dm().value());
68 plan.add_dm_range(400 * data::parsecs_per_cube_cm, 500 * data::parsecs_per_cube_cm, 10 * data::parsecs_per_cube_cm);
69 ASSERT_DOUBLE_EQ(500.0, plan.max_dm().value());
72 DedispersionConfig dd_config(800 * data::parsecs_per_cube_cm, 900 * data::parsecs_per_cube_cm, 50 * data::parsecs_per_cube_cm);
73 plan.dedispersion_config(dd_config);
74 ASSERT_DOUBLE_EQ(900.0, plan.max_dm().value());
77 TEST_F(DedispersionTrialPlanTest, test_maximum_delay)
79 DedispersionTrialPlan plan(
"test");
80 plan.add_dm_range(40 * data::parsecs_per_cube_cm, 100 * data::parsecs_per_cube_cm, 20 * data::parsecs_per_cube_cm);
81 ASSERT_EQ(4, plan.dm_trials().size());
83 boost::units::quantity<data::MegaHertz, double> low(100.0 * boost::units::si::mega * boost::units::si::hertz);
84 boost::units::quantity<data::MegaHertz, double> high(300.0 * boost::units::si::mega * boost::units::si::hertz);
85 boost::units::quantity<boost::units::si::time, double> delay = plan.maximum_delay(low, high);
86 ASSERT_DOUBLE_EQ(36.883356385430226, delay.value());
90 TEST_F(DedispersionTrialPlanTest, test_maximum_delay_offset)
92 DedispersionTrialPlan plan(
"test");
93 plan.add_dm_range(40 * data::parsecs_per_cube_cm, 100 * data::parsecs_per_cube_cm, 20 * data::parsecs_per_cube_cm);
95 data::TimeFrequency<Cpu, uint16_t> tf(data::DimensionSize<data::Frequency>(100), data::DimensionSize<data::Time>(100));
96 typedef typename data::TimeFrequency<Cpu, uint16_t>::TimeType TimeType;
97 tf.sample_interval( TimeType(100.0 * boost::units::si::milli * boost::units::si::seconds) );
98 tf.set_channel_frequencies_const_width(100.0 * boost::units::si::mega * boost::units::si::hertz, 2.0 * boost::units::si::mega * boost::units::si::hertz);
99 auto offset = plan.maximum_delay_offset(tf);
100 ASSERT_EQ(offset,369);
103 TEST_F(DedispersionTrialPlanTest, test_generate_dmtrials_metadata_one_range)
105 DedispersionTrialPlan plan(
"test");
106 plan.add_dm_range(0 * data::parsecs_per_cube_cm, 10 * data::parsecs_per_cube_cm, 1 * data::parsecs_per_cube_cm);
108 data::TimeFrequency<Cpu, uint16_t> tf(data::DimensionSize<data::Frequency>(77), data::DimensionSize<data::Time>(131072));
109 typedef typename data::TimeFrequency<Cpu, uint16_t>::TimeType TimeType;
110 tf.sample_interval( TimeType(34.567 * boost::units::si::micro * boost::units::si::seconds) );
111 tf.set_channel_frequencies_const_width(350.0 * boost::units::si::mega * boost::units::si::hertz, -0.028935 * boost::units::si::mega * boost::units::si::hertz);
112 std::size_t nspectra = tf.number_of_spectra();
113 data::DimensionSize<data::Time> overlap = plan.maximum_delay_offset(tf);
114 ASSERT_LT(overlap, nspectra);
115 std::shared_ptr<data::DmTrialsMetadata> dm_trials_metadata;
116 dm_trials_metadata = plan.generate_dmtrials_metadata(tf.sample_interval(), nspectra, overlap);
117 std::size_t number_dm_trial_values = 11;
118 ASSERT_EQ(dm_trials_metadata->size(), number_dm_trial_values);
119 ASSERT_EQ(tf.sample_interval(), dm_trials_metadata->fundamental_sampling_interval());
120 ASSERT_EQ(dm_trials_metadata->duration(), (nspectra - overlap) * tf.sample_interval());
123 TEST_F(DedispersionTrialPlanTest, test_generate_dmtrials_metadata_two_ranges)
125 DedispersionTrialPlan plan(
"test");
126 plan.add_dm_range(0 * data::parsecs_per_cube_cm, 10 * data::parsecs_per_cube_cm, 1 * data::parsecs_per_cube_cm);
127 plan.add_dm_range(0 * data::parsecs_per_cube_cm, 100 * data::parsecs_per_cube_cm, 1 * data::parsecs_per_cube_cm);
129 data::TimeFrequency<Cpu, uint16_t> tf(data::DimensionSize<data::Frequency>(77), data::DimensionSize<data::Time>(670400));
130 typedef typename data::TimeFrequency<Cpu, uint16_t>::TimeType TimeType;
131 tf.sample_interval( TimeType(34.567 * boost::units::si::micro * boost::units::si::seconds) );
132 tf.set_channel_frequencies_const_width(350.0 * boost::units::si::mega * boost::units::si::hertz, -0.028935 * boost::units::si::mega * boost::units::si::hertz);
133 std::size_t nspectra = tf.number_of_spectra();
134 data::DimensionSize<data::Time> overlap = plan.maximum_delay_offset(tf);
136 ASSERT_LT(overlap, nspectra);
137 std::shared_ptr<data::DmTrialsMetadata> dm_trials_metadata;
138 dm_trials_metadata = plan.generate_dmtrials_metadata(tf.sample_interval(), nspectra, overlap);
139 std::size_t number_dm_trial_values = 112;
140 ASSERT_EQ(dm_trials_metadata->size(), number_dm_trial_values);
141 ASSERT_EQ(tf.sample_interval(), dm_trials_metadata->fundamental_sampling_interval());
142 ASSERT_EQ(dm_trials_metadata->duration(), (nspectra - overlap) * tf.sample_interval());
145 TEST_F(DedispersionTrialPlanTest, test_generate_dmtrials_metadata_exception_catch)
147 DedispersionTrialPlan plan(
"test");
148 plan.add_dm_range(0 * data::parsecs_per_cube_cm, 10 * data::parsecs_per_cube_cm, 1 * data::parsecs_per_cube_cm);
150 data::TimeFrequency<Cpu, uint16_t> tf(data::DimensionSize<data::Frequency>(7776), data::DimensionSize<data::Time>(27000));
151 typedef typename data::TimeFrequency<Cpu, uint16_t>::TimeType TimeType;
152 tf.sample_interval( TimeType(34.567 * boost::units::si::micro * boost::units::si::seconds) );
153 tf.set_channel_frequencies_const_width(350.0 * boost::units::si::mega * boost::units::si::hertz, -0.028935 * boost::units::si::mega * boost::units::si::hertz);
154 std::size_t nspectra = tf.number_of_spectra();
155 data::DimensionSize<data::Time> overlap = plan.maximum_delay_offset(tf);
156 ASSERT_GT(overlap, nspectra);
157 ASSERT_THROW(plan.generate_dmtrials_metadata(tf.sample_interval(), nspectra, overlap), panda::Error);
160 TEST_F(DedispersionTrialPlanTest, test_generate_dmtrials_metadata_no_exception)
162 DedispersionTrialPlan plan(
"test");
163 plan.add_dm_range(0 * data::parsecs_per_cube_cm, 10 * data::parsecs_per_cube_cm, 1 * data::parsecs_per_cube_cm);
165 data::TimeFrequency<Cpu, uint16_t> tf(data::DimensionSize<data::Frequency>(7776), data::DimensionSize<data::Time>(131072));
166 typedef typename data::TimeFrequency<Cpu, uint16_t>::TimeType TimeType;
167 tf.sample_interval( TimeType(34.567 * boost::units::si::micro * boost::units::si::seconds) );
168 tf.set_channel_frequencies_const_width(350.0 * boost::units::si::mega * boost::units::si::hertz, -0.028935 * boost::units::si::mega * boost::units::si::hertz);
169 std::size_t nspectra = tf.number_of_spectra();
170 data::DimensionSize<data::Time> overlap = plan.maximum_delay_offset(tf);
171 ASSERT_LT(overlap, nspectra);
172 ASSERT_NO_THROW(plan.generate_dmtrials_metadata(tf.sample_interval(), nspectra, overlap));
Some limits and constants for FLDO.