24 #include "cheetah/sps/test_utils/SpsTester.h" 25 #include "cheetah/sps/Sps.h" 26 #include "cheetah/data/RfimFlaggedData.h" 27 #include "cheetah/data/TimeFrequency.h" 28 #include "cheetah/generators/GaussianNoiseConfig.h" 29 #include "cheetah/generators/GaussianNoise.h" 30 #include "cheetah/generators/DispersedPulse.h" 31 #include "cheetah/generators/RfiScenario.h" 40 template<
int ScenarioNum,
typename TimeFrequencyType>
55 template<
int ScenarioNum,
typename TimeFrequencyType>
59 _generator.next(*
this);
62 template<
int ScenarioNum,
typename TimeFrequencyType>
67 template<
typename RfiDataType,
typename TraitsType,
typename PoolType>
68 void test_single_pulse_with_noise(TraitsType& traits, PoolType& pool)
70 auto& api = traits.api(pool);
71 auto& sps_config = traits.config();
73 typedef typename ddtr::DedispersionConfig::Dm Dm;
74 dedispersion_config.
dm_start(Dm(0 * pss::astrotypes::units::parsecs_per_cube_cm));
75 dedispersion_config.
dm_end(Dm(800 * pss::astrotypes::units::parsecs_per_cube_cm));
76 dedispersion_config.
dm_step(Dm(100 * pss::astrotypes::units::parsecs_per_cube_cm));
77 sps_config.dedispersion_config(dedispersion_config);
80 typedef typename SpsType::TimeFrequencyType DataType;
81 pss::astrotypes::DimensionSize<pss::astrotypes::units::Time> chunk_samples(10000);
82 pss::astrotypes::DimensionSize<pss::astrotypes::units::Frequency> number_of_channels(64);
83 std::shared_ptr<DataType> data = DataType::make_shared(chunk_samples, number_of_channels);
88 typedef typename SpsType::TimeFrequencyType DataType;
101 while(!traits.dm_handler_called())
103 auto data = DataType::make_shared(chunk_samples, number_of_channels);
104 data->sample_interval(boost::units::quantity<pss::astrotypes::units::Seconds, double>(0.5 * boost::units::si::milli * boost::units::si::seconds));
105 data->set_channel_frequencies_const_width(data::FrequencyType(1000.0 * boost::units::si::mega * data::hz), data::FrequencyType(-1.0 * boost::units::si::mega * data::hz));
106 std::fill(data->begin(), data->end(), 0);
108 generator.next(*data);
109 RfiDataType Rfidata(*data);
115 ASSERT_TRUE(traits.wait_sp_handler_called());
116 auto sp_data_ptr = traits.sp_data();
117 auto const& sp_data = *sp_data_ptr;
119 ASSERT_GE(sp_data.size(), 1U);
123 template <
typename TestTraits>
129 template <
typename TestTraits>
134 template<
typename TestTraits>
139 template<
typename TestTraits>
145 template<
typename ArchitectureTag,
typename ArchitectureCapability>
153 template<
typename ArchitectureTag,
typename ArchitectureCapability>
158 _config.set_pool(pool);
159 _config.set_dedispersion_samples(1<<16);
160 _api.reset(
new Api(_config,
161 [
this](std::shared_ptr<DmType> data)
166 [
this](std::shared_ptr<SpType> data)
169 std::lock_guard<std::mutex> lock(_sp_data_mutex);
173 _sp_data.push_back(data);
176 _sp_wait.notify_all();
182 template<
typename ArchitectureTag,
typename ArchitectureCapability>
188 template<
typename ArchitectureTag,
typename ArchitectureCapability>
194 template<
typename ArchitectureTag,
typename ArchitectureCapability>
200 template<
typename ArchitectureTag,
typename ArchitectureCapability>
203 std::unique_lock<std::mutex> lock(_sp_data_mutex);
204 _sp_wait.wait_for(lock, std::chrono::seconds(5), [
this] {
return _sp_called; });
208 template<
typename ArchitectureTag,
typename ArchitectureCapability>
211 std::lock_guard<std::mutex> lock(_sp_data_mutex);
212 auto data_ptr = _sp_data.front();
213 _sp_data.pop_front();
217 template<
typename ArchitectureTag,
typename ArchitectureCapability>
220 return _sp_call_count;
223 POOL_ALGORITHM_TYPED_TEST_P(
SpsTester, test_handlers)
226 auto& api = traits.api(pool);
233 typedef typename SpsType::TimeFrequencyType DataType;
237 std::size_t chunk_samples=10000;
238 while(!traits.sp_handler_called())
240 auto data = DataType::make_shared(data::DimensionSize<data::Time>(chunk_samples), data::DimensionSize<data::Frequency>(64));
241 data->sample_interval(DataType::TimeType(15.0 * boost::units::si::milli * boost::units::si::seconds));
242 data->set_channel_frequencies_const_width(data::FrequencyType(1000.0 * boost::units::si::mega * data::hz), data::FrequencyType(-1.0 * boost::units::si::mega * data::hz));
243 generator.next(*data);
247 ASSERT_TRUE(traits.dm_handler_called());
260 POOL_ALGORITHM_TYPED_TEST_P(
SpsTester, single_pulse_with_noise_1)
263 test_single_pulse_with_noise<TestRfiData<1, data::TimeFrequency<Cpu, uint8_t>>>(traits, pool);
266 POOL_ALGORITHM_TYPED_TEST_P(
SpsTester, single_pulse_with_noise_2)
269 test_single_pulse_with_noise<TestRfiData<2, data::TimeFrequency<Cpu, uint8_t>>>(traits, pool);
272 POOL_ALGORITHM_TYPED_TEST_P(
SpsTester, single_pulse_with_noise_3)
275 test_single_pulse_with_noise<TestRfiData<3, data::TimeFrequency<Cpu, uint8_t>>>(traits, pool);
278 POOL_ALGORITHM_TYPED_TEST_P(
SpsTester, single_pulse_with_noise_4)
281 test_single_pulse_with_noise<TestRfiData<4, data::TimeFrequency<Cpu, uint8_t>>>(traits, pool);
284 POOL_ALGORITHM_TYPED_TEST_P(
SpsTester, single_pulse_with_noise_5)
287 test_single_pulse_with_noise<TestRfiData<5, data::TimeFrequency<Cpu, uint8_t>>>(traits, pool);
347 REGISTER_TYPED_TEST_CASE_P(
SpsTester, test_handlers, single_pulse_with_noise_1, single_pulse_with_noise_2, single_pulse_with_noise_3, single_pulse_with_noise_4, single_pulse_with_noise_5);
bool sp_handler_called() const
return true if the sp_handler has been called
all non-templated options for the sps module
Dm dm_start() const
the first dm condidate to try
bool wait_sp_handler_called() const
return true if the sp_handler has been called
std::size_t sp_handler_call_count() const
return true if the sp_handler has been called
Single Pulse Search top level interface.
bool dm_handler_called() const
return true if the dm_handler has been called
describes dedispersion configuration
TimeFrequency data with flags representing rfim detection.
Some limits and constants for FLDO.
Dm dm_end() const
the last dm condidate to try
A class to compute timefrequency stats (mean and variance.
Dm dm_step() const
the step size to take in generating dm trials between start and end
Inject a single pulse at a specified dispersion measure.