1 #include "artdaq/DAQdata/GenericFragmentSimulator.hh"
3 #include "artdaq-core/Generators/GeneratorMacros.hh"
4 #include "fhiclcpp/ParameterSet.h"
11 : content_selection_(static_cast<
content_selector_t>(ps.get<size_t>(
"content_selection", 0)))
12 , payload_size_spec_(ps.get<size_t>(
"payload_size", 10240))
14 , want_random_payload_size_(ps.get<bool>(
"want_random_payload_size", false))
15 , current_event_num_(0)
16 , engine_(ps.get<int64_t>(
"random_seed", 314159))
17 , payload_size_generator_(payload_size_spec_)
18 , fragment_content_generator_()
20 fragment_ids_.resize(ps.get<
size_t>(
"fragments_per_event", 5));
21 auto current_id = ps.get<Fragment::fragment_id_t>(
"starting_fragment_id", 0);
22 std::generate(fragment_ids_.begin(),
24 [¤t_id]() {
return current_id++; });
27 bool artdaq::GenericFragmentSimulator::getNext_(FragmentPtrs& frags)
31 for (
auto fragID : fragment_ids_)
35 getNext(current_event_num_, fragID, frags.back());
36 if (!result) {
return result; }
42 getNext(Fragment::sequence_id_t sequence_id,
43 Fragment::fragment_id_t fragment_id,
44 FragmentPtr& frag_ptr)
46 frag_ptr.reset(
new Fragment(sequence_id, fragment_id));
47 size_t payload_size = generateFragmentSize_();
48 frag_ptr->resize(payload_size, 0);
49 frag_ptr->setSystemType(artdaq::Fragment::EmptyFragmentType);
50 switch (content_selection_)
52 case content_selector_t::EMPTY:
54 case content_selector_t::FRAG_ID:
55 std::fill_n(frag_ptr->dataBegin(), payload_size, fragment_id);
57 case content_selector_t::RANDOM:
58 std::generate_n(frag_ptr->dataBegin(),
61 return fragment_content_generator_(engine_);
64 case content_selector_t::DEAD_BEEF:
65 std::fill_n(frag_ptr->dataBegin(),
70 throw cet::exception(
"UnknownContentSelection")
71 <<
"Unknown content selection: "
72 <<
static_cast<uint8_t
>(content_selection_);
74 assert(frag_ptr !=
nullptr);
78 std::vector<artdaq::Fragment::fragment_id_t>
79 artdaq::GenericFragmentSimulator::
86 artdaq::GenericFragmentSimulator::
87 generateFragmentSize_()
89 return want_random_payload_size_ ? payload_size_generator_(engine_) : payload_size_spec_;
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.