1 #include "otsdaq/Macros/TablePluginMacros.h"
2 #include "otsdaq/TablePlugins/ARTDAQEventBuilderTable.h"
10 #define SLOWCONTROL_PV_FILE_PATH \
12 getenv("OTSDAQ_EPICS_DATA")? \
13 (std::string(getenv("OTSDAQ_EPICS_DATA")) + "/" + __ENV__("MU2E_OWNER") + "_otsdaq_artdaqEventBuilder-ai.dbg"): \
14 (EPICS_CONFIG_PATH + "/_otsdaq_artdaqEventBuilder-ai.dbg") )
19 ARTDAQEventBuilderTable::ARTDAQEventBuilderTable(
void)
27 __COUT__ <<
"ARTDAQEventBuilderTable Constructed." << __E__;
31 ARTDAQEventBuilderTable::~ARTDAQEventBuilderTable(
void) {}
36 lastConfigManager_ = configManager;
37 if(!ARTDAQTableBase::doGenFiles(configManager))
39 __COUTS__(3) <<
"ARTDAQTableBase indicates file generation can be skipped."
44 __COUTS__(3) <<
"*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*" << __E__;
45 __COUTS__(3) << configManager->__SELF_NODE__ << __E__;
51 void ARTDAQEventBuilderTable::genFlatFHiCL(
void)
57 std::map<std::string ,
67 std::vector<std::pair<std::string, std::string*>> buildersToFlatten;
68 for(
auto& builder : builders)
70 const std::string& builderUID = builder.first;
71 __COUTV__(builderUID);
74 ARTDAQAppType::EventBuilder,
75 DEFAULT_MAX_FRAGMENT_SIZE,
76 DEFAULT_ROUTING_TIMEOUT_MS,
77 DEFAULT_ROUTING_RETRY_COUNT);
78 buildersToFlatten.emplace_back(
79 builderUID, &(fclMap_[ARTDAQAppType::EventBuilder][builderUID]));
82 if(buildersToFlatten.size())
83 ARTDAQTableBase::flattenFHICLInParallel(ARTDAQAppType::EventBuilder,
85 __COUTS__(3) <<
"*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*" << __E__;
89 unsigned int ARTDAQEventBuilderTable::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 numberOfEventBuiderMetricParameters = 0;
108 for(
auto& artdaqPair : artdaqRecords)
110 if(artdaqPair.second.getNode(colARTDAQSupervisor_.colLinkToEventBuilders_)
114 std::vector<std::pair<std::string, ConfigurationTree>> eventBuilderRecords =
115 artdaqPair.second.getNode(colARTDAQSupervisor_.colLinkToEventBuilders_)
118 for(
auto& eventBuilderPair :
121 if(!eventBuilderPair.second.status())
126 if(eventBuilderPair.second.getNode(
"daqLink").isDisconnected())
129 auto daqLink = eventBuilderPair.second.getNode(
"daqLink");
131 if(daqLink.getNode(
"daqMetricsLink").isDisconnected())
134 auto daqMetricsLinks = daqLink.getNode(
"daqMetricsLink").getChildren();
135 for(
auto& daqMetricsLink :
138 if(!daqMetricsLink.second.status())
141 if(daqMetricsLink.second.getNode(
"metricParametersLink")
147 eventBuilderPair.second.
getNode(
"MetricAlarmThresholdsLink");
149 auto metricParametersLinks =
150 daqMetricsLink.second.
getNode(
"metricParametersLink")
152 for(
auto& metricParametersLink :
153 metricParametersLinks)
155 if(!metricParametersLink.second.status())
158 std::string subsystem =
159 metricParametersLink.second.getNode(
"metricParameterValue")
160 .getValueWithDefault<std::string>(std::string(
"TDAQ_") +
161 __ENV__(
"MU2E_OWNER"));
162 if(subsystem.find(
"Mu2e:") != std::string::npos)
163 subsystem = subsystem.replace(subsystem.find(
"Mu2e:"), 5,
"");
164 while(subsystem.find(
"\"") != std::string::npos)
165 subsystem = subsystem.replace(subsystem.find(
"\""), 1,
"");
167 numberOfEventBuiderMetricParameters =
168 slowControlsHandler(out,
172 eventBuilderPair.first,
176 __COUT__ <<
"EventBuilder '" << eventBuilderPair.first
177 <<
"' number of metrics for slow controls: "
178 << numberOfEventBuiderMetricParameters << __E__;
182 catch(
const std::runtime_error& e)
184 __COUT_ERR__ <<
"Ignoring EventBuilder error: " << e.what() << __E__;
189 return numberOfEventBuiderMetricParameters;
196 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
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/"
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
const std::string & getTableName(void) const
Getters.
defines used also by OtsConfigurationWizardSupervisor