GRSISort "v4.0.0.5"
An extension of the ROOT analysis Framework
Loading...
Searching...
No Matches
TDataParser.cxx
Go to the documentation of this file.
1#include "TDataParser.h"
2
3#include "TChannel.h"
4#include "Globals.h"
5
6#include "TScalerQueue.h"
7
8#include "TEpicsFrag.h"
10
11#include "Rtypes.h"
12
13#include "TFragment.h"
14#include "TBadFragment.h"
15
17
19 : fBadOutputQueue(std::make_shared<ThreadsafeQueue<std::shared_ptr<const TBadFragment>>>("bad_frag_queue")),
20 fScalerOutputQueue(std::make_shared<ThreadsafeQueue<std::shared_ptr<TEpicsFrag>>>("scaler_queue")),
21 fNoWaveforms(false), fRecordDiag(true), fChannel(new TChannel), fMaxTriggerId(1024 * 1024 * 16),
22 fLastDaqId(0), fLastTriggerId(0), fLastNetworkPacket(0), fFragmentHasWaveform(false),
23 fFragmentMap(fGoodOutputQueues, fBadOutputQueue), fItemsPopped(nullptr), fInputSize(nullptr)
24{
25}
26
31
33{
34 std::shared_ptr<const TFragment> frag;
35 for(const auto& outQueue : fGoodOutputQueues) {
36 while(outQueue->Size() != 0u) {
37 outQueue->Pop(frag);
38 }
39 }
40 std::shared_ptr<const TBadFragment> badFrag;
41 while(fBadOutputQueue->Size() != 0u) {
42 fBadOutputQueue->Pop(badFrag);
43 }
44 std::shared_ptr<TEpicsFrag> epicsFrag;
45 while(fScalerOutputQueue->Size() != 0u) {
46 fScalerOutputQueue->Pop(epicsFrag);
47 }
48}
49
51{
52 for(const auto& outQueue : fGoodOutputQueues) {
53 outQueue->SetFinished();
54 }
55 fBadOutputQueue->SetFinished();
56 fScalerOutputQueue->SetFinished();
57}
58
59void TDataParser::Push(std::vector<std::shared_ptr<ThreadsafeQueue<std::shared_ptr<const TFragment>>>>& queues,
60 const std::shared_ptr<TFragment>& frag)
61{
62 frag->SetFragmentId(fFragmentIdMap[frag->GetTriggerId()]);
63 fFragmentIdMap[frag->GetTriggerId()]++;
64 frag->SetEntryNumber();
65 for(const auto& queue : queues) {
66 queue->Push(frag);
67 }
68}
69
70void TDataParser::Push(ThreadsafeQueue<std::shared_ptr<const TBadFragment>>& queue, const std::shared_ptr<TBadFragment>& frag)
71{
72 frag->SetFragmentId(fFragmentIdMap[frag->GetTriggerId()]);
73 fFragmentIdMap[frag->GetTriggerId()]++;
74 frag->SetEntryNumber();
75 queue.Push(frag);
76}
77
79{
80 std::ostringstream status;
81 status << "********************************************************************************" << std::endl;
82 for(const auto& queue : fGoodOutputQueues) {
83 status << queue->Name() << ": " << queue->ItemsPushed() << " pushed, " << queue->ItemsPopped() << " popped, "
84 << queue->Size() << " left" << std::endl;
85 }
86 status << "********************************************************************************" << std::endl;
87 return status.str();
88}
virtual std::string OutputQueueStatus()
std::map< Long_t, int > fFragmentIdMap
virtual void SetFinished()
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
std::shared_ptr< ThreadsafeQueue< std::shared_ptr< TEpicsFrag > > > fScalerOutputQueue
static TGRSIOptions * fOptions
Static pointer to TGRSIOptions, gets set on the first call of GriffinDataToFragment.
virtual void ClearQueue()
virtual ~TDataParser()
std::vector< std::shared_ptr< ThreadsafeQueue< std::shared_ptr< const TFragment > > > > fGoodOutputQueues
TChannel * fChannel