GRSISort "v4.0.0.5"
An extension of the ROOT analysis Framework
Loading...
Searching...
No Matches
TFragWriteLoop.h
Go to the documentation of this file.
1#ifndef TWRITELOOP_H
2#define TWRITELOOP_H
3
4/** \addtogroup Loops
5 * @{
6 */
7
8////////////////////////////////////////////////////////////////////////////////
9///
10/// \class TFragWriteLoop
11///
12/// This loop writes fragments to a root-file.
13///
14////////////////////////////////////////////////////////////////////////////////
15
16#include <map>
17
18#include "TClass.h"
19#include "TTree.h"
20
21#include "StoppableThread.h"
22#include "ThreadsafeQueue.h"
23#include "TFragment.h"
24#include "TBadFragment.h"
25#include "TEpicsFrag.h"
26
28public:
29 static TFragWriteLoop* Get(std::string name = "", std::string fOutputFilename = "");
30
32 TFragWriteLoop(TFragWriteLoop&&) noexcept = delete;
33 TFragWriteLoop& operator=(const TFragWriteLoop&) = delete;
34 TFragWriteLoop& operator=(TFragWriteLoop&&) noexcept = delete;
36
37#ifndef __CINT__
38 std::shared_ptr<ThreadsafeQueue<std::shared_ptr<const TFragment>>>& InputQueue()
39 {
40 return fInputQueue;
41 }
42 std::shared_ptr<ThreadsafeQueue<std::shared_ptr<const TBadFragment>>>& BadInputQueue() { return fBadInputQueue; }
43 std::shared_ptr<ThreadsafeQueue<std::shared_ptr<TEpicsFrag>>>& ScalerInputQueue() { return fScalerInputQueue; }
44 std::shared_ptr<ThreadsafeQueue<std::shared_ptr<const TFragment>>>& OutputQueue() { return fOutputQueue; }
45#endif
46
47 void ClearQueue() override;
48
49 void Write();
50
51 // there is no output queue for this loop, so we assume that all items handled (= all good fragments written)
52 // are also the number of items popped and that we have no current items
53 size_t GetItemsPushed() override { return ItemsPopped(); }
54 size_t GetItemsPopped() override { return ItemsPopped(); }
55 size_t GetItemsCurrent() override { return 0; }
56 size_t GetRate() override { return 0; }
57
58 std::string EndStatus() override;
59
60protected:
61 bool Iteration() override;
62
63private:
64 TFragWriteLoop(std::string name, const std::string& fOutputFilename);
65#ifndef __CINT__
66 void WriteEvent(const std::shared_ptr<const TFragment>& event);
67 void WriteBadEvent(const std::shared_ptr<const TBadFragment>& event);
68 void WriteScaler(const std::shared_ptr<TEpicsFrag>& scaler);
69#endif
70
72
73 TTree* fEventTree;
76
80
81#ifndef __CINT__
82 std::shared_ptr<ThreadsafeQueue<std::shared_ptr<const TFragment>>> fInputQueue;
83 std::shared_ptr<ThreadsafeQueue<std::shared_ptr<const TBadFragment>>> fBadInputQueue;
84 std::shared_ptr<ThreadsafeQueue<std::shared_ptr<TEpicsFrag>>> fScalerInputQueue;
85 std::shared_ptr<ThreadsafeQueue<std::shared_ptr<const TFragment>>> fOutputQueue;
86#endif
87
88 /// \cond CLASSIMP
89 ClassDefOverride(TFragWriteLoop, 0) // NOLINT(readability-else-after-return)
90 /// \endcond
91};
92
93/*! @} */
94#endif /* _TWRITELOOP_H_ */
std::atomic_size_t & ItemsPopped()
void ClearQueue() override
size_t GetItemsPushed() override
std::string EndStatus() override
TTree * fBadEventTree
bool Iteration() override
size_t GetItemsPopped() override
std::shared_ptr< ThreadsafeQueue< std::shared_ptr< const TBadFragment > > > & BadInputQueue()
TEpicsFrag * fScalerAddress
std::shared_ptr< ThreadsafeQueue< std::shared_ptr< const TBadFragment > > > fBadInputQueue
void WriteBadEvent(const std::shared_ptr< const TBadFragment > &event)
TFragWriteLoop(TFragWriteLoop &&) noexcept=delete
std::shared_ptr< ThreadsafeQueue< std::shared_ptr< const TFragment > > > fInputQueue
std::shared_ptr< ThreadsafeQueue< std::shared_ptr< const TFragment > > > fOutputQueue
void WriteScaler(const std::shared_ptr< TEpicsFrag > &scaler)
TBadFragment * fBadEventAddress
std::shared_ptr< ThreadsafeQueue< std::shared_ptr< const TFragment > > > & InputQueue()
std::shared_ptr< ThreadsafeQueue< std::shared_ptr< TEpicsFrag > > > fScalerInputQueue
static TFragWriteLoop * Get(std::string name="", std::string fOutputFilename="")
TFragment * fEventAddress
std::shared_ptr< ThreadsafeQueue< std::shared_ptr< const TFragment > > > & OutputQueue()
void WriteEvent(const std::shared_ptr< const TFragment > &event)
size_t GetRate() override
size_t GetItemsCurrent() override
std::shared_ptr< ThreadsafeQueue< std::shared_ptr< TEpicsFrag > > > & ScalerInputQueue()
TFragWriteLoop(const TFragWriteLoop &)=delete