1 #include "otsdaq/Macros/TablePluginMacros.h"
2 #include "otsdaq/TablePlugins/ARTDAQBoardReaderTable.h"
8 #define SLOWCONTROL_PV_FILE_PATH \
10 getenv("OTSDAQ_EPICS_DATA")? \
11 (std::string(getenv("OTSDAQ_EPICS_DATA")) + "/" + __ENV__("MU2E_OWNER") + "_otsdaq_artdaqBoardReader-ai.dbg"): \
12 (EPICS_CONFIG_PATH + "/_otsdaq_artdaqBoardReader-ai.dbg") )
17 ARTDAQBoardReaderTable::ARTDAQBoardReaderTable(
void)
32 std::cout <<
"ARTDAQBoardReaderTable Before traceTID=" << traceTID << __E__;
34 traceInit(trace_name(TRACE_NAME, __TRACE_FILE__, buf,
sizeof(buf)), 0);
35 std::cout <<
"ARTDAQBoardReaderTable After traceTID=" << traceTID << __E__;
36 __COUT__ <<
"ARTDAQBoardReaderTable TRACE reinit and Constructed." << __E__;
39 __COUT__ <<
"ARTDAQBoardReaderTable Constructed." << __E__;
43 ARTDAQBoardReaderTable::~ARTDAQBoardReaderTable(
void) {}
48 __COUTS__(10) <<
"*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*" << __E__;
49 __COUTS__(10) << configManager->__SELF_NODE__ << __E__;
51 lastConfigManager_ = configManager;
52 if(!ARTDAQTableBase::doGenFiles(configManager))
54 __COUTS__(3) <<
"ARTDAQTableBase indicates file generation can be skipped."
59 __COUTS__(3) <<
"*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*" << __E__;
60 __COUTS__(3) << configManager->__SELF_NODE__ << __E__;
66 void ARTDAQBoardReaderTable::genFlatFHiCL(
void)
71 auto readers = lastConfigManager_->__SELF_NODE__.
getChildren(
72 std::map<std::string ,
77 for(
auto& reader : readers)
79 ARTDAQTableBase::outputBoardReaderFHICL(reader.second);
80 ARTDAQTableBase::flattenFHICL(
81 ARTDAQAppType::BoardReader,
82 reader.second.getValue(),
83 &(fclMap_[ARTDAQAppType::BoardReader][reader.first]));
85 __COUTS__(3) <<
"*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*" << __E__;
89 unsigned int ARTDAQBoardReaderTable::slowControlsHandlerConfig(
90 std::stringstream& out,
92 std::vector<std::pair<std::string , std::vector<std::string>>>*
99 std::string tabStr =
"";
100 std::string commentStr =
"";
103 std::vector<std::pair<std::string, ConfigurationTree>> artdaqRecords =
106 unsigned int numberOfBoardReaderMetricParameters = 0;
108 for(
auto& artdaqPair : artdaqRecords)
110 if(artdaqPair.second.getNode(colARTDAQSupervisor_.colLinkToBoardReaders_)
114 std::vector<std::pair<std::string, ConfigurationTree>> boardReaderRecords =
115 artdaqPair.second.getNode(colARTDAQSupervisor_.colLinkToBoardReaders_)
118 for(
auto& boardReaderPair :
121 if(!boardReaderPair.second.status())
126 if(boardReaderPair.second.getNode(
"daqMetricsLink").isDisconnected())
129 auto daqMetricsLinks =
130 boardReaderPair.second.getNode(
"daqMetricsLink").getChildren();
131 for(
auto& daqMetricsLink :
134 if(!daqMetricsLink.second.status())
137 if(daqMetricsLink.second.getNode(
"metricParametersLink")
143 boardReaderPair.second.
getNode(
"MetricAlarmThresholdsLink");
145 auto metricParametersLinks =
146 daqMetricsLink.second.
getNode(
"metricParametersLink")
148 for(
auto& metricParametersLink :
149 metricParametersLinks)
151 if(!metricParametersLink.second.status())
154 std::string subsystem =
155 metricParametersLink.second.getNode(
"metricParameterValue")
156 .getValueWithDefault<std::string>(std::string(
"TDAQ_") +
157 __ENV__(
"MU2E_OWNER"));
158 if(subsystem.find(
"Mu2e:") != std::string::npos)
159 subsystem = subsystem.replace(subsystem.find(
"Mu2e:"), 5,
"");
160 while(subsystem.find(
"\"") != std::string::npos)
161 subsystem = subsystem.replace(subsystem.find(
"\""), 1,
"");
163 numberOfBoardReaderMetricParameters =
164 slowControlsHandler(out,
168 boardReaderPair.first,
172 __COUT__ <<
"BoardReader '" << boardReaderPair.first
173 <<
"' number of metrics for slow controls: "
174 << numberOfBoardReaderMetricParameters << __E__;
178 catch(
const std::runtime_error& e)
180 __COUT_ERR__ <<
"Ignoring BoardReader error: " << e.what() << __E__;
185 return numberOfBoardReaderMetricParameters;
192 return SLOWCONTROL_PV_FILE_PATH;
void init(ConfigurationManager *configManager) override
Methods.
virtual std::string setFilePath(void) const override
return out file path
<virtual so future plugins can inherit from multiple table base classes
ConfigurationTree getNode(const std::string &nodeString, bool doNotThrowOnBrokenUIDLinks=false) const
"root/parent/parent/"
std::vector< std::pair< std::string, ConfigurationTree > > getChildren(std::map< std::string, TableVersion > *memberMap=0, std::string *accumulatedTreeErrors=0) const
ConfigurationTree getNode(const std::string &nodeName, bool doNotThrowOnBrokenUIDLinks=false) const
navigating between nodes
std::vector< std::pair< std::string, ConfigurationTree > > getChildren(std::map< std::string, std::string > filterMap=std::map< std::string, std::string >(), bool byPriority=false, bool onlyStatusTrue=false) const
<virtual so future plugins can inherit from multiple table base classes
defines used also by OtsConfigurationWizardSupervisor