$treeview $search $mathjax $extrastylesheet
artdaq_demo
v3_04_00
$projectbrief
|
$projectbrief
|
$searchbox |
00001 00002 // Class: ToyDump 00003 // Module Type: analyzer 00004 // File: ToyDump_module.cc 00005 // Description: Prints out information about each event. 00007 00008 #include "art/Framework/Core/EDAnalyzer.h" 00009 #include "art/Framework/Core/ModuleMacros.h" 00010 #include "art/Framework/Principal/Event.h" 00011 #include "art/Framework/Principal/Handle.h" 00012 #include "canvas/Utilities/Exception.h" 00013 00014 #include "artdaq-core-demo/Overlays/FragmentType.hh" 00015 #include "artdaq-core-demo/Overlays/AsciiFragment.hh" 00016 #include "artdaq-core/Data/ContainerFragment.hh" 00017 #include "artdaq-core/Data/Fragment.hh" 00018 00019 #include <algorithm> 00020 #include <cassert> 00021 #include <cmath> 00022 #include <fstream> 00023 #include <iomanip> 00024 #include <vector> 00025 #include <iostream> 00026 00027 namespace demo 00028 { 00029 class ASCIIDump; 00030 } 00031 00035 class demo::ASCIIDump : public art::EDAnalyzer 00036 { 00037 public: 00042 explicit ASCIIDump(fhicl::ParameterSet const& pset); 00043 00044 virtual ~ASCIIDump(); 00045 00050 void analyze(art::Event const& evt) override; 00051 00052 private: 00053 std::string raw_data_label_; 00054 }; 00055 00056 00057 demo::ASCIIDump::ASCIIDump(fhicl::ParameterSet const& pset) 00058 : EDAnalyzer(pset) 00059 , raw_data_label_(pset.get<std::string>("raw_data_label", "daq")) {} 00060 00061 demo::ASCIIDump::~ASCIIDump() {} 00062 00063 void demo::ASCIIDump::analyze(art::Event const& evt) 00064 { 00065 art::EventNumber_t eventNumber = evt.event(); 00066 00067 // *********************** 00068 // *** ASCII Fragments *** 00069 // *********************** 00070 00071 artdaq::Fragments fragments; 00072 artdaq::FragmentPtrs containerFragments; 00073 std::vector<std::string> fragment_type_labels{"ASCII", "ContainerASCII"}; 00074 00075 for (auto label : fragment_type_labels) 00076 { 00077 art::Handle<artdaq::Fragments> fragments_with_label; 00078 00079 evt.getByLabel(raw_data_label_, label, fragments_with_label); 00080 if (!fragments_with_label.isValid()) continue; 00081 00082 // for (int i_l = 0; i_l < static_cast<int>(fragments_with_label->size()); ++i_l) { 00083 // fragments.emplace_back( (*fragments_with_label)[i_l] ); 00084 // } 00085 00086 if (label == "Container" || label == "ContainerASCII") 00087 { 00088 for (auto cont : *fragments_with_label) 00089 { 00090 artdaq::ContainerFragment contf(cont); 00091 for (size_t ii = 0; ii < contf.block_count(); ++ii) 00092 { 00093 containerFragments.push_back(contf[ii]); 00094 fragments.push_back(*containerFragments.back()); 00095 } 00096 } 00097 } 00098 else 00099 { 00100 for (auto frag : *fragments_with_label) 00101 { 00102 fragments.emplace_back(frag); 00103 } 00104 } 00105 } 00106 00107 std::cout << "######################################################################" << std::endl; 00108 std::cout << std::endl; 00109 std::cout << "Run " << evt.run() << ", subrun " << evt.subRun() 00110 << ", event " << eventNumber << " has " << fragments.size() 00111 << " ASCII fragment(s)" << std::endl; 00112 00113 for (const auto& frag : fragments) 00114 { 00115 AsciiFragment bb(frag); 00116 00117 std::cout << std::endl; 00118 std::cout << "Ascii fragment " << frag.fragmentID() << " is version " << frag.version() << std::endl; 00119 std::cout << "Ascii fragment " << frag.fragmentID() << " has " 00120 << bb.total_line_characters() << " characters in the line." << std::endl; 00121 std::cout << std::endl; 00122 00123 if (frag.hasMetadata()) 00124 { 00125 std::cout << std::endl; 00126 std::cout << "Fragment metadata: " << std::endl; 00127 AsciiFragment::Metadata const* md = 00128 frag.metadata<AsciiFragment::Metadata>(); 00129 std::cout << "Chars in line: "; 00130 auto mdChars = md->charsInLine; 00131 std::cout.write(reinterpret_cast<const char*>(&mdChars), sizeof(uint32_t) / sizeof(char)); 00132 std::cout << std::endl; 00133 std::cout << std::endl; 00134 } 00135 00136 std::ofstream output("out.bin", std::ios::out | std::ios::app | std::ios::binary); 00137 for (uint32_t i_adc = 0; i_adc < bb.total_line_characters(); ++i_adc) 00138 { 00139 output.write((char*)(bb.dataBegin() + i_adc), sizeof(char)); 00140 } 00141 output.close(); 00142 std::cout << std::endl; 00143 std::cout << std::endl; 00144 } 00145 std::cout << std::endl; 00146 } 00147 00148 DEFINE_ART_MODULE(demo::ASCIIDump)