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);
26 static const std::string ARTDAQ_FCL_PATH;
27 static const std::string ARTDAQ_SUPERVISOR_CLASS, ARTDAQ_SUPERVISOR_TABLE;
28 static const std::string ARTDAQ_READER_TABLE, ARTDAQ_BUILDER_TABLE, ARTDAQ_LOGGER_TABLE, ARTDAQ_DISPATCHER_TABLE, ARTDAQ_MONITOR_TABLE, ARTDAQ_ROUTER_TABLE;
29 static const std::string ARTDAQ_SUBSYSTEM_TABLE, ARTDAQ_DAQ_TABLE, ARTDAQ_DAQ_PARAMETER_TABLE;
30 static const std::string ARTDAQ_TYPE_TABLE_HOSTNAME, ARTDAQ_TYPE_TABLE_ALLOWED_PROCESSORS, ARTDAQ_TYPE_TABLE_SUBSYSTEM_LINK, ARTDAQ_TYPE_TABLE_SUBSYSTEM_LINK_UID;
32 enum class ARTDAQAppType
44 DEFAULT_MAX_FRAGMENT_SIZE = 1048576,
45 DEFAULT_ROUTING_TIMEOUT_MS = 1000,
46 DEFAULT_ROUTING_RETRY_COUNT = 5,
49 static const int NULL_SUBSYSTEM_DESTINATION;
50 static const std::string NULL_SUBSYSTEM_DESTINATION_LABEL;
59 std::string allowed_processors;
61 ProcessInfo(std::string l, std::string h, std::string procs,
int s, ARTDAQAppType ,
bool onOff,
int p = -1)
62 : label(l), hostname(h), subsystem(s), port(p), status(onOff), allowed_processors(procs) {}
74 bool hasRoutingManager;
75 std::string routingManagerHost;
83 std::map<ARTDAQAppType, std::list<ProcessInfo>> processes;
86 static const std::string& getTypeString (ARTDAQAppType type);
87 static std::string getFHICLFilename (ARTDAQAppType type,
const std::string& name);
88 static std::string getFlatFHICLFilename (ARTDAQAppType type,
const std::string& name);
89 static void flattenFHICL (ARTDAQAppType type,
const std::string& name);
93 std::string& commentStr,
95 const std::string& parameterPreamble,
96 bool onlyInsertAtTableParameters =
false,
97 bool includeAtTableParameters =
false);
102 size_t routingTimeoutMs = DEFAULT_ROUTING_TIMEOUT_MS,
103 size_t routingRetryCount = DEFAULT_ROUTING_RETRY_COUNT );
106 size_t maxFragmentSizeBytes = DEFAULT_MAX_FRAGMENT_SIZE,
107 size_t routingTimeoutMs = DEFAULT_ROUTING_TIMEOUT_MS,
108 size_t routingRetryCount = DEFAULT_ROUTING_RETRY_COUNT);
111 ARTDAQAppType appType,
112 size_t maxFragmentSizeBytes = DEFAULT_MAX_FRAGMENT_SIZE,
113 size_t routingTimeoutMs = DEFAULT_ROUTING_TIMEOUT_MS,
114 size_t routingRetryCount = DEFAULT_ROUTING_RETRY_COUNT);
116 static void outputRoutingManagerFHICL (
const ConfigurationTree& routingManagerNode,
117 size_t routingTimeoutMs = DEFAULT_ROUTING_TIMEOUT_MS,
118 size_t routingRetryCount = DEFAULT_ROUTING_RETRY_COUNT);
124 bool getStatusFalseNodes =
false,
125 bool doWriteFHiCL =
false,
126 size_t maxFragmentSizeBytes = DEFAULT_MAX_FRAGMENT_SIZE,
127 size_t routingTimeoutMs = DEFAULT_ROUTING_TIMEOUT_MS,
128 size_t routingRetryCount = DEFAULT_ROUTING_RETRY_COUNT,
132 std::map<std::string ,
133 std::map<std::string ,
134 std::vector<std::string /*property*/>>>& nodeTypeToObjectMap,
135 std::map<std::string ,
136 std::string >& subsystemObjectMap,
137 std::vector<std::string /*property*/>& artdaqSupervisoInfo);
140 const std::map<std::string ,
141 std::map<std::string ,
142 std::vector<std::string /*property*/>>>& nodeTypeToObjectMap,
143 const std::map<std::string ,
144 std::string >& subsystemObjectMap);
148 static void extractRoutingManagersInfo (
ConfigurationTree artdaqSupervisorNode,
bool getStatusFalseNodes,
bool doWriteFHiCL,
size_t routingTimeoutMs,
size_t routingRetryCount);
149 static void extractBoardReadersInfo (
ConfigurationTree artdaqSupervisorNode,
bool getStatusFalseNodes,
bool doWriteFHiCL,
size_t maxFragmentSizeBytes,
size_t routingTimeoutMs,
size_t routingRetryCount);
150 static void extractEventBuildersInfo (
ConfigurationTree artdaqSupervisorNode,
bool getStatusFalseNodes,
bool doWriteFHiCL,
size_t maxFragmentSizeBytes);
151 static void extractDataLoggersInfo (
ConfigurationTree artdaqSupervisorNode,
bool getStatusFalseNodes,
bool doWriteFHiCL,
size_t maxFragmentSizeBytes);
152 static void extractDispatchersInfo (
ConfigurationTree artdaqSupervisorNode,
bool getStatusFalseNodes,
bool doWriteFHiCL,
size_t maxFragmentSizeBytes);
159 std::string
const READER =
"reader";
160 std::string
const BUILDER =
"builder";
161 std::string
const LOGGER =
"logger";
162 std::string
const DISPATCHER =
"dispatcher";
163 std::string
const MONITOR =
"monitor";
164 std::string
const ROUTER =
"router";
168 std::make_pair(READER, ARTDAQTableBase::ARTDAQAppType::BoardReader),
169 std::make_pair(BUILDER, ARTDAQTableBase::ARTDAQAppType::EventBuilder),
170 std::make_pair(LOGGER, ARTDAQTableBase::ARTDAQAppType::DataLogger),
171 std::make_pair(DISPATCHER, ARTDAQTableBase::ARTDAQAppType::Dispatcher),
172 std::make_pair(MONITOR, ARTDAQTableBase::ARTDAQAppType::Monitor),
173 std::make_pair(ROUTER, ARTDAQTableBase::ARTDAQAppType::RoutingManager)})
175 std::make_pair(READER, ARTDAQTableBase::ARTDAQ_READER_TABLE),
176 std::make_pair(BUILDER, ARTDAQTableBase::ARTDAQ_BUILDER_TABLE),
177 std::make_pair(LOGGER, ARTDAQTableBase::ARTDAQ_LOGGER_TABLE),
178 std::make_pair(DISPATCHER, ARTDAQTableBase::ARTDAQ_DISPATCHER_TABLE),
179 std::make_pair(MONITOR, ARTDAQTableBase::ARTDAQ_MONITOR_TABLE),
180 std::make_pair(ROUTER, ARTDAQTableBase::ARTDAQ_ROUTER_TABLE)})
181 , mapToGroupIDAppend_({
182 std::make_pair(READER,
"BoardReaders"),
183 std::make_pair(BUILDER,
"EventBuilders"),
184 std::make_pair(LOGGER,
"DataLoggers"),
185 std::make_pair(DISPATCHER,
"Dispatchers"),
186 std::make_pair(MONITOR,
"Monitors"),
187 std::make_pair(ROUTER,
"RoutingManagers")})
188 , mapToLinkGroupIDColumn_({
189 std::make_pair(READER, ARTDAQTableBase::colARTDAQSupervisor_.colLinkToBoardReadersGroupID_),
190 std::make_pair(BUILDER, ARTDAQTableBase::colARTDAQSupervisor_.colLinkToEventBuildersGroupID_),
191 std::make_pair(LOGGER, ARTDAQTableBase::colARTDAQSupervisor_.colLinkToDataLoggersGroupID_),
192 std::make_pair(DISPATCHER, ARTDAQTableBase::colARTDAQSupervisor_.colLinkToDispatchersGroupID_),
193 std::make_pair(ROUTER, ARTDAQTableBase::colARTDAQSupervisor_.colLinkToRoutingManagersGroupID_)})
194 , mapToGroupIDColumn_({
195 std::make_pair(READER,
"BoardReaderGroupID"),
196 std::make_pair(BUILDER,
"EventBuilderGroupID"),
197 std::make_pair(LOGGER,
"DataLoggerGroupID"),
198 std::make_pair(DISPATCHER,
"DispatcherGroupID"),
199 std::make_pair(MONITOR,
"MonitorGroupID"),
200 std::make_pair(ROUTER,
"RoutingManagerGroupID")})
203 const std::map<std::string , ARTDAQTableBase::ARTDAQAppType> mapToType_;
204 const std::map<std::string , std::string > mapToTable_, mapToGroupIDAppend_, mapToLinkGroupIDColumn_, mapToGroupIDColumn_;
210 std::string
const colDAQInterfaceDebugLevel_ =
"DAQInterfaceDebugLevel";
211 std::string
const colDAQSetupScript_ =
"DAQSetupScript";
213 std::string
const colLinkToBoardReaders_ =
"BoardReadersLink";
214 std::string
const colLinkToBoardReadersGroupID_ =
"BoardReadersLinkGroupID";
215 std::string
const colLinkToEventBuilders_ =
"EventBuildersLink";
216 std::string
const colLinkToEventBuildersGroupID_ =
"EventBuildersLinkGroupID";
217 std::string
const colLinkToDataLoggers_ =
"DataLoggersLink";
218 std::string
const colLinkToDataLoggersGroupID_ =
"DataLoggersLinkGroupID";
219 std::string
const colLinkToDispatchers_ =
"DispatchersLink";
220 std::string
const colLinkToDispatchersGroupID_ =
"DispatchersLinkGroupID";
221 std::string
const colLinkToRoutingManagers_ =
"RoutingManagersLink";
222 std::string
const colLinkToRoutingManagersGroupID_ =
"RoutingManagersLinkGroupID";
223 } colARTDAQSupervisor_;
228 std::string
const colLinkToDestination_ =
"SubsystemDestinationLink";
229 std::string
const colLinkToDestinationUID_ =
"SubsystemDestinationUID";
230 } colARTDAQSubsystem_;
235 std::string
const colLinkToDaqParameters_ =
"daqParametersLink";
236 std::string
const colLinkToDaqParametersGroupID_ =
"daqParametersLinkGroupID";
242 std::string
const colLinkToDaq_ =
"daqLink";
243 std::string
const colLinkToDaqUID_ =
"daqLinkUID";
244 } colARTDAQNotReader_;
249 std::string
const colLinkToDaqParameters_ =
"daqParametersLink";
250 std::string
const colLinkToDaqParametersGroupID_ =
"daqParametersLinkGroupID";
256 std::string
const colDaqParameterKey_ =
"daqParameterKey";
257 std::string
const colDaqParameterValue_ =
"daqParameterValue";
258 std::string
const colDaqParameterGroupID_ =
"daqParameterGroupID";
259 } colARTDAQDaqParameter_;
<virtual so future plugins can inherit from multiple table base classes
static std::string insertModuleType(std::ostream &out, std::string &tabStr, std::string &commentStr, ConfigurationTree moduleTypeNode)
static bool isARTDAQEnabled(const ConfigurationManager *cfgMgr)
isARTDAQEnabled
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)
static void insertParameters(std::ostream &out, std::string &tabStr, std::string &commentStr, ConfigurationTree parameterLink, const std::string ¶meterPreamble, bool onlyInsertAtTableParameters=false, bool includeAtTableParameters=false)
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, ConfigurationTree daqNode)
insertMetricsBlock
static void insertArtProcessBlock(std::ostream &out, std::string &tabStr, std::string &commentStr, ConfigurationTree art, ConfigurationTree subsystemLink=ConfigurationTree(), size_t routingTimeoutMs=DEFAULT_ROUTING_TIMEOUT_MS, size_t routingRetryCount=DEFAULT_ROUTING_RETRY_COUNT)
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)
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