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_CONFIG_LAYOUTS_PATH;
28 static const bool ARTDAQ_DONOTWRITE_FCL;
29 static const std::string ARTDAQ_SUPERVISOR_CLASS, ARTDAQ_SUPERVISOR_TABLE;
30 static const std::string ARTDAQ_READER_TABLE, ARTDAQ_BUILDER_TABLE, ARTDAQ_LOGGER_TABLE, ARTDAQ_DISPATCHER_TABLE, ARTDAQ_MONITOR_TABLE, ARTDAQ_ROUTER_TABLE;
31 static const std::string ARTDAQ_SUBSYSTEM_TABLE, ARTDAQ_DAQ_TABLE, ARTDAQ_DAQ_PARAMETER_TABLE, ARTDAQ_ART_TABLE;
32 static const std::string ARTDAQ_TYPE_TABLE_HOSTNAME, ARTDAQ_TYPE_TABLE_ALLOWED_PROCESSORS, ARTDAQ_TYPE_TABLE_SUBSYSTEM_LINK, ARTDAQ_TYPE_TABLE_SUBSYSTEM_LINK_UID;
34 enum class ARTDAQAppType
46 DEFAULT_MAX_FRAGMENT_SIZE = 1048576,
47 DEFAULT_ROUTING_TIMEOUT_MS = 1000,
48 DEFAULT_ROUTING_RETRY_COUNT = 5,
51 static const int NULL_SUBSYSTEM_DESTINATION;
52 static const std::string NULL_SUBSYSTEM_DESTINATION_LABEL;
61 std::string allowed_processors;
63 ProcessInfo(std::string l, std::string h, std::string procs,
int s, ARTDAQAppType ,
bool onOff,
int p = -1)
64 : label(l), hostname(h), subsystem(s), port(p), status(onOff), allowed_processors(procs) {}
76 bool hasRoutingManager;
77 std::string routingManagerHost;
85 std::map<ARTDAQAppType, std::list<ProcessInfo>> processes;
88 static const std::string& getTypeString (ARTDAQAppType type);
89 static std::string getFHICLFilename (ARTDAQAppType type,
const std::string& name);
90 static std::string getFlatFHICLFilename (ARTDAQAppType type,
const std::string& name);
91 static void flattenFHICL (ARTDAQAppType type,
const std::string& name, std::string* returnFcl =
nullptr);
95 std::string& commentStr,
97 const std::string& parameterPreamble,
98 bool onlyInsertAtTableParameters =
false,
99 bool includeAtTableParameters =
false);
104 size_t routingTimeoutMs = DEFAULT_ROUTING_TIMEOUT_MS,
105 size_t routingRetryCount = DEFAULT_ROUTING_RETRY_COUNT );
108 size_t maxFragmentSizeBytes = DEFAULT_MAX_FRAGMENT_SIZE,
109 size_t routingTimeoutMs = DEFAULT_ROUTING_TIMEOUT_MS,
110 size_t routingRetryCount = DEFAULT_ROUTING_RETRY_COUNT);
113 ARTDAQAppType appType,
114 size_t maxFragmentSizeBytes = DEFAULT_MAX_FRAGMENT_SIZE,
115 size_t routingTimeoutMs = DEFAULT_ROUTING_TIMEOUT_MS,
116 size_t routingRetryCount = DEFAULT_ROUTING_RETRY_COUNT,
117 std::string* returnFcl =
nullptr);
119 static void outputRoutingManagerFHICL (
const ConfigurationTree& routingManagerNode,
120 size_t routingTimeoutMs = DEFAULT_ROUTING_TIMEOUT_MS,
121 size_t routingRetryCount = DEFAULT_ROUTING_RETRY_COUNT);
127 bool getStatusFalseNodes =
false,
128 bool doWriteFHiCL =
false,
129 size_t maxFragmentSizeBytes = DEFAULT_MAX_FRAGMENT_SIZE,
130 size_t routingTimeoutMs = DEFAULT_ROUTING_TIMEOUT_MS,
131 size_t routingRetryCount = DEFAULT_ROUTING_RETRY_COUNT,
135 std::map<std::string ,
136 std::map<std::string ,
137 std::vector<std::string /*property*/>>>& nodeTypeToObjectMap,
138 std::map<std::string ,
139 std::string >& subsystemObjectMap,
140 std::vector<std::string /*property*/>& artdaqSupervisoInfo);
143 const std::map<std::string ,
144 std::map<std::string ,
145 std::vector<std::string /*property*/>>>& nodeTypeToObjectMap,
146 const std::map<std::string ,
147 std::string >& subsystemObjectMap);
151 static void extractRoutingManagersInfo (
ConfigurationTree artdaqSupervisorNode,
bool getStatusFalseNodes,
bool doWriteFHiCL,
size_t routingTimeoutMs,
size_t routingRetryCount);
152 static void extractBoardReadersInfo (
ConfigurationTree artdaqSupervisorNode,
bool getStatusFalseNodes,
bool doWriteFHiCL,
size_t maxFragmentSizeBytes,
size_t routingTimeoutMs,
size_t routingRetryCount);
153 static void extractEventBuildersInfo (
ConfigurationTree artdaqSupervisorNode,
bool getStatusFalseNodes,
bool doWriteFHiCL,
size_t maxFragmentSizeBytes);
154 static void extractDataLoggersInfo (
ConfigurationTree artdaqSupervisorNode,
bool getStatusFalseNodes,
bool doWriteFHiCL,
size_t maxFragmentSizeBytes);
155 static void extractDispatchersInfo (
ConfigurationTree artdaqSupervisorNode,
bool getStatusFalseNodes,
bool doWriteFHiCL,
size_t maxFragmentSizeBytes);
162 std::string
const READER =
"reader";
163 std::string
const BUILDER =
"builder";
164 std::string
const LOGGER =
"logger";
165 std::string
const DISPATCHER =
"dispatcher";
166 std::string
const MONITOR =
"monitor";
167 std::string
const ROUTER =
"router";
171 std::make_pair(READER, ARTDAQTableBase::ARTDAQAppType::BoardReader),
172 std::make_pair(BUILDER, ARTDAQTableBase::ARTDAQAppType::EventBuilder),
173 std::make_pair(LOGGER, ARTDAQTableBase::ARTDAQAppType::DataLogger),
174 std::make_pair(DISPATCHER, ARTDAQTableBase::ARTDAQAppType::Dispatcher),
175 std::make_pair(MONITOR, ARTDAQTableBase::ARTDAQAppType::Monitor),
176 std::make_pair(ROUTER, ARTDAQTableBase::ARTDAQAppType::RoutingManager)})
178 std::make_pair(READER, ARTDAQTableBase::ARTDAQ_READER_TABLE),
179 std::make_pair(BUILDER, ARTDAQTableBase::ARTDAQ_BUILDER_TABLE),
180 std::make_pair(LOGGER, ARTDAQTableBase::ARTDAQ_LOGGER_TABLE),
181 std::make_pair(DISPATCHER, ARTDAQTableBase::ARTDAQ_DISPATCHER_TABLE),
182 std::make_pair(MONITOR, ARTDAQTableBase::ARTDAQ_MONITOR_TABLE),
183 std::make_pair(ROUTER, ARTDAQTableBase::ARTDAQ_ROUTER_TABLE)})
184 , mapToGroupIDAppend_({
185 std::make_pair(READER,
"BoardReaders"),
186 std::make_pair(BUILDER,
"EventBuilders"),
187 std::make_pair(LOGGER,
"DataLoggers"),
188 std::make_pair(DISPATCHER,
"Dispatchers"),
189 std::make_pair(MONITOR,
"Monitors"),
190 std::make_pair(ROUTER,
"RoutingManagers")})
191 , mapToLinkGroupIDColumn_({
192 std::make_pair(READER, ARTDAQTableBase::colARTDAQSupervisor_.colLinkToBoardReadersGroupID_),
193 std::make_pair(BUILDER, ARTDAQTableBase::colARTDAQSupervisor_.colLinkToEventBuildersGroupID_),
194 std::make_pair(LOGGER, ARTDAQTableBase::colARTDAQSupervisor_.colLinkToDataLoggersGroupID_),
195 std::make_pair(DISPATCHER, ARTDAQTableBase::colARTDAQSupervisor_.colLinkToDispatchersGroupID_),
196 std::make_pair(ROUTER, ARTDAQTableBase::colARTDAQSupervisor_.colLinkToRoutingManagersGroupID_)})
197 , mapToGroupIDColumn_({
198 std::make_pair(READER,
"BoardReaderGroupID"),
199 std::make_pair(BUILDER,
"EventBuilderGroupID"),
200 std::make_pair(LOGGER,
"DataLoggerGroupID"),
201 std::make_pair(DISPATCHER,
"DispatcherGroupID"),
202 std::make_pair(MONITOR,
"MonitorGroupID"),
203 std::make_pair(ROUTER,
"RoutingManagerGroupID")})
206 const std::map<std::string , ARTDAQTableBase::ARTDAQAppType> mapToType_;
207 const std::map<std::string , std::string > mapToTable_, mapToGroupIDAppend_, mapToLinkGroupIDColumn_, mapToGroupIDColumn_;
213 std::string
const colDAQInterfaceDebugLevel_ =
"DAQInterfaceDebugLevel";
214 std::string
const colDAQSetupScript_ =
"DAQSetupScript";
216 std::string
const colLinkToBoardReaders_ =
"BoardReadersLink";
217 std::string
const colLinkToBoardReadersGroupID_ =
"BoardReadersLinkGroupID";
218 std::string
const colLinkToEventBuilders_ =
"EventBuildersLink";
219 std::string
const colLinkToEventBuildersGroupID_ =
"EventBuildersLinkGroupID";
220 std::string
const colLinkToDataLoggers_ =
"DataLoggersLink";
221 std::string
const colLinkToDataLoggersGroupID_ =
"DataLoggersLinkGroupID";
222 std::string
const colLinkToDispatchers_ =
"DispatchersLink";
223 std::string
const colLinkToDispatchersGroupID_ =
"DispatchersLinkGroupID";
224 std::string
const colLinkToRoutingManagers_ =
"RoutingManagersLink";
225 std::string
const colLinkToRoutingManagersGroupID_ =
"RoutingManagersLinkGroupID";
226 } colARTDAQSupervisor_;
231 std::string
const colLinkToDestination_ =
"SubsystemDestinationLink";
232 std::string
const colLinkToDestinationUID_ =
"SubsystemDestinationUID";
233 } colARTDAQSubsystem_;
238 std::string
const colDaqFragmentIDs_ =
"daqFragmentIDs";
239 std::string
const colLinkToDaqParameters_ =
"daqParametersLink";
240 std::string
const colLinkToDaqParametersGroupID_ =
"daqParametersLinkGroupID";
246 std::string
const colLinkToDaq_ =
"daqLink";
247 std::string
const colLinkToDaqUID_ =
"daqLinkUID";
248 std::string
const colLinkToArt_ =
"artLink";
249 std::string
const colLinkToArtUID_ =
"artLinkUID";
250 } colARTDAQNotReader_;
255 std::string
const colLinkToDaqParameters_ =
"daqParametersLink";
256 std::string
const colLinkToDaqParametersGroupID_ =
"daqParametersLinkGroupID";
262 std::string
const colDaqParameterKey_ =
"daqParameterKey";
263 std::string
const colDaqParameterValue_ =
"daqParameterValue";
264 std::string
const colDaqParameterGroupID_ =
"daqParameterGroupID";
265 } colARTDAQDaqParameter_;
270 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 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)
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