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 "TTree.h"
17
18#include "StoppableThread.h"
19#include "ThreadsafeQueue.h"
20#include "TFragment.h"
21#include "TBadFragment.h"
22#include "TEpicsFrag.h"
23
25public:
26 static TFragWriteLoop* Get(std::string name = "", std::string fOutputFilename = "");
27
29 TFragWriteLoop(TFragWriteLoop&&) noexcept = delete;
30 TFragWriteLoop& operator=(const TFragWriteLoop&) = delete;
31 TFragWriteLoop& operator=(TFragWriteLoop&&) noexcept = delete;
33
34#ifndef __CINT__
35 std::shared_ptr<ThreadsafeQueue<std::shared_ptr<const TFragment>>>& InputQueue() { return fInputQueue; }
36 std::shared_ptr<ThreadsafeQueue<std::shared_ptr<const TBadFragment>>>& BadInputQueue() { return fBadInputQueue; }
37 std::shared_ptr<ThreadsafeQueue<std::shared_ptr<TEpicsFrag>>>& ScalerInputQueue() { return fScalerInputQueue; }
38#endif
39
40 void ClearQueue() override;
41
42 void Write();
43
44 // there is no output queue for this loop, so we assume that all items handled (= all good fragments written)
45 // are also the number of items popped and that we have no current items
46 size_t GetItemsPushed() override { return ItemsPopped(); }
47 size_t GetItemsPopped() override { return ItemsPopped(); }
48 size_t GetItemsCurrent() override { return 0; }
49 size_t GetRate() override { return 0; }
50
51 std::string EndStatus() override;
52
53protected:
54 bool Iteration() override;
55
56private:
57 TFragWriteLoop(std::string name, const std::string& fOutputFilename);
58#ifndef __CINT__
59 void WriteEvent(const std::shared_ptr<const TFragment>& event);
60 void WriteBadEvent(const std::shared_ptr<const TBadFragment>& event);
61 void WriteScaler(const std::shared_ptr<TEpicsFrag>& scaler);
62#endif
63
65
66 TTree* fEventTree;
69
73
74#ifndef __CINT__
75 std::shared_ptr<ThreadsafeQueue<std::shared_ptr<const TFragment>>> fInputQueue;
76 std::shared_ptr<ThreadsafeQueue<std::shared_ptr<const TBadFragment>>> fBadInputQueue;
77 std::shared_ptr<ThreadsafeQueue<std::shared_ptr<TEpicsFrag>>> fScalerInputQueue;
78#endif
79
80 /// \cond CLASSIMP
81 ClassDefOverride(TFragWriteLoop, 0) // NOLINT(readability-else-after-return)
82 /// \endcond
83};
84
85/*! @} */
86#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
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
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