1 #include "otsdaq-core/ARTDAQReaderCore/ARTDAQReaderProcessorBase.h"
2 #include "artdaq/Application/Commandable.hh"
3 #include "fhiclcpp/make_ParameterSet.h"
4 #include "otsdaq-core/DataManager/DataManager.h"
5 #include "otsdaq-core/DataManager/DataManagerSingleton.h"
6 #include "otsdaq-core/Macros/CoutMacros.h"
8 #include "otsdaq-core/MessageFacility/MessageFacility.h"
17 #define ARTDAQ_FCL_PATH std::string(getenv("USER_DATA")) + "/" + "ARTDAQConfigurations/"
18 #define ARTDAQ_FILE_PREAMBLE "boardReader"
21 ARTDAQReaderProcessorBase::ARTDAQReaderProcessorBase(
22 std::string supervisorApplicationUID,
23 std::string bufferUID,
24 std::string processorUID,
26 const std::string& configurationPath)
31 :
Configurable(theXDAQContextConfigTree, configurationPath)
32 , name_(
"BoardReader_" + processorUID)
34 __CFG_COUT__ <<
"Constructing..." << __E__;
39 std::string filename = ARTDAQ_FCL_PATH + ARTDAQ_FILE_PREAMBLE +
"-";
40 std::string uid = theXDAQContextConfigTree.getNode(configurationPath).getValue();
42 __CFG_COUT__ <<
"uid: " << uid << __E__;
43 for(
unsigned int i = 0; i < uid.size(); ++i)
44 if((uid[i] >=
'a' && uid[i] <=
'z') || (uid[i] >=
'A' && uid[i] <=
'Z') ||
45 (uid[i] >=
'0' && uid[i] <=
'9'))
49 __CFG_COUT__ << __E__;
50 __CFG_COUT__ << __E__;
51 __CFG_COUT__ <<
"filename: " << filename << __E__;
53 std::string fileFclString;
55 std::ifstream in(filename, std::ios::in | std::ios::binary);
59 in.seekg(0, std::ios::end);
60 fileFclString.resize(in.tellg());
61 in.seekg(0, std::ios::beg);
62 in.read(&fileFclString[0], fileFclString.size());
74 fileFclString.find(
"fragment_receiver: {") + +strlen(
"fragment_receiver: {");
75 if(fcli == std::string::npos)
77 __SS__ <<
"Could not find 'fragment_receiver: {' in Board Reader fcl string!"
79 __CFG_COUT__ <<
"\n" << ss.str();
84 __CFG_COUT__ <<
"configurationPath " << configurationPath << __E__;
86 std::string consumerID, bufferID, appID;
87 unsigned int backSteps;
88 size_t backi = -1, backj;
90 for(
unsigned int i = 0; i < backSteps; i++)
95 backi = configurationPath.rfind(
'/', backi - 1);
102 consumerID = configurationPath.substr(backi + 1, backj - backi - 1);
104 bufferID = configurationPath.substr(backi + 1, backj - backi - 1);
106 appID = configurationPath.substr(backi + 1, backj - backi - 1);
110 fileFclString = fileFclString.substr(0, fcli) +
"\n\t\t" +
111 "SupervisorApplicationUID: \"" + appID +
"\"\n\t\t" +
112 "BufferUID: \"" + bufferID +
"\"\n\t\t" +
"ProcessorUID: \"" +
113 consumerID +
"\"\n" + fileFclString.substr(fcli);
115 __CFG_COUT__ << fileFclString << __E__;
117 fhicl::make_ParameterSet(fileFclString, fhiclConfiguration_);
131 ARTDAQReaderProcessorBase::~ARTDAQReaderProcessorBase(
void)
134 __CFG_COUT__ <<
"DONE DELETING!" << __E__;
138 void ARTDAQReaderProcessorBase::initLocalGroup(
int rank) { configure(rank); }
140 #define ARTDAQ_FCL_PATH std::string(getenv("USER_DATA")) + "/" + "ARTDAQConfigurations/"
141 #define ARTDAQ_FILE_PREAMBLE "boardReader"
144 void ARTDAQReaderProcessorBase::configure(
int rank)
146 __CFG_COUT__ <<
"Configuring..." << __E__;
152 fragment_receiver_ptr_.reset(
nullptr);
153 __CFG_COUT__ <<
"New core" << __E__;
156 fragment_receiver_ptr_.reset(
new artdaq::BoardReaderApp());
160 uint64_t timeout = 45;
161 uint64_t timestamp = 184467440737095516;
162 __CFG_COUT__ <<
"Initializing '" << name_ <<
"'"
165 if(!fragment_receiver_ptr_->initialize(fhiclConfiguration_, timeout, timestamp))
167 __CFG_SS__ <<
"Error initializing '" << name_ <<
"' with ParameterSet = \n"
168 << fhiclConfiguration_.to_string() << __E__;
171 __CFG_COUT__ <<
"Done Initializing." << __E__;
175 __CFG_COUT__ <<
"Configured." << __E__;
179 void ARTDAQReaderProcessorBase::halt(
void)
181 __CFG_COUT__ <<
"Halting..." << __E__;
185 uint64_t timeout = 45;
187 if(!fragment_receiver_ptr_->shutdown(timeout))
189 __CFG_SS__ <<
"Error shutting down '" << name_ <<
".'" << __E__;
193 __CFG_COUT__ <<
"Halted." << __E__;
197 void ARTDAQReaderProcessorBase::pause(
void)
199 __CFG_COUT__ <<
"Pausing..." << __E__;
203 uint64_t timeout = 45;
204 uint64_t timestamp = 184467440737095516;
206 if(!fragment_receiver_ptr_->pause(timeout, timestamp))
208 __CFG_SS__ <<
"Error pausing '" << name_ <<
".'" << __E__;
212 __CFG_COUT__ <<
"Paused." << __E__;
216 void ARTDAQReaderProcessorBase::resume(
void)
218 __CFG_COUT__ <<
"Resuming..." << __E__;
222 uint64_t timeout = 45;
223 uint64_t timestamp = 184467440737095516;
225 if(!fragment_receiver_ptr_->resume(timeout, timestamp))
227 __CFG_SS__ <<
"Error resuming '" << name_ <<
".'" << __E__;
231 __CFG_COUT__ <<
"Resumed." << __E__;
235 void ARTDAQReaderProcessorBase::start(
const std::string& runNumber)
237 __CFG_COUT__ <<
"Starting..." << __E__;
239 art::RunID runId((art::RunNumber_t)boost::lexical_cast<art::RunNumber_t>(runNumber));
243 uint64_t timeout = 45;
244 uint64_t timestamp = 184467440737095516;
246 __CFG_COUT__ <<
"Start run: " << runId << __E__;
247 if(!fragment_receiver_ptr_->start(runId, timeout, timestamp))
249 __CFG_SS__ <<
"Error starting '" << name_ <<
"' for run number '" << runId <<
",'"
254 __CFG_COUT__ <<
"Started." << __E__;
258 void ARTDAQReaderProcessorBase::stop(
void)
260 __CFG_COUT__ <<
"Stop" << __E__;
264 uint64_t timeout = 45;
265 uint64_t timestamp = 184467440737095516;
267 auto sts = fragment_receiver_ptr_->status();
270 __CFG_COUT__ <<
"Already stopped - never started!" << __E__;
274 if(!fragment_receiver_ptr_->stop(timeout, timestamp))
276 __CFG_SS__ <<
"Error stopping '" << name_ <<
".'" << __E__;
280 __CFG_COUT__ <<
"Stopped." << __E__;