24 #include "cheetah/pipeline/RfiDetectionPipeline.h" 25 #include "cheetah/pipeline/CheetahConfig.h" 26 #include <panda/TypeTraits.h> 34 template<
typename NumericalT,
typename RfimOutputHandler,
typename RfiPolicy>
35 template<
typename... HandlerArgs>
36 RfiDetectionPipeline<NumericalT, RfimOutputHandler, RfiPolicy>::RfiDetectionPipeline(CheetahConfig<NumericalT>
const& config, BeamConfig<NumericalT>
const& beam_config, HandlerArgs&&... handler_args)
37 : BaseT(config, beam_config)
38 , _channel_mask(config.channel_mask_config())
39 , _rfim_handler(*this,
std::forward<HandlerArgs>(handler_args)...)
40 , _bandpass_handler(*this)
41 , _rfim(config.rfim_config(), _rfim_handler, _bandpass_handler)
43 , _last_data_sequence_index(_data_sequence.size(), 0)
44 , _next_data_sequence_index(_data_sequence.size(), 0)
48 template<
typename NumericalT,
typename RfimOutputHandler,
typename RfiPolicy>
49 RfiDetectionPipeline<NumericalT, RfimOutputHandler, RfiPolicy>::~RfiDetectionPipeline()
51 while(_last_data_sequence_index != _next_data_sequence_index) {
52 std::this_thread::yield();
56 template<
typename NumericalT,
typename RfimOutputHandler,
typename RfiPolicy>
59 return _rfim_handler._output;
62 template<
typename NumericalT,
typename RfimOutputHandler,
typename RfiPolicy>
66 _data_sequence[_last_data_sequence_index] = &data;
67 ++_last_data_sequence_index;
71 if(_last_data_sequence_index == _next_data_sequence_index) {
79 --_last_data_sequence_index;
85 if(_last_data_sequence_index == _next_data_sequence_index) {
86 PANDA_LOG_WARN <<
"sequencing queue full. Slowing pipeline until space recovered";
88 while(_last_data_sequence_index == _next_data_sequence_index) {
89 std::this_thread::yield();
94 template<
typename NumericalT,
typename RfimOutputHandler,
typename RfiPolicy>
95 template<
typename... HandlerArgs>
98 , _output(std::forward<HandlerArgs>(args)...)
102 template<
typename NumericalT,
typename RfimOutputHandler,
typename RfiPolicy>
108 while(_pipeline._data_sequence[_pipeline._next_data_sequence_index] != &tf_data) {
109 std::this_thread::yield();
114 _pipeline._channel_mask(tf_data);
115 _pipeline.out().send(panda::ChannelId(
"rfim"), tf_data);
120 ++_pipeline._next_data_sequence_index;
125 ++_pipeline._next_data_sequence_index;
129 template<
typename NumericalT,
typename RfimOutputHandler,
typename RfiPolicy>
131 : _pipeline(pipeline)
135 template<
typename NumericalT,
typename RfimOutputHandler,
typename RfiPolicy>
138 static const panda::ChannelId bandpass_id(
"bandpass");
139 _pipeline.out().send(bandpass_id, data);
Some limits and constants for FLDO.
Pipeline that performs only RFI detection.