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#include "StoppableThread.h"
17#include "ThreadsafeQueue.h"
18#include "TFragment.h"
19
20class TNSCLEvent;
21class TGEBEvent;
22class TUnpackedEvent;
23
24class TDetector;
25
27public:
28 static TDetBuildingLoop* Get(std::string name = "");
30 TDetBuildingLoop(TDetBuildingLoop&&) noexcept = delete;
31 TDetBuildingLoop& operator=(const TDetBuildingLoop&) = delete;
32 TDetBuildingLoop& operator=(TDetBuildingLoop&&) noexcept = delete;
34
35#ifndef __CINT__
36 std::shared_ptr<ThreadsafeQueue<std::vector<std::shared_ptr<const TFragment>>>>& InputQueue()
37 {
38 return fInputQueue;
39 }
40 std::shared_ptr<ThreadsafeQueue<std::shared_ptr<TUnpackedEvent>>>& AddOutputQueue(size_t maxSize = 50000)
41 {
42 std::ostringstream name;
43 name << "event_queue_" << fOutputQueues.size();
44 fOutputQueues.push_back(std::make_shared<ThreadsafeQueue<std::shared_ptr<TUnpackedEvent>>>(name.str(), maxSize));
45 return fOutputQueues.back();
46 }
47#endif
48
49 bool Iteration() override;
50 void ClearQueue() override;
51
52 size_t GetItemsPushed() override
53 {
54 if(!fOutputQueues.empty()) {
55 return fOutputQueues.back()->ItemsPushed();
56 }
57 return std::numeric_limits<size_t>::max();
58 } // this should work fine as all loops are always filled at the same time
59 size_t GetItemsPopped() override { return 0; } // fOutputQueue->ItemsPopped(); }
60 size_t GetItemsCurrent() override { return 0; } // fOutputQueue->Size(); }
61 size_t GetRate() override { return 0; }
62
63private:
64 explicit TDetBuildingLoop(std::string name);
65
66#ifndef __CINT__
67 std::shared_ptr<ThreadsafeQueue<std::vector<std::shared_ptr<const TFragment>>>> fInputQueue;
68 std::vector<std::shared_ptr<ThreadsafeQueue<std::shared_ptr<TUnpackedEvent>>>> fOutputQueues;
69#endif
70
71 /// \cond CLASSIMP
72 ClassDefOverride(TDetBuildingLoop, 0) // NOLINT(readability-else-after-return)
73 /// \endcond
74};
75
76/*! @} */
77#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="")