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-ots/Overlays/UDPFragment.hh"
15 #include "artdaq-core/Data/Fragment.hh"
16 #include "otsdaq-core/Macros/CoutMacros.h"
25 #include <arpa/inet.h>
33 explicit UDPDump(fhicl::ParameterSet
const & pset);
36 virtual void analyze(art::Event
const & evt);
39 std::string raw_data_label_;
40 std::string frag_type_;
41 unsigned int num_bytes_to_show_;
45 ots::UDPDump::UDPDump(fhicl::ParameterSet
const & pset)
47 raw_data_label_(pset.get<std::string>(
"raw_data_label")),
48 frag_type_(pset.get<std::string>(
"frag_type")),
49 num_bytes_to_show_(pset.get<int>(
"num_bytes"))
53 ots::UDPDump::~UDPDump()
57 void ots::UDPDump::analyze(art::Event
const & evt)
59 art::EventNumber_t eventNumber = evt.event();
67 art::Handle<artdaq::Fragments> raw;
68 evt.getByLabel(raw_data_label_, frag_type_, raw);
71 std::cout << __COUT_HDR_FL__ <<
"######################################################################" << std::endl;
73 std::cout << __COUT_HDR_FL__ << std::dec <<
"Run " << evt.run() <<
", subrun " << evt.subRun()
74 <<
", event " << eventNumber <<
" has " << raw->size()
75 <<
" fragment(s) of type " << frag_type_ << std::endl;
77 for (
size_t idx = 0; idx < raw->size(); ++idx) {
78 const auto& frag((*raw)[idx]);
83 std::cout << __COUT_HDR_FL__ <<
"UDP fragment " << frag.fragmentID() <<
" has total byte count = "
84 << bb.udp_data_words() << std::endl;
87 if (frag.hasMetadata()) {
89 std::cout << __COUT_HDR_FL__ <<
"Fragment metadata: " << std::endl;
93 char buf[
sizeof(in_addr)];
94 struct sockaddr_in addr;
95 addr.sin_addr.s_addr = md->address;
96 inet_ntop(AF_INET, &(addr.sin_addr), buf, INET_ADDRSTRLEN);
98 std::cout << __COUT_HDR_FL__ <<
"Board port number = "
99 << ((int)md->port) <<
", address = "
105 int type = bb.hdr_data_type();
106 if(type == 0 || type > 2)
108 auto it = bb.dataBegin();
109 std::cout << __COUT_HDR_FL__ << std::hex <<
"0x" << (int)*it << std::endl;
112 for(; it !=bb.dataEnd(); ++it)
114 std::cout << __COUT_HDR_FL__ <<
", " << std::hex <<
"0x" << (int)*it << std::endl;
120 std::string output = std::string((
const char *)bb.dataBegin());
121 std::cout << __COUT_HDR_FL__ << output << std::endl;
126 std::cout << __COUT_HDR_FL__ << std::dec <<
"Run " << evt.run() <<
", subrun " << evt.subRun()
127 <<
", event " << eventNumber <<
" has zero"
128 <<
" UDP fragments." << std::endl;