1 #include "otsdaq/Macros/TablePluginMacros.h"
2 #include "otsdaq/TablePlugins/ARTDAQDataLoggerTable.h"
8 #define SLOWCONTROL_PV_FILE_PATH \
10 getenv("OTSDAQ_EPICS_DATA")? \
11 (std::string(getenv("OTSDAQ_EPICS_DATA")) + "/" + __ENV__("MU2E_OWNER") + "_otsdaq_artdaqDataLogger-ai.dbg"): \
12 (EPICS_CONFIG_PATH + "/_otsdaq_artdaqDataLogger-ai.dbg") )
17 ARTDAQDataLoggerTable::ARTDAQDataLoggerTable(
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__ <<
"ARTDAQDataLoggerTable TRACE reinit and Constructed." << __E__;
39 __COUT__ <<
"ARTDAQDataLoggerTable Constructed." << __E__;
43 ARTDAQDataLoggerTable::~ARTDAQDataLoggerTable(
void) {}
48 lastConfigManager_ = configManager;
49 if(!ARTDAQTableBase::doGenFiles(configManager))
51 __COUTS__(3) <<
"ARTDAQTableBase indicates file generation can be skipped."
56 __COUTS__(3) <<
"*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*" << __E__;
57 __COUTS__(3) << lastConfigManager_->__SELF_NODE__ << __E__;
63 void ARTDAQDataLoggerTable::genFlatFHiCL(
void)
67 auto dataloggers = lastConfigManager_->__SELF_NODE__.
getChildren(
68 std::map<std::string ,
73 for(
auto& datalogger : dataloggers)
76 datalogger.second, ARTDAQTableBase::ARTDAQAppType::DataLogger);
78 ARTDAQTableBase::flattenFHICL(
79 ARTDAQAppType::DataLogger,
80 datalogger.second.getValue(),
81 &(fclMap_[ARTDAQAppType::DataLogger][datalogger.first]));
83 __COUTS__(3) <<
"*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*" << __E__;
87 unsigned int ARTDAQDataLoggerTable::slowControlsHandlerConfig(
88 std::stringstream& out,
90 std::vector<std::pair<std::string , std::vector<std::string>>>*
97 std::string tabStr =
"";
98 std::string commentStr =
"";
101 std::vector<std::pair<std::string, ConfigurationTree>> artdaqRecords =
104 unsigned int numberOfDataLoggerMetricParameters = 0;
106 for(
auto& artdaqPair : artdaqRecords)
108 if(artdaqPair.second.getNode(colARTDAQSupervisor_.colLinkToDataLoggers_)
112 std::vector<std::pair<std::string, ConfigurationTree>> dataLoggerRecords =
113 artdaqPair.second.getNode(colARTDAQSupervisor_.colLinkToDataLoggers_)
116 for(
auto& dataLoggerPair :
119 if(!dataLoggerPair.second.status())
124 if(dataLoggerPair.second.getNode(
"daqLink").isDisconnected())
127 auto daqLink = dataLoggerPair.second.getNode(
"daqLink");
129 if(daqLink.getNode(
"daqMetricsLink").isDisconnected())
132 auto daqMetricsLinks = daqLink.getNode(
"daqMetricsLink").getChildren();
133 for(
auto& daqMetricsLink :
136 if(!daqMetricsLink.second.status())
139 if(daqMetricsLink.second.getNode(
"metricParametersLink")
145 dataLoggerPair.second.
getNode(
"MetricAlarmThresholdsLink");
147 auto metricParametersLinks =
148 daqMetricsLink.second.
getNode(
"metricParametersLink")
150 for(
auto& metricParametersLink :
151 metricParametersLinks)
153 if(!metricParametersLink.second.status())
156 std::string subsystem =
157 metricParametersLink.second.getNode(
"metricParameterValue")
158 .getValueWithDefault<std::string>(std::string(
"TDAQ_") +
159 __ENV__(
"MU2E_OWNER"));
160 if(subsystem.find(
"Mu2e:") != std::string::npos)
161 subsystem = subsystem.replace(subsystem.find(
"Mu2e:"), 5,
"");
162 while(subsystem.find(
"\"") != std::string::npos)
163 subsystem = subsystem.replace(subsystem.find(
"\""), 1,
"");
165 numberOfDataLoggerMetricParameters =
166 slowControlsHandler(out,
170 dataLoggerPair.first,
174 __COUT__ <<
"DataLogger '" << dataLoggerPair.first
175 <<
"' number of metrics for slow controls: "
176 << numberOfDataLoggerMetricParameters << __E__;
180 catch(
const std::runtime_error& e)
182 __COUT_ERR__ <<
"Ignoring DataLogger error: " << e.what() << __E__;
187 return numberOfDataLoggerMetricParameters;
194 return SLOWCONTROL_PV_FILE_PATH;
virtual std::string setFilePath(void) const override
return out file path
void init(ConfigurationManager *configManager) override
Methods.
<virtual so future plugins can inherit from multiple table base classes
static void outputDataReceiverFHICL(const ConfigurationTree &receiverNode, ARTDAQAppType appType, size_t maxFragmentSizeBytes=DEFAULT_MAX_FRAGMENT_SIZE, size_t routingTimeoutMs=DEFAULT_ROUTING_TIMEOUT_MS, size_t routingRetryCount=DEFAULT_ROUTING_RETRY_COUNT, std::string *returnFcl=nullptr)
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