1 #include "otsdaq/Macros/TablePluginMacros.h"
2 #include "otsdaq/TablePlugins/ARTDAQRoutingManagerTable.h"
8 #define SLOWCONTROL_PV_FILE_PATH \
10 getenv("OTSDAQ_EPICS_DATA")? \
11 (std::string(getenv("OTSDAQ_EPICS_DATA")) + "/" + __ENV__("MU2E_OWNER") + "_otsdaq_artdaqRoutingManager-ai.dbg"): \
12 (EPICS_CONFIG_PATH + "/_otsdaq_artdaqRoutingManager-ai.dbg") )
17 ARTDAQRoutingManagerTable::ARTDAQRoutingManagerTable(
void)
25 __COUT__ <<
"ARTDAQRoutingManagerTable Constructed." << __E__;
29 ARTDAQRoutingManagerTable::~ARTDAQRoutingManagerTable(
void) {}
34 lastConfigManager_ = configManager;
35 if(!ARTDAQTableBase::doGenFiles(configManager))
37 __COUTS__(3) <<
"ARTDAQTableBase indicates file generation can be skipped."
42 __COUTS__(3) <<
"*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*" << __E__;
43 __COUTS__(3) << configManager->__SELF_NODE__ << __E__;
49 void ARTDAQRoutingManagerTable::genFlatFHiCL(
void)
53 auto routingManagers = lastConfigManager_->__SELF_NODE__.
getChildren(
54 std::map<std::string ,
59 for(
auto& routingManager : routingManagers)
61 ARTDAQTableBase::outputRoutingManagerFHICL(routingManager.second);
62 ARTDAQTableBase::flattenFHICL(
63 ARTDAQAppType::RoutingManager,
64 routingManager.second.getValue(),
65 &(fclMap_[ARTDAQAppType::BoardReader][routingManager.first]));
67 __COUTS__(3) <<
"*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*" << __E__;
71 unsigned int ARTDAQRoutingManagerTable::slowControlsHandlerConfig(
72 std::stringstream& out,
74 std::vector<std::pair<std::string , std::vector<std::string>>>*
81 std::string tabStr =
"";
82 std::string commentStr =
"";
85 std::vector<std::pair<std::string, ConfigurationTree>> artdaqRecords =
88 unsigned int numberOfRoutingManagerMetricParameters = 0;
90 for(
auto& artdaqPair : artdaqRecords)
92 if(artdaqPair.second.getNode(colARTDAQSupervisor_.colLinkToRoutingManagers_)
96 std::vector<std::pair<std::string, ConfigurationTree>> routingManagerRecords =
97 artdaqPair.second.getNode(colARTDAQSupervisor_.colLinkToRoutingManagers_)
100 for(
auto& routingManagerPair :
101 routingManagerRecords)
103 if(!routingManagerPair.second.status())
108 if(routingManagerPair.second.getNode(
"daqMetricsLink").isDisconnected())
111 auto daqMetricsLinks =
112 routingManagerPair.second.getNode(
"daqMetricsLink").getChildren();
113 for(
auto& daqMetricsLink :
116 if(!daqMetricsLink.second.status())
119 if(daqMetricsLink.second.getNode(
"metricParametersLink")
125 routingManagerPair.second.
getNode(
"MetricAlarmThresholdsLink");
127 auto metricParametersLinks =
128 daqMetricsLink.second.
getNode(
"metricParametersLink")
130 for(
auto& metricParametersLink :
131 metricParametersLinks)
133 if(!metricParametersLink.second.status())
136 std::string subsystem =
137 metricParametersLink.second.getNode(
"metricParameterValue")
138 .getValueWithDefault<std::string>(std::string(
"TDAQ_") +
139 __ENV__(
"MU2E_OWNER"));
140 if(subsystem.find(
"Mu2e:") != std::string::npos)
141 subsystem = subsystem.replace(subsystem.find(
"Mu2e:"), 5,
"");
142 while(subsystem.find(
"\"") != std::string::npos)
143 subsystem = subsystem.replace(subsystem.find(
"\""), 1,
"");
145 numberOfRoutingManagerMetricParameters =
146 slowControlsHandler(out,
150 routingManagerPair.first,
154 __COUT__ <<
"RoutingManager '" << routingManagerPair.first
155 <<
"' number of metrics for slow controls: "
156 << numberOfRoutingManagerMetricParameters << __E__;
160 catch(
const std::runtime_error& e)
162 __COUT_ERR__ <<
"Ignoring RoutingManager error: " << e.what() << __E__;
167 return numberOfRoutingManagerMetricParameters;
174 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