GRSISort "v4.0.0.5"
An extension of the ROOT analysis Framework
Loading...
Searching...
No Matches
TAnalysisWriteLoop.h
Go to the documentation of this file.
1#ifndef TANALYSISWRITELOOP_H
2#define TANALYSISWRITELOOP_H
3
4/** \addtogroup Loops
5 * @{
6 */
7
8#include <future>
9#include <vector>
10
11#include "TClass.h"
12#include "TTree.h"
13
14#include "StoppableThread.h"
15#include "ThreadsafeQueue.h"
16#include "TUnpackedEvent.h"
17
18////////////////////////////////////////////////////////////////////////////////
19///
20/// \class TAnalysisWriteLoop
21///
22/// This loop writes built events to file
23///
24////////////////////////////////////////////////////////////////////////////////
25
27public:
28 static TAnalysisWriteLoop* Get(std::string name = "", std::string outputFilename = "");
29
32 TAnalysisWriteLoop& operator=(const TAnalysisWriteLoop&) = delete;
33 TAnalysisWriteLoop& operator=(TAnalysisWriteLoop&&) noexcept = delete;
35
36#ifndef __CINT__
37 std::shared_ptr<ThreadsafeQueue<std::shared_ptr<TUnpackedEvent>>>& InputQueue()
38 {
39 return fInputQueue;
40 }
41 std::shared_ptr<ThreadsafeQueue<std::shared_ptr<const TFragment>>>& OutOfOrderQueue() { return fOutOfOrderQueue; }
42#endif
43
44 void ClearQueue() override;
45
46 void Write();
47
48 size_t GetItemsPushed() override { return ItemsPopped(); }
49 size_t GetItemsPopped() override { return 0; }
50 size_t GetItemsCurrent() override { return 0; }
51 size_t GetRate() override { return 0; }
52
53 std::string EndStatus() override;
54 void OnEnd() override;
55
56protected:
57 bool Iteration() override;
58
59private:
60 TAnalysisWriteLoop(std::string name, const std::string& outputFilename);
61
62 void AddBranch(TClass* cls);
63 void WriteEvent(std::shared_ptr<TUnpackedEvent>& event);
64
66 TTree* fEventTree;
70#ifndef __CINT__
71 std::map<TClass*, TDetector**> fDetMap;
72 std::map<TClass*, TDetector*> fDefaultDets;
73 std::shared_ptr<ThreadsafeQueue<std::shared_ptr<TUnpackedEvent>>> fInputQueue;
74 std::shared_ptr<ThreadsafeQueue<std::shared_ptr<const TFragment>>> fOutOfOrderQueue;
75#endif
76
77 /// \cond CLASSIMP
78 ClassDefOverride(TAnalysisWriteLoop, 0) // NOLINT(readability-else-after-return)
79 /// \endcond
80};
81
82/*! @} */
83#endif /* _TWRITELOOP_H_ */
std::atomic_size_t & ItemsPopped()
TAnalysisWriteLoop(TAnalysisWriteLoop &&) noexcept=delete
static TAnalysisWriteLoop * Get(std::string name="", std::string outputFilename="")
std::shared_ptr< ThreadsafeQueue< std::shared_ptr< const TFragment > > > fOutOfOrderQueue
std::string EndStatus() override
size_t GetItemsPushed() override
void WriteEvent(std::shared_ptr< TUnpackedEvent > &event)
std::shared_ptr< ThreadsafeQueue< std::shared_ptr< TUnpackedEvent > > > fInputQueue
std::shared_ptr< ThreadsafeQueue< std::shared_ptr< TUnpackedEvent > > > & InputQueue()
size_t GetRate() override
size_t GetItemsPopped() override
std::shared_ptr< ThreadsafeQueue< std::shared_ptr< const TFragment > > > & OutOfOrderQueue()
std::map< TClass *, TDetector ** > fDetMap
bool Iteration() override
size_t GetItemsCurrent() override
void ClearQueue() override
void AddBranch(TClass *cls)
std::map< TClass *, TDetector * > fDefaultDets
TAnalysisWriteLoop(const TAnalysisWriteLoop &)=delete