Cheetah - SKA - PSS - Prototype Time Domain Search Pipeline
Dred.cuh
1 #ifndef SKA_CHEETAH_DRED_CUDA_DRED_H
2 #define SKA_CHEETAH_DRED_CUDA_DRED_H
3 
4 #include "cheetah/dred/cuda/Config.h"
5 #include "cheetah/dred/Config.h"
6 #include "cheetah/dred/cuda/detail/MedianScrunch.cuh"
7 #include "cheetah/dred/cuda/detail/Normaliser.cuh"
8 #include "cheetah/data/FrequencySeries.h"
9 #include "cheetah/data/PowerSeries.h"
10 #include "cheetah/pwft/Pwft.h"
11 #include "cheetah/utils/Architectures.h"
12 #include "cheetah/utils/AlgorithmBase.h"
13 #include "panda/arch/nvidia/DeviceCapability.h"
14 #include <vector>
15 
16 namespace ska {
17 namespace cheetah {
18 namespace dred {
19 namespace cuda {
20 
32 template <typename T>
33 class Dred: public utils::AlgorithmBase<Config,dred::Config>
34 {
35  private:
37  typedef typename data::ComplexTypeTraits<cheetah::Cuda,T>::type ComplexType;
38 
42  struct Boundary
43  {
44  float frequency;
45  std::size_t idx;
46  std::size_t window;
47  };
48 
49  public:
50  typedef cheetah::Cuda Architecture;
51  typedef panda::nvidia::DeviceCapability<2,0, panda::nvidia::giga/2> ArchitectureCapability;
52  typedef panda::PoolResource<Architecture> ResourceType;
53 
54  public:
61  Dred(Config const& impl_config, dred::Config const& algo_config);
62  Dred(Dred const&) = delete;
63  Dred(Dred&&) = default;
64  ~Dred();
65 
76  template <typename Alloc>
77  void process(panda::PoolResource<cheetah::Cuda>& resource,
80  data::AccelerationType maximum_acceleration);
81 
82  private:
86  template <typename Alloc>
89  data::AccelerationType maximum_acceleration);
90  void median_scrunch5(SeriesType const& in, SeriesType& out);
91  void linear_stretch(SeriesType const& in, SeriesType& out, float step);
92 
93  private:
94  pwft::Pwft _pwft; //for forming direct power spectrum
95  std::vector< SeriesType > _medians; //for median scrunched versions of _power_spectrum
96  std::vector< Boundary > _boundaries; //boundaries between smoothing windows
97 };
98 
99 } //cuda
100 } //dred
101 } //cheetah
102 } //ska
103 
104 #include "cheetah/dred/cuda/detail/Dred.cu"
105 
106 #endif //SKA_CHEETAH_DRED_CUDA_DRED_H
Power Spectrum Fourier Transform version / Transform / Module.
Definition: Pwft.h:48
A container of Fourier series data.
A helper class to determine the type of complex data for different architectures. ...
CUDA/Thrust implementation of the Dred algorithm.
Definition: Dred.cuh:33
Configuration object for Dred CUDA implementation.
Definition: Config.h:43
Some limits and constants for FLDO.
Definition: Brdz.h:35
Dred(Config const &impl_config, dred::Config const &algo_config)
Create a new Dred instance.
Definition: Dred.cu:12
Class for power series (detected FrequencySeries).
Definition: PowerSeries.h:58
Algorithm configuration for the Dred module.
Definition: Config.h:47
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.