ProcessJFPacket: Enable conversion (no storage cells at the moment)

This commit is contained in:
2023-06-03 20:49:43 +02:00
parent d6d827fd9d
commit 38b59de045
3 changed files with 70 additions and 2 deletions
+28 -2
View File
@@ -6,13 +6,15 @@
#include "ProcessJFPacket.h"
#include "jf_packet.h"
#include "../common/JFJochException.h"
#include "JFConversionFixedPoint.h"
ProcessJFPacket::ProcessJFPacket(ThreadSafeFIFO<Completion> &in_c, ThreadSafeFIFO<WorkRequest> &in_wr,
uint32_t nmodules)
: m(2 * nmodules),
c_fifo(in_c),
wr_fifo(in_wr),
module_info(2 * nmodules)
module_info(2 * nmodules),
conv(nmodules)
{
for (auto &i: module_info)
i.c.frame_number = UINT64_MAX;
@@ -65,7 +67,11 @@ void ProcessJFPacket::ProcessPacket(jf_udp_payload *datagram) {
module_info[module_info_location].c.packet_count++;
module_info[module_info_location].c.packet_mask[packetnum >= 64 ? 1 : 0] |= (1LU << (packetnum % 64));
memcpy(module_info[module_info_location].ptr + 4096 * packetnum, datagram->data, 4096 * sizeof(uint16_t));
uint16_t* dst = module_info[module_info_location].ptr + 4096 * packetnum;
if (conv[module_number])
conv[module_number]->ConvertPacket((int16_t *) dst, datagram->data, packetnum);
else
memcpy(dst, datagram->data, 4096 * sizeof(uint16_t));
}
packet_counter++;
}
@@ -73,3 +79,23 @@ void ProcessJFPacket::ProcessPacket(jf_udp_payload *datagram) {
uint64_t ProcessJFPacket::GetCounter() {
return packet_counter;
}
void ProcessJFPacket::RegisterConversion(const DiffractionExperiment &experiment,
const JFCalibration &calib,
uint16_t data_stream) {
if (data_stream >= experiment.GetDataStreamsNum())
throw JFJochException(JFJochExceptionCategory::ArrayOutOfBounds, "Data stream not found");
if (conv.size() != experiment.GetModulesNum(data_stream))
throw JFJochException(JFJochExceptionCategory::InputParameterInvalid, "Wrong module count");
auto module0 = experiment.GetFirstModuleOfDataStream(data_stream);
for (int i = 0; i < experiment.GetModulesNum(data_stream); i++) {
conv[i] = std::make_unique<JFConversionFixedPoint>();
conv[i]->Setup(calib.GainCalibration(module0 + i),
calib.Pedestal(module0 + i, 0, 0),
calib.Pedestal(module0 + i, 1, 0),
calib.Pedestal(module0 + i, 2, 0),
experiment.GetPhotonEnergy_keV());
}
}