1 #include "artdaq/DAQdata/GenericFragmentSimulator.hh"
3 #include "artdaq-core/Generators/GeneratorMacros.hh"
4 #include "fhiclcpp/ParameterSet.h"
12 (ps.get<size_t>(
"content_selection", 0)))
13 , payload_size_spec_(ps.get<size_t>(
"payload_size", 10240))
15 , want_random_payload_size_(ps.get<bool>(
"want_random_payload_size", false))
16 , current_event_num_(0)
17 , engine_(ps.get<int64_t>(
"random_seed", 314159))
18 , payload_size_generator_(payload_size_spec_)
19 , fragment_content_generator_()
21 fragment_ids_.resize(ps.get<
size_t>(
"fragments_per_event", 5));
22 auto current_id = ps.get<Fragment::fragment_id_t>(
"starting_fragment_id", 0);
23 std::generate(fragment_ids_.begin(),
25 [¤t_id]() {
return current_id++; });
29 artdaq::GenericFragmentSimulator::getNext_(FragmentPtrs& frags)
33 for (
auto fragID : fragment_ids_)
37 getNext(current_event_num_, fragID, frags.back());
38 if (!result) {
return result; }
45 getNext(Fragment::sequence_id_t sequence_id,
46 Fragment::fragment_id_t fragment_id,
47 FragmentPtr& frag_ptr)
49 frag_ptr.reset(
new Fragment(sequence_id, fragment_id));
50 size_t payload_size = generateFragmentSize_();
51 frag_ptr->resize(payload_size, 0);
52 switch (content_selection_)
54 case content_selector_t::EMPTY:
56 case content_selector_t::FRAG_ID:
57 std::fill_n(frag_ptr->dataBegin(), payload_size, fragment_id);
59 case content_selector_t::RANDOM:
60 std::generate_n(frag_ptr->dataBegin(),
65 fragment_content_generator_(engine_);
69 case content_selector_t::DEAD_BEEF:
70 std::fill_n(frag_ptr->dataBegin(),
75 throw cet::exception(
"UnknownContentSelection")
76 <<
"Unknown content selection: "
77 <<
static_cast<uint8_t
>(content_selection_);
79 assert(frag_ptr !=
nullptr);
83 std::vector<artdaq::Fragment::fragment_id_t>
84 artdaq::GenericFragmentSimulator::
91 artdaq::GenericFragmentSimulator::
92 generateFragmentSize_()
94 return want_random_payload_size_ ?
95 payload_size_generator_(engine_) :
GenericFragmentSimulator(fhicl::ParameterSet const &ps)
GenericFragmentSimulator Constructor.
GenericFragmentSimulator creates simulated Generic events, with data distributed according to a "hist...
content_selector_t
What type of content should the GenericFragmentSimulator put in Fragment objects? ...
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.