24 #include "cheetah/pipeline/test/AccelerationSearchTest.h" 25 #include "cheetah/pipeline/AccelerationSearch.h" 26 #include "cheetah/pipeline/CheetahConfig.h" 27 #include "cheetah/data/TimeFrequency.h" 28 #include "cheetah/data/Units.h" 29 #include "cheetah/data/DedispersionMeasure.h" 30 #include "cheetah/ddtr/DedispersionConfig.h" 31 #include "cheetah/generators/GaussianNoise.h" 32 #include "cheetah/generators/GaussianNoiseConfig.h" 42 AccelerationSearchTest::AccelerationSearchTest()
47 AccelerationSearchTest::~AccelerationSearchTest()
51 void AccelerationSearchTest::SetUp()
55 void AccelerationSearchTest::TearDown()
60 template<
typename NumericalT>
61 template<
typename SiftHandlerT>
62 typename TestAccelerationSearchTraitsBase<NumericalT>::template AccelerationTestHandler<SiftHandlerT>* TestAccelerationSearchTraitsBase<NumericalT>::create_acceleration_search_algo(AccelerationSearchAlgoConfig
const&, SiftHandlerT& handler)
64 return new AccelerationTestHandler<SiftHandlerT>(handler);
67 template<
typename NumericalT>
68 template<
typename SiftHandlerT>
69 TestAccelerationSearchTraitsBase<NumericalT>::AccelerationTestHandler<SiftHandlerT>::AccelerationTestHandler(SiftHandlerT& handler)
74 template<
typename NumericalT>
75 template<
typename SiftHandlerT>
76 void TestAccelerationSearchTraitsBase<NumericalT>::AccelerationTestHandler<SiftHandlerT>::operator()(std::shared_ptr<TestAccelerationSearchTraitsBase<NumericalT>::DmTimeType>
const& data)
78 std::lock_guard<std::mutex> lock(_acceleration_data_mutex);
79 _received_data.push_back(data);
80 std::shared_ptr<data::Ccl> output_data(
new data::Ccl());
81 _handler(output_data);
82 _sift_handler_called =
true;
83 _acceleration_wait.notify_all();
86 template<
typename NumericalT>
87 template<
typename SiftHandlerT>
88 bool TestAccelerationSearchTraitsBase<NumericalT>::AccelerationTestHandler<SiftHandlerT>::wait_sift_handler_called()
const 90 std::unique_lock<std::mutex> lock(_acceleration_data_mutex);
91 _acceleration_wait.wait_for(lock, std::chrono::seconds(5), [
this] {
return _sift_handler_called; });
92 return _sift_handler_called;
95 template<
typename NumericalT>
96 TestAccelerationSearchTraits<NumericalT>::TestHandler::TestHandler(CheetahConfig<NumericalT>
const& config, BeamConfig<NumericalT>
const& beam_config, DedispersionHandler dm_handler)
97 : BaseT(config, beam_config, dm_handler)
101 template<
typename NumericalT>
104 std::lock_guard<std::mutex> lock(_dedispersion_data_mutex);
105 _received_tf_data.push_back(data.shared_from_this());
107 dm_trial_metadata->emplace_back(10 * data::parsecs_per_cube_cm);
108 std::shared_ptr<DmTrialsType> dm_trials_ptr = DmTrialsType::make_shared(dm_trial_metadata, data.
start_time());
109 this->_dm_handler(dm_trials_ptr);
110 _dm_handler_called =
true;
111 _dedispersion_wait.notify_all();
114 template<
typename NumericalT>
117 std::unique_lock<std::mutex> lock(_dedispersion_data_mutex);
118 _dedispersion_wait.wait_for(lock, std::chrono::seconds(5), [
this] {
return _dm_handler_called; });
119 return _dm_handler_called;
122 template<
typename NumericalT>
125 std::lock_guard<std::mutex> lock(_fldo_data_mutex);
126 _candidate_data.push_back(data);
127 _fldo_handler_called =
true;
128 _fldo_wait.notify_all();
131 template<
typename NumericalT>
134 std::unique_lock<std::mutex> lock(_fldo_data_mutex);
135 _fldo_wait.wait_for(lock, std::chrono::seconds(5), [
this] {
return _fldo_handler_called; });
136 return _fldo_handler_called;
139 template<
typename NumericalT>
146 template<
typename NumericalT>
147 template<
typename DmHandlerT>
154 template<
typename NumericalT,
typename AccelerationSearchTraitsT>
155 class TestAccelerationSearch :
public AccelerationSearch<NumericalT, AccelerationSearchTraitsT>
161 using has_create_fldo_handler_t =
typename BaseT::template has_create_fldo_handler_t<T>;
168 struct AccelerationSearchTraits_B :
public AccelerationSearchTraits_A
170 typedef uint8_t NumericalT;
178 typedef TestAccelerationSearch<uint8_t, AccelerationSearchTraits_A> ClassTypeA;
179 static_assert(!panda::HasMethod<AccelerationSearchTraits_A, ClassTypeA::has_create_fldo_handler_t>::value,
"");
181 typedef TestAccelerationSearch<uint8_t, AccelerationSearchTraits_B> ClassTypeB;
182 static_assert(panda::HasMethod<AccelerationSearchTraits_B, ClassTypeB::has_create_fldo_handler_t>::value,
"");
185 typedef TestAccelerationSearch<uint8_t, TestAccelerationSearchTraits<uint8_t>> ClassTypeC;
191 template<
typename NumericalT,
typename AccelerationSearchTraitsT>
198 typedef typename TimeFrequencyType::DataType DataType;
206 config.
sps_config().dedispersion_config(dd_config_low);
207 dd_config_low.
dm_start(ddtr::DedispersionConfig::Dm(0.0 * data::parsecs_per_cube_cm));
208 dd_config_low.
dm_end(ddtr::DedispersionConfig::Dm(100.0 * data::parsecs_per_cube_cm));
209 dd_config_low.
dm_step(ddtr::DedispersionConfig::Dm(0.1 * data::parsecs_per_cube_cm));
224 config.
sps_config().set_dedispersion_samples(1<<18);
227 config.
psbc_config().dump_time(0.0001 * data::seconds);
230 config.
sift_config().template config<sift::simple_sift::Config>().active(
true);
233 config.
fldo_config().template config<fldo::cuda::Config>().active(
true);
237 AccelerationSearchType pipeline(config, beam_config);
243 noise_config.mean(96.0);
244 noise_config.std_deviation(10.0);
247 typename utils::ModifiedJulianClock::time_point epoch(utils::julian_day(50000.0));
249 double tsamp_us = 64.0;
252 std::size_t total_nsamps = std::size_t(1.0 / (tsamp_us * 1e-6));
253 data::DimensionSize<data::Time> number_of_samples(1000);
254 data::DimensionSize<data::Frequency> number_of_channels(1024);
255 std::size_t loop_count = total_nsamps/number_of_samples + 10;
256 for (std::size_t ii=0; ii<loop_count; ++ii)
258 auto tf = std::make_shared<TimeFrequencyType>(number_of_samples, number_of_channels);
259 auto f1 =
typename TimeFrequencyType::FrequencyType(f_high * boost::units::si::giga * boost::units::si::hertz);
260 auto f2 =
typename TimeFrequencyType::FrequencyType(f_low * boost::units::si::giga * boost::units::si::hertz);
261 auto delta = (f2 - f1)/ (
double)number_of_channels;
262 tf->set_channel_frequencies_const_width( f1, delta );
263 tf->sample_interval(
typename TimeFrequencyType::TimeType(tsamp_us * boost::units::si::micro * data::seconds));
264 tf->start_time(epoch);
265 epoch += std::chrono::duration<double>(tf->sample_interval().value()*number_of_samples);
270 auto const& acceleration_search_pipeline_object = pipeline.acceleration_search_pipeline();
274 ASSERT_TRUE(acceleration_search_pipeline_object.wait_sift_handler_called());
275 ASSERT_TRUE(dedispersion_pipeline_object.wait_dedispersion_handler_called());
276 ASSERT_TRUE(fldo_pipeline_object.wait_fldo_handler_called());
sift::ConfigType const & sift_config() const
return the sift module specific configuration parameters
The acceleration search pipeline.
Dm dm_start() const
the first dm condidate to try
describes dedispersion configuration
psbc::Config const & psbc_config() const
return the psbc module specific configuration parameters
TimePointType const & start_time() const
Some limits and constants for FLDO.
Dm dm_end() const
the last dm condidate to try
sps::ConfigType< PoolManagerType > const & sps_config() const
return the sps module specific configuration parameters
TimeType sample_interval() const
Parse configuration parameters for a single beam in the pipeline instance of cheetah.
Base class for Cheetah Pipeline Handlers.
fldo::ConfigType const & fldo_config() const
return the fldo module specific configuration parameters
Dm dm_step() const
the step size to take in generating dm trials between start and end
void operator()(typename BaseT::TimeFrequencyType &) override
called each time data becomes available