24 #include "cheetah/producers/test/SpCclSpeadProducerTest.h" 25 #include "cheetah/exporters/SpCclSpeadStreamerConfig.h" 26 #include "cheetah/producers/SpCclSpeadProducer.h" 27 #include "cheetah/exporters/test/SpCclSpeadStreamerTest.h" 28 #include "cheetah/exporters/SpCclSpeadStreamer.h" 29 #include "cheetah/exporters/SpCclSpeadReader.h" 30 #include "cheetah/utils/ModifiedJulianClock.h" 31 #include <panda/ProcessingEngine.h> 32 #include <panda/ProcessingEngineConfig.h> 42 SpCclSpeadProducerTest<T>::SpCclSpeadProducerTest()
47 TYPED_TEST(SpCclSpeadProducerTest, test_instantiation)
49 typedef TypeParam TimeFrequencyType;
50 typedef SpCclSpeadProducer<TimeFrequencyType> ProducerTestType;
51 typedef ska::panda::DataManager<ProducerTestType> DataManagerType;
54 exporters::SpCclSpeadReaderConfig reader_config;
55 ProducerTestType producer(reader_config);
56 DataManagerType data_manager(producer);
59 TYPED_TEST(SpCclSpeadProducerTest, test_single_candidate_reception)
61 typedef TypeParam TimeFrequencyType;
62 typedef typename TimeFrequencyType::NumericalRep NumericalRep;
63 typedef data::SpCcl<NumericalRep> SpCclType;
64 typedef typename SpCclType::SpCandidateType Candidate;
66 typedef SpCclSpeadProducer<TimeFrequencyType> ProducerTestType;
67 typedef ska::panda::DataManager<ProducerTestType> DataManagerType;
68 typedef typename ProducerTestType::SpCclType SpCandidateDataType;
70 exporters::SpCclSpeadReaderConfig reader_config;
71 ProducerTestType producer(reader_config);
72 DataManagerType data_manager(producer);
76 typename utils::ModifiedJulianClock::time_point start_time(utils::julian_day(2458179.500000));
79 typename SpCclType::BlocksType blocks;
82 std::shared_ptr<TimeFrequencyType> block = std::make_shared<TimeFrequencyType>(
83 data::DimensionSize<data::Time>(1000)
84 , data::DimensionSize<data::Frequency>(10));
87 block->start_time(static_cast<typename TimeFrequencyType::TimePointType>(start_time));
90 block->sample_interval(0.001 * boost::units::si::seconds);
93 blocks.push_back(block);
94 blocks.push_back(std::make_shared<TimeFrequencyType>( data::DimensionSize<data::Time>(100)
95 , data::DimensionSize<data::Frequency>(10)));
97 std::shared_ptr<data::SpCcl<NumericalRep>> data(
new data::SpCcl<NumericalRep>(blocks));
100 std::size_t cand_duration = 40;
103 typename Candidate::MsecTimeType cand1_tend(cand_duration * block->sample_interval());
106 typename Candidate::Dm cand1_dm(00.0 * data::parsecs_per_cube_cm);
109 Candidate candidate_1( cand1_dm
110 ,
typename Candidate::MsecTimeType(0.0 * boost::units::si::seconds)
111 ,
typename Candidate::MsecTimeType(0.001 * boost::units::si::seconds)
116 data->push_back(candidate_1);
118 ska::panda::ProcessingEngine engine(1);
120 exporters::SpCclSpeadStreamer writer(config, engine);
123 std::tuple<std::shared_ptr<SpCandidateDataType>> received_data_tuple = data_manager.next();
124 SpCandidateDataType
const& received_data = *std::get<0>(received_data_tuple);
127 ASSERT_LE(received_data.data_size(), data->tf_blocks()[0]->data_size());
128 ASSERT_EQ(received_data.number_of_channels(), block->number_of_channels());
129 ASSERT_EQ(received_data.sample_interval(), block->sample_interval());
130 ASSERT_EQ(received_data.number_of_spectra(), cand_duration);
133 ASSERT_EQ(received_data.number_of_candidates(), data->size());
134 ASSERT_EQ(received_data.candidate(0).dm(), (*data)[0].dm());
135 ASSERT_EQ((received_data).candidate(0).sigma(), (*data)[0].sigma());
136 ASSERT_EQ(received_data.candidate(0).width(), (*data)[0].width());
137 ASSERT_EQ(received_data.candidate(0).duration(), (*data)[0].tend());
138 ASSERT_EQ(received_data.candidate(0).start_time(), block->start_time());
142 TYPED_TEST(SpCclSpeadProducerTest, test_multiple_candidate_reception)
144 typedef TypeParam TimeFrequencyType;
145 typedef typename TimeFrequencyType::NumericalRep NumericalRep;
146 typedef data::SpCcl<NumericalRep> SpCclType;
147 typedef typename SpCclType::SpCandidateType Candidate;
149 typedef SpCclSpeadProducer<TimeFrequencyType> ProducerTestType;
150 typedef ska::panda::DataManager<ProducerTestType> DataManagerType;
151 typedef typename ProducerTestType::SpCclType SpCandidateDataType;
153 exporters::SpCclSpeadReaderConfig reader_config;
154 ProducerTestType producer(reader_config);
155 DataManagerType data_manager(producer);
158 typename utils::ModifiedJulianClock::time_point start_time(utils::julian_day(2458179.500000));
161 typename SpCclType::BlocksType blocks;
164 std::shared_ptr<TimeFrequencyType> block = std::make_shared<TimeFrequencyType>(
165 data::DimensionSize<data::Time>(1000)
166 , data::DimensionSize<data::Frequency>(10));
169 block->start_time(static_cast<typename TimeFrequencyType::TimePointType>(start_time));
172 block->sample_interval(0.001 * boost::units::si::seconds);
175 blocks.push_back(block);
176 blocks.push_back(std::make_shared<TimeFrequencyType>( data::DimensionSize<data::Time>(100)
177 , data::DimensionSize<data::Frequency>(10)));
180 std::shared_ptr<TimeFrequencyType> block_2 = std::make_shared<TimeFrequencyType>(
181 data::DimensionSize<data::Time>(600)
182 , data::DimensionSize<data::Frequency>(10));
184 block_2->start_time(block->end_time() + block->sample_interval());
185 block_2->sample_interval(0.001 * boost::units::si::seconds);
186 blocks.push_back(block_2);
188 std::shared_ptr<data::SpCcl<NumericalRep>> data(
new data::SpCcl<NumericalRep>(blocks));
190 std::size_t cand_duration = 40;
193 typename Candidate::MsecTimeType cand1_tend(cand_duration * block->sample_interval());
196 typename Candidate::Dm cand1_dm(00.0 * data::parsecs_per_cube_cm);
199 Candidate candidate_1( cand1_dm
200 ,
typename Candidate::MsecTimeType(0.0 * boost::units::si::seconds)
201 ,
typename Candidate::MsecTimeType(0.001 * boost::units::si::seconds)
206 data->push_back(candidate_1);
208 std::size_t cand2_duration = 20;
211 typename Candidate::MsecTimeType cand2_tend(cand2_duration * block->sample_interval());
214 typename Candidate::Dm cand2_dm(10.0 * data::parsecs_per_cube_cm);
217 Candidate candidate_2( cand2_dm
218 , cand1_tend - static_cast<typename Candidate::MsecTimeType>(block->sample_interval())
219 ,
typename Candidate::MsecTimeType(0.001 * boost::units::si::seconds)
220 , cand1_tend +
static_cast<typename Candidate::MsecTimeType
>(block->sample_interval())
224 data->push_back(candidate_2);
226 ska::panda::ProcessingEngine engine(1);
228 exporters::SpCclSpeadStreamer writer(config, engine);
231 std::tuple<std::shared_ptr<SpCandidateDataType>> received_data_tuple = data_manager.next();
232 SpCandidateDataType
const& received_data = *std::get<0>(received_data_tuple);
235 ASSERT_LE(received_data.data_size(), data->tf_blocks()[0]->data_size());
236 ASSERT_EQ(received_data.number_of_channels(), block->number_of_channels());
237 ASSERT_EQ(received_data.sample_interval(), block->sample_interval());
238 ASSERT_EQ(received_data.number_of_spectra(), cand_duration + 1);
241 ASSERT_EQ(received_data.number_of_candidates(), data->size());
242 for(std::size_t i=0; i< received_data.number_of_candidates(); ++i) {
243 ASSERT_EQ(received_data.candidate(i).dm(), (*data)[i].dm());
244 ASSERT_EQ(received_data.candidate(i).sigma(), (*data)[i].sigma());
245 ASSERT_EQ(received_data.candidate(i).width(), (*data)[i].width());
246 ASSERT_EQ(received_data.candidate(i).duration(), (*data)[i].tend());
248 ASSERT_EQ(received_data.candidate(0).start_time(), block->start_time());
249 ASSERT_EQ(received_data.candidate(1).start_time(), data->start_time(candidate_2));
Some limits and constants for FLDO.