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 int plane_num = 0;
59 std::unordered_map<int, R3B::MapBarSignal> bars;
60
62 explicit PaddleTamexMappedData(int pID);
63 void push_back(R3B::Side side, int barID, const R3B::DoubleEdgeSignal& signal);
64 auto empty() const -> bool { return bars.empty(); };
65
67 };
68
75} // namespace R3B
76
77template <>
78class fmt::formatter<R3B::SingleEdgeSignal>
79{
80 public:
81 static constexpr auto parse(format_parse_context& ctx) { return ctx.end(); }
82 template <typename FmtContent>
83 constexpr auto format(const R3B::SingleEdgeSignal& signal, FmtContent& ctn) const
84 {
85 return format_to(ctn.out(), "{{fine: {}, coarse: {} }}", signal.fine, signal.coarse);
86 }
87};
88
89template <>
90class fmt::formatter<R3B::DoubleEdgeSignal>
91{
92 public:
93 static constexpr auto parse(format_parse_context& ctx) { return ctx.end(); }
94 template <typename FmtContent>
95 constexpr auto format(const R3B::DoubleEdgeSignal& signal, FmtContent& ctn) const
96 {
97 return format_to(ctn.out(), "{{leading: {}, trailing: {} }}", signal.leading, signal.trailing);
98 }
99};
100
101template <>
102class fmt::formatter<R3B::MapBarSignal>
103{
104 public:
105 static constexpr auto parse(format_parse_context& ctx) { return ctx.end(); }
106 template <typename FmtContent>
107 constexpr auto format(const R3B::MapBarSignal& signal, FmtContent& ctn) const
108 {
109 return format_to(
110 ctn.out(), "{{left: [{}], right: [{}] }}", fmt::join(signal.left, ", "), fmt::join(signal.left, ", "));
111 }
112};
113
114using R3BPaddleTamexMappedDataContainer = std::vector<R3B::PaddleTamexMappedData>;
115using R3BPaddleTamexTrigDataContainer = std::map<int, R3B::PaddleTamexTrigMappedData>;
116
std::map< int, R3B::PaddleTamexTrigMappedData > R3BPaddleTamexTrigDataContainer
std::vector< R3B::PaddleTamexMappedData > R3BPaddleTamexMappedDataContainer
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 barID, const R3B::DoubleEdgeSignal &signal)
ClassDefNV(PaddleTamexMappedData, 1)
std::unordered_map< int, R3B::MapBarSignal > bars
number of bar 1..n
ClassDefNV(PaddleTamexTrigMappedData, 2)
ClassDefNV(SingleEdgeSignal, 2)