GRSISort "v4.0.0.5"
An extension of the ROOT analysis Framework
Loading...
Searching...
No Matches
TParsingDiagnostics.h
Go to the documentation of this file.
1#ifndef TPARSINGDIAGNOSTICS_H
2#define TPARSINGDIAGNOSTICS_H
3
4/** \addtogroup Sorting
5 * @{
6 */
7
8////////////////////////////////////////////////////////////////////////////////
9///
10/// \class TParsingDiagnostics
11///
12/// This class gathers various diagnostics calculated during the sorting from
13/// a raw file to a fragment tree and analysis tree and provides convenient
14/// methods of printing and/or visualizing them.
15///
16////////////////////////////////////////////////////////////////////////////////
17
18#include <unordered_map>
19
20#ifndef __CINT__
21#include <memory>
22#endif
23
24#include "TObject.h"
25
26#include "TSingleton.h"
27#include "TPPG.h"
28#include "TFragment.h"
29
30class TParsingDiagnosticsData : public TObject {
31public:
33 explicit TParsingDiagnosticsData(const std::shared_ptr<const TFragment>& frag);
37 TParsingDiagnosticsData& operator=(TParsingDiagnosticsData&&) noexcept = default;
39
40 void Update(const std::shared_ptr<const TFragment>& frag);
41 using TObject::Print;
42 void Print(UInt_t address) const;
43
44 // getters
45 UInt_t MinChannelId() const { return fMinChannelId; }
46 UInt_t MaxChannelId() const { return fMaxChannelId; }
47
48 Long_t NumberOfHits() const { return fNumberOfHits; }
49
50 int64_t DeadTime() const { return fDeadTime; }
51 int64_t MinTimeStamp() const { return fMinTimeStamp; }
52 int64_t MaxTimeStamp() const { return fMaxTimeStamp; }
53
54private:
55 UInt_t fMinChannelId{0}; ///< minimum channel id per channel address
56 UInt_t fMaxChannelId{0}; ///< maximum channel id per channel address
57
58 Long_t fNumberOfHits{0}; ///< number of hits per channel address
59
60 int64_t fDeadTime{0}; ///< deadtime per channel address
61 int64_t fMinTimeStamp{0}; ///< minimum timestamp per channel address
62 int64_t fMaxTimeStamp{0}; ///< maximum timestamp per channel address
63
64 /// \cond CLASSIMP
65 ClassDefOverride(TParsingDiagnosticsData, 1) // NOLINT(readability-else-after-return)
66 /// \endcond
67};
68
69class TParsingDiagnostics : public TSingleton<TParsingDiagnostics> {
70public:
71 friend class TSingleton<TParsingDiagnostics>;
72
76 TParsingDiagnostics& operator=(const TParsingDiagnostics&) = default;
77 TParsingDiagnostics& operator=(TParsingDiagnostics&&) noexcept = default;
79
80private:
81 // fragment tree diagnostics (should these all be static?)
82 // detector type unordered_maps
83 std::unordered_map<Short_t, Long_t> fNumberOfGoodFragments; ///< unordered_map of number of good fragments per detector type
84 std::unordered_map<Short_t, Long_t> fNumberOfBadFragments; ///< unordered_map of number of bad fragments per detector type
85
86 // channel address unordered_maps
87 std::unordered_map<UInt_t, TParsingDiagnosticsData> fChannelAddressData; ///< unordered_map of data per channel address
88
89 time_t fMinDaqTimeStamp{0}; ///< minimum daq timestamp
90 time_t fMaxDaqTimeStamp{0}; ///< maximum daq timestamp
91
92 Int_t fMinNetworkPacketNumber{0x7fffffff}; ///< minimum network packet id
93 Int_t fMaxNetworkPacketNumber{0}; ///< maximum network packet id
94
96
97 // ppg diagnostics
98 ULong64_t fPPGCycleLength{0};
99
100 TH1F* fIdHist{nullptr}; ///< histogram of event survival
101
102public:
103//"setter" functions
104#ifndef __CINT__
105 void GoodFragment(const std::shared_ptr<const TFragment>&);
106#endif
107 void GoodFragment(Short_t detType)
108 {
109 fNumberOfGoodFragments[detType]++;
110 }
111 void BadFragment(Short_t detType) { fNumberOfBadFragments[detType]++; }
112
113 void ReadPPG(TPPG*);
114
115 // getter functions
116 Long_t NumberOfGoodFragments(Short_t detType)
117 {
118 if(fNumberOfGoodFragments.find(detType) != fNumberOfGoodFragments.end()) {
119 return fNumberOfGoodFragments[detType];
120 }
121 return 0;
122 }
123 Long_t NumberOfBadFragments(Short_t detType)
124 {
125 if(fNumberOfBadFragments.find(detType) != fNumberOfBadFragments.end()) {
126 return fNumberOfBadFragments[detType];
127 }
128 return 0;
129 }
130
131 ULong64_t PPGCycleLength() const { return fPPGCycleLength; }
132
133 // other functions
134 void WriteToFile(const char*) const;
135
136 void Copy(TObject&) const override;
137 void Clear(Option_t* opt = "all") override;
138 void Print(Option_t* opt = "") const override;
139 void Draw(Option_t* opt = "") override;
140
141 /// \cond CLASSIMP
142 ClassDefOverride(TParsingDiagnostics, 2); // NOLINT(readability-else-after-return)
143 /// \endcond
144};
145/*! @} */
146#endif
Definition TPPG.h:130
TParsingDiagnosticsData(const TParsingDiagnosticsData &)=default
int64_t fMinTimeStamp
minimum timestamp per channel address
UInt_t fMaxChannelId
maximum channel id per channel address
void Update(const std::shared_ptr< const TFragment > &frag)
int64_t fDeadTime
deadtime per channel address
TParsingDiagnosticsData(TParsingDiagnosticsData &&) noexcept=default
UInt_t fMinChannelId
minimum channel id per channel address
void Print(UInt_t address) const
Long_t fNumberOfHits
number of hits per channel address
int64_t fMaxTimeStamp
maximum timestamp per channel address
void Copy(TObject &) const override
time_t fMaxDaqTimeStamp
maximum daq timestamp
ULong64_t PPGCycleLength() const
Int_t fMinNetworkPacketNumber
minimum network packet id
time_t fMinDaqTimeStamp
minimum daq timestamp
void Print(Option_t *opt="") const override
void Clear(Option_t *opt="all") override
TParsingDiagnostics(TParsingDiagnostics &&) noexcept=default
Long_t NumberOfGoodFragments(Short_t detType)
void GoodFragment(Short_t detType)
void Draw(Option_t *opt="") override
TH1F * fIdHist
histogram of event survival
void WriteToFile(const char *) const
std::unordered_map< UInt_t, TParsingDiagnosticsData > fChannelAddressData
unordered_map of data per channel address
Long_t NumberOfBadFragments(Short_t detType)
Int_t fMaxNetworkPacketNumber
maximum network packet id
std::unordered_map< Short_t, Long_t > fNumberOfBadFragments
unordered_map of number of bad fragments per detector type
void BadFragment(Short_t detType)
void GoodFragment(const std::shared_ptr< const TFragment > &)
std::unordered_map< Short_t, Long_t > fNumberOfGoodFragments
unordered_map of number of good fragments per detector type