SubModule.cc
Go to the documentation of this file.
1 
10 #include "SubModule.h"
11 
12 #include <evt/Event.h>
13 
14 #include <utl/AugerException.h>
15 #include <utl/AugerUnits.h>
16 #include <utl/TabularStream.h>
17 #include <fwk/RunController.h>
18 
19 #include <sstream>
20 
21 using namespace FdLightCollectionEfficiencyKG;
22 using namespace fwk;
23 using namespace utl;
24 using namespace evt;
25 using namespace std;
26 
27 
28 /*************************************************************************/
29 SubModule::SubModule(const string& moduleName, const int verbosity) :
30  fVerbosity(verbosity),
31  fModuleName(moduleName),
32  fInitialized(false)
33 {
34 }
35 
36 
37 /*************************************************************************/
40 {
41  if (fVerbosity > 0)
42  cout << " Initializing sub-module '" << fModuleName << "'" << endl;
43  fStopWatch.Reset();
44  fInitialized = true;
45  return GetModule().Init();
46 }
47 
48 
49 /*************************************************************************/
52 {
53  if (fVerbosity > 0)
54  cout << " Finishing sub-module '" << fModuleName << "'" << endl;
55  return GetModule().Finish();
56 }
57 
58 
59 /*************************************************************************/
62 {
63  fwk::RunController& rc = RunController::GetInstance();
64  return rc.GetModule(fModuleName);
65 }
66 
67 
68 /*************************************************************************/
71 {
72  if (!fInitialized) {
73  ostringstream msg;
74  msg << "Trying to run submodule '" << GetName() << "' but the module was never initialized!" << endl;
75  ERROR(msg);
76  }
77  if (fVerbosity > 0)
78  cout << " Running sub-module '" << fModuleName << "'" << endl;
79  fStopWatch.Start();
80  fwk::VModule& module = GetModule();
81  fwk::VModule::ResultFlag status = module.Run(event);
82  fStopWatch.Stop();
83  return ReportStatus(status);
84 }
85 
86 
87 /*************************************************************************/
88 void
90 {
91  // Heavily inspired by RunController::FinishBranch
92  const double moduleUTime = fStopWatch.GetCPUTime(Stopwatch::eUser)/second;
93  const double moduleSTime = fStopWatch.GetCPUTime(Stopwatch::eSystem)/second;
94  //const double totalTime = fStopWatch.GetCPUTime()/second;
95  tabStream << GetName() << endc << moduleUTime << endc << moduleSTime << endr;
96 }
97 
98 
99 /*************************************************************************/
102 {
103  TabularStream tabStream("r: . .");
104  tabStream << "Module" << endc << "USR" << endc << "SYS" << endr << hline;
105  return tabStream;
106 }
107 
108 
109 /*************************************************************************/
110 void
112 {
113  tabStream << hline;
114  ostringstream info;
115  info << "\n\nCPU user and system time in FdLightCollectionEfficiencyKG::SubModule::Run()\n" << tabStream << endl;
116  INFO(info);
117 }
118 
119 
120 /*************************************************************************/
123 {
124  if (status != VModule::eSuccess) {
125  ostringstream msg;
126  msg << "Running " << GetName() << " did not succeed. It returned status "
127  << ( status == VModule::eContinueLoop ? "eContinueLoop"
128  : status == VModule::eBreakLoop ? "eBreakLoop"
129  : status == VModule::eFailure ? "eFailure"
130  : "(unknown status)" )
131  << ".";
132  WARNING(msg);
133  }
134  return status;
135 }
136 
137 
138 // Configure (x)emacs for this file ...
139 // Local Variables:
140 // mode: c++
141 // End:
int fVerbosity
global verbosity flag
Definition: SubModule.h:64
fwk::VModule::ResultFlag Init()
Definition: SubModule.cc:39
virtual ResultFlag Finish()=0
Finish: invoked at end of the run (NOT end of the event)
#define INFO(message)
Macro for logging informational messages.
Definition: ErrorLogger.h:161
void PrintTiming(utl::TabularStream &tabStream)
Prints the sub-module timing to the given tabular stream.
Definition: SubModule.cc:89
fwk::VModule::ResultFlag Run(evt::Event &event)
Definition: SubModule.cc:70
void Reset()
Definition: Stopwatch.cc:21
const EndRow endr
const double second
Definition: GalacticUnits.h:32
Auger Software Run Control.
Definition: RunController.h:26
fwk::VModule::ResultFlag ReportStatus(const fwk::VModule::ResultFlag status)
Utility function to report non-success result of module invocations.
Definition: SubModule.cc:122
virtual ResultFlag Run(evt::Event &event)=0
Run: invoked once per event.
class to format data in tabular form
#define WARNING(message)
Macro for logging warning messages.
Definition: ErrorLogger.h:163
Module interface.
Definition: VModule.h:53
void Start()
Definition: Stopwatch.cc:29
static utl::TabularStream TimingHeader()
Prepares a TabularStream for timing printout.
Definition: SubModule.cc:101
ResultFlag
Flag returned by module methods to the RunController.
Definition: VModule.h:60
const std::string & GetName() const
Definition: SubModule.h:48
static void FinishTimingPrintout(utl::TabularStream &tabStream)
Finishes the printout and actually dumps it to stdout.
Definition: SubModule.cc:111
double GetCPUTime(const CPUTime kind=eTotal)
Definition: Stopwatch.cc:52
#define ERROR(message)
Macro for logging error messages.
Definition: ErrorLogger.h:165
const HLine hline('-')
virtual ResultFlag Init()=0
Initialize: invoked at beginning of run (NOT beginning of event)
const EndColumn endc
VModule & GetModule(const std::string &moduleName) const
Get module by name.
fwk::VModule::ResultFlag Finish()
Definition: SubModule.cc:51

, generated on Tue Sep 26 2023.