Belle II Software development
ZMQHistogramOutput.h
1/**************************************************************************
2 * basf2 (Belle II Analysis Software Framework) *
3 * Author: The Belle II Collaboration *
4 * *
5 * See git log for contributors and copyright holders. *
6 * This file is licensed under LGPL-3.0, see LICENSE.md. *
7 **************************************************************************/
8#pragma once
9
10#include <daq/hbasf2/connections/ZMQHistogramConnection.h>
11#include <daq/hbasf2/utils/HistogramMapping.h>
12
13#include <framework/pcore/zmq/messages/ZMQIdMessage.h>
14
15#include <framework/pcore/EvtMessage.h>
16
17#include <TBufferJSON.h>
18
19#include <lz4.h>
20#include <TH1.h>
21
22#include <zmq.hpp>
23
24#include <string>
25#include <memory>
26#include <map>
27#include <optional>
28
29namespace Belle2 {
54 template<class AConnectionClass>
55 class ZMQHistogramOutput : public AConnectionClass {
56 public:
58 template<class... Args>
59 ZMQHistogramOutput(unsigned int maximalUncompressedBufferSize, Args&& ... args);
60
62 void handleEvent(std::unique_ptr<ZMQIdMessage> message);
64 void mergeAndSend(EMessageTypes messageType = EMessageTypes::c_eventMessage);
66 void clear();
67
68 private:
71
73 std::map<std::string, HistogramMapping> m_storedMessages;
75 std::vector<char> m_uncompressedBuffer;
76
78 std::optional<int> m_storedExperiment = {};
80 std::optional<int> m_storedRun = {};
81 };
82
83 template<class AConnectionClass>
84 template<class... Args>
85 ZMQHistogramOutput<AConnectionClass>::ZMQHistogramOutput(unsigned int maximalUncompressedBufferSize,
86 Args&& ... args) : AConnectionClass(std::forward<Args>(args)...), m_maximalUncompressedBufferSize(
87 maximalUncompressedBufferSize)
88 {
90
91 AConnectionClass::log("uncompressed_size", 0.0);
92 AConnectionClass::log("stored_identities", 0l);
93 AConnectionClass::log("histogram_clears", 0l);
94 AConnectionClass::log("last_clear", "");
95 }
96
101}
Add the common functionality to the histogram output classes.
std::optional< int > m_storedRun
If already received: the run number of the data (on mismatch, everything is cleared)
std::vector< char > m_uncompressedBuffer
The buffer used during decompression.
unsigned int m_maximalUncompressedBufferSize
Paramter for the buffer size (needed during decompression)
std::optional< int > m_storedExperiment
If already received: the experiment number of the data (on mismatch, everything is cleared)
void handleEvent(std::unique_ptr< ZMQIdMessage > message)
Handle a new message to be "sent" (what this means is up to the base class) as described above.
std::map< std::string, HistogramMapping > m_storedMessages
The stored histograms for each sender identity.
void clear()
Forward a clear call to the base class and clear the stored messages. Should be called on run start.
void mergeAndSend(EMessageTypes messageType=EMessageTypes::c_eventMessage)
Forward a merge call to the base class handing over the stored messages.
ZMQHistogramOutput(unsigned int maximalUncompressedBufferSize, Args &&... args)
Perfectly forward the given arguments to the base class initializer (and init the buffer size)
EMessageTypes
Type the messages can have.
Abstract base class for different kinds of events.
STL namespace.