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;
52 std::string raw_data_label_;
56 : EDAnalyzer( pset ), raw_data_label_( pset.get<std::string>(
"raw_data_label",
"daq" ) )
59 demo::ASCIIDump::~ASCIIDump() {}
63 art::EventNumber_t eventNumber = evt.event();
69 artdaq::Fragments fragments;
70 artdaq::FragmentPtrs containerFragments;
71 std::vector<std::string> fragment_type_labels{
"ASCII",
"ContainerASCII"};
73 for (
auto label : fragment_type_labels )
75 art::Handle<artdaq::Fragments> fragments_with_label;
77 evt.getByLabel( raw_data_label_, label, fragments_with_label );
78 if ( !fragments_with_label.isValid() )
continue;
84 if ( label ==
"Container" || label ==
"ContainerASCII" )
86 for (
auto cont : *fragments_with_label )
88 artdaq::ContainerFragment contf( cont );
89 for (
size_t ii = 0; ii < contf.block_count(); ++ii )
91 containerFragments.push_back( contf[ ii ] );
92 fragments.push_back( *containerFragments.back() );
98 for (
auto frag : *fragments_with_label ) { fragments.emplace_back( frag ); }
102 std::cout <<
"######################################################################" << std::endl;
103 std::cout << std::endl;
104 std::cout <<
"Run " << evt.run() <<
", subrun " << evt.subRun() <<
", event " << eventNumber <<
" has "
105 << fragments.size() <<
" ASCII fragment(s)" << std::endl;
107 for (
const auto& frag : fragments )
109 AsciiFragment bb( frag );
111 std::cout << std::endl;
112 std::cout <<
"Ascii fragment " << frag.fragmentID() <<
" is version " << frag.version() << std::endl;
113 std::cout <<
"Ascii fragment " << frag.fragmentID() <<
" has " << bb.total_line_characters()
114 <<
" characters in the line." << std::endl;
115 std::cout << std::endl;
117 if ( frag.hasMetadata() )
119 std::cout << std::endl;
120 std::cout <<
"Fragment metadata: " << std::endl;
121 AsciiFragment::Metadata
const* md = frag.metadata<AsciiFragment::Metadata>();
122 std::cout <<
"Chars in line: ";
123 auto mdChars = md->charsInLine;
124 std::cout.write( reinterpret_cast<const char*>( &mdChars ),
sizeof( uint32_t ) /
sizeof(
char ) );
125 std::cout << std::endl;
126 std::cout << std::endl;
129 std::ofstream output(
"out.bin", std::ios::out | std::ios::app | std::ios::binary );
130 for ( uint32_t i_adc = 0; i_adc < bb.total_line_characters(); ++i_adc )
131 { output.write( (
char*)( bb.dataBegin() + i_adc ),
sizeof(
char ) ); }
133 std::cout << std::endl;
134 std::cout << std::endl;
136 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.