8 #include "art/Framework/Core/EDAnalyzer.h"
9 #include "art/Framework/Core/ModuleMacros.h"
10 #include "art/Framework/Principal/Event.h"
11 #include "art/Framework/Principal/Handle.h"
12 #include "canvas/Utilities/Exception.h"
14 #include "artdaq-core-demo/Overlays/AsciiFragment.hh"
15 #include "artdaq-core-demo/Overlays/FragmentType.hh"
16 #include "artdaq-core/Data/ContainerFragment.hh"
17 #include "artdaq-core/Data/Fragment.hh"
41 explicit ASCIIDump(fhicl::ParameterSet
const& pset);
49 void analyze(art::Event
const& evt)
override;
57 std::string raw_data_label_;
61 : EDAnalyzer(pset), raw_data_label_(pset.get<std::string>(
"raw_data_label",
"daq"))
64 demo::ASCIIDump::~ASCIIDump() =
default;
68 art::EventNumber_t eventNumber = evt.event();
74 artdaq::Fragments fragments;
75 artdaq::FragmentPtrs containerFragments;
76 std::vector<art::Handle<artdaq::Fragments>> fragmentHandles;
77 #if ART_HEX_VERSION < 0x30900
78 evt.getManyByType(fragmentHandles);
80 fragmentHandles = evt.getMany<std::vector<artdaq::Fragment>>();
83 for (
const auto& handle : fragmentHandles)
85 if (!handle.isValid() || handle->empty())
90 if (handle->front().type() == artdaq::Fragment::ContainerFragmentType)
92 for (
const auto& cont : *handle)
94 artdaq::ContainerFragment contf(cont);
95 if (contf.fragment_type() != demo::FragmentType::ASCII)
100 for (
size_t ii = 0; ii < contf.block_count(); ++ii)
102 containerFragments.push_back(contf[ii]);
103 fragments.push_back(*containerFragments.back());
109 if (handle->front().type() == demo::FragmentType::ASCII)
111 for (
auto frag : *handle)
113 fragments.emplace_back(frag);
119 std::cout <<
"######################################################################" << std::endl;
120 std::cout << std::endl;
121 std::cout <<
"Run " << evt.run() <<
", subrun " << evt.subRun() <<
", event " << eventNumber <<
" has "
122 << fragments.size() <<
" ASCII fragment(s)" << std::endl;
124 for (
const auto& frag : fragments)
126 AsciiFragment bb(frag);
128 std::cout << std::endl;
129 std::cout <<
"Ascii fragment " << frag.fragmentID() <<
" is version " << frag.version() << std::endl;
130 std::cout <<
"Ascii fragment " << frag.fragmentID() <<
" has " << bb.total_line_characters()
131 <<
" characters in the line." << std::endl;
132 std::cout << std::endl;
134 if (frag.hasMetadata())
136 std::cout << std::endl;
137 std::cout <<
"Fragment metadata: " << std::endl;
138 auto const* md = frag.metadata<AsciiFragment::Metadata>();
139 std::cout <<
"Chars in line: ";
140 auto mdChars = md->charsInLine;
141 std::cout.write(reinterpret_cast<const char*>(&mdChars),
sizeof(uint32_t) /
sizeof(
char));
142 std::cout << std::endl;
143 std::cout << std::endl;
146 std::ofstream output(
"out.bin", std::ios::out | std::ios::app | std::ios::binary);
147 for (
size_t i_adc = 0; i_adc < bb.total_line_characters(); ++i_adc)
149 output.write((bb.dataBegin() + i_adc),
sizeof(
char));
152 std::cout << std::endl;
153 std::cout << std::endl;
155 std::cout << std::endl;
void analyze(art::Event const &evt) override
Analyze an event. Called by art for each event in run (based on command line options) ...
An art::EDAnalyzer meant for decoding demo::ASCIIFragment objects.
ASCIIDump(fhicl::ParameterSet const &pset)
ASCIIDump Constructor.