44void customize(std::vector<ConfigParamSpec>& workflowOptions)
46 workflowOptions.push_back(
ConfigParamSpec{
"verbose", VariantType::Bool,
false, {
"verbose output"}});
47 workflowOptions.push_back(
ConfigParamSpec{
"fbi-report-rate", VariantType::Int, 6, {
"report pet N FBI received"}});
48 workflowOptions.push_back(
ConfigParamSpec{
"test-mode", VariantType::Bool,
false, {
"test mode"}});
49 workflowOptions.push_back(
ConfigParamSpec{
"may-send-delta-first", VariantType::Bool,
false, {
"if true, do not wait for FBI before sending 1st output"}});
50 workflowOptions.push_back(
ConfigParamSpec{
"ccdb-url", VariantType::String,
"http://ccdb-test.cern.ch:8080", {
"url of CCDB to get the detectors DPs configuration"}});
51 workflowOptions.push_back(
ConfigParamSpec{
"detector-list", VariantType::String,
"TOF, MCH", {
"list of detectors for which to process DCS"}});
52 workflowOptions.push_back(
ConfigParamSpec{
"configKeyValues", VariantType::String,
"", {
"Semicolon separated key=value strings"}});
60 bool verbose = config.
options().
get<
bool>(
"verbose");
61 bool testMode = config.
options().
get<
bool>(
"test-mode");
62 bool fbiFirst = !config.
options().
get<
bool>(
"may-send-delta-first");
63 int repRate = std::max(1, config.
options().
get<
int>(
"fbi-report-rate"));
64 std::string detectorList = config.
options().
get<std::string>(
"detector-list");
66 std::string url = config.
options().
get<std::string>(
"ccdb-url");
68 std::unordered_map<DPID, std::vector<o2h::DataDescription>> dpid2DataDesc;
72 DPID::FILL(dpidtmp,
"ADAPOS_LG/TEST_000100", DeliveryType::DPVAL_STRING);
73 dpid2DataDesc[dpidtmp] = {
"COMMON"};
74 DPID::FILL(dpidtmp,
"ADAPOS_LG/TEST_000110", DeliveryType::DPVAL_STRING);
75 dpid2DataDesc[dpidtmp] = {
"COMMON"};
76 DPID::FILL(dpidtmp,
"ADAPOS_LG/TEST_000200", DeliveryType::DPVAL_STRING);
77 dpid2DataDesc[dpidtmp] = {
"COMMON1"};
78 DPID::FILL(dpidtmp,
"ADAPOS_LG/TEST_000240", DeliveryType::DPVAL_INT);
79 dpid2DataDesc[dpidtmp] = {
"COMMON1"};
85 long ts = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count();
86 std::regex re(
"[\\s,-]+");
87 std::sregex_token_iterator it(detectorList.begin(), detectorList.end(), re, -1);
88 std::sregex_token_iterator reg_end;
89 for (; it != reg_end; ++it) {
90 std::string detStr = it->str();
92 if (!detStr.empty()) {
93 LOG(info) <<
"DCS DPs configured for detector " << detStr;
94 std::unordered_map<DPID, std::string>* dpid2Det = mgr.getForTimeStamp<std::unordered_map<DPID, std::string>>(detStr +
"/Config/DCSDPconfig", ts);
95 for (
auto& el : *dpid2Det) {
97 tmpd.
runtimeInit(el.second.c_str(), el.second.size());
98 dpid2DataDesc[el.first].push_back(tmpd);
108 std::unordered_map<o2h::DataDescription, int, std::hash<o2h::DataDescription>> outMap;
109 for (
auto itdp : dpid2DataDesc) {
110 for (
const auto&
ds : itdp.second) {
116 for (
auto itout : outMap) {
117 dcsOutputs.emplace_back(
"DCS", itout.first, 0, Lifetime::Timeframe);
122 std::move(dcsOutputs),
123 "type=pull,method=connect,address=tcp://aldcsadaposactor:60000,rateLogging=1,transport=zeromq",
124 dcs2dpl(dpid2DataDesc, fbiFirst, verbose, repRate));
128 workflow.emplace_back(dcsProxy);
ConfigParamRegistry & options() const
DataProcessorSpec specifyExternalFairMQDeviceProxy(char const *label, std::vector< OutputSpec > const &outputs, const char *defaultChannelConfig, InjectorFunction converter, uint64_t minSHM=0, bool sendTFcounter=false, bool doInjectMissingData=false, unsigned int doPrintSizes=0)