artdaq  v2_03_00
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Pages
GenericFragmentSimulator.hh
1 #ifndef artdaq_DAQdata_GenericFragmentSimulator_hh
2 #define artdaq_DAQdata_GenericFragmentSimulator_hh
3 
4 #include "artdaq-core/Data/Fragment.hh"
5 #include "artdaq-core/Generators/FragmentGenerator.hh"
6 #include "fhiclcpp/fwd.h"
7 
8 #include <random>
9 
10 namespace artdaq
11 {
12  class GenericFragmentSimulator;
13 }
14 
26 class artdaq::GenericFragmentSimulator : public artdaq::FragmentGenerator
27 {
28 public:
48  explicit GenericFragmentSimulator(fhicl::ParameterSet const& ps);
49 
53  enum class content_selector_t : uint8_t
54  {
55  EMPTY = 0,
56  FRAG_ID = 1,
57  RANDOM = 2,
58  DEAD_BEEF
59  };
60 
61  // Not part of virtual interface: generate a specific fragment.
62  using FragmentGenerator::getNext;
63 
71  bool getNext(Fragment::sequence_id_t sequence_id,
72  Fragment::fragment_id_t fragment_id,
73  FragmentPtr& frag_ptr);
74 
80  bool getNext(FragmentPtrs& output) override
81  {
82  return getNext_(output);
83  }
84 
89  std::vector<Fragment::fragment_id_t> fragmentIDs() override
90  {
91  return fragmentIDs_();
92  }
93 
94 private:
95  bool getNext_(FragmentPtrs& output);
96 
97  std::vector<Fragment::fragment_id_t> fragmentIDs_();
98 
99  std::size_t generateFragmentSize_();
100 
101  // Configuration
102  content_selector_t const content_selection_;
103  std::size_t const payload_size_spec_; // Poisson mean if random size wanted.
104  std::vector<Fragment::fragment_id_t> fragment_ids_;
105 
106  bool const want_random_payload_size_;
107 
108  // State
109  std::size_t current_event_num_;
110  std::mt19937 engine_;
111  std::poisson_distribution<size_t> payload_size_generator_;
112  std::uniform_int_distribution<uint64_t> fragment_content_generator_;
113 };
114 
115 #endif /* artdaq_DAQdata_GenericFragmentSimulator_hh */
bool getNext(FragmentPtrs &output) override
Get the next Fragment from the generator.
GenericFragmentSimulator(fhicl::ParameterSet const &ps)
GenericFragmentSimulator Constructor.
std::vector< Fragment::fragment_id_t > fragmentIDs() override
Get the Fragment IDs generated by this instance.
GenericFragmentSimulator creates simulated Generic events, with data distributed according to a &quot;hist...
content_selector_t
What type of content should the GenericFragmentSimulator put in Fragment objects? ...
Use a random distribution to fill the payload.
bool getNext(Fragment::sequence_id_t sequence_id, Fragment::fragment_id_t fragment_id, FragmentPtr &frag_ptr)
Generate a Fragment according to the value of the content_selectior_t enum.
Fill the payload with 0xDEADBEEFDEADBEEF.