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/FragmentType.hh"
15 #include "artdaq-core-demo/Overlays/AsciiFragment.hh"
16 #include "artdaq-core/Data/ContainerFragment.hh"
17 #include "artdaq-core/Data/Fragment.hh"
42 explicit ASCIIDump(fhicl::ParameterSet
const& pset);
50 void analyze(art::Event
const& evt)
override;
53 std::string raw_data_label_;
59 , raw_data_label_(pset.get<std::string>(
"raw_data_label",
"daq")) {}
61 demo::ASCIIDump::~ASCIIDump() {}
65 art::EventNumber_t eventNumber = evt.event();
71 artdaq::Fragments fragments;
72 std::vector<std::string> fragment_type_labels{
"ASCII",
"Container"};
74 for (
auto label : fragment_type_labels)
76 art::Handle<artdaq::Fragments> fragments_with_label;
78 evt.getByLabel(raw_data_label_, label, fragments_with_label);
79 if (!fragments_with_label.isValid())
continue;
85 if (label ==
"Container")
87 for (
auto cont : *fragments_with_label)
89 artdaq::ContainerFragment contf(cont);
90 for (
size_t ii = 0; ii < contf.block_count(); ++ii)
92 size_t fragSize = contf.fragSize(ii);
93 artdaq::Fragment thisfrag;
94 thisfrag.resizeBytes(fragSize);
97 memcpy(thisfrag.headerAddress(), contf.at(ii), fragSize);
100 fragments.push_back(thisfrag);
106 for (
auto frag : *fragments_with_label)
108 fragments.emplace_back(frag);
113 std::cout <<
"######################################################################" << std::endl;
114 std::cout << std::endl;
115 std::cout <<
"Run " << evt.run() <<
", subrun " << evt.subRun()
116 <<
", event " << eventNumber <<
" has " << fragments.size()
117 <<
" ASCII fragment(s)" << std::endl;
119 for (
const auto& frag : fragments)
121 AsciiFragment bb(frag);
123 std::cout << std::endl;
124 std::cout <<
"Ascii fragment " << frag.fragmentID() <<
" is version " << frag.version() << std::endl;
125 std::cout <<
"Ascii fragment " << frag.fragmentID() <<
" has "
126 << bb.total_line_characters() <<
" characters in the line." << std::endl;
127 std::cout << std::endl;
129 if (frag.hasMetadata())
131 std::cout << std::endl;
132 std::cout <<
"Fragment metadata: " << std::endl;
133 AsciiFragment::Metadata
const* md =
134 frag.metadata<AsciiFragment::Metadata>();
135 std::cout <<
"Chars in line: ";
136 auto mdChars = md->charsInLine;
137 std::cout.write(reinterpret_cast<const char*>(&mdChars),
sizeof(uint32_t) /
sizeof(
char));
138 std::cout << std::endl;
139 std::cout << std::endl;
142 std::ofstream output(
"out.bin", std::ios::out | std::ios::app | std::ios::binary);
143 for (uint32_t i_adc = 0; i_adc < bb.total_line_characters(); ++i_adc)
145 output.write((
char*)(bb.dataBegin() + i_adc),
sizeof(
char));
148 std::cout << std::endl;
149 std::cout << std::endl;
151 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.