artdaq_demo  v3_08_00
EventReporterOutput_module.cc
1 #define TRACE_NAME "EventReporterOutput"
2 
3 #include "art/Framework/Core/ModuleMacros.h"
4 #include "art/Framework/Core/OutputModule.h"
5 #include "art/Framework/Principal/EventPrincipal.h"
6 #include "art/Framework/Principal/OutputHandle.h"
7 #include "art/Framework/Principal/RunPrincipal.h"
8 #include "art/Framework/Principal/SubRunPrincipal.h"
9 #include "art/Framework/Services/Registry/ServiceHandle.h"
10 #if ART_HEX_VERSION < 0x20900
11 #include "art/Persistency/Provenance/BranchIDListRegistry.h"
12 #include "canvas/Persistency/Provenance/BranchIDList.h"
13 #endif
14 #include "art/Persistency/Provenance/ProcessHistoryRegistry.h"
15 #if ART_HEX_VERSION < 0x30000
16 #include "art/Persistency/Provenance/ProductMetaData.h"
17 #endif
18 
19 #include <algorithm>
20 #include <iterator>
21 #include "canvas/Persistency/Provenance/BranchDescription.h"
22 #include "canvas/Persistency/Provenance/BranchKey.h"
23 #include "canvas/Persistency/Provenance/History.h"
24 #include "canvas/Persistency/Provenance/ParentageRegistry.h"
25 #include "canvas/Persistency/Provenance/ProcessConfiguration.h"
26 #include "canvas/Persistency/Provenance/ProcessConfigurationID.h"
27 #include "canvas/Persistency/Provenance/ProcessHistoryID.h"
28 #include "canvas/Persistency/Provenance/ProductList.h"
29 #include "canvas/Persistency/Provenance/ProductProvenance.h"
30 #include "canvas/Persistency/Provenance/RunAuxiliary.h"
31 #include "canvas/Persistency/Provenance/SubRunAuxiliary.h"
32 #include "canvas/Utilities/DebugMacros.h"
33 #include "canvas/Utilities/Exception.h"
34 #include "cetlib/column_width.h"
35 #include "cetlib/lpad.h"
36 #include "cetlib/rpad.h"
37 #include "fhiclcpp/ParameterSet.h"
38 #include "fhiclcpp/ParameterSetID.h"
39 #include "fhiclcpp/ParameterSetRegistry.h"
40 
41 #include "artdaq-core/Data/detail/ParentageMap.hh"
42 #include "artdaq/DAQdata/Globals.hh"
43 #include "artdaq/DAQdata/NetMonHeader.hh"
44 #include "artdaq/TransferPlugins/MakeTransferPlugin.hh"
45 #include "artdaq/TransferPlugins/TransferInterface.hh"
46 
47 #include <iomanip>
48 #include <iostream>
49 #include <sstream>
50 #include <string>
51 #include <vector>
52 
53 #include <unistd.h>
54 
55 #include <TClass.h>
56 #include <TMessage.h>
57 
58 namespace art {
59 class EventReporterOutput;
60 }
61 
67 class art::EventReporterOutput : public OutputModule
68 {
69 public:
77  explicit EventReporterOutput(fhicl::ParameterSet const& ps);
78 
83 
84 private:
85  virtual void openFile(FileBlock const&);
86 
87  virtual void closeFile();
88 
89  virtual void respondToCloseInputFile(FileBlock const&);
90 
91  virtual void respondToCloseOutputFiles(FileBlock const&);
92 
93  virtual void endJob();
94 
95  virtual void write(EventPrincipal&);
96 
97  virtual void writeRun(RunPrincipal&);
98 
99  virtual void writeSubRun(SubRunPrincipal&);
100 
101 private:
102 };
103 
104 art::EventReporterOutput::EventReporterOutput(fhicl::ParameterSet const& ps)
105  : OutputModule(ps)
106 {
107  TLOG(TLVL_DEBUG) << "Begin: EventReporterOutput::EventReporterOutput(ParameterSet const& ps)";
108 }
109 
111 {
112  TLOG(TLVL_DEBUG) << "Begin: EventReporterOutput::~EventReporterOutput()";
113 }
114 
115 void art::EventReporterOutput::openFile(FileBlock const&)
116 {
117  TLOG(TLVL_DEBUG) << "Begin/End: EventReporterOutput::openFile(const FileBlock&)";
118 }
119 
120 void art::EventReporterOutput::closeFile() { TLOG(TLVL_DEBUG) << "Begin/End: EventReporterOutput::closeFile()"; }
121 
122 void art::EventReporterOutput::respondToCloseInputFile(FileBlock const&)
123 {
124  TLOG(TLVL_DEBUG) << "Begin/End: EventReporterOutput::respondToCloseOutputFiles(FileBlock const&)";
125 }
126 
127 void art::EventReporterOutput::respondToCloseOutputFiles(FileBlock const&)
128 {
129  TLOG(TLVL_DEBUG) << "Begin/End: EventReporterOutput::respondToCloseOutputFiles(FileBlock const&)";
130 }
131 
132 void art::EventReporterOutput::endJob() { TLOG(TLVL_DEBUG) << "Begin: EventReporterOutput::endJob()"; }
133 
134 void art::EventReporterOutput::write(EventPrincipal& ep)
135 {
136  TLOG(TLVL_DEBUG) << " Begin: EventReporterOutput::write(const EventPrincipal& ep)";
137 
138  using RawEvent = artdaq::Fragments;
139  ;
140  using RawEvents = std::vector<RawEvent>;
141  using RawEventHandle = art::Handle<RawEvent>;
142  using RawEventHandles = std::vector<RawEventHandle>;
143 
144  auto result_handles = std::vector<art::GroupQueryResult>();
145 
146 #if ART_HEX_VERSION < 0x30000
147  auto const& wrapped = art::WrappedTypeID::make<RawEvent>();
148  result_handles = ep.getMany(wrapped, art::MatchAllSelector{});
149 #else
150  auto const& wrapped = art::WrappedTypeID::make<RawEvent>();
151  ModuleContext const mc{moduleDescription()};
152  ProcessTag const processTag{"", mc.moduleDescription().processName()};
153 
154  result_handles = ep.getMany(mc, wrapped, art::MatchAllSelector{}, processTag);
155 #endif
156 
157  for (auto const& result_handle : result_handles)
158  {
159  auto const raw_event_handle = RawEventHandle(result_handle);
160 
161  if (!raw_event_handle.isValid()) continue;
162 
163  for (auto const& fragment : *raw_event_handle)
164  {
165  TLOG(TLVL_DEBUG) << "EventReporterOutput::write: Event sequenceID=" << fragment.sequenceID()
166  << ", fragmentID=" << fragment.fragmentID();
167  }
168  }
169 
170  return;
171 }
172 
173 void art::EventReporterOutput::writeRun(RunPrincipal&)
174 {
175  TLOG(TLVL_DEBUG) << " EventReporterOutput::writeRun(const RunPrincipal& rp)";
176 }
177 
178 void art::EventReporterOutput::writeSubRun(SubRunPrincipal&)
179 {
180  TLOG(TLVL_DEBUG) << " EventReporterOutput:: writeSubRun(const SubRunPrincipal& srp)";
181 }
182 
183 DEFINE_ART_MODULE(art::EventReporterOutput)
An art::OutputModule which does nothing, but reports seen events and their fragments. This module is designed for debugging purposes, where writing events into ROOT files or sending events down stream is not necessary.
EventReporterOutput(fhicl::ParameterSet const &ps)
EventReporterOutput Constructor.
~EventReporterOutput()
EventReporterOutput Destructor.