1 #include "artdaq-demo/Generators/AsciiSimulator.hh"
3 #include "canvas/Utilities/Exception.h"
5 #include "artdaq/Application/GeneratorMacros.hh"
6 #include "cetlib/exception.h"
7 #include "artdaq-core-demo/Overlays/AsciiFragment.hh"
8 #include "artdaq-core-demo/Overlays/AsciiFragmentWriter.hh"
9 #include "artdaq-core-demo/Overlays/FragmentType.hh"
10 #include "fhiclcpp/ParameterSet.h"
11 #include "artdaq-core/Utilities/SimpleLookupPolicy.hh"
31 if (input.size() <
sizeof(T) /
sizeof(
char))
33 input.insert(0,
sizeof(T) /
sizeof(
char) - input.size(),
' ');
35 else if (input.size() >
sizeof(T) /
sizeof(
char))
37 input.erase(0, input.size() -
sizeof(T) /
sizeof(
char));
40 uint64_t bigOutput = 0ull;
42 for (uint i = 0; i < input.length(); ++i)
46 bigOutput += input[input.length() - i - 1];
50 return static_cast<T
>(bigOutput);
56 CommandableFragmentGenerator(ps)
57 , throttle_usecs_(ps.get<size_t>(
"throttle_usecs", 100000))
58 , string1_(ps.get<std::string>(
"string1",
"All work and no play makes ARTDAQ a dull library"))
59 , string2_(ps.get<std::string>(
"string2",
"Hey, look at what ARTDAQ can do!"))
63 bool demo::AsciiSimulator::getNext_(artdaq::FragmentPtrs& frags)
75 if (throttle_usecs_ > 0)
77 size_t nchecks = throttle_usecs_ / 10000;
79 for (
size_t i_c = 0; i_c < nchecks; ++i_c)
81 usleep(throttle_usecs_ / 10000);
98 size_t data_size = ev_counter() % 2 ? string1_.length() + 2 : string2_.length() + 2;
99 AsciiFragment::Metadata metadata;
100 std::string size_string =
"S:" + std::to_string(data_size) +
",";
101 metadata.charsInLine = convertToASCII<AsciiFragment::Metadata::chars_in_line_t>(size_string);
121 std::size_t initial_payload_size = 0;
123 frags.emplace_back(artdaq::Fragment::FragmentBytes(initial_payload_size,
124 ev_counter(), fragment_id(),
125 FragmentType::ASCII, metadata));
130 AsciiFragmentWriter newfrag(*frags.back());
132 newfrag.set_hdr_line_number(convertToASCII<AsciiFragment::Header::line_number_t>(
"LN:" + std::to_string(ev_counter()) +
","));
134 newfrag.resize(data_size);
137 std::string string_to_use = ev_counter() % 2 ? string1_ : string2_;
138 string_to_use +=
"\r\n";
141 for (uint i = 0; i < string_to_use.length(); ++i)
144 *(newfrag.dataBegin() + i) = string_to_use[i];
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...