R3BROOT
R3B analysis software
Loading...
Searching...
No Matches
R3BPaddleTamexMappedData2.h
Go to the documentation of this file.
1#pragma once
2/******************************************************************************
3 * Copyright (C) 2019 GSI Helmholtzzentrum für Schwerionenforschung GmbH *
4 * Copyright (C) 2019-2023 Members of R3B Collaboration *
5 * *
6 * This software is distributed under the terms of the *
7 * GNU General Public Licence (GPL) version 3, *
8 * copied verbatim in the file "LICENSE". *
9 * *
10 * In applying this license GSI does not waive the privileges and immunities *
11 * granted to it by virtue of its status as an Intergovernmental Organization *
12 * or submit itself to any jurisdiction. *
13 ******************************************************************************/
14
15#include <R3BShared.h>
16#include <Rtypes.h>
17#include <fmt/core.h>
18#include <fmt/format.h>
19#include <fmt/ranges.h> // NOLINT: formatting span
20#include <map>
21#include <unordered_map>
22#include <vector>
23
24namespace R3B
25{
27 {
28 int fine = 0; // fine time value
29 int coarse = 0; // coarse time value
31 };
32
34 {
35 SingleEdgeSignal leading{}; // leading edge
36 SingleEdgeSignal trailing{}; // trailing edge
37 //
39 };
40
42 {
43 MapBarSignal() = default;
44 MapBarSignal(R3B::Side side, const DoubleEdgeSignal& signal);
45 void push_back(R3B::Side side, const DoubleEdgeSignal& signal)
46 {
47 (side == R3B::Side::left ? left : right).push_back(signal);
48 }
49 [[nodiscard]] auto get(R3B::Side side) const -> const auto& { return side == R3B::Side::left ? left : right; }
50
51 std::vector<DoubleEdgeSignal> left;
52 std::vector<DoubleEdgeSignal> right;
53 ClassDefNV(MapBarSignal, 1)
54 };
55
57 {
58 std::unordered_map<int, R3B::MapBarSignal> bars;
59
61 void push_back(R3B::Side side, int bar_num, const R3B::DoubleEdgeSignal& signal);
62 auto empty() const -> bool { return bars.empty(); };
63
65 };
66
72} // namespace R3B
73
74template <>
75class fmt::formatter<R3B::SingleEdgeSignal>
76{
77 public:
78 static constexpr auto parse(format_parse_context& ctx) { return ctx.end(); }
79 template <typename FmtContent>
80 constexpr auto format(const R3B::SingleEdgeSignal& signal, FmtContent& ctn) const
81 {
82 return fmt::format_to(ctn.out(), "{{fine: {}, coarse: {} }}", signal.fine, signal.coarse);
83 }
84};
85
86template <>
87class fmt::formatter<R3B::DoubleEdgeSignal>
88{
89 public:
90 static constexpr auto parse(format_parse_context& ctx) { return ctx.end(); }
91 template <typename FmtContent>
92 constexpr auto format(const R3B::DoubleEdgeSignal& signal, FmtContent& ctn) const
93 {
94 return fmt::format_to(ctn.out(), "{{leading: {}, trailing: {} }}", signal.leading, signal.trailing);
95 }
96};
97
98template <>
99class fmt::formatter<R3B::MapBarSignal>
100{
101 public:
102 static constexpr auto parse(format_parse_context& ctx) { return ctx.end(); }
103 template <typename FmtContent>
104 constexpr auto format(const R3B::MapBarSignal& signal, FmtContent& ctn) const
105 {
106 return fmt::format_to(
107 ctn.out(), "{{left: [{}], right: [{}] }}", fmt::join(signal.left, ", "), fmt::join(signal.left, ", "));
108 }
109};
110
111using R3BPaddleTamexMappedDataContainer = std::map<int, R3B::PaddleTamexMappedData>;
112using R3BPaddleTamexTrigDataContainer = std::map<int, R3B::PaddleTamexTrigMappedData>;
113
std::map< int, R3B::PaddleTamexMappedData > R3BPaddleTamexMappedDataContainer
1-based key number
std::map< int, R3B::PaddleTamexTrigMappedData > R3BPaddleTamexTrigDataContainer
1-based key number
R3B::PaddleTamexMappedData R3BPaddleTamexMappedData2
R3B::PaddleTamexTrigMappedData R3BPaddleTamexTrigMappedData
static constexpr auto parse(format_parse_context &ctx)
constexpr auto format(const R3B::DoubleEdgeSignal &signal, FmtContent &ctn) const
constexpr auto format(const R3B::MapBarSignal &signal, FmtContent &ctn) const
static constexpr auto parse(format_parse_context &ctx)
static constexpr auto parse(format_parse_context &ctx)
constexpr auto format(const R3B::SingleEdgeSignal &signal, FmtContent &ctn) const
ClassDefNV(DoubleEdgeSignal, 1)
std::vector< DoubleEdgeSignal > right
auto get(R3B::Side side) const -> const auto &
MapBarSignal()=default
void push_back(R3B::Side side, const DoubleEdgeSignal &signal)
std::vector< DoubleEdgeSignal > left
void push_back(R3B::Side side, int bar_num, const R3B::DoubleEdgeSignal &signal)
ClassDefNV(PaddleTamexMappedData, 1)
std::unordered_map< int, R3B::MapBarSignal > bars
bar number in a plane 1..50
ClassDefNV(PaddleTamexTrigMappedData, 1)
ClassDefNV(SingleEdgeSignal, 2)