artdaq  v3_05_00
EventDump_module.cc
1 // Class: EventDump
3 // Module Type: analyzer
4 // File: EventDump_module.cc
5 // Description: Prints out information about each event.
7 
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"
13 
14 #include "artdaq-core/Data/Fragment.hh"
15 #include "artdaq-core/Data/ContainerFragment.hh"
16 
17 #include <algorithm>
18 #include <cassert>
19 #include <cmath>
20 #include <fstream>
21 #include <iomanip>
22 #include <vector>
23 #include <iostream>
24 
25 namespace artdaq
26 {
27  class EventDump;
28 }
29 
33 class artdaq::EventDump : public art::EDAnalyzer
34 {
35 public:
46  explicit EventDump(fhicl::ParameterSet const& pset);
47 
51  virtual ~EventDump() = default;
52 
60  void analyze(art::Event const& e) override;
61 
62 private:
63  std::string raw_data_label_;
64  int verbosity_;
65 };
66 
67 
68 artdaq::EventDump::EventDump(fhicl::ParameterSet const& pset)
69  : EDAnalyzer(pset)
70  , raw_data_label_(pset.get<std::string>("raw_data_label", "daq"))
71  , verbosity_(pset.get<int>("verbosity",0)) {}
72 
73 void artdaq::EventDump::analyze(art::Event const& e)
74 {
75  if (verbosity_ > 0) {
76  std::cout << "***** Start of EventDump for event " << e.event() << " *****" << std::endl;
77 
78  std::vector< art::Handle< std::vector<artdaq::Fragment> > > fragmentHandles;
79  e.getManyByType(fragmentHandles);
80 
81  for (auto const& handle : fragmentHandles)
82  {
83  if (handle->size() > 0) {
84  std::string instance_name = handle.provenance()->productInstanceName();
85  std::cout << instance_name << " fragments: " << std::endl;
86 
87  int jdx = 1;
88  for (auto const& frag : *handle){
89  std::cout << " " << jdx << ") fragment ID " << frag.fragmentID() << " has type "
90  << (int) frag.type() << ", timestamp " << frag.timestamp()
91  << ", and sizeBytes " << frag.sizeBytes();
92 
93  if (instance_name.compare(0,9,"Container")==0) {
94  artdaq::ContainerFragment cf(frag);
95  std::cout << " (contents: type = " << (int) cf.fragment_type() << ", count = "
96  << cf.block_count() << ", missing data = " << cf.missing_data()
97  << ")" << std::endl;;
98  if (verbosity_ > 1) {
99  for (size_t idx = 0; idx < cf.block_count(); ++idx) {
100  std::cout << " " << (idx+1) << ") fragment type " << (int) (cf.at(idx))->type()
101  << ", timestamp " << (cf.at(idx))->timestamp()
102  << ", and sizeBytes " << (cf.at(idx))->sizeBytes() << std::endl;
103  }
104  }
105  }
106  else {
107  std::cout << std::endl;
108  }
109  ++jdx;
110  }
111  }
112  }
113 
114  std::cout << "***** End of EventDump for event " << e.event() << " *****" << std::endl;
115  }
116 }
117 
118 DEFINE_ART_MODULE(artdaq::EventDump)
void analyze(art::Event const &e) override
This method is called for each art::Event in a file or run.
EventDump(fhicl::ParameterSet const &pset)
EventDump Constructor.
Write Event information to the console.
virtual ~EventDump()=default
Default virtual Destructor.