1 #include "otsdaq/DataLoggerApp/DataLoggerApp.h"
18 #include "artdaq-core/Utilities/configureMessageFacility.hh"
19 #include "artdaq/BuildInfo/GetPackageBuildInfo.hh"
20 #include "artdaq/DAQdata/Globals.hh"
21 #include "cetlib_except/exception.h"
22 #include "fhiclcpp/make_ParameterSet.h"
25 #include <boost/exception/all.hpp>
36 #define ARTDAQ_FCL_PATH std::string(__ENV__("USER_DATA")) + "/" + "ARTDAQConfigurations/"
37 #define ARTDAQ_FILE_PREAMBLE "aggregator"
61 __SUP_COUT__ <<
"Constructor." << __E__;
63 INIT_MF(
"DataLoggerApp");
117 __SUP_COUT__ <<
"Constructed." << __E__;
121 DataLoggerApp::~DataLoggerApp(
void)
123 __SUP_COUT__ <<
"Destructor." << __E__;
125 __SUP_COUT__ <<
"Destructed." << __E__;
129 void DataLoggerApp::init(
void)
131 __SUP_COUT__ <<
"Initializing..." << __E__;
134 artdaq::configureMessageFacility(
"DataLogger");
135 __SUP_COUT__ <<
"artdaq MF configured." << __E__;
139 std::string name =
"DataLogger";
140 unsigned short port = 5300;
143 artdaq::setMsgFacAppName(name, port);
145 TLOG(TLVL_DEBUG, name +
"Supervisor")
147 << artdaq::GetPackageBuildInfo::getPackageBuildInfo().getPackageVersion()
149 << artdaq::GetPackageBuildInfo::getPackageBuildInfo().getBuildTimestamp();
153 my_rank = this->getApplicationDescriptor()->getLocalId();
155 theDataLoggerInterface_.reset(
new artdaq::DataLoggerApp());
157 __SUP_COUT__ <<
"Initialized." << __E__;
161 void DataLoggerApp::destroy(
void)
163 __SUP_COUT__ <<
"Destroying..." << __E__;
164 theDataLoggerInterface_.reset(
nullptr);
165 __SUP_COUT__ <<
"Destroyed." << __E__;
286 void DataLoggerApp::transitionConfiguring(toolbox::Event::Reference e)
288 __SUP_COUT__ <<
"Configuring..." << __E__;
289 __SUP_COUT__ << SOAPUtilities::translate(theStateMachine_.getCurrentMessage())
293 SOAPUtilities::translate(theStateMachine_.getCurrentMessage())
295 .getValue(
"ConfigurationTableGroupName"),
296 TableGroupKey(SOAPUtilities::translate(theStateMachine_.getCurrentMessage())
298 .getValue(
"ConfigurationTableGroupKey")));
300 __SUP_COUT__ <<
"Configuration group name: " << theGroup.first
301 <<
" key: " << theGroup.second << __E__;
303 theConfigurationManager_->loadTableGroup(theGroup.first, theGroup.second,
true);
306 fhicl::ParameterSet pset;
308 std::string filename = ARTDAQ_FCL_PATH + ARTDAQ_FILE_PREAMBLE +
"-";
309 const std::string& uid =
310 theConfigurationManager_
311 ->getNode(ConfigurationManager::XDAQ_APPLICATION_TABLE_NAME +
"/" +
312 CorePropertySupervisorBase::getSupervisorUID() +
"/" +
313 "LinkToSupervisorTable")
317 for(
unsigned int i = 0; i < uid.size(); ++i)
318 if((uid[i] >=
'a' && uid[i] <=
'z') || (uid[i] >=
'A' && uid[i] <=
'Z') ||
319 (uid[i] >=
'0' && uid[i] <=
'9'))
323 __SUP_COUTV__(filename);
325 std::string fileFclString;
327 std::ifstream in(filename, std::ios::in | std::ios::binary);
330 std::string contents;
331 in.seekg(0, std::ios::end);
332 fileFclString.resize(in.tellg());
333 in.seekg(0, std::ios::beg);
334 in.read(&fileFclString[0], fileFclString.size());
339 __SUP_SS__ <<
"Fhicl file not found! " << filename << __E__;
344 __SUP_COUTV__(fileFclString);
348 fhicl::make_ParameterSet(fileFclString, pset);
349 theDataLoggerInterface_->initialize(pset, 0, 0);
351 catch(
const cet::coded_exception<fhicl::error, &fhicl::detail::translate>& e)
353 __SUP_SS__ <<
"Error was caught while configuring: " << e.what() << __E__;
354 __SUP_COUT_ERR__ <<
"\n" << ss.str();
355 theStateMachine_.setErrorMessage(ss.str());
356 throw toolbox::fsm::exception::Exception(
359 "DataLoggerApp::transitionConfiguring" ,
365 __SUP_COUT__ <<
"Configured." << __E__;
369 void DataLoggerApp::transitionHalting(toolbox::Event::Reference e)
371 __SUP_COUT__ <<
"Halting..." << __E__;
374 theDataLoggerInterface_->stop(45, 0);
379 __SUP_COUT__ <<
"Ignoring error on halt." << __E__;
384 theDataLoggerInterface_->shutdown(45);
388 __SUP_COUT_ERR__ <<
"Error occurred during shutdown! State="
389 << theDataLoggerInterface_->status();
394 __SUP_COUT__ <<
"Halted." << __E__;
398 void DataLoggerApp::transitionInitializing(toolbox::Event::Reference e)
400 __SUP_COUT__ <<
"Initializing..." << __E__;
402 __SUP_COUT__ <<
"Initialized." << __E__;
406 void DataLoggerApp::transitionPausing(toolbox::Event::Reference e)
408 __SUP_COUT__ <<
"Pausing..." << __E__;
409 theDataLoggerInterface_->pause(0, 0);
410 __SUP_COUT__ <<
"Paused." << __E__;
414 void DataLoggerApp::transitionResuming(toolbox::Event::Reference e)
416 __SUP_COUT__ <<
"Resuming..." << __E__;
417 theDataLoggerInterface_->resume(0, 0);
418 __SUP_COUT__ <<
"Resumed." << __E__;
422 void DataLoggerApp::transitionStarting(toolbox::Event::Reference e)
424 __SUP_COUT__ <<
"Starting..." << __E__;
425 auto runNumber = SOAPUtilities::translate(theStateMachine_.getCurrentMessage())
427 .getValue(
"RunNumber");
431 (art::RunNumber_t)boost::lexical_cast<art::RunNumber_t>(runNumber));
432 theDataLoggerInterface_->start(runId, 0, 0);
434 catch(
const boost::exception& e)
436 __SUP_SS__ <<
"Error parsing string to art::RunNumber_t: " << runNumber << __E__;
439 __SUP_COUT__ <<
"Started." << __E__;
443 void DataLoggerApp::transitionStopping(toolbox::Event::Reference e)
445 __SUP_COUT__ <<
"Stopping..." << __E__;
446 theDataLoggerInterface_->stop(45, 0);
447 __SUP_COUT__ <<
"Stopped." << __E__;