GRSISort "v4.0.0.5"
An extension of the ROOT analysis Framework
Loading...
Searching...
No Matches
TDataParser.h
Go to the documentation of this file.
1#ifndef TDATAPARSER_H
2#define TDATAPARSER_H
3
4/** \addtogroup Sorting
5 * @{
6 */
7
8/////////////////////////////////////////////////////////////////
9///
10/// \class TDataParser
11///
12/// The TDataParser is the DAQ dependent part of GRSISort.
13/// It takes raw data and converts it into a generic TFragment
14/// that the rest of GRSISort can deal with.
15/// This is where event word masks are applied, and any changes
16/// to the event format must be implemented.
17///
18/////////////////////////////////////////////////////////////////
19
20#include <ctime>
21#include <sstream>
22#include <vector>
23#include <map>
24#include <limits>
25#include <cstdint>
26
27#ifndef __CINT__
28#include <memory>
29#endif
30
31#include "TChannel.h"
32#include "TFragment.h"
33#include "TFragmentMap.h"
34#include "ThreadsafeQueue.h"
35#include "TEpicsFrag.h"
36#include "TGRSIOptions.h"
37
38class TRawEvent;
39
41public:
43 TDataParser(const TDataParser&) = default;
44 TDataParser(TDataParser&&) noexcept = default;
45 TDataParser& operator=(const TDataParser&) = delete;
46 TDataParser& operator=(TDataParser&&) noexcept = delete;
47 virtual ~TDataParser();
48 virtual void SetNoWaveForms(bool temp = true) { fNoWaveforms = temp; }
49 virtual void SetRecordDiag(bool temp = true) { fRecordDiag = temp; }
50
51 // if you add anything to these enums, only add at the end!
52 enum class EBank : std::uint8_t { kWFDN,
53 kGRF1,
54 kGRF2,
55 kGRF3,
56 kGRF4,
57 kFME0,
58 kFME1,
59 kFME2,
60 kFME3 };
61
62#ifndef __CINT__
63 virtual std::shared_ptr<ThreadsafeQueue<std::shared_ptr<const TFragment>>>& AddGoodOutputQueue(size_t maxSize = 50000)
64 {
65 std::ostringstream name;
66 name << "good_frag_queue_" << fGoodOutputQueues.size();
67 fGoodOutputQueues.push_back(std::make_shared<ThreadsafeQueue<std::shared_ptr<const TFragment>>>(name.str(), maxSize));
68 return fGoodOutputQueues.back();
69 }
70
71 virtual std::shared_ptr<ThreadsafeQueue<std::shared_ptr<const TBadFragment>>>& BadOutputQueue() { return fBadOutputQueue; }
72
73 virtual std::shared_ptr<ThreadsafeQueue<std::shared_ptr<TEpicsFrag>>>& ScalerOutputQueue() { return fScalerOutputQueue; }
74
75 virtual void SetStatusVariables(std::atomic_size_t* itemsPopped, std::atomic_long* inputSize)
76 {
77 fItemsPopped = itemsPopped;
78 fInputSize = inputSize;
79 }
80
81 virtual int Process(std::shared_ptr<TRawEvent>) = 0;
82 void Push(ThreadsafeQueue<std::shared_ptr<const TBadFragment>>& queue, const std::shared_ptr<TBadFragment>& frag);
83 void Push(std::vector<std::shared_ptr<ThreadsafeQueue<std::shared_ptr<const TFragment>>>>& queues, const std::shared_ptr<TFragment>& frag);
84#endif
85 virtual void ClearQueue();
86 virtual size_t ItemsPushed()
87 {
88 if(!fGoodOutputQueues.empty()) {
89 return fGoodOutputQueues.back()->ItemsPushed();
90 }
91 return std::numeric_limits<std::size_t>::max();
92 }
93 virtual void SetFinished();
94 virtual std::string OutputQueueStatus();
95
96protected:
97 // getters
98#ifndef __CINT__
99 std::vector<std::shared_ptr<ThreadsafeQueue<std::shared_ptr<const TFragment>>>>& GoodOutputQueues() { return fGoodOutputQueues; }
100#endif
101 bool NoWaveforms() const { return fNoWaveforms; }
102 bool RecordDiag() const { return fRecordDiag; }
103 TChannel* Channel() const { return fChannel; }
104
105 uint64_t MaxTriggerId() const { return fMaxTriggerId; }
106 uint64_t LastDaqId() const { return fLastDaqId; }
107 uint64_t LastTriggerId() const { return fLastTriggerId; }
108 uint64_t LastNetworkPacket() const { return fLastNetworkPacket; }
109
111
113 std::map<UInt_t, Long64_t> LastTimeStampMap() const { return fLastTimeStampMap; }
114
115 static TGRSIOptions* Options() { return fOptions; }
116
117 // setters
118 void LastTriggerId(const uint64_t& val) { fLastTriggerId = val; }
119
120 void FragmentHasWaveform(const bool& val) { fFragmentHasWaveform = val; }
121
122 static void Options(TGRSIOptions* val) { fOptions = val; }
123
124 void ItemsPopped(size_t itemsPopped)
125 {
126 if(fItemsPopped != nullptr) { *fItemsPopped = itemsPopped; }
127 }
128 void InputSize(long inputSize) // NOLINT(google-runtime-int)
129 {
130 if(fInputSize != nullptr) { *fInputSize = inputSize; }
131 }
132
134 {
135 if(fItemsPopped != nullptr) { ++fItemsPopped; }
136 }
138 {
139 if(fInputSize != nullptr) { ++fInputSize; }
140 }
141
142 void IncrementItemsPopped(size_t val)
143 {
144 if(fItemsPopped != nullptr) { fItemsPopped += val; }
145 }
146 void IncrementInputSize(long val) // NOLINT(google-runtime-int)
147 {
148 if(fInputSize != nullptr) { fInputSize += val; }
149 }
150
152 {
153 if(fItemsPopped != nullptr) { --fItemsPopped; }
154 }
156 {
157 if(fInputSize != nullptr) { --fInputSize; }
158 }
159
160private:
161#ifndef __CINT__
162 std::vector<std::shared_ptr<ThreadsafeQueue<std::shared_ptr<const TFragment>>>> fGoodOutputQueues;
163 std::shared_ptr<ThreadsafeQueue<std::shared_ptr<const TBadFragment>>> fBadOutputQueue;
164 std::shared_ptr<ThreadsafeQueue<std::shared_ptr<TEpicsFrag>>> fScalerOutputQueue;
165#endif
166
167 bool fNoWaveforms; ///< The flag to turn wave_forms on or off
168 bool fRecordDiag; ///< The flag to turn on diagnostics recording
170
171 const uint64_t fMaxTriggerId; // NOLINT(cppcoreguidelines-avoid-const-or-ref-data-members) ///< The last trigger ID Called
172 uint64_t fLastDaqId; ///< The last daq ID in the raw file
173 uint64_t fLastTriggerId; ///< The last Trigged ID in the raw File
174 uint64_t fLastNetworkPacket; ///< The last network packet recieved.
175
176 std::map<Long_t, int> fFragmentIdMap;
178
179 TFragmentMap fFragmentMap; ///< Class that holds a map of fragments per address, takes care of calculating charges for GRF4 banks
180
181 std::map<UInt_t, Long64_t> fLastTimeStampMap;
182
183 static TGRSIOptions* fOptions; ///< Static pointer to TGRSIOptions, gets set on the first call of GriffinDataToFragment
184
185#ifndef __CINT__
186 std::atomic_size_t* fItemsPopped;
187 std::atomic_long* fInputSize;
188#endif
189};
190/*! @} */
191#endif
uint64_t fLastNetworkPacket
The last network packet recieved.
bool NoWaveforms() const
TChannel * Channel() const
bool fRecordDiag
The flag to turn on diagnostics recording.
virtual std::string OutputQueueStatus()
static void Options(TGRSIOptions *val)
std::vector< std::shared_ptr< ThreadsafeQueue< std::shared_ptr< const TFragment > > > > & GoodOutputQueues()
Definition TDataParser.h:99
std::map< Long_t, int > fFragmentIdMap
void IncrementItemsPopped(size_t val)
void DecrementInputSize()
virtual std::shared_ptr< ThreadsafeQueue< std::shared_ptr< const TBadFragment > > > & BadOutputQueue()
Definition TDataParser.h:71
TFragmentMap FragmentMap() const
virtual void SetFinished()
TDataParser(const TDataParser &)=default
void Push(ThreadsafeQueue< std::shared_ptr< const TBadFragment > > &queue, const std::shared_ptr< TBadFragment > &frag)
std::shared_ptr< ThreadsafeQueue< std::shared_ptr< const TBadFragment > > > fBadOutputQueue
bool fFragmentHasWaveform
std::shared_ptr< ThreadsafeQueue< std::shared_ptr< TEpicsFrag > > > fScalerOutputQueue
virtual void SetRecordDiag(bool temp=true)
Definition TDataParser.h:49
std::map< UInt_t, Long64_t > LastTimeStampMap() const
TDataParser(TDataParser &&) noexcept=default
virtual std::shared_ptr< ThreadsafeQueue< std::shared_ptr< TEpicsFrag > > > & ScalerOutputQueue()
Definition TDataParser.h:73
std::atomic_long * fInputSize
virtual std::shared_ptr< ThreadsafeQueue< std::shared_ptr< const TFragment > > > & AddGoodOutputQueue(size_t maxSize=50000)
Definition TDataParser.h:63
virtual int Process(std::shared_ptr< TRawEvent >)=0
std::map< UInt_t, Long64_t > fLastTimeStampMap
bool RecordDiag() const
static TGRSIOptions * fOptions
Static pointer to TGRSIOptions, gets set on the first call of GriffinDataToFragment.
void IncrementInputSize(long val)
TFragmentMap fFragmentMap
Class that holds a map of fragments per address, takes care of calculating charges for GRF4 banks.
void ItemsPopped(size_t itemsPopped)
void InputSize(long inputSize)
void IncrementItemsPopped()
static TGRSIOptions * Options()
virtual void ClearQueue()
const uint64_t fMaxTriggerId
virtual void SetStatusVariables(std::atomic_size_t *itemsPopped, std::atomic_long *inputSize)
Definition TDataParser.h:75
void LastTriggerId(const uint64_t &val)
bool fNoWaveforms
The flag to turn wave_forms on or off.
void DecrementItemsPopped()
std::vector< std::shared_ptr< ThreadsafeQueue< std::shared_ptr< const TFragment > > > > fGoodOutputQueues
uint64_t LastTriggerId() const
bool FragmentHasWaveform() const
uint64_t LastDaqId() const
uint64_t LastNetworkPacket() const
uint64_t MaxTriggerId() const
std::atomic_size_t * fItemsPopped
void IncrementInputSize()
uint64_t fLastDaqId
The last daq ID in the raw file.
virtual void SetNoWaveForms(bool temp=true)
Definition TDataParser.h:48
void FragmentHasWaveform(const bool &val)
uint64_t fLastTriggerId
The last Trigged ID in the raw File.
TChannel * fChannel
virtual size_t ItemsPushed()
Definition TDataParser.h:86
RAW event.
Definition TRawEvent.h:22