1 #include "otsdaq/Macros/TablePluginMacros.h"
2 #include "otsdaq/TablePlugins/ARTDAQBoardReaderTable.h"
3 #include "otsdaq/TablePlugins/XDAQContextTable.h"
9 #define SLOWCONTROL_PV_FILE_PATH \
11 getenv("OTSDAQ_EPICS_DATA")? \
12 (std::string(getenv("OTSDAQ_EPICS_DATA")) + "/" + __ENV__("MU2E_OWNER") + "_otsdaq_artdaqBoardReader-ai.dbg"): \
13 (EPICS_CONFIG_PATH + "/_otsdaq_artdaqBoardReader-ai.dbg") )
18 ARTDAQBoardReaderTable::ARTDAQBoardReaderTable(
void)
26 __COUT__ <<
"ARTDAQBoardReaderTable Constructed." << __E__;
30 ARTDAQBoardReaderTable::~ARTDAQBoardReaderTable(
void) {}
35 lastConfigManager_ = configManager;
39 isFirstAppInContext_ = configManager->isOwnerFirstAppInContext();
42 if(!isFirstAppInContext_)
46 mkdir((ARTDAQTableBase::ARTDAQ_FCL_PATH).c_str(), 0755);
54 auto readers = lastConfigManager_->__SELF_NODE__.getChildren(
55 std::map<std::string /*relative-path*/, std::string /*value*/>(),
59 for(
auto& reader : readers)
61 ARTDAQTableBase::outputBoardReaderFHICL(reader.second);
62 ARTDAQTableBase::flattenFHICL(ARTDAQAppType::BoardReader, reader.second.getValue());
67 unsigned int ARTDAQBoardReaderTable::slowControlsHandlerConfig(
68 std::stringstream& out,
70 std::vector<std::pair<std::string , std::vector<std::string>>>* channelList
76 std::string tabStr =
"";
77 std::string commentStr =
"";
80 std::vector<std::pair<std::string, ConfigurationTree>> artdaqRecords = configManager->getNode(
"ARTDAQSupervisorTable").getChildren();
82 unsigned int numberOfBoardReaders = 0;
83 unsigned int numberOfBoardReaderMetricParameters = 0;
85 for(
auto& artdaqPair : artdaqRecords)
87 if(artdaqPair.second.getNode(colARTDAQSupervisor_.colLinkToBoardReaders_).isDisconnected())
90 std::vector<std::pair<std::string, ConfigurationTree>> boardReaderRecords =
91 artdaqPair.second.getNode(colARTDAQSupervisor_.colLinkToBoardReaders_).getChildren();
93 for(
auto& boardReaderPair : boardReaderRecords)
95 if(!boardReaderPair.second.status())
98 numberOfBoardReaders++;
102 if(boardReaderPair.second.getNode(
"daqLink").isDisconnected())
105 auto daqLink = boardReaderPair.second.getNode(
"daqLink");
107 if(daqLink.getNode(
"daqMetricsLink").isDisconnected())
110 auto daqMetricsLinks = daqLink.getNode(
"daqMetricsLink").getChildren();
111 for(
auto& daqMetricsLink : daqMetricsLinks)
113 if(!daqMetricsLink.second.status())
116 if(daqMetricsLink.second.getNode(
"metricParametersLink").isDisconnected())
120 ConfigurationTree slowControlsLink = boardReaderPair.second.getNode(
"MetricAlarmThresholdsLink");
122 auto metricParametersLinks = daqMetricsLink.second.getNode(
"metricParametersLink").getChildren();
123 for(
auto& metricParametersLink : metricParametersLinks)
125 if(!metricParametersLink.second.status())
128 std::string subsystem = metricParametersLink.second.getNode(
"metricParameterValue")
129 .getValueWithDefault<std::string>(std::string(
"TDAQ_") + __ENV__(
"MU2E_OWNER"));
130 if(subsystem.find(
"Mu2e:") != std::string::npos)
131 subsystem = subsystem.replace(subsystem.find(
"Mu2e:"), 5,
"");
132 while(subsystem.find(
"\"") != std::string::npos)
133 subsystem = subsystem.replace(subsystem.find(
"\""), 1,
"");
135 numberOfBoardReaderMetricParameters =
136 slowControlsHandler(out, tabStr, commentStr, subsystem, boardReaderPair.first, slowControlsLink, channelList);
138 __COUT__ <<
"BoardReader '" << boardReaderPair.first
139 <<
"' number of metrics for slow controls: " << numberOfBoardReaderMetricParameters << __E__;
143 catch(
const std::runtime_error& e)
145 __COUT_ERR__ <<
"Ignoring BoardReader error: " << e.what() << __E__;
150 return numberOfBoardReaderMetricParameters;
155 std::string ARTDAQBoardReaderTable::setFilePath()
const {
return SLOWCONTROL_PV_FILE_PATH; }