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
97 using ZMQHistoServerToFile = ZMQHistogramOutput<ZMQHistoServerToFileOutput>;
98 using ZMQHistoServerToZMQ = ZMQHistogramOutput<ZMQHistoServerToZMQOutput>;
99 using ZMQHistoServerToRaw = ZMQHistogramOutput<ZMQHistoServerToRawOutput>;
101}
Add the common functionality to the histogram output classes.
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
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.