/** \class THcPeriodicReport \ingroup PhysMods \brief A physics module to generate periodic reports from a template This class is a physics module, but does not do analysis. It repeatedly outputs a report file from a template using an event count or time based period. This report file could be displayed or used by a GUI to show a realtime status of an analysis. The THcAnalyzer::PrintReport method is used to generate the report. By default this report is generated every two seconds. */ /** \fn THcPeriodicReport::THcPeriodicReport( const char* name, const char* description="", const char *templatefile, const char* ofile) \brief A constructor \param[in] name Name of the apparatus. Is typically named after spectrometer whose trigger data is collecting; like "HMS". \param[in] description Description of the report \param[in] templatefile Name of file containing report templte \parma[in] ofile File to write the report to */ /** \fn virtual THcPeriodicReport::~THcPeriodicReport() \brief A destructor. */ /** \fn virtual void SetEventPeriod(Int_t ev) \brief Set report print out periodicity \param[in] ev Print out report every ev events */ /** \fn virtual void SetTimePeriod(UInt_t t) \brief Set report print out periodicity \param[in] t Print out report ever t seconds */ #include "THcPeriodicReport.h" #include <iostream> using namespace std; //_____________________________________________________________________________ THcPeriodicReport::THcPeriodicReport(const char *name, const char *description, const char *templatefile, const char *ofile) : THaPhysicsModule(name, description), fTimePeriod(2), fEventPeriod(0), fDoPrint(kFALSE), fAnalyzer(0) { // Constructor fTemplateFilename = templatefile; fOutputFilename = ofile; } //_____________________________________________________________________________ THcPeriodicReport::~THcPeriodicReport() { // destructor } //_____________________________________________________________________________ THaAnalysisObject::EStatus THcPeriodicReport::Init(const TDatime &run_time) { // Standard initialization. Calls this object's DefineVariables(). if (THaPhysicsModule::Init(run_time) != kOK) return fStatus; fAnalyzer = static_cast<THcAnalyzer *>(THcAnalyzer::GetInstance()); return fStatus = kOK; } //_____________________________________________________________________________ Int_t THcPeriodicReport::Begin(THaRunBase *) { fDoPrint = kTRUE; // Generate report on first event fLastPrintTime = TDatime().Convert(); fEventsSincePrint = 0; return 0; } //_____________________________________________________________________________ Int_t THcPeriodicReport::End(THaRunBase *) { // Print out the report a final time PrintReport(); return 0; } //_____________________________________________________________________________ Int_t THcPeriodicReport::Process(const THaEvData &) { UInt_t now = TDatime().Convert(); fEventsSincePrint++; if (!fDoPrint && (fTimePeriod > 0) && ((now - fLastPrintTime) >= fTimePeriod)) { fDoPrint = kTRUE; } if (!fDoPrint && (fEventPeriod > 0) && (fEventsSincePrint >= fEventPeriod)) { fDoPrint = kTRUE; } if (fDoPrint) { fLastPrintTime = now; fEventsSincePrint = 0; PrintReport(); fDoPrint = kFALSE; } return (0); } //_____________________________________________________________________________ void THcPeriodicReport::PrintReport() { fAnalyzer->PrintReport(fTemplateFilename, fOutputFilename); } /////////////////////////////////////////////////////////////////////////////// ClassImp(THcPeriodicReport)