1 #include "artdaq-demo/Generators/AsciiSimulator.hh"
3 #include "artdaq-core-demo/Overlays/AsciiFragment.hh"
4 #include "artdaq-core-demo/Overlays/AsciiFragmentWriter.hh"
5 #include "artdaq-core-demo/Overlays/FragmentType.hh"
6 #include "artdaq-core/Utilities/SimpleLookupPolicy.hh"
7 #include "artdaq/Generators/GeneratorMacros.hh"
8 #include "cetlib_except/exception.h"
9 #include "fhiclcpp/ParameterSet.h"
28 if (input.size() <
sizeof(T) /
sizeof(
char))
30 input.insert(0,
sizeof(T) /
sizeof(
char) - input.size(),
' ');
32 else if (input.size() >
sizeof(T) /
sizeof(
char))
34 input.erase(0, input.size() -
sizeof(T) /
sizeof(
char));
37 uint64_t bigOutput = 0ull;
39 for (uint i = 0; i < input.length(); ++i)
43 bigOutput += input[input.length() - i - 1];
47 return static_cast<T
>(bigOutput);
52 : CommandableFragmentGenerator(ps)
53 , throttle_usecs_(ps.get<size_t>(
"throttle_usecs", 100000))
54 , string1_(ps.get<std::string>(
"string1",
"All work and no play makes ARTDAQ a dull library"))
55 , string2_(ps.get<std::string>(
"string2",
"Hey, look at what ARTDAQ can do!"))
57 , timestampScale_(ps.get<int>(
"timestamp_scale_factor", 1))
60 bool demo::AsciiSimulator::getNext_(artdaq::FragmentPtrs& frags)
72 std::unique_lock<std::mutex> throttle_lock(throttle_mutex_);
73 throttle_cv_.wait_for(throttle_lock, std::chrono::microseconds(throttle_usecs_), [&]() {
return should_stop(); });
81 size_t data_size = (ev_counter() % 2) != 0u ? string1_.length() + 2 : string2_.length() + 2;
82 AsciiFragment::Metadata metadata;
83 std::string size_string =
"S:" + std::to_string(data_size) +
",";
84 metadata.charsInLine = convertToASCII<AsciiFragment::Metadata::chars_in_line_t>(size_string);
104 std::size_t initial_payload_size = 0;
106 std::unique_ptr<artdaq::Fragment> fragptr(artdaq::Fragment::FragmentBytes(
107 initial_payload_size, ev_counter(), fragment_id(), FragmentType::ASCII, metadata, timestamp_));
108 frags.emplace_back(std::move(fragptr));
113 AsciiFragmentWriter newfrag(*frags.back());
115 newfrag.set_hdr_line_number(
116 convertToASCII<AsciiFragment::Header::line_number_t>(
"LN:" + std::to_string(ev_counter()) +
","));
118 newfrag.resize(data_size);
121 std::string string_to_use = (ev_counter() % 2) != 0u ? string1_ : string2_;
122 string_to_use +=
"\r\n";
125 for (uint i = 0; i < string_to_use.length(); ++i)
128 *(newfrag.dataBegin() + i) = string_to_use[i];
133 timestamp_ += timestampScale_;
Generates ASCIIFragments filled with user-specified ASCII strings.
AsciiSimulator(fhicl::ParameterSet const &ps)
AsciiSimulator Constructor.
T convertToASCII(std::string input)
Convert sizeof(T) characters of a string to a number containing the ASCII representation of that stri...