Add jf-assembler executable

This service reconstructs the various modules and sends out a
image metadata stream for further consumers.
This commit is contained in:
2021-01-19 14:02:57 +01:00
parent 65fb6c929f
commit 39d714f538
11 changed files with 519 additions and 0 deletions
+28
View File
@@ -0,0 +1,28 @@
#ifndef SF_DAQ_BUFFER_ASSEMBLERSTATS_HPP
#define SF_DAQ_BUFFER_ASSEMBLERSTATS_HPP
#include <chrono>
#include <string>
#include <formats.hpp>
class AssemblerStats {
const std::string detector_name_;
const size_t stats_modulo_;
int image_counter_;
int n_corrupted_images_;
int n_sync_lost_images_;
std::chrono::time_point<std::chrono::steady_clock> stats_interval_start_;
void reset_counters();
void print_stats();
public:
AssemblerStats(const std::string &detector_name,
const size_t stats_modulo);
void record_stats(const ImageMetadata &meta, const uint32_t n_lost_pulses);
};
#endif //SF_DAQ_BUFFER_ASSEMBLERSTATS_HPP
@@ -0,0 +1,34 @@
#ifndef SF_DAQ_BUFFER_ZMQPULSESYNCRECEIVER_HPP
#define SF_DAQ_BUFFER_ZMQPULSESYNCRECEIVER_HPP
#include <cstddef>
#include <string>
#include <vector>
#include "formats.hpp"
struct PulseAndSync {
const uint64_t pulse_id;
const uint32_t n_lost_pulses;
};
class ZmqPulseSyncReceiver {
void* ctx_;
const int n_modules_;
std::vector<void*> sockets_;
public:
ZmqPulseSyncReceiver(
void* ctx,
const std::string& detector_name,
const int n_modules);
~ZmqPulseSyncReceiver();
PulseAndSync get_next_pulse_id() const;
};
#endif //SF_DAQ_BUFFER_ZMQPULSESYNCRECEIVER_HPP
+14
View File
@@ -0,0 +1,14 @@
namespace assembler_config
{
// N of IO threads to send image metadata.
const int ASSEMBLER_ZMQ_IO_THREADS = 1;
// If the modules are offset more than 1000 pulses, crush.
const uint64_t PULSE_OFFSET_LIMIT = 100;
// Number of times we try to re-sync in case of failure.
const int SYNC_RETRY_LIMIT = 3;
// Number of pulses between each statistics print out.
const size_t ASSEMBLER_STATS_MODULO = 1000;
}