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 <atomic>
18#include <memory>
19#endif
20
21#include <map>
22
23#include "TChain.h"
24#include "TClass.h"
25
26#include "TUnpackingLoop.h"
27#include "StoppableThread.h"
28#include "ThreadsafeQueue.h"
29#include "TFragment.h"
30
32public:
33 static TFragmentChainLoop* Get(std::string name = "", TChain* chain = nullptr);
36 TFragmentChainLoop& operator=(const TFragmentChainLoop&) = delete;
37 TFragmentChainLoop& operator=(TFragmentChainLoop&&) noexcept = delete;
39
40#ifndef __CINT__
41 std::shared_ptr<ThreadsafeQueue<std::shared_ptr<const TFragment>>>& AddOutputQueue()
42 {
43 fOutputQueues.push_back(std::make_shared<ThreadsafeQueue<std::shared_ptr<const TFragment>>>());
44 return fOutputQueues.back();
45 }
46#endif
47
48 size_t GetItemsPushed() override { return ItemsPopped(); }
49 size_t GetItemsPopped() override { return ItemsPopped(); }
50 size_t GetItemsCurrent() override { return fEntriesTotal; }
51 size_t GetRate() override { return 0; }
52
53 void ClearQueue() override;
54
55 void OnEnd() override;
56
57 void SetSelfStopping(bool self_stopping) { fSelfStopping = self_stopping; }
58 bool GetSelfStopping() const { return fSelfStopping; }
59 void Restart();
60
61protected:
62 bool Iteration() override;
63
64private:
65 TFragmentChainLoop(std::string name, TChain* chain);
66
68
69 TChain* fInputChain;
70#ifndef __CINT__
72 std::vector<std::shared_ptr<ThreadsafeQueue<std::shared_ptr<const TFragment>>>> fOutputQueues;
73#endif
74
76
77 int SetupChain();
78 std::map<TClass*, TDetector**> fDetMap;
79};
80
81/*! @} */
82#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