added unit tests for dataprocessor rearranging functions

This commit is contained in:
2025-03-14 14:04:55 +01:00
parent 3c79e8d7b2
commit 0a5b5aac4b
3 changed files with 347 additions and 88 deletions

View File

@ -552,8 +552,7 @@ void DataProcessor::RemoveTrailingBits(size_t &size, char *data) {
}
// update size and copy data
memmove(data + nAnalogDataBytes,
data + nAnalogDataBytes + ctbDigitalDataBytes,
memmove(data + nAnalogDataBytes, data + nAnalogDataBytes + ctbDbitOffset,
ctbDigitalDataBytes + nTransceiverDataBytes);
size = nAnalogDataBytes + ctbDigitalDataBytes + nTransceiverDataBytes;
@ -575,6 +574,7 @@ void DataProcessor::Reorder(size_t &size, char *data) {
}
auto *source = (uint64_t *)(data + nAnalogDataBytes + ctbDbitOffset);
// TODO: leads to unaligned data
const size_t numDigitalSamples = (ctbDigitalDataBytes / sizeof(uint64_t));
@ -590,13 +590,6 @@ void DataProcessor::Reorder(size_t &size, char *data) {
numBytesPerBit *
64; // number of bytes for digital data after reordering
LOG(logDEBUG1) << "totalNumBytes: " << totalNumBytes
<< " nAnalogDataBytes:" << nAnalogDataBytes
<< " nDigitalDataBytes: " << nDigitalDataBytes
<< " ctbDbitOffset:" << ctbDbitOffset
<< " nTransceiverDataBytes:" << nTransceiverDataBytes
<< " size:" << size << " numsamples:" << numDigitalSamples;
std::vector<uint8_t> result(totalNumBytes, 0);
uint8_t *dest = &result[0];
@ -666,8 +659,9 @@ void DataProcessor::ArrangeDbitData(size_t &size, char *data) {
// store each selected bit from all samples consecutively
if (reorder) {
int numBitsPerDbit = numDigitalSamples; // num bits per selected digital
// Bit for all samples
size_t numBitsPerDbit =
numDigitalSamples; // num bits per selected digital
// Bit for all samples
if ((numBitsPerDbit % 8) != 0)
numBitsPerDbit += (8 - (numDigitalSamples % 8));
totalNumBytes = (numBitsPerDbit / 8) * ctbDbitList.size();

View File

@ -177,11 +177,11 @@ class DataProcessor : private virtual slsDetectorDefs, public ThreadObject {
uint32_t streamingTimerInMs;
uint32_t streamingStartFnum;
uint32_t currentFreqCount{0};
struct timespec timerbegin{};
struct timespec timerbegin {};
bool framePadding;
std::vector<int> ctbDbitList;
bool reorder{false}; // true if data should be reordered TODO: add as mode
int ctbDbitOffset;
int ctbDbitOffset{0};
std::atomic<bool> startedFlag{false};
std::atomic<uint64_t> firstIndex{0};
bool quadEnable{false};