GRSISort "v4.0.0.5"
An extension of the ROOT analysis Framework
Loading...
Searching...
No Matches
TFragmentChainLoop.h
Go to the documentation of this file.
1#ifndef TFRAGMENTCHAINLOOP_H
2#define TFRAGMENTCHAINLOOP_H
3
4/** \addtogroup Loops
5 * @{
6 */
7
8////////////////////////////////////////////////////////////////////////////////
9///
10/// \class TFragmentChainLoop
11///
12/// This loop reads fragments from a root-file with a FragmentTree.
13///
14////////////////////////////////////////////////////////////////////////////////
15
16#ifndef __CINT__
17#include <memory>
18#endif
19
20#include <map>
21
22#include "TChain.h"
23#include "TClass.h"
24
25#include "StoppableThread.h"
26#include "ThreadsafeQueue.h"
27#include "TFragment.h"
28
30public:
31 static TFragmentChainLoop* Get(std::string name = "", TChain* chain = nullptr);
34 TFragmentChainLoop& operator=(const TFragmentChainLoop&) = delete;
35 TFragmentChainLoop& operator=(TFragmentChainLoop&&) noexcept = delete;
37
38#ifndef __CINT__
39 std::shared_ptr<ThreadsafeQueue<std::shared_ptr<const TFragment>>>& AddOutputQueue()
40 {
41 fOutputQueues.push_back(std::make_shared<ThreadsafeQueue<std::shared_ptr<const TFragment>>>());
42 return fOutputQueues.back();
43 }
44#endif
45
46 size_t GetItemsPushed() override { return ItemsPopped(); }
47 size_t GetItemsPopped() override { return ItemsPopped(); }
48 size_t GetItemsCurrent() override { return fEntriesTotal; }
49 size_t GetRate() override { return 0; }
50
51 void ClearQueue() override;
52
53 void OnEnd() override;
54
55 void SetSelfStopping(bool self_stopping) { fSelfStopping = self_stopping; }
56 bool GetSelfStopping() const { return fSelfStopping; }
57 void Restart();
58
59protected:
60 bool Iteration() override;
61
62private:
63 TFragmentChainLoop(std::string name, TChain* chain);
64
66
67 TChain* fInputChain;
68#ifndef __CINT__
70 std::vector<std::shared_ptr<ThreadsafeQueue<std::shared_ptr<const TFragment>>>> fOutputQueues;
71#endif
72
74
75 int SetupChain();
76 std::map<TClass*, TDetector**> fDetMap;
77};
78
79/*! @} */
80#endif /* _TWRITELOOP_H_ */
std::atomic_size_t & ItemsPopped()
size_t GetRate() override
std::shared_ptr< ThreadsafeQueue< std::shared_ptr< const TFragment > > > & AddOutputQueue()
size_t GetItemsPopped() override
size_t GetItemsCurrent() override
std::vector< std::shared_ptr< ThreadsafeQueue< std::shared_ptr< const TFragment > > > > fOutputQueues
void ClearQueue() override
size_t GetItemsPushed() override
bool GetSelfStopping() const
TFragmentChainLoop(TFragmentChainLoop &&) noexcept=delete
void SetSelfStopping(bool self_stopping)
static TFragmentChainLoop * Get(std::string name="", TChain *chain=nullptr)
TFragmentChainLoop(const TFragmentChainLoop &)=delete
bool Iteration() override
std::map< TClass *, TDetector ** > fDetMap