A Time/Frequency data chunk.Contiguous block of time samples and frequency channels.
The frequencies represented in each time sample shuld be set/referenced from with the channel_frequencies methods.
Each time sample is represents an indentical frequency range.
#include "cheetah/data/TimeFrequecy.h"
#include <algorithm>
TimeFrequecy<Cpu, uint8_t> tf_block(DimensionSize<Time>(1000), DimensionSize<Frequency>(4096));
...
for(unsigned i=0; i < tf_block.number_of_spectra(); ++i) {
Spectra spectrum = tf_block.spectrum(i);
auto channel_it = spectrum.begin();
while(channel_it != spectrum.end())
{
++channel_it;
}
std::fill(spectrum.begin(), spectrum.end(), 0U);
}
tf_block[DimesnionIndex<Time>(2)][DimensionIndex<Frequency>(3)] = 10;
#ifndef SKA_CHEETAH_TIMEFREQUENCY_H
#define SKA_CHEETAH_TIMEFREQUENCY_H
#include "cheetah/data/Units.h"
#include "cheetah/data/TimeFrequencyCommon.h"
#include "cheetah/utils/Architectures.h"
#include "panda/DataChunk.h"
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wall"
#pragma GCC diagnostic ignored "-Wpragmas"
#pragma GCC diagnostic ignored "-Wunused-parameter"
#pragma GCC diagnostic ignored "-Wunused-variable"
#include "pss/astrotypes/types/TimeFrequency.h"
#pragma GCC diagnostic pop
namespace cheetah {
namespace data {
template <class Arch, typename NumericalT> class FrequencyTime;
template <class Arch, typename NumericalT>
class TimeFrequency : public pss::astrotypes::TimeFrequency<NumericalT>
, public TimeFrequencyCommon<TimeFrequency<Arch, NumericalT>>
{
typedef pss::astrotypes::TimeFrequency<NumericalT> BaseT;
typedef TimeFrequencyCommon<TimeFrequency<Arch, NumericalT>> CommonBaseT;
public:
typedef NumericalT NumericalRep;
typedef Arch Architecture;
typedef typename CommonBaseT::FrequencyType FrequencyType;
typedef typename CommonBaseT::TimeType TimeType;
typedef typename CommonBaseT::TimePointType TimePointType;
typedef typename BaseT::iterator Iterator;
typedef typename BaseT::const_iterator ConstIterator;
typedef typename BaseT::Spectra
Spectra;
typedef typename BaseT::ConstSpectra ConstSpectra;
typedef typename BaseT::Channel Channel;
typedef typename BaseT::ConstChannel ConstChannel;
using pss::astrotypes::TimeFrequency<NumericalT>::TimeFrequency;
public:
TimeFrequency(DimensionSize<Frequency> number_of_channels, DimensionSize<Time> number_of_spectra);
template<class OtherArch, typename OtherNumericalT>
TimeFrequency(
const TimeFrequency<OtherArch, OtherNumericalT>& tf);
template<typename OtherNumericalT>
template<class OtherArch, typename OtherNumericalT>
TimeFrequency(FrequencyTime<OtherArch, OtherNumericalT>
const& ft);
void set_channel(
unsigned channel_number, DataType
const& value);
};
template<typename T>
struct ExtractTimeFrequencyDataType;
template<typename T, typename Enable = void>
struct ExtractTimeFrequencyDataTypeHelper;
template<typename DataType, typename T=bool>
using EnableIfIsTimeFrequency = typename std::enable_if<pss::astrotypes::has_exact_dimensions<typename std::remove_reference<DataType>::type
, pss::astrotypes::units::Time
, pss::astrotypes::units::Frequency>::value, T>::type;
}
}
}
namespace astrotypes {
template<typename Alloc, typename T>
struct has_exact_dimensions<ska::cheetah::data::TimeFrequency<T, Alloc>, units::Time, units::Frequency> : public std::true_type
{
};
}
}
#include "detail/TimeFrequency.cpp"
#include "cuda/TimeFrequency.h"
#endif // SKA_CHEETAH_TIMEFREQUENCY_H