Skip to content
Snippets Groups Projects
Commit a3bff557 authored by Tobias Winchen's avatar Tobias Winchen
Browse files

Refaktored gated api

parent c71f7d0e
Branches
No related tags found
No related merge requests found
...@@ -269,19 +269,10 @@ struct GatedFullStokesOutput: public OutputDataStream ...@@ -269,19 +269,10 @@ struct GatedFullStokesOutput: public OutputDataStream
struct GatedSpectrometerInputParameters
/** {
@class GatedSpectrometer
@brief Split data into two streams and create integrated spectra depending on
bit set in side channel data.
*/
template <class HandlerType,
class InputType,
class OutputType
> class GatedSpectrometer {
public:
/** /**
* @brief Constructor * @brief GatedSpectrometerInputParameters defining behavior of GatedSpectrometer
* *
* @param buffer_bytes A RawBytes object wrapping a DADA header buffer * @param buffer_bytes A RawBytes object wrapping a DADA header buffer
* @param nSideChannels Number of side channel items in the data stream, * @param nSideChannels Number of side channel items in the data stream,
...@@ -295,10 +286,37 @@ public: ...@@ -295,10 +286,37 @@ public:
* @param handler Output handler * @param handler Output handler
* *
*/ */
GatedSpectrometer(const DadaBufferLayout &bufferLayout,
std::size_t selectedSideChannel, std::size_t selectedBit, effelsberg::edd::DadaBufferLayout dadaBufferLayout;
std::size_t fft_length, size_t selectedSideChannel;
std::size_t naccumulate, std::size_t nbits, size_t speadHeapSize;
size_t nSideChannels;
size_t selectedBit;
size_t fft_length;
size_t naccumulate;
unsigned int nbits;
// size_t disable_gate;
};
/**
@class GatedSpectrometer
@brief Split data into two streams and create integrated spectra depending on
bit set in side channel data.
*/
template <class HandlerType,
class InputType,
class OutputType
> class GatedSpectrometer {
public:
/**
* @brief Constructor
*/
GatedSpectrometer(const GatedSpectrometerInputParameters &ip,
HandlerType &handler); HandlerType &handler);
~GatedSpectrometer(); ~GatedSpectrometer();
...@@ -346,6 +364,7 @@ private: ...@@ -346,6 +364,7 @@ private:
thrust::device_vector<uint64_cu> &_noOfBitSetsIn_G1); thrust::device_vector<uint64_cu> &_noOfBitSetsIn_G1);
DadaBufferLayout _dadaBufferLayout; DadaBufferLayout _dadaBufferLayout;
std::size_t _fft_length; std::size_t _fft_length;
std::size_t _naccumulate; std::size_t _naccumulate;
std::size_t _selectedSideChannel; std::size_t _selectedSideChannel;
......
...@@ -65,17 +65,14 @@ __global__ void update_baselines(float* __restrict__ baseLineG0, ...@@ -65,17 +65,14 @@ __global__ void update_baselines(float* __restrict__ baseLineG0,
template <class HandlerType, class InputType, class OutputType> template <class HandlerType, class InputType, class OutputType>
GatedSpectrometer<HandlerType, InputType, OutputType>::GatedSpectrometer( GatedSpectrometer<HandlerType, InputType, OutputType>::GatedSpectrometer(
const DadaBufferLayout &dadaBufferLayout, std::size_t selectedSideChannel, const GatedSpectrometerInputParameters &ip, HandlerType &handler) : _dadaBufferLayout(ip.dadaBufferLayout),
std::size_t selectedBit, std::size_t fft_length, std::size_t naccumulate, _selectedSideChannel(ip.selectedSideChannel), _selectedBit(ip.selectedBit),
std::size_t nbits, HandlerType _fft_length(ip.fft_length), _naccumulate(ip.naccumulate),
&handler) : _dadaBufferLayout(dadaBufferLayout),
_selectedSideChannel(selectedSideChannel), _selectedBit(selectedBit),
_fft_length(fft_length), _naccumulate(naccumulate),
_handler(handler), _fft_plan(0), _call_count(0), _nsamps_per_heap(4096) _handler(handler), _fft_plan(0), _call_count(0), _nsamps_per_heap(4096)
{ {
// Sanity checks // Sanity checks
assert(((nbits == 12) || (nbits == 8) || (nbits == 10))); assert(((ip.nbits == 12) || (ip.nbits == 8) || (ip.nbits == 10)));
assert(_naccumulate > 0); assert(_naccumulate > 0);
// check for any device errors // check for any device errors
...@@ -92,16 +89,16 @@ GatedSpectrometer<HandlerType, InputType, OutputType>::GatedSpectrometer( ...@@ -92,16 +89,16 @@ GatedSpectrometer<HandlerType, InputType, OutputType>::GatedSpectrometer(
<< " output bit depth " << sizeof(IntegratedPowerType) * 8; << " output bit depth " << sizeof(IntegratedPowerType) * 8;
assert((_dadaBufferLayout.getNSideChannels() == 0) || assert((_dadaBufferLayout.getNSideChannels() == 0) ||
(selectedSideChannel < _dadaBufferLayout.getNSideChannels())); // Sanity check of side channel value (_selectedSideChannel < _dadaBufferLayout.getNSideChannels())); // Sanity check of side channel value
assert(selectedBit < 64); // Sanity check of selected bit assert(_selectedBit < 64); // Sanity check of selected bit
_nchans = _fft_length / 2 + 1; _nchans = _fft_length / 2 + 1;
inputDataStream = new InputType(fft_length, nbits, _dadaBufferLayout); inputDataStream = new InputType(_fft_length, ip.nbits, _dadaBufferLayout);
//How many output spectra per input block? //How many output spectra per input block?
size_t nsamps_per_output_spectra = fft_length * naccumulate; size_t nsamps_per_output_spectra = _fft_length * _naccumulate;
size_t nsamps_per_pol = inputDataStream->getSamplesPerInputPolarization(); size_t nsamps_per_pol = inputDataStream->getSamplesPerInputPolarization();
BOOST_LOG_TRIVIAL(debug) << "Samples per input polarization: " << nsamps_per_pol; BOOST_LOG_TRIVIAL(debug) << "Samples per input polarization: " << nsamps_per_pol;
...@@ -126,7 +123,7 @@ GatedSpectrometer<HandlerType, InputType, OutputType>::GatedSpectrometer( ...@@ -126,7 +123,7 @@ GatedSpectrometer<HandlerType, InputType, OutputType>::GatedSpectrometer(
// plan the FFT // plan the FFT
size_t nsamps_per_buffer = _dadaBufferLayout.sizeOfData() * 8 / nbits; size_t nsamps_per_buffer = _dadaBufferLayout.sizeOfData() * 8 / ip.nbits;
int batch = nsamps_per_pol / _fft_length; int batch = nsamps_per_pol / _fft_length;
int n[] = {static_cast<int>(_fft_length)}; int n[] = {static_cast<int>(_fft_length)};
BOOST_LOG_TRIVIAL(debug) << "Generating FFT plan:\n" BOOST_LOG_TRIVIAL(debug) << "Generating FFT plan:\n"
......
...@@ -24,60 +24,42 @@ const size_t ERROR_UNHANDLED_EXCEPTION = 2; ...@@ -24,60 +24,42 @@ const size_t ERROR_UNHANDLED_EXCEPTION = 2;
} // namespace } // namespace
struct GatedSpectrometerInputParameters
{
effelsberg::edd::DadaBufferLayout dadaBufferLayout;
size_t selectedSideChannel;
size_t speadHeapSize;
size_t nSideChannels;
size_t selectedBit;
size_t fft_length;
size_t naccumulate;
unsigned int nbits;
std::string filename;
std::string output_type;
};
template<typename T, template<typename T,
class InputType, class InputType,
class OutputType class OutputType
> >
void launchSpectrometer(const GatedSpectrometerInputParameters &i) void launchSpectrometer(const effelsberg::edd::GatedSpectrometerInputParameters &i, const std::string &filename, const std::string &output_type)
{ {
MultiLog log("DadaBufferLayout"); MultiLog log("DadaBufferLayout");
std::cout << "Running with output_type: " << i.output_type << std::endl; std::cout << "Running with output_type: " << output_type << std::endl;
if (i.output_type == "file") if (output_type == "file")
{ {
SimpleFileWriter sink(i.filename); SimpleFileWriter sink(filename);
effelsberg::edd::GatedSpectrometer<decltype(sink), InputType, OutputType> effelsberg::edd::GatedSpectrometer<decltype(sink), InputType, OutputType>
spectrometer(i.dadaBufferLayout, spectrometer(i, sink);
i.selectedSideChannel, i.selectedBit,
i.fft_length, i.naccumulate, i.nbits, sink);
DadaInputStream<decltype(spectrometer)> istream(i.dadaBufferLayout.getInputkey(), log, DadaInputStream<decltype(spectrometer)> istream(i.dadaBufferLayout.getInputkey(), log,
spectrometer); spectrometer);
istream.start(); istream.start();
} }
else if (i.output_type == "dada") else if (output_type == "dada")
{ {
DadaOutputStream sink(string_to_key(i.filename), log); DadaOutputStream sink(string_to_key(filename), log);
effelsberg::edd::GatedSpectrometer<decltype(sink), InputType, OutputType> spectrometer(i.dadaBufferLayout, effelsberg::edd::GatedSpectrometer<decltype(sink), InputType, OutputType>
i.selectedSideChannel, i.selectedBit, spectrometer(i, sink);
i.fft_length, i.naccumulate, i.nbits, sink);
DadaInputStream<decltype(spectrometer)> istream(i.dadaBufferLayout.getInputkey(), log, DadaInputStream<decltype(spectrometer)> istream(i.dadaBufferLayout.getInputkey(), log,
spectrometer); spectrometer);
istream.start(); istream.start();
} }
else if (i.output_type == "profile") else if (output_type == "profile")
{ {
NullSink sink; NullSink sink;
effelsberg::edd::GatedSpectrometer<decltype(sink), InputType, OutputType> spectrometer(i.dadaBufferLayout, effelsberg::edd::GatedSpectrometer<decltype(sink), InputType, OutputType>
i.selectedSideChannel, i.selectedBit, spectrometer(i, sink);
i.fft_length, i.naccumulate, i.nbits, sink);
std::vector<char> buffer(i.dadaBufferLayout.getBufferSize()); std::vector<char> buffer(i.dadaBufferLayout.getBufferSize());
cudaHostRegister(buffer.data(), buffer.size(), cudaHostRegisterPortable); cudaHostRegister(buffer.data(), buffer.size(), cudaHostRegisterPortable);
...@@ -97,12 +79,12 @@ void launchSpectrometer(const GatedSpectrometerInputParameters &i) ...@@ -97,12 +79,12 @@ void launchSpectrometer(const GatedSpectrometerInputParameters &i)
} }
template<typename T> void io_eval(const GatedSpectrometerInputParameters &inputParameters, const std::string &input_polarizations, const std::string &output_format) template<typename T> void io_eval(const effelsberg::edd::GatedSpectrometerInputParameters &inputParameters, const std::string &input_polarizations, const std::string &output_format, const std::string &filename, const std::string &output_type)
{ {
if (input_polarizations == "Single" && output_format == "Power") if (input_polarizations == "Single" && output_format == "Power")
{ {
launchSpectrometer<T, effelsberg::edd::SinglePolarizationInput, launchSpectrometer<T, effelsberg::edd::SinglePolarizationInput,
effelsberg::edd::GatedPowerSpectrumOutput>(inputParameters); effelsberg::edd::GatedPowerSpectrumOutput>(inputParameters, filename, output_type);
} }
else if (input_polarizations == "Dual" && output_format == "Power") else if (input_polarizations == "Dual" && output_format == "Power")
{ {
...@@ -111,7 +93,7 @@ template<typename T> void io_eval(const GatedSpectrometerInputParameters &inputP ...@@ -111,7 +93,7 @@ template<typename T> void io_eval(const GatedSpectrometerInputParameters &inputP
else if (input_polarizations == "Dual" && output_format == "Stokes") else if (input_polarizations == "Dual" && output_format == "Stokes")
{ {
launchSpectrometer<T, effelsberg::edd::DualPolarizationInput, launchSpectrometer<T, effelsberg::edd::DualPolarizationInput,
effelsberg::edd::GatedFullStokesOutput>(inputParameters); effelsberg::edd::GatedFullStokesOutput>(inputParameters, filename, output_type);
} }
else else
{ {
...@@ -128,7 +110,7 @@ int main(int argc, char **argv) { ...@@ -128,7 +110,7 @@ int main(int argc, char **argv) {
try { try {
key_t input_key; key_t input_key;
GatedSpectrometerInputParameters ip; effelsberg::edd::GatedSpectrometerInputParameters ip;
std::time_t now = std::time(NULL); std::time_t now = std::time(NULL);
std::tm *ptm = std::localtime(&now); std::tm *ptm = std::localtime(&now);
char default_filename[32]; char default_filename[32];
...@@ -136,7 +118,8 @@ int main(int argc, char **argv) { ...@@ -136,7 +118,8 @@ int main(int argc, char **argv) {
std::string input_polarizations = "Single"; std::string input_polarizations = "Single";
std::string output_format = "Power"; std::string output_format = "Power";
std::string filename;
std::string output_type;
/** Define and parse the program options /** Define and parse the program options
*/ */
namespace po = boost::program_options; namespace po = boost::program_options;
...@@ -150,11 +133,11 @@ int main(int argc, char **argv) { ...@@ -150,11 +133,11 @@ int main(int argc, char **argv) {
"The shared memory key for the dada buffer to connect to (hex " "The shared memory key for the dada buffer to connect to (hex "
"string)"); "string)");
desc.add_options()( desc.add_options()(
"output_type", po::value<std::string>(&ip.output_type)->default_value("file"), "output_type", po::value<std::string>(&output_type)->default_value("file"),
"output type [dada, file, profile]. Default is file. Profile executes the spectrometer 10x on random data and passes the ouput to a null sink." "output type [dada, file, profile]. Default is file. Profile executes the spectrometer 10x on random data and passes the ouput to a null sink."
); );
desc.add_options()( desc.add_options()(
"output_key,o", po::value<std::string>(&ip.filename)->default_value(default_filename), "output_key,o", po::value<std::string>(&filename)->default_value(default_filename),
"The key of the output bnuffer / name of the output file to write spectra " "The key of the output bnuffer / name of the output file to write spectra "
"to"); "to");
...@@ -194,6 +177,10 @@ int main(int argc, char **argv) { ...@@ -194,6 +177,10 @@ int main(int argc, char **argv) {
desc.add_options()("naccumulate,a", desc.add_options()("naccumulate,a",
po::value<size_t>(&ip.naccumulate)->required(), po::value<size_t>(&ip.naccumulate)->required(),
"The number of samples to integrate in each channel"); "The number of samples to integrate in each channel");
// desc.add_options()("disable_gate,d",
// po::value<size_t>(&ip.disable_gate)->default_value(-1),
// "Disable processing of ND state 0,1. Select -1 (default) to process both.");
//
desc.add_options()( desc.add_options()(
"log_level", po::value<std::string>()->default_value("info")->notifier( "log_level", po::value<std::string>()->default_value("info")->notifier(
[](std::string level) { set_log_level(level); }), [](std::string level) { set_log_level(level); }),
...@@ -215,9 +202,9 @@ int main(int argc, char **argv) { ...@@ -215,9 +202,9 @@ int main(int argc, char **argv) {
} }
po::notify(vm); po::notify(vm);
if (vm.count("output_type") && (!(ip.output_type == "dada" || ip.output_type == "file" || ip.output_type== "profile") )) if (vm.count("output_type") && (!(output_type == "dada" || output_type == "file" || output_type== "profile") ))
{ {
throw po::validation_error(po::validation_error::invalid_option_value, "output_type", ip.output_type); throw po::validation_error(po::validation_error::invalid_option_value, "output_type", output_type);
} }
if (vm.count("input_polarizations") && (!(input_polarizations == "Single" || input_polarizations == "Dual") )) if (vm.count("input_polarizations") && (!(input_polarizations == "Single" || input_polarizations == "Dual") ))
...@@ -248,7 +235,7 @@ int main(int argc, char **argv) { ...@@ -248,7 +235,7 @@ int main(int argc, char **argv) {
ip.dadaBufferLayout.intitialize(input_key, ip.speadHeapSize, ip.nSideChannels); ip.dadaBufferLayout.intitialize(input_key, ip.speadHeapSize, ip.nSideChannels);
io_eval<float>(ip, input_polarizations, output_format); io_eval<float>(ip, input_polarizations, output_format, filename, output_type );
} catch (std::exception &e) { } catch (std::exception &e) {
std::cerr << "Unhandled Exception reached the top of main: " << e.what() std::cerr << "Unhandled Exception reached the top of main: " << e.what()
......
...@@ -313,29 +313,29 @@ class GatedTestSinkSinglePol{ ...@@ -313,29 +313,29 @@ class GatedTestSinkSinglePol{
TEST(GatedSpectrometer, processingSinglePol) TEST(GatedSpectrometer, processingSinglePol)
{ {
const size_t nbits = 8;
const size_t nHeaps = 1024; const size_t nHeaps = 1024;
const size_t fft_length = 1024 * 64;
const size_t naccumulate = 4096 * nHeaps / fft_length;
const size_t heapSize = 4096 * nbits / 8; psrdada_cpp::effelsberg::edd::GatedSpectrometerInputParameters ip;
const size_t inputBufferSize = nHeaps * (heapSize + 64 / 8); ip.nbits = 8;
ip.fft_length = 1024 * 64;
ip.naccumulate = 4096 * nHeaps / ip.fft_length;
ip.selectedBit = 0;
ip.selectedSideChannel = 0;
ip.speadHeapSize = 4096 * ip.nbits / 8;
const size_t inputBufferSize = nHeaps * (ip.speadHeapSize + 64 / 8);
psrdada_cpp::DadaDB idbuffer(5, inputBufferSize, 1, 4096); psrdada_cpp::DadaDB idbuffer(5, inputBufferSize, 1, 4096);
idbuffer.create(); idbuffer.create();
psrdada_cpp::effelsberg::edd::DadaBufferLayout bufferLayout(idbuffer.key(), heapSize, 1); ip.dadaBufferLayout = psrdada_cpp::effelsberg::edd::DadaBufferLayout(idbuffer.key(), ip.speadHeapSize, 1);
GatedTestSinkSinglePol sink(fft_length, nHeaps, naccumulate); GatedTestSinkSinglePol sink(ip.fft_length, nHeaps, ip.naccumulate);
psrdada_cpp::effelsberg::edd::GatedSpectrometer< psrdada_cpp::effelsberg::edd::GatedSpectrometer<
GatedTestSinkSinglePol, GatedTestSinkSinglePol,
psrdada_cpp::effelsberg::edd::SinglePolarizationInput, psrdada_cpp::effelsberg::edd::SinglePolarizationInput,
psrdada_cpp::effelsberg::edd::GatedPowerSpectrumOutput> psrdada_cpp::effelsberg::edd::GatedPowerSpectrumOutput>
spectrometer(bufferLayout, spectrometer(ip, sink);
0, 0,
fft_length,
naccumulate, nbits,
sink);
char *raw_buffer = new char[inputBufferSize]; char *raw_buffer = new char[inputBufferSize];
...@@ -402,29 +402,30 @@ class GatedTestSinkFullStokes{ ...@@ -402,29 +402,30 @@ class GatedTestSinkFullStokes{
TEST(GatedSpectrometer, processingFullStokes) TEST(GatedSpectrometer, processingFullStokes)
{ {
const size_t nbits = 8;
const size_t nHeaps = 1024; const size_t nHeaps = 1024;
const size_t fft_length = 1024 * 64;
const size_t naccumulate = 4096 * nHeaps / fft_length;
const size_t heapSize = 4096 * nbits / 8; psrdada_cpp::effelsberg::edd::GatedSpectrometerInputParameters ip;
const size_t inputBufferSize = 2 * nHeaps * (heapSize + 64 / 8) ; ip.nbits = 8;
ip.fft_length = 1024 * 64;
ip.naccumulate = 4096 * nHeaps / ip.fft_length;
ip.selectedBit = 0;
ip.selectedSideChannel = 0;
ip.speadHeapSize = 4096 * ip.nbits / 8;
const size_t inputBufferSize = 2 * nHeaps * (ip.speadHeapSize + 64 / 8) ;
psrdada_cpp::DadaDB idbuffer(5, inputBufferSize, 1, 4096); psrdada_cpp::DadaDB idbuffer(5, inputBufferSize, 1, 4096);
idbuffer.create(); idbuffer.create();
psrdada_cpp::effelsberg::edd::DadaBufferLayout bufferLayout(idbuffer.key(), heapSize, 1); psrdada_cpp::effelsberg::edd::DadaBufferLayout bufferLayout(idbuffer.key(), ip.speadHeapSize, 1);
GatedTestSinkFullStokes sink(fft_length, nHeaps, naccumulate); GatedTestSinkFullStokes sink(ip.fft_length, nHeaps, ip.naccumulate);
psrdada_cpp::effelsberg::edd::GatedSpectrometer< psrdada_cpp::effelsberg::edd::GatedSpectrometer<
GatedTestSinkFullStokes, GatedTestSinkFullStokes,
psrdada_cpp::effelsberg::edd::DualPolarizationInput, psrdada_cpp::effelsberg::edd::DualPolarizationInput,
psrdada_cpp::effelsberg::edd::GatedFullStokesOutput> psrdada_cpp::effelsberg::edd::GatedFullStokesOutput>
spectrometer(bufferLayout, spectrometer(ip, sink);
0, 0,
fft_length,
naccumulate, nbits,
sink);
char *raw_buffer = new char[inputBufferSize]; char *raw_buffer = new char[inputBufferSize];
...@@ -472,6 +473,19 @@ struct gated_params ...@@ -472,6 +473,19 @@ struct gated_params
std::size_t nbits; std::size_t nbits;
std::size_t nHeaps; std::size_t nHeaps;
std::string msg; std::string msg;
psrdada_cpp::effelsberg::edd::GatedSpectrometerInputParameters getInputParams()
{
psrdada_cpp::effelsberg::edd::GatedSpectrometerInputParameters ip;
ip.nbits = nbits;
ip.fft_length = fft_length;
ip.naccumulate = naccumulate;
ip.selectedBit = 0;
ip.selectedSideChannel = 0;
ip.speadHeapSize = 4096 * nbits / 8;
return ip;
}
}; };
...@@ -479,22 +493,24 @@ class ExecutionTests: public testing::TestWithParam<gated_params> { ...@@ -479,22 +493,24 @@ class ExecutionTests: public testing::TestWithParam<gated_params> {
// Test that the spectrometers execute without error in certain parameter // Test that the spectrometers execute without error in certain parameter
// settings // settings
}; };
TEST_P(ExecutionTests, SinglePolOutput) TEST_P(ExecutionTests, SinglePolOutput)
{ {
gated_params params = GetParam(); gated_params params = GetParam();
psrdada_cpp::effelsberg::edd::GatedSpectrometerInputParameters ip = params.getInputParams();
const size_t heapSize = 4096 * params.nbits / 8; const size_t inputBufferSize = params.nHeaps * (ip.speadHeapSize + 64 / 8);
const size_t inputBufferSize = params.nHeaps * (heapSize + 64 / 8);
psrdada_cpp::DadaDB buffer(5, inputBufferSize, 1, 4096); psrdada_cpp::DadaDB buffer(5, inputBufferSize, 1, 4096);
buffer.create(); buffer.create();
psrdada_cpp::effelsberg::edd::DadaBufferLayout bufferLayout(buffer.key(), heapSize, 1); ip.dadaBufferLayout = psrdada_cpp::effelsberg::edd::DadaBufferLayout(buffer.key(), ip.speadHeapSize, 1);
// Test buffer consistency with input parameters // Test buffer consistency with input parameters
EXPECT_EQ(bufferLayout.getNHeaps(), params.nHeaps); EXPECT_EQ(ip.dadaBufferLayout.getNHeaps(), params.nHeaps);
struct output_pointer struct output_pointer
{ {
...@@ -564,11 +580,7 @@ TEST_P(ExecutionTests, SinglePolOutput) ...@@ -564,11 +580,7 @@ TEST_P(ExecutionTests, SinglePolOutput)
TestSink, TestSink,
psrdada_cpp::effelsberg::edd::SinglePolarizationInput, psrdada_cpp::effelsberg::edd::SinglePolarizationInput,
psrdada_cpp::effelsberg::edd::GatedPowerSpectrumOutput> psrdada_cpp::effelsberg::edd::GatedPowerSpectrumOutput>
spectrometer(bufferLayout, spectrometer(ip, sink);
0, 0,
params.fft_length,
params.naccumulate, params.nbits,
sink);
char *raw_buffer = new char[inputBufferSize]; char *raw_buffer = new char[inputBufferSize];
...@@ -584,7 +596,7 @@ TEST_P(ExecutionTests, SinglePolOutput) ...@@ -584,7 +596,7 @@ TEST_P(ExecutionTests, SinglePolOutput)
// 3 Block, set value and SCI // 3 Block, set value and SCI
raw_buffer[122] = int8_t(13); raw_buffer[122] = int8_t(13);
uint64_t* sc_items = reinterpret_cast<uint64_t*>(raw_buffer + params.nHeaps * heapSize); uint64_t* sc_items = reinterpret_cast<uint64_t*>(raw_buffer + params.nHeaps * ip.speadHeapSize);
for (size_t i = 0; i < params.nHeaps; i++) for (size_t i = 0; i < params.nHeaps; i++)
SET_BIT(sc_items[i], 0); SET_BIT(sc_items[i], 0);
EXPECT_NO_THROW(spectrometer(buff)) << params.msg; EXPECT_NO_THROW(spectrometer(buff)) << params.msg;
...@@ -601,16 +613,16 @@ TEST_P(ExecutionTests, SinglePolOutput) ...@@ -601,16 +613,16 @@ TEST_P(ExecutionTests, SinglePolOutput)
TEST_P(ExecutionTests, FullStokesOutput) TEST_P(ExecutionTests, FullStokesOutput)
{ {
gated_params params = GetParam(); gated_params params = GetParam();
psrdada_cpp::effelsberg::edd::GatedSpectrometerInputParameters ip = params.getInputParams();
const size_t heapSize = 4096 * params.nbits / 8; const size_t inputBufferSize = params.nHeaps * (ip.speadHeapSize + 64 / 8);
const size_t inputBufferSize = params.nHeaps * (heapSize + 64 / 8);
psrdada_cpp::DadaDB buffer(5, inputBufferSize, 1, 4096); psrdada_cpp::DadaDB buffer(5, inputBufferSize, 1, 4096);
buffer.create(); buffer.create();
psrdada_cpp::effelsberg::edd::DadaBufferLayout bufferLayout(buffer.key(), heapSize, 1); ip.dadaBufferLayout = psrdada_cpp::effelsberg::edd::DadaBufferLayout(buffer.key(), ip.speadHeapSize, 1);
// Test buffer consistency with input parameters // Test buffer consistency with input parameters
EXPECT_EQ(bufferLayout.getNHeaps(), params.nHeaps); EXPECT_EQ(ip.dadaBufferLayout.getNHeaps(), params.nHeaps);
psrdada_cpp::NullSink sink; psrdada_cpp::NullSink sink;
...@@ -618,11 +630,8 @@ TEST_P(ExecutionTests, FullStokesOutput) ...@@ -618,11 +630,8 @@ TEST_P(ExecutionTests, FullStokesOutput)
psrdada_cpp::NullSink, psrdada_cpp::NullSink,
psrdada_cpp::effelsberg::edd::DualPolarizationInput, psrdada_cpp::effelsberg::edd::DualPolarizationInput,
psrdada_cpp::effelsberg::edd::GatedFullStokesOutput> psrdada_cpp::effelsberg::edd::GatedFullStokesOutput>
spectrometer(bufferLayout, spectrometer(ip, sink);
0, 0,
params.fft_length,
params.naccumulate, params.nbits,
sink);
char *raw_buffer = new char[inputBufferSize]; char *raw_buffer = new char[inputBufferSize];
memset(raw_buffer, 0, inputBufferSize); memset(raw_buffer, 0, inputBufferSize);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment