GRSISort "v4.0.0.5"
An extension of the ROOT analysis Framework
Loading...
Searching...
No Matches
TDetBuildingLoop.h
Go to the documentation of this file.
1#ifndef TDETBUILDINGLOOP_H
2#define TDETBUILDINGLOOP_H
3
4/** \addtogroup Loops
5 * @{
6 */
7
8////////////////////////////////////////////////////////////////////////////////
9///
10/// \class TDetBuildingLoop
11///
12/// This loop builds detectors from vectors of fragments.
13///
14////////////////////////////////////////////////////////////////////////////////
15
16#ifndef __CINT__
17#include <condition_variable>
18#include <mutex>
19#include <queue>
20#endif
21
22#include "StoppableThread.h"
23#include "ThreadsafeQueue.h"
24#include "TFragment.h"
25
26class TNSCLEvent;
27class TGEBEvent;
28class TUnpackedEvent;
29
30class TDetector;
31
33public:
34 static TDetBuildingLoop* Get(std::string name = "");
36 TDetBuildingLoop(TDetBuildingLoop&&) noexcept = delete;
37 TDetBuildingLoop& operator=(const TDetBuildingLoop&) = delete;
38 TDetBuildingLoop& operator=(TDetBuildingLoop&&) noexcept = delete;
40
41#ifndef __CINT__
42 std::shared_ptr<ThreadsafeQueue<std::vector<std::shared_ptr<const TFragment>>>>& InputQueue()
43 {
44 return fInputQueue;
45 }
46 std::shared_ptr<ThreadsafeQueue<std::shared_ptr<TUnpackedEvent>>>& AddOutputQueue(size_t maxSize = 50000)
47 {
48 std::ostringstream name;
49 name << "event_queue_" << fOutputQueues.size();
50 fOutputQueues.push_back(std::make_shared<ThreadsafeQueue<std::shared_ptr<TUnpackedEvent>>>(name.str(), maxSize));
51 return fOutputQueues.back();
52 }
53#endif
54
55 bool Iteration() override;
56 void ClearQueue() override;
57
58 size_t GetItemsPushed() override
59 {
60 if(!fOutputQueues.empty()) {
61 return fOutputQueues.back()->ItemsPushed();
62 }
63 return std::numeric_limits<size_t>::max();
64 } // this should work fine as all loops are always filled at the same time
65 size_t GetItemsPopped() override { return 0; } // fOutputQueue->ItemsPopped(); }
66 size_t GetItemsCurrent() override { return 0; } // fOutputQueue->Size(); }
67 size_t GetRate() override { return 0; }
68
69private:
70 explicit TDetBuildingLoop(std::string name);
71
72#ifndef __CINT__
73 std::shared_ptr<ThreadsafeQueue<std::vector<std::shared_ptr<const TFragment>>>> fInputQueue;
74 std::vector<std::shared_ptr<ThreadsafeQueue<std::shared_ptr<TUnpackedEvent>>>> fOutputQueues;
75#endif
76
77 /// \cond CLASSIMP
78 ClassDefOverride(TDetBuildingLoop, 0) // NOLINT(readability-else-after-return)
79 /// \endcond
80};
81
82/*! @} */
83#endif /* _TDETBUILDINGLOOP_H_ */
std::shared_ptr< ThreadsafeQueue< std::shared_ptr< TUnpackedEvent > > > & AddOutputQueue(size_t maxSize=50000)
void ClearQueue() override
std::shared_ptr< ThreadsafeQueue< std::vector< std::shared_ptr< const TFragment > > > > fInputQueue
bool Iteration() override
size_t GetItemsCurrent() override
size_t GetItemsPushed() override
TDetBuildingLoop(const TDetBuildingLoop &)=delete
std::vector< std::shared_ptr< ThreadsafeQueue< std::shared_ptr< TUnpackedEvent > > > > fOutputQueues
size_t GetItemsPopped() override
TDetBuildingLoop(TDetBuildingLoop &&) noexcept=delete
size_t GetRate() override
std::shared_ptr< ThreadsafeQueue< std::vector< std::shared_ptr< const TFragment > > > > & InputQueue()
static TDetBuildingLoop * Get(std::string name="")