1 #include "otsdaq/ConfigurationInterface/ConfigurationManager.h"
2 #include "otsdaq/TablePlugins/IterateTable.h"
12 const std::string IterateTable::COMMAND_CHOOSE_FSM =
"CHOOSE_FSM";
13 const std::string IterateTable::COMMAND_CONFIGURE_ACTIVE_GROUP =
"CONFIGURE_ACTIVE_GROUP";
14 const std::string IterateTable::COMMAND_CONFIGURE_ALIAS =
"CONFIGURE_ALIAS";
15 const std::string IterateTable::COMMAND_CONFIGURE_GROUP =
"CONFIGURE_GROUP";
16 const std::string IterateTable::COMMAND_ACTIVATE_ALIAS =
"ACTIVATE_ALIAS";
17 const std::string IterateTable::COMMAND_ACTIVATE_GROUP =
"ACTIVATE_GROUP";
18 const std::string IterateTable::COMMAND_EXECUTE_FE_MACRO =
"EXECUTE_FE_MACRO";
19 const std::string IterateTable::COMMAND_EXECUTE_MACRO =
"EXECUTE_MACRO";
20 const std::string IterateTable::COMMAND_MODIFY_ACTIVE_GROUP =
"MODIFY_ACTIVE_GROUP";
21 const std::string IterateTable::COMMAND_REPEAT_LABEL =
"REPEAT_LABEL";
22 const std::string IterateTable::COMMAND_RUN =
"RUN";
23 const std::string IterateTable::COMMAND_START =
"START";
24 const std::string IterateTable::COMMAND_STOP =
"STOP";
25 const std::string IterateTable::COMMAND_PAUSE =
"PAUSE";
26 const std::string IterateTable::COMMAND_RESUME =
"RESUME";
27 const std::string IterateTable::COMMAND_HALT =
"HALT";
29 const std::string IterateTable::ITERATE_TABLE =
"IterateTable";
30 const std::string IterateTable::PLAN_TABLE =
"IterationPlanTable";
31 const std::string IterateTable::TARGET_TABLE =
"IterationTargetTable";
33 const std::map<std::string, std::string> IterateTable::commandToTableMap_ =
62 IterateTable::~IterateTable(
void) {}
86 std::vector<IterateTable::Command> IterateTable::getPlanCommands(
89 __COUT__ << configManager->__SELF_NODE__ << std::endl;
93 if(!planNode.
getNode(IterateTable::planTableCols_.Status_).
getValue<
bool>())
95 __SS__ <<
"Error! Attempt to access disabled plan (Status=FALSE)." << std::endl;
96 __COUT_ERR__ << ss.str();
100 std::vector<IterateTable::Command> commands;
102 auto commandChildren =
105 for(
auto& commandChild : commandChildren)
107 __COUT__ <<
"Command \t" << commandChild.first << std::endl;
109 __COUT__ <<
"\t\tStatus \t"
110 << commandChild.second.getNode(IterateTable::planTableCols_.Status_)
113 __COUT__ <<
"\t\tType \t"
114 << commandChild.second.getNode(IterateTable::planTableCols_.CommandType_)
117 if(!commandChild.second.getNode(IterateTable::planTableCols_.Status_)
122 commands.back().type_ =
123 commandChild.second.getNode(IterateTable::planTableCols_.CommandType_)
124 .getValue<std::string>();
126 if(commandChild.second.getNode(IterateTable::planTableCols_.CommandLink_)
130 auto commandSpecificFields =
131 commandChild.second.getNode(IterateTable::planTableCols_.CommandLink_)
134 for(
unsigned int i = 0; i < commandSpecificFields.size() - 3;
140 __COUT__ <<
"\t\tParameter \t" << commandSpecificFields[i].first <<
" = \t"
141 << commandSpecificFields[i].second << std::endl;
143 if(commandSpecificFields[i].first ==
144 IterateTable::commandTargetCols_.TargetsLink_)
146 __COUT__ <<
"Extracting targets..." << __E__;
147 auto targets = commandSpecificFields[i].second.getChildren();
149 __COUTV__(targets.size());
151 for(
auto& target : targets)
153 __COUT__ <<
"\t\t\tTarget \t" << target.first << __E__;
156 target.second.
getNode(IterateTable::targetCols_.TargetLink_);
159 __COUT_ERR__ <<
"Disconnected target!?" << __E__;
163 __COUT__ <<
"\t\t = \t"
166 commands.back().addTarget();
167 commands.back().targets_.back().table_ = targetNode.
getTableName();
168 commands.back().targets_.back().UID_ = targetNode.
getUIDAsString();
171 else if(commandSpecificFields[i].first ==
172 IterateTable::commandExecuteMacroParams_.MacroParameterLink_)
175 __COUT__ <<
"Extracting macro parameters..." << __E__;
190 auto dimensionalLoops = commandSpecificFields[i].second.getChildren(
191 std::map<std::string ,
195 __COUTV__(dimensionalLoops.size());
201 std::string argStr =
"";
205 unsigned long numberOfIterations;
206 bool firstDimension =
true;
208 for(
auto& dimensionalLoop : dimensionalLoops)
210 __COUT__ <<
"\t\t\tDimensionalLoop \t" << dimensionalLoop.first
214 dimensionalLoop.second
215 .getNode(IterateTable::macroDimLoopCols_.NumberOfIterations_)
216 .getValue<
unsigned long>();
218 __COUTV__(numberOfIterations);
220 if(numberOfIterations == 0)
222 __SS__ <<
"Illegal number of iterations value of '"
223 << numberOfIterations <<
".' Must be a positive integer!"
232 firstDimension =
false;
233 argStr += std::to_string(numberOfIterations);
235 auto paramLinkNode = dimensionalLoop.second.getNode(
236 IterateTable::macroDimLoopCols_.ParamLink_);
238 if(paramLinkNode.isDisconnected())
240 __COUT__ <<
"Disconnected parameter link, so no parameters for "
246 auto macroParams = paramLinkNode.getChildren();
248 __COUTV__(macroParams.size());
250 for(
auto& macroParam : macroParams)
252 __COUT__ <<
"\t\t\tParam \t" << macroParam.first << __E__;
258 macroParam.second.getNode(IterateTable::macroParamCols_.Name_)
259 .getValue<std::string>();
261 argStr += macroParam.second
262 .getNode(IterateTable::macroParamCols_.Value_)
263 .getValue<std::string>();
266 macroParam.second.getNode(IterateTable::macroParamCols_.Step_)
267 .getValue<std::string>();
279 commands.back().params_.emplace(
280 std::pair<std::string /*param name*/, std::string /*param value*/>(
281 IterateTable::commandExecuteMacroParams_.MacroArgumentString_,
287 commandSpecificFields[i].second.isValueBoolType())
288 commands.back().params_.emplace(
289 std::pair<std::string ,
291 commandSpecificFields[i].first,
292 commandSpecificFields[i].second.getValue<
bool>() ?
"1"
296 commandSpecificFields[i].second.isValueNumberDataType())
297 commands.back().params_.emplace(
298 std::pair<std::string ,
300 commandSpecificFields[i].first,
301 commandSpecificFields[i].second.getValueAsString()));
303 commands.back().params_.emplace(
304 std::pair<std::string ,
306 commandSpecificFields[i].first,
307 commandSpecificFields[i].second.getValue<std::string>()));
ConfigurationTree getNode(const std::string &nodeString, bool doNotThrowOnBrokenUIDLinks=false) const
"root/parent/parent/"
bool isDisconnected(void) const
ConfigurationTree getNode(const std::string &nodeName, bool doNotThrowOnBrokenUIDLinks=false) const
navigating between nodes
const std::string & getTableName(void) const
getTableName
void getValue(T &value) const
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
const std::string & getUIDAsString(void) const
void init(ConfigurationManager *configManager)
Methods.
static std::map< std::string, std::string > createCommandToTableMap()
static const std::string COMMAND_BEGIN_LABEL
< treat FE and Macro the same
for macro dimensional loop parameters