1 #ifndef _ots_ARTDAQTableBase_h_
2 #define _ots_ARTDAQTableBase_h_
4 #include "otsdaq/ConfigurationInterface/ConfigurationManager.h"
5 #include "otsdaq/ConfigurationInterface/ConfigurationManagerRW.h"
6 #include "otsdaq/TableCore/TableBase.h"
9 #define OUT out << tabStr << commentStr
10 #define PUSHTAB tabStr += "\t"
11 #define POPTAB tabStr.resize(tabStr.size() - 1)
12 #define PUSHCOMMENT commentStr += "# "
13 #define POPCOMMENT commentStr.resize(commentStr.size() - 2)
22 ARTDAQTableBase(std::string tableName, std::string* accumulatedExceptions = 0);
28 virtual void genFlatFHiCL (
void) { __SS__ <<
"genFlatFHiCL() Not defined!"; __SS_THROW__; };
32 static const std::string ARTDAQ_CONFIG_LAYOUTS_PATH;
33 static const bool ARTDAQ_DONOTWRITE_FCL;
34 static const std::string ARTDAQ_SUPERVISOR_CLASS, ARTDAQ_SUPERVISOR_TABLE;
35 static const std::string ARTDAQ_READER_TABLE, ARTDAQ_BUILDER_TABLE, ARTDAQ_LOGGER_TABLE, ARTDAQ_DISPATCHER_TABLE, ARTDAQ_MONITOR_TABLE, ARTDAQ_ROUTER_TABLE;
36 static const std::string ARTDAQ_SUBSYSTEM_TABLE, ARTDAQ_DAQ_TABLE, ARTDAQ_DAQ_PARAMETER_TABLE, ARTDAQ_ART_TABLE;
37 static const std::string ARTDAQ_TYPE_TABLE_HOSTNAME, ARTDAQ_TYPE_TABLE_ALLOWED_PROCESSORS, ARTDAQ_TYPE_TABLE_SUBSYSTEM_LINK, ARTDAQ_TYPE_TABLE_SUBSYSTEM_LINK_UID;
39 enum class ARTDAQAppType
51 DEFAULT_MAX_FRAGMENT_SIZE = 1048576,
52 DEFAULT_ROUTING_TIMEOUT_MS = 1000,
53 DEFAULT_ROUTING_RETRY_COUNT = 5,
56 static const int NULL_SUBSYSTEM_DESTINATION;
57 static const std::string NULL_SUBSYSTEM_DESTINATION_LABEL;
66 std::string allowed_processors;
68 ProcessInfo(std::string l, std::string h, std::string procs,
int s, ARTDAQAppType ,
bool onOff,
int p = -1)
69 : label(l), hostname(h), subsystem(s), port(p), status(onOff), allowed_processors(procs) {}
81 bool hasRoutingManager;
82 std::string routingManagerHost;
90 std::map<ARTDAQAppType, std::list<ProcessInfo>> processes;
94 size_t maxFragmentSizeBytes = DEFAULT_MAX_FRAGMENT_SIZE,
95 size_t routingTimeoutMs = DEFAULT_ROUTING_TIMEOUT_MS,
96 size_t routingRetryCount = DEFAULT_ROUTING_RETRY_COUNT,
99 static const std::string& getTypeString (ARTDAQAppType type);
100 static std::string getFHICLFilename (ARTDAQAppType type,
const std::string& name);
101 static std::string getFlatFHICLFilename (ARTDAQAppType type,
const std::string& name);
102 static void flattenFHICL (ARTDAQAppType type,
const std::string& name, std::string* returnFcl =
nullptr);
106 std::string& commentStr,
107 const std::string& parentPath,
109 const std::string& parameterPreamble,
110 bool onlyInsertAtTableParameters =
false,
111 bool includeAtTableParameters =
false);
112 static std::string
insertModuleType (std::ostream& out, std::string& tabStr, std::string& commentStr,
const std::string& parentPath,
ConfigurationTree moduleTypeNode);
116 size_t routingTimeoutMs = DEFAULT_ROUTING_TIMEOUT_MS,
117 size_t routingRetryCount = DEFAULT_ROUTING_RETRY_COUNT );
120 size_t maxFragmentSizeBytes = DEFAULT_MAX_FRAGMENT_SIZE,
121 size_t routingTimeoutMs = DEFAULT_ROUTING_TIMEOUT_MS,
122 size_t routingRetryCount = DEFAULT_ROUTING_RETRY_COUNT);
125 ARTDAQAppType appType,
126 size_t maxFragmentSizeBytes = DEFAULT_MAX_FRAGMENT_SIZE,
127 size_t routingTimeoutMs = DEFAULT_ROUTING_TIMEOUT_MS,
128 size_t routingRetryCount = DEFAULT_ROUTING_RETRY_COUNT,
129 std::string* returnFcl =
nullptr);
131 static void outputRoutingManagerFHICL (
const ConfigurationTree& routingManagerNode,
132 size_t routingTimeoutMs = DEFAULT_ROUTING_TIMEOUT_MS,
133 size_t routingRetryCount = DEFAULT_ROUTING_RETRY_COUNT);
139 bool getStatusFalseNodes =
false,
140 bool doWriteFHiCL =
false,
141 size_t maxFragmentSizeBytes = DEFAULT_MAX_FRAGMENT_SIZE,
142 size_t routingTimeoutMs = DEFAULT_ROUTING_TIMEOUT_MS,
143 size_t routingRetryCount = DEFAULT_ROUTING_RETRY_COUNT,
147 std::map<std::string ,
148 std::map<std::string ,
149 std::vector<std::string /*property*/>>>& nodeTypeToObjectMap,
150 std::map<std::string ,
151 std::string >& subsystemObjectMap,
152 std::vector<std::string /*property*/>& artdaqSupervisoInfo);
155 const std::map<std::string ,
156 std::map<std::string ,
157 std::vector<std::string /*property*/>>>& nodeTypeToObjectMap,
158 const std::map<std::string ,
159 std::string >& subsystemObjectMap);
163 static void extractRoutingManagersInfo (
ConfigurationTree artdaqSupervisorNode,
bool getStatusFalseNodes,
bool doWriteFHiCL,
size_t routingTimeoutMs,
size_t routingRetryCount);
164 static void extractBoardReadersInfo (
ConfigurationTree artdaqSupervisorNode,
bool getStatusFalseNodes,
bool doWriteFHiCL,
size_t maxFragmentSizeBytes,
size_t routingTimeoutMs,
size_t routingRetryCount);
165 static void extractEventBuildersInfo (
ConfigurationTree artdaqSupervisorNode,
bool getStatusFalseNodes,
bool doWriteFHiCL,
size_t maxFragmentSizeBytes);
166 static void extractDataLoggersInfo (
ConfigurationTree artdaqSupervisorNode,
bool getStatusFalseNodes,
bool doWriteFHiCL,
size_t maxFragmentSizeBytes);
167 static void extractDispatchersInfo (
ConfigurationTree artdaqSupervisorNode,
bool getStatusFalseNodes,
bool doWriteFHiCL,
size_t maxFragmentSizeBytes);
168 static void addCommentWhitespace (std::ostream& os,
size_t lineLength);
173 std::map<ARTDAQAppType, std::map<std::string , std::string >> fclMap_;
178 std::string
const READER =
"reader";
179 std::string
const BUILDER =
"builder";
180 std::string
const LOGGER =
"logger";
181 std::string
const DISPATCHER =
"dispatcher";
182 std::string
const MONITOR =
"monitor";
183 std::string
const ROUTER =
"router";
187 std::make_pair(READER, ARTDAQTableBase::ARTDAQAppType::BoardReader),
188 std::make_pair(BUILDER, ARTDAQTableBase::ARTDAQAppType::EventBuilder),
189 std::make_pair(LOGGER, ARTDAQTableBase::ARTDAQAppType::DataLogger),
190 std::make_pair(DISPATCHER, ARTDAQTableBase::ARTDAQAppType::Dispatcher),
191 std::make_pair(MONITOR, ARTDAQTableBase::ARTDAQAppType::Monitor),
192 std::make_pair(ROUTER, ARTDAQTableBase::ARTDAQAppType::RoutingManager)})
194 std::make_pair(READER, ARTDAQTableBase::ARTDAQ_READER_TABLE),
195 std::make_pair(BUILDER, ARTDAQTableBase::ARTDAQ_BUILDER_TABLE),
196 std::make_pair(LOGGER, ARTDAQTableBase::ARTDAQ_LOGGER_TABLE),
197 std::make_pair(DISPATCHER, ARTDAQTableBase::ARTDAQ_DISPATCHER_TABLE),
198 std::make_pair(MONITOR, ARTDAQTableBase::ARTDAQ_MONITOR_TABLE),
199 std::make_pair(ROUTER, ARTDAQTableBase::ARTDAQ_ROUTER_TABLE)})
200 , mapToGroupIDAppend_({
201 std::make_pair(READER,
"BoardReaders"),
202 std::make_pair(BUILDER,
"EventBuilders"),
203 std::make_pair(LOGGER,
"DataLoggers"),
204 std::make_pair(DISPATCHER,
"Dispatchers"),
205 std::make_pair(MONITOR,
"Monitors"),
206 std::make_pair(ROUTER,
"RoutingManagers")})
207 , mapToLinkGroupIDColumn_({
208 std::make_pair(READER, ARTDAQTableBase::colARTDAQSupervisor_.colLinkToBoardReadersGroupID_),
209 std::make_pair(BUILDER, ARTDAQTableBase::colARTDAQSupervisor_.colLinkToEventBuildersGroupID_),
210 std::make_pair(LOGGER, ARTDAQTableBase::colARTDAQSupervisor_.colLinkToDataLoggersGroupID_),
211 std::make_pair(DISPATCHER, ARTDAQTableBase::colARTDAQSupervisor_.colLinkToDispatchersGroupID_),
212 std::make_pair(ROUTER, ARTDAQTableBase::colARTDAQSupervisor_.colLinkToRoutingManagersGroupID_)})
213 , mapToGroupIDColumn_({
214 std::make_pair(READER,
"BoardReaderGroupID"),
215 std::make_pair(BUILDER,
"EventBuilderGroupID"),
216 std::make_pair(LOGGER,
"DataLoggerGroupID"),
217 std::make_pair(DISPATCHER,
"DispatcherGroupID"),
218 std::make_pair(MONITOR,
"MonitorGroupID"),
219 std::make_pair(ROUTER,
"RoutingManagerGroupID")})
222 const std::map<std::string , ARTDAQTableBase::ARTDAQAppType> mapToType_;
223 const std::map<std::string , std::string > mapToTable_, mapToGroupIDAppend_, mapToLinkGroupIDColumn_, mapToGroupIDColumn_;
229 std::string
const colDAQInterfaceDebugLevel_ =
"DAQInterfaceDebugLevel";
230 std::string
const colDAQSetupScript_ =
"DAQSetupScript";
232 std::string
const colLinkToBoardReaders_ =
"BoardReadersLink";
233 std::string
const colLinkToBoardReadersGroupID_ =
"BoardReadersLinkGroupID";
234 std::string
const colLinkToEventBuilders_ =
"EventBuildersLink";
235 std::string
const colLinkToEventBuildersGroupID_ =
"EventBuildersLinkGroupID";
236 std::string
const colLinkToDataLoggers_ =
"DataLoggersLink";
237 std::string
const colLinkToDataLoggersGroupID_ =
"DataLoggersLinkGroupID";
238 std::string
const colLinkToDispatchers_ =
"DispatchersLink";
239 std::string
const colLinkToDispatchersGroupID_ =
"DispatchersLinkGroupID";
240 std::string
const colLinkToRoutingManagers_ =
"RoutingManagersLink";
241 std::string
const colLinkToRoutingManagersGroupID_ =
"RoutingManagersLinkGroupID";
242 } colARTDAQSupervisor_;
247 std::string
const colLinkToDestination_ =
"SubsystemDestinationLink";
248 std::string
const colLinkToDestinationUID_ =
"SubsystemDestinationUID";
249 } colARTDAQSubsystem_;
254 std::string
const colDaqFragmentIDs_ =
"daqFragmentIDs";
255 std::string
const colLinkToDaqParameters_ =
"daqParametersLink";
256 std::string
const colLinkToDaqParametersGroupID_ =
"daqParametersLinkGroupID";
262 std::string
const colLinkToDaq_ =
"daqLink";
263 std::string
const colLinkToDaqUID_ =
"daqLinkUID";
264 std::string
const colLinkToArt_ =
"artLink";
265 std::string
const colLinkToArtUID_ =
"artLinkUID";
266 } colARTDAQNotReader_;
271 std::string
const colLinkToDaqParameters_ =
"daqParametersLink";
272 std::string
const colLinkToDaqParametersGroupID_ =
"daqParametersLinkGroupID";
278 std::string
const colDaqParameterKey_ =
"daqParameterKey";
279 std::string
const colDaqParameterValue_ =
"daqParameterValue";
280 std::string
const colDaqParameterGroupID_ =
"daqParameterGroupID";
281 } colARTDAQDaqParameter_;
286 std::string
const colProcessName_ =
"ProcessName";
<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)
static void insertArtProcessBlock(std::ostream &out, std::string &tabStr, std::string &commentStr, const std::string &parentPath, ConfigurationTree art, ConfigurationTree subsystemLink=ConfigurationTree(), size_t routingTimeoutMs=DEFAULT_ROUTING_TIMEOUT_MS, size_t routingRetryCount=DEFAULT_ROUTING_RETRY_COUNT)
static const std::string ARTDAQ_FCL_PATH
Tree-path rule is, if the last link in the path is a group link with a specified group ID,...
static std::string insertModuleType(std::ostream &out, std::string &tabStr, std::string &commentStr, const std::string &parentPath, ConfigurationTree moduleTypeNode)
static std::string getBootFileContentFromInfo(const ARTDAQInfo &info, const std::string &setupScript, int debugLevel)
static bool isARTDAQEnabled(const ConfigurationManager *cfgMgr)
isARTDAQEnabled
static void insertParameters(std::ostream &out, std::string &tabStr, std::string &commentStr, const std::string &parentPath, ConfigurationTree parameterLink, const std::string ¶meterPreamble, bool onlyInsertAtTableParameters=false, bool includeAtTableParameters=false)
static void setAndActivateARTDAQSystem(ConfigurationManagerRW *cfgMgr, const std::map< std::string, std::map< std::string, std::vector< std::string >>> &nodeTypeToObjectMap, const std::map< std::string, std::string > &subsystemObjectMap)
static struct ots::ARTDAQTableBase::ProcessTypes processTypes_
Note!!!! processTypes_ must be instantiate after the static artdaq table names (to construct map in c...
static void outputOnlineMonitorFHICL(const ConfigurationTree &onlineMonitorNode)
std::string getBootFileContent(ConfigurationTree artdaqSupervisorNode, size_t maxFragmentSizeBytes=DEFAULT_MAX_FRAGMENT_SIZE, size_t routingTimeoutMs=DEFAULT_ROUTING_TIMEOUT_MS, size_t routingRetryCount=DEFAULT_ROUTING_RETRY_COUNT, ProgressBar *progressBar=0)
static const ARTDAQInfo & getARTDAQSystem(ConfigurationManagerRW *cfgMgr, std::map< std::string, std::map< std::string, std::vector< std::string >>> &nodeTypeToObjectMap, std::map< std::string, std::string > &subsystemObjectMap, std::vector< std::string > &artdaqSupervisoInfo)
static void insertMetricsBlock(std::ostream &out, std::string &tabStr, std::string &commentStr, const std::string &parentPath, ConfigurationTree daqNode)
insertMetricsBlock
defines used also by OtsConfigurationWizardSupervisor
ARTDAQ DAQ Parameter Column names.
ARTDAQ Builder/Logger/Dispatcher Column names.
ARTDAQ Reader Column names.
ARTDAQ Subsystem Column names.
ARTDAQ Supervisor Column names.
bool eventMode
Whether art sends events or Fragments.
int destination
destination subsystem id, 0 := no destination
std::set< int > sources
by subsystem id