1 #include "cheetah/dred/cuda/Dred.cuh" 2 #include "cheetah/cuda_utils/cuda_thrust.h" 3 #include "cheetah/cuda_utils/cuda_errorhandling.h" 4 #include "cheetah/data/Units.h" 13 : utils::AlgorithmBase<
Config,dred::
Config>(config, algo_config)
14 , _pwft(_algo_config.pwft_config())
26 size_t count = in.
size();
27 const T* ptr = thrust::raw_pointer_cast(in.data());
34 out[0] = 0.5f*(in[0] + in[1]);
38 out[0] = detail::median3<T>(in[0],in[1],in[2]);
42 out[0] = detail::median4<T>(in[0],in[1],in[2],in[3]);
46 thrust::transform(thrust::cuda::par,
47 thrust::make_counting_iterator<unsigned int>(0),
48 thrust::make_counting_iterator<unsigned int>(in.
size()/5),
56 T
const* ptr = thrust::raw_pointer_cast(in.data());
57 thrust::transform(thrust::cuda::par,
58 thrust::make_counting_iterator<unsigned int>(0),
59 thrust::make_counting_iterator<unsigned int>(out.
size()),
64 template <
typename Alloc>
67 data::AccelerationType maximum_acceleration)
79 std::size_t power = 1;
85 auto accel_max = maximum_acceleration.value();
91 boundary.window = std::pow((std::size_t)5,(std::size_t)power);
92 auto c = boost::units::si::constants::codata::c.value().value();
93 boundary.frequency = (c * boundary.window) / (k * accel_max * tobs * tobs);
94 boundary.idx = std::min((std::size_t) (boundary.frequency/input.
frequency_step().value()), input.
size());
95 _boundaries.push_back(boundary);
96 if (boundary.frequency>nyquist)
103 _medians.resize(_boundaries.size());
104 for (
int ii=0; ii<_boundaries.size(); ++ii)
108 _medians[ii].resize(input.
size()/_boundaries[ii].window);
113 template <
typename T>
114 template <
typename Alloc>
118 data::AccelerationType maximum_acceleration)
120 prepare(input, output, maximum_acceleration);
129 std::size_t offset = 0;
130 for (
int ii=0;ii<_boundaries.size();ii++)
132 out = &(_medians)[ii];
133 median_scrunch5(*in, *out);
134 linear_stretch(*out, intermediate, (
float)(_boundaries[ii].window));
135 thrust::copy_n(intermediate.begin()+offset,
136 _boundaries[ii].idx-offset,
137 baseline.begin()+offset);
138 offset = _boundaries[ii].idx;
141 thrust::transform(thrust::cuda::par, input.
begin(),input.end(),
143 CUDA_ERROR_CHECK(cudaDeviceSynchronize());
Functor for normalising spectral data.
FourierFrequencyType const & frequency_step() const
Retrieve the frequency step of the series.
void process_direct(panda::PoolResource< Arch > &resource, data::FrequencySeries< Arch, typename data::ComplexTypeTraits< Arch, T >::type, InputAlloc >const &input, data::PowerSeries< Arch, T, OutputAlloc > &output, Args &&... args)
Form power spectrum using absolute squared.
A container of Fourier series data.
CUDA/Thrust implementation of the Dred algorithm.
Configuration object for Dred CUDA implementation.
Some limits and constants for FLDO.
ConstIterator begin() const
Iterators to device memory.
Dred(Config const &impl_config, dred::Config const &algo_config)
Create a new Dred instance.
Class for power series (detected FrequencySeries).
std::size_t oversmoothing_factor() const
The oversmoothing factor for median window calculation.
Algorithm configuration for the Dred module.
void process(panda::PoolResource< cheetah::Cuda > &resource, data::FrequencySeries< cheetah::Cuda, ComplexType, Alloc >const &input, data::FrequencySeries< cheetah::Cuda, ComplexType, Alloc > &output, data::AccelerationType maximum_acceleration)
Deredden a complex fourier spectrum.
void resize(std::size_t size)
resize the data
std::size_t size() const
the size of the series