24 #include "cheetah/ddtr/cpu/DedispersionPlan.h" 31 template <
typename DdtrTraits>
33 : _algo_config(config)
38 template <
typename DdtrTraits>
43 template <
typename DdtrTraits>
46 Dm max_dm = this->_algo_config.max_dm();
48 FrequencyListType
const& channel_freqs = data.channel_frequencies();
49 auto freq_pair = data.low_high_frequencies();
50 FrequencyType freq_top = freq_pair.second;
51 FrequencyType freq_bottom = freq_pair.first;
52 _max_delay = std::size_t((this->_algo_config.dm_constant().value()
53 * (1.0/(freq_bottom*freq_bottom) - 1.0/(freq_top*freq_top))
54 * max_dm / data.sample_interval()).value()) + 1;
55 for (
auto freq: channel_freqs)
57 double factor = (this->_algo_config.dm_constant().value() * (1.0/(freq*freq) - 1.0/(freq_top*freq_top)) / data.sample_interval()).value();
58 PANDA_LOG_DEBUG <<
"Frequency: " << freq <<
" Reference: " << freq_top <<
" DM constant: " 59 << this->_algo_config.dm_constant() <<
" Sampling interval: " << data.sample_interval() <<
" DM factor: " << factor;
60 _dm_factors.push_back(factor);
63 _number_of_spectra = std::min(_memory/data.number_of_channels(), this->_algo_config.
dedispersion_samples());
64 if (_number_of_spectra < _max_delay * 2)
66 PANDA_LOG_WARN <<
"Requested number of samples to dedisperse (" 67 << this->_number_of_spectra
68 <<
") is less than twice the max dispersion delay (" 69 << 2 * _max_delay <<
")";
71 _dm_trial_metadata = this->_algo_config.generate_dmtrials_metadata(data.sample_interval(), _number_of_spectra, _max_delay);
72 return data::DimensionSize<data::Time>(_number_of_spectra);
75 template <
typename DdtrTraits>
78 return _algo_config.dm_trials();
81 template <
typename DdtrTraits>
87 template <
typename DdtrTraits>
90 return data::DimensionSize<data::Time>(_max_delay);
93 template <
typename DdtrTraits>
96 _number_of_spectra = spectra;
99 template <
typename DdtrTraits>
102 return data::DimensionSize<data::Time>(_number_of_spectra);
105 template <
typename DdtrTraits>
108 return _algo_config.generate_dmtrials_metadata(sample_interval, nspectra, nsamples);
111 template <
typename DdtrTraits>
114 if (number_of_spectra != _number_of_spectra) {
118 return _dm_trial_metadata;
std::vector< Dm > const & dm_trials() const
return algo specific dm_trials
data::DimensionSize< data::Time > reset(TimeFrequencyType const &)
reset the plan to be compatible with the TimeFrequency metadata
std::size_t dedispersion_samples() const
number of samples to dedisperse
data::DimensionSize< data::Time > buffer_overlap() const
return the number of spectra in the overlap buffer
std::vector< double > const & dm_factors() const
return algo specific dm_factors
Some limits and constants for FLDO.
DedispersionPlan(ConfigType const &config, std::size_t max_data_elements)
data::DimensionSize< data::Time > number_of_spectra() const
return the number of spectra currently configured
std::shared_ptr< data::DmTrialsMetadata > dm_trials_metadata(data::TimeFrequencyMetadata const &tf_info, data::DimensionSize< data::Time > number_of_spectra)
return a DmTrialsMetadata block consistent with the plan and the incoming data parameters ...