25 #include "panda/PoolLimits.h" 26 #include "panda/TupleUtilities.h" 34 template<
typename TraitsT,
typename... AlgosT>
35 CommonDedispersionPlan<TraitsT, AlgosT...>::CommonDedispersionPlan(ConfigType
const& config)
36 : _plans(typename PlanType<AlgosT>::type(config
37 , panda::PoolLimits::template minimum_memory<typename AlgosT::Architecture>(config.pool())/sizeof(typename TraitsT::value_type))...)
41 template<
typename TraitsT,
typename... AlgosT>
42 CommonDedispersionPlan<TraitsT, AlgosT...>::~CommonDedispersionPlan()
48 class BufferOverlapHelper {
54 template<
typename Plan>
55 void operator()(Plan
const& plan) {
56 auto bs = plan.buffer_overlap();
62 data::DimensionSize<data::Time>
const& value()
const 68 data::DimensionSize<data::Time> _max;
71 class DispersionStrategyHelper {
73 DispersionStrategyHelper()
74 : _min(
std::numeric_limits<
std::size_t>::max())
77 template<
typename Plan,
typename... Args>
78 void operator()(Plan& plan, Args&&... args) {
79 auto bs = plan.reset(std::forward<Args>(args)...);
85 data::DimensionSize<data::Time>
const& value()
const 91 data::DimensionSize<data::Time> _min;
94 class DispersionStrategySyncer {
96 template<
typename Plan>
97 void operator()(Plan& plan, data::DimensionSize<data::Time>
const& spectra) {
98 if(plan.number_of_spectra()!=spectra)
101 if(plan.number_of_spectra()!=spectra)
102 throw panda::Error(
"Unable to set number of spectra");
109 template<
typename TraitsT,
typename... AlgosT>
110 data::DimensionSize<data::Time> CommonDedispersionPlan<TraitsT, AlgosT...>::buffer_overlap()
const 112 BufferOverlapHelper helper;
113 panda::for_each(_plans, helper);
114 return helper.value();
117 template<
typename TraitsT,
typename... AlgosT>
118 data::DimensionSize<data::Time> CommonDedispersionPlan<TraitsT, AlgosT...>::dedispersion_strategy(TimeFrequencyType
const& data)
120 DispersionStrategyHelper helper;
121 panda::for_each(_plans, helper, data);
124 DispersionStrategySyncer sync_helper;
125 panda::for_each(_plans, sync_helper, helper.value());
130 return helper.value();
133 template<
typename TraitsT,
typename... AlgosT>
134 template<
typename AlgoT>
137 return std::get<panda::Index<typename PlanType<AlgoT>::type, decltype(_plans)>::value>(_plans);
PlanType< AlgoT >::type const & plan() const
return the plan corresponding to the specified algorithm
Some limits and constants for FLDO.