1 #include "cheetah/ddtr/astroaccelerate/test/DedispersionStrategyTest.h" 2 #include "cheetah/ddtr/astroaccelerate/DedispersionStrategy.h" 3 #include "cheetah/ddtr/DedispersionTrialPlan.h" 4 #include <pss/astrotypes/units/Units.h> 9 namespace astroaccelerate {
13 DedispersionStrategyTest<T>::DedispersionStrategyTest()
19 DedispersionStrategyTest<T>::~DedispersionStrategyTest()
24 void DedispersionStrategyTest<T>::SetUp()
29 void DedispersionStrategyTest<T>::TearDown()
33 template <
typename NumericalRep>
36 static constexpr
unsigned UNROLLS = 8;
37 static constexpr
unsigned SNUMREG = 8;
38 static constexpr
unsigned SDIVINT = 14;
39 static constexpr
unsigned SDIVINDM = 50;
40 static constexpr
float SFDIVINDM = 50.0f;
41 static constexpr
unsigned MIN_DMS_PER_SPS_RUN = 64;
44 typedef ::testing::Types<unsigned char, unsigned short, float> NumericTypes;
49 typedef TypeParam NumericRep;
51 data::DimensionSize<data::Time> number_of_spectra(1024U);
52 data::DimensionSize<data::Frequency> number_of_channels(512U);
55 auto f1 = data::FrequencyType(1000.0 * pss::astrotypes::units::megahertz);
56 auto f2 = data::FrequencyType(1500.0 * pss::astrotypes::units::megahertz);
57 auto delta = (f2 - f1)/ (
double)number_of_channels;
61 ASSERT_DOUBLE_EQ(0.0, plan.
max_dm().value());
63 plan.
add_dm_range(40 * data::parsecs_per_cube_cm, 100 * data::parsecs_per_cube_cm, 20 * data::parsecs_per_cube_cm);
64 ASSERT_DOUBLE_EQ(100.0, plan.
max_dm().value());
66 plan.
add_dm_range(0 * data::parsecs_per_cube_cm, 40 * data::parsecs_per_cube_cm, 20 * data::parsecs_per_cube_cm);
67 ASSERT_DOUBLE_EQ(100.0, plan.
max_dm().value());
70 ASSERT_EQ(ds.nchans(), 512);
71 ASSERT_EQ(ds.nsamp(), 1024);
72 ASSERT_EQ(ds.tsamp(), 0.001*data::seconds);
78 typedef TypeParam NumericRep;
79 data::DimensionSize<data::Time> number_of_spectra(1024U);
80 data::DimensionSize<data::Frequency> number_of_channels(512U);
83 auto f1 = data::FrequencyType(1000.0 * pss::astrotypes::units::megahertz);
84 auto f2 = data::FrequencyType(1500.0 * pss::astrotypes::units::megahertz);
85 auto delta = (f2 - f1)/ (
double)number_of_channels;
90 ASSERT_DOUBLE_EQ(0.0, plan.
max_dm().value());
92 plan.
add_dm_range(40 * data::parsecs_per_cube_cm, 100 * data::parsecs_per_cube_cm, 20 * data::parsecs_per_cube_cm);
93 ASSERT_DOUBLE_EQ(100.0, plan.
max_dm().value());
95 plan.
add_dm_range(0 * data::parsecs_per_cube_cm, 40 * data::parsecs_per_cube_cm, 20 * data::parsecs_per_cube_cm);
96 ASSERT_DOUBLE_EQ(100.0, plan.
max_dm().value());
98 plan.
add_dm_range(400 * data::parsecs_per_cube_cm, 500 * data::parsecs_per_cube_cm, 10 * data::parsecs_per_cube_cm);
99 ASSERT_DOUBLE_EQ(500.0, plan.
max_dm().value());
102 DedispersionStrategyType ds(tf,plan,128*1024*1024);
103 std::vector<typename DedispersionStrategyType::Dm> user_dm_low = ds.user_dm_low();
104 std::vector<typename DedispersionStrategyType::Dm> user_dm_high = ds.user_dm_high();
105 std::vector<typename DedispersionStrategyType::Dm> user_dm_step = ds.user_dm_step();
107 ASSERT_EQ(user_dm_low[0], 40 * data::parsecs_per_cube_cm);
108 ASSERT_EQ(user_dm_low[1], 0 * data::parsecs_per_cube_cm);
109 ASSERT_EQ(user_dm_low[2], 400 * data::parsecs_per_cube_cm);
110 ASSERT_EQ(user_dm_high[0], 100 * data::parsecs_per_cube_cm);
111 ASSERT_EQ(user_dm_high[1], 40 * data::parsecs_per_cube_cm);
112 ASSERT_EQ(user_dm_high[2], 500 * data::parsecs_per_cube_cm);
113 ASSERT_EQ(user_dm_step[0], 20 * data::parsecs_per_cube_cm);
114 ASSERT_EQ(user_dm_step[1], 20 * data::parsecs_per_cube_cm);
115 ASSERT_EQ(user_dm_step[2], 10 * data::parsecs_per_cube_cm);
116 ASSERT_EQ(ds.nchans(), 512);
117 for(
unsigned i=0; i<ds.range(); ++i)
119 ASSERT_EQ(user_dm_low[0] , ds.dm_low()[0]);
Configuration module to specify Dedispersion Trials.
void set_channel_frequencies_const_width(FrequencyType const &start, FrequencyType const &delta)
Set the frequency index based on evenly spaced channels.
Test class for the DedispersionStrategy class.
void add_dm_range(Dm start, Dm end, Dm step)
get range of DM values
Some limits and constants for FLDO.
TimeType sample_interval() const
Dm max_dm() const
the largest Dm value specified