Project
Loading...
Searching...
No Matches
DCSProcessor.cxx
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
14
15using namespace o2::trd;
16using namespace o2::dcs;
17
21
22//__________________________________________________________________
23
24void DCSProcessor::init(const std::vector<DPID>& pids)
25{
26 // fill the array of the DPIDs that will be used by TRD
27 // pids should be provided by CCDB
28
29 for (const auto& it : pids) {
30 mPids[it] = false;
31 mLastDPTimeStamps[it] = 0;
32 }
33}
34
35//__________________________________________________________________
36
37int DCSProcessor::process(const gsl::span<const DPCOM> dps)
38{
39
40 // first we check which DPs are missing - if some are, it means that
41 // the delta map was sent
42 if (mVerbosity > 0) {
43 LOG(info) << "\n\n\nProcessing new TF\n-----------------";
44 }
45
46 // LB: setup counters for ChamberStatus/CFGtag logic
47 int ChamberStatusDPsCounter = 0;
48 int CFGtagDPsCounter = 0;
49
50 std::unordered_map<DPID, DPVAL> mapin;
51 for (auto& it : dps) {
52 mapin[it.id] = it.data;
53
54 // LB: check if all ChamberStatus/CFGtag DPs were sent in dps
55 // if counter is equal to mFedMinimunDPsForUpdate (522) => all DPs were sent
56 if (std::strstr(it.id.get_alias(), "trd_chamberStatus") != nullptr) {
57 ChamberStatusDPsCounter++;
58 } else if (std::strstr(it.id.get_alias(), "trd_CFGtag") != nullptr) {
59 CFGtagDPsCounter++;
60 }
61 }
62
63 if (ChamberStatusDPsCounter >= mFedMinimunDPsForUpdate) {
64 mFedChamberStatusCompleteDPs = true;
65 if (mVerbosity > 1) {
66 LOG(info) << "Minimum number of required DPs (" << mFedMinimunDPsForUpdate << ") for ChamberStatus update were found.";
67 }
68 }
69 if (CFGtagDPsCounter >= mFedMinimunDPsForUpdate) {
70 mFedCFGtagCompleteDPs = true;
71 if (mVerbosity > 1) {
72 LOG(info) << "Minimum number of required DPs (" << mFedMinimunDPsForUpdate << ") for CFGtag update were found.";
73 }
74 }
75 if (mVerbosity > 1) {
76 LOG(info) << "Number of ChamberStatus DPs = " << ChamberStatusDPsCounter;
77 LOG(info) << "Number of CFGtag DPs = " << CFGtagDPsCounter;
78 }
79
80 if (mVerbosity > 1) {
81 for (auto& it : mPids) {
82 const auto& el = mapin.find(it.first);
83 if (el == mapin.end()) {
84 LOG(info) << "DP " << it.first << " not found in map";
85 } else {
86 LOG(info) << "DP " << it.first << " found in map";
87 }
88 }
89 }
90
91 // now we process all DPs, one by one
92 for (const auto& it : dps) {
93 // we process only the DPs defined in the configuration
94 const auto& el = mPids.find(it.id);
95 if (el == mPids.end()) {
96 if (mVerbosity > 1) {
97 LOG(info) << "DP " << it.id << " not found in DCSProcessor, we will not process it";
98 }
99 continue;
100 }
101 processDP(it);
102 mPids[it.id] = true;
103 }
104
105 return 0;
106}
107
108//__________________________________________________________________
109
111{
112
113 // processing single DP
114
115 auto& dpid = dpcom.id;
116 const auto& type = dpid.get_type();
117 if (mVerbosity > 1) {
118 if (type == DPVAL_DOUBLE) {
119 LOG(info) << "Processing DP = " << dpcom << ", with value = " << o2::dcs::getValue<double>(dpcom);
120 } else if (type == DPVAL_INT) {
121 LOG(info) << "Processing DP = " << dpcom << ", with value = " << o2::dcs::getValue<int32_t>(dpcom);
122 } else if (type == DPVAL_STRING) {
123 LOG(info) << "Processing DP = " << dpcom << ", with value = " << o2::dcs::getValue<string>(dpcom);
124 }
125 }
126 auto flags = dpcom.data.get_flags();
127 if (processFlags(flags, dpid.get_alias()) == 0) {
128 auto etime = dpcom.data.get_epoch_time();
129
130 // DPs are sorted by type variable
131 if (type == DPVAL_DOUBLE) {
132
133 // check if DP is one of the gas values
134 if (std::strstr(dpid.get_alias(), "trd_gas") != nullptr) {
135 if (!mGasStartTSset) {
136 mGasStartTS = mCurrentTS;
137 mGasStartTSset = true;
138 }
139 auto& dpInfoGas = mTRDDCSGas[dpid];
140 if (dpInfoGas.nPoints == 0 || etime != mLastDPTimeStamps[dpid]) {
141 // only add data point in case it was not already read before
142 dpInfoGas.addPoint(o2::dcs::getValue<double>(dpcom), etime);
143 mLastDPTimeStamps[dpid] = etime;
144 }
145 }
146
147 // check if DP is HV current value
148 if (std::strstr(dpid.get_alias(), "Imon") != nullptr) {
149 if (!mCurrentsStartTSSet) {
150 mCurrentsStartTS = mCurrentTS;
151 mCurrentsStartTSSet = true;
152 }
153 auto& dpInfoCurrents = mTRDDCSCurrents[dpid];
154 if (dpInfoCurrents.nPoints == 0 || etime != mLastDPTimeStamps[dpid]) {
155 // only add data point in case it was not already read before
156 dpInfoCurrents.addPoint(o2::dcs::getValue<double>(dpcom), etime);
157 mLastDPTimeStamps[dpid] = etime;
158 }
159 }
160
161 // check if DP is HV voltage value
162 if (std::strstr(dpid.get_alias(), "Umon") != nullptr) {
163 if (!mVoltagesStartTSSet) {
164 mVoltagesStartTS = mCurrentTS;
165 mVoltagesStartTSSet = true;
166 }
167 auto& dpInfoVoltages = mTRDDCSVoltages[dpid];
168 if (etime != mLastDPTimeStamps[dpid]) {
169 int chamberId = getChamberIdFromAlias(dpid.get_alias());
170 if (mVoltageSet.test(chamberId)) {
171 if (std::fabs(dpInfoVoltages - o2::dcs::getValue<double>(dpcom)) > mUVariationTriggerForUpdate) {
172 // trigger update of voltage CCDB object
173 mShouldUpdateVoltages = true;
174 // OS: this will still overwrite the current voltage value of the object going into the CCDB
175 // Should instead the old value be kept until a new obect has been stored in the CCDB?
176 }
177 }
178 dpInfoVoltages = o2::dcs::getValue<double>(dpcom);
179 mLastDPTimeStamps[dpid] = etime;
180 mVoltageSet.set(chamberId);
181 }
182 }
183
184 // check if DP is env value
185 if (isAliasFromEnvDP(dpid.get_alias())) {
186 if (!mEnvStartTSSet) {
187 mEnvStartTS = mCurrentTS;
188 mEnvStartTSSet = true;
189 }
190 auto& dpInfoEnv = mTRDDCSEnv[dpid];
191 if (dpInfoEnv.nPoints == 0 || etime != mLastDPTimeStamps[dpid]) {
192 // only add data point in case it was not already read before
193 dpInfoEnv.addPoint(o2::dcs::getValue<double>(dpcom), etime);
194 mLastDPTimeStamps[dpid] = etime;
195 }
196 }
197 }
198
199 if (type == DPVAL_INT) {
200
201 // check if DP is run number, only used for Chamber Status/CFGtag metadata
202 if (std::strstr(dpid.get_alias(), "trd_fed_runNo") != nullptr) { // DP is trd_fed_runNo
203 // LB: Check if new value is a valid run number (0 = cleared variable, -1 = start variable)
204 if (o2::dcs::getValue<int32_t>(dpcom) > 0) {
205 // If value has changed from previous one, new run has begun and update
206 if (o2::dcs::getValue<int32_t>(dpcom) != mCurrentRunNumber) {
207 LOG(info) << "New run number " << o2::dcs::getValue<int32_t>(dpcom) << " differs from the old one " << mCurrentRunNumber;
208 // LB: two different flags as they reset separately, after upload of CCDB, for each object
209 mFirstRunEntryForFedChamberStatusUpdate = true;
210 mFirstRunEntryForFedCFGtagUpdate = true;
211 // LB: reset alarm counters
212 mFedChamberStatusAlarmCounter = 0;
213 mFedCFGtagAlarmCounter = 0;
214 }
215
216 // LB: Save current run number
217 mCurrentRunNumber = o2::dcs::getValue<int32_t>(dpcom);
218 }
219
220 if (mVerbosity > 2) {
221 LOG(info) << "Current Run Number: " << mCurrentRunNumber;
222 }
223
224 // check if DP is Chamber Status
225 } else if (std::strstr(dpid.get_alias(), "trd_chamberStatus") != nullptr) {
226 if (!mFedChamberStatusStartTSSet) {
227 mFedChamberStatusStartTS = mCurrentTS;
228 mFedChamberStatusStartTSSet = true;
229 }
230
231 // LB: grab the chamber number from alias
232 int chamberId = getChamberIdFromAlias(dpid.get_alias());
233 auto& dpInfoFedChamberStatus = mTRDDCSFedChamberStatus[chamberId];
234 if (etime != mLastDPTimeStamps[dpid]) {
235 if (dpInfoFedChamberStatus != o2::dcs::getValue<int>(dpcom)) {
236 // If value changes after processing and DPs should not be updated, log change as warning (for now)
237 if (mPids[dpid] && !(mFedChamberStatusCompleteDPs && mFirstRunEntryForFedChamberStatusUpdate)) {
238 // Issue an alarm if counter is lower than maximum, warning otherwise
239 // LB: set both to warnings, conditions are kept if future changes are needed
240 if (mFedChamberStatusAlarmCounter < mFedAlarmCounterMax) {
241 LOG(warn) << "ChamberStatus change " << dpid.get_alias() << " : " << dpInfoFedChamberStatus << " -> " << o2::dcs::getValue<int>(dpcom) << ", run = " << mCurrentRunNumber;
242 mFedChamberStatusAlarmCounter++;
243 } else if (mVerbosity > 0) {
244 LOG(warn) << "ChamberStatus change " << dpid.get_alias() << " : " << dpInfoFedChamberStatus << " -> " << o2::dcs::getValue<int>(dpcom) << ", run = " << mCurrentRunNumber;
245 }
246 }
247 }
248
249 dpInfoFedChamberStatus = o2::dcs::getValue<int>(dpcom);
250 mLastDPTimeStamps[dpid] = etime;
251 }
252 }
253 }
254
255 if (type == DPVAL_STRING) {
256
257 // check if DP is chamber configuration tag
258 if (std::strstr(dpid.get_alias(), "trd_CFGtag") != nullptr) {
259 if (!mFedCFGtagStartTSSet) {
260 mFedCFGtagStartTS = mCurrentTS;
261 mFedCFGtagStartTSSet = true;
262 }
263
264 // LB: for CFGtag, grab the chamber number from alias
265 int chamberId = getChamberIdFromAlias(dpid.get_alias());
266 auto& dpInfoFedCFGtag = mTRDDCSFedCFGtag[chamberId];
267 if (etime != mLastDPTimeStamps[dpid]) {
268 if (dpInfoFedCFGtag != o2::dcs::getValue<string>(dpcom)) {
269 // If value changes after processing and DPs should not be updated, log change as warning (for now)
270 if (mPids[dpid] && !(mFedCFGtagCompleteDPs && mFirstRunEntryForFedCFGtagUpdate)) {
271 // Issue an alarm if counter is lower than maximum, warning otherwise
272 if (mFedCFGtagAlarmCounter < mFedAlarmCounterMax) {
273 LOG(alarm) << "CFGtag change " << dpid.get_alias() << " : " << dpInfoFedCFGtag << " -> " << o2::dcs::getValue<string>(dpcom) << ", run = " << mCurrentRunNumber;
274 mFedCFGtagAlarmCounter++;
275 } else if (mVerbosity > 0) {
276 LOG(warn) << "CFGtag change " << dpid.get_alias() << " : " << dpInfoFedCFGtag << " -> " << o2::dcs::getValue<string>(dpcom) << ", run = " << mCurrentRunNumber;
277 }
278 }
279 }
280
281 dpInfoFedCFGtag = o2::dcs::getValue<std::string>(dpcom);
282 mLastDPTimeStamps[dpid] = etime;
283 }
284 }
285 }
286 }
287 return 0;
288}
289
290int DCSProcessor::getChamberIdFromAlias(const char* alias) const
291{
292 // chamber ID is the last three characaters from the alias
293 auto length = strlen(alias);
294 std::string id(alias + length - 3, alias + length);
295 return std::stoi(id);
296}
297
298//______________________________________________________________________
299
300int DCSProcessor::processFlags(const uint64_t flags, const char* pid)
301{
302
303 // function to process the flag. the return code zero means that all is fine.
304 // anything else means that there was an issue
305
306 // for now, I don't know how to use the flags, so I do nothing
307
308 if (mVerbosity > 0) {
310 LOG(info) << "KEEP_ALIVE_FLAG active for DP " << pid;
311 }
313 LOG(info) << "END_FLAG active for DP " << pid;
314 }
316 LOG(info) << "FBI_FLAG active for DP " << pid;
317 }
319 LOG(info) << "NEW_FLAG active for DP " << pid;
320 }
322 LOG(info) << "DIRTY_FLAG active for DP " << pid;
323 }
325 LOG(info) << "TURN_FLAG active for DP " << pid;
326 }
328 LOG(info) << "WRITE_FLAG active for DP " << pid;
329 }
331 LOG(info) << "READ_FLAG active for DP " << pid;
332 }
334 LOG(info) << "OVERWRITE_FLAG active for DP " << pid;
335 }
337 LOG(info) << "VICTIM_FLAG active for DP " << pid;
338 }
340 LOG(info) << "DIM_ERROR_FLAG active for DP " << pid;
341 }
343 LOG(info) << "BAD_DPID_FLAG active for DP " << pid;
344 }
346 LOG(info) << "BAD_FLAGS_FLAG active for DP " << pid;
347 }
349 LOG(info) << "BAD_TIMESTAMP_FLAG active for DP " << pid;
350 }
352 LOG(info) << "BAD_PAYLOAD_FLAG active for DP " << pid;
353 }
355 LOG(info) << "BAD_FBI_FLAG active for DP " << pid;
356 }
357 }
358
359 return 0;
360}
361
363{
364 // here we create the object containing the gas data points to then be sent to CCDB
365 LOG(info) << "Preparing CCDB object for TRD gas DPs";
366
367 bool retVal = false; // set to 'true' in case at least one DP for gas has been processed
368
369 for (const auto& it : mPids) {
370 const auto& type = it.first.get_type();
372 if (std::strstr(it.first.get_alias(), "trd_gas") != nullptr) {
373 if (it.second == true) { // we processed the DP at least 1x
374 retVal = true;
375 }
376 if (mVerbosity > 0) {
377 LOG(info) << "PID = " << it.first.get_alias();
378 mTRDDCSGas[it.first].print();
379 }
380 }
381 }
382 }
383 std::map<std::string, std::string> md;
384 md["responsible"] = "Ole Schmidt";
385 o2::calibration::Utils::prepareCCDBobjectInfo(mTRDDCSGas, mCcdbGasDPsInfo, "TRD/Calib/DCSDPsGas", md, mGasStartTS, mGasStartTS + 3 * o2::ccdb::CcdbObjectInfo::DAY);
386
387 return retVal;
388}
389
391{
392 // here we create the object containing the currents data points to then be sent to CCDB
393 LOG(info) << "Preparing CCDB object for TRD currents DPs";
394
395 bool retVal = false; // set to 'true' in case at least one DP has been processed
396
397 for (const auto& it : mPids) {
398 const auto& type = it.first.get_type();
400 if (std::strstr(it.first.get_alias(), "Imon") != nullptr) {
401 if (it.second == true) { // we processed the DP at least 1x
402 retVal = true;
403 }
404 if (mVerbosity > 1) {
405 LOG(info) << "PID = " << it.first.get_alias();
406 mTRDDCSCurrents[it.first].print();
407 }
408 }
409 }
410 }
411 std::map<std::string, std::string> md;
412 md["responsible"] = "Ole Schmidt";
413 o2::calibration::Utils::prepareCCDBobjectInfo(mTRDDCSCurrents, mCcdbCurrentsDPsInfo, "TRD/Calib/DCSDPsI", md, mCurrentsStartTS, mCurrentsStartTS + 3 * o2::ccdb::CcdbObjectInfo::DAY);
414
415 return retVal;
416}
417
419{
420 // here we create the object containing the voltage data points to then be sent to CCDB
421 LOG(info) << "Preparing CCDB object for TRD voltage DPs";
422
423 bool retVal = false; // set to 'true' in case at least one DP has been processed
424
425 for (const auto& it : mPids) {
426 const auto& type = it.first.get_type();
428 if (std::strstr(it.first.get_alias(), "Umon") != nullptr) {
429 if (it.second == true) { // we processed the DP at least 1x
430 retVal = true;
431 }
432 if (mVerbosity > 1) {
433 LOG(info) << "PID = " << it.first.get_alias() << ". Value = " << mTRDDCSVoltages[it.first];
434 }
435 }
436 }
437 }
438 std::map<std::string, std::string> md;
439 md["responsible"] = "Ole Schmidt";
440 o2::calibration::Utils::prepareCCDBobjectInfo(mTRDDCSVoltages, mCcdbVoltagesDPsInfo, "TRD/Calib/DCSDPsU", md, mVoltagesStartTS, mVoltagesStartTS + 7 * o2::ccdb::CcdbObjectInfo::DAY);
441
442 return retVal;
443}
444
446{
447 // here we create the object containing the env data points to then be sent to CCDB
448 LOG(info) << "Preparing CCDB object for TRD env DPs";
449
450 bool retVal = false; // set to 'true' in case at least one DP for env has been processed
451
452 for (const auto& it : mPids) {
453 const auto& type = it.first.get_type();
455 if (isAliasFromEnvDP(it.first.get_alias())) {
456 if (it.second == true) { // we processed the DP at least 1x
457 retVal = true;
458 }
459 if (mVerbosity > 1) {
460 LOG(info) << "PID = " << it.first.get_alias();
461 mTRDDCSEnv[it.first].print();
462 }
463 }
464 }
465 }
466 std::map<std::string, std::string> md;
467 md["responsible"] = "Leonardo Barreto";
468 o2::calibration::Utils::prepareCCDBobjectInfo(mTRDDCSEnv, mCcdbEnvDPsInfo, "TRD/Calib/DCSDPsEnv", md, mEnvStartTS, mEnvStartTS + 3 * o2::ccdb::CcdbObjectInfo::DAY);
469
470 return retVal;
471}
472
474{
475 // here we create the object containing the fedChamberStatus data points to then be sent to CCDB
476 LOG(info) << "Preparing CCDB object for TRD fedChamberStatus DPs";
477
478 bool retVal = false; // set to 'true' in case at least one DP for run has been processed
479
480 for (const auto& it : mPids) {
481 const auto& type = it.first.get_type();
482 if (type == o2::dcs::DPVAL_INT) {
483 if (std::strstr(it.first.get_alias(), "trd_chamberStatus") != nullptr) {
484 if (it.second == true) { // we processed the DP at least 1x
485 retVal = true;
486 }
487 if (mVerbosity > 1) {
488 int chamberId = getChamberIdFromAlias(it.first.get_alias());
489 LOG(info) << "PID = " << it.first.get_alias() << ". Value = " << mTRDDCSFedChamberStatus[chamberId];
490 }
491 }
492 }
493 }
494
495 std::map<std::string, std::string> md;
496 md["responsible"] = "Leonardo Barreto";
497 md["runNumber"] = std::to_string(mCurrentRunNumber);
498 // LB: set start timestamp 30000 miliseconds before DPs are received
499 o2::calibration::Utils::prepareCCDBobjectInfo(mTRDDCSFedChamberStatus, mCcdbFedChamberStatusDPsInfo,
500 "TRD/Calib/DCSDPsFedChamberStatus", md, mFedChamberStatusStartTS - 30000,
501 mFedChamberStatusStartTS + 3 * o2::ccdb::CcdbObjectInfo::DAY);
502
503 return retVal;
504}
505
507{
508 // here we create the object containing the fedCFGtag data points to then be sent to CCDB
509 LOG(info) << "Preparing CCDB object for TRD fedCFGtag DPs";
510
511 bool retVal = false; // set to 'true' in case at least one DP for run has been processed
512
513 for (const auto& it : mPids) {
514 const auto& type = it.first.get_type();
516 if (std::strstr(it.first.get_alias(), "trd_CFGtag") != nullptr) {
517 if (it.second == true) { // we processed the DP at least 1x
518 retVal = true;
519 }
520 if (mVerbosity > 1) {
521 int chamberId = getChamberIdFromAlias(it.first.get_alias());
522 LOG(info) << "PID = " << it.first.get_alias() << ". Value = " << mTRDDCSFedCFGtag[chamberId];
523 }
524 }
525 }
526 }
527
528 std::map<std::string, std::string> md;
529 md["responsible"] = "Leonardo Barreto";
530 md["runNumber"] = std::to_string(mCurrentRunNumber);
531 // LB: set start timestamp 30000 seconds before DPs are received
532 o2::calibration::Utils::prepareCCDBobjectInfo(mTRDDCSFedCFGtag, mCcdbFedCFGtagDPsInfo,
533 "TRD/Calib/DCSDPsFedCFGtag", md, mFedCFGtagStartTS - 30000,
534 mFedCFGtagStartTS + 3 * o2::ccdb::CcdbObjectInfo::DAY);
535
536 return retVal;
537}
538
540{
541 mTRDDCSCurrents.clear();
542 mCurrentsStartTSSet = false;
543 // reset the 'processed' flags for the currents DPs
544 for (auto& it : mPids) {
545 const auto& type = it.first.get_type();
547 if (std::strstr(it.first.get_alias(), "Imon") != nullptr) {
548 it.second = false;
549 }
550 }
551 }
552}
553
555{
556 mTRDDCSVoltages.clear();
557 mVoltagesStartTSSet = false;
558 mVoltageSet.reset();
559 mShouldUpdateVoltages = false;
560 // reset the 'processed' flags for the voltages DPs
561 for (auto& it : mPids) {
562 const auto& type = it.first.get_type();
564 if (std::strstr(it.first.get_alias(), "Umon") != nullptr) {
565 it.second = false;
566 }
567 }
568 }
569}
570
572{
573 // reset the data and the gas CCDB object itself
574 mTRDDCSGas.clear();
575 mGasStartTSset = false; // the next object will be valid from the first processed time stamp
576 // reset the 'processed' flags for the gas DPs
577 for (auto& it : mPids) {
578 const auto& type = it.first.get_type();
580 if (std::strstr(it.first.get_alias(), "trd_gas") != nullptr) {
581 it.second = false;
582 }
583 }
584 }
585}
586
588{
589 mTRDDCSEnv.clear();
590 mEnvStartTSSet = false;
591 // reset the 'processed' flags for the env DPs
592 for (auto& it : mPids) {
593 const auto& type = it.first.get_type();
595 if (isAliasFromEnvDP(it.first.get_alias())) {
596 it.second = false;
597 }
598 }
599 }
600}
601
603{
604 // mTRDDCSFedChamberStatus should not be cleared after upload giving alarm/warn logic
605 mFedChamberStatusStartTSSet = false;
606 mFedChamberStatusCompleteDPs = false;
607 mFirstRunEntryForFedChamberStatusUpdate = false;
608 // reset the 'processed' flags for the fed DPs
609 for (auto& it : mPids) {
610 const auto& type = it.first.get_type();
611 if (type == o2::dcs::DPVAL_INT) {
612 if (std::strstr(it.first.get_alias(), "trd_chamberStatus") != nullptr) {
613 it.second = false;
614 }
615 }
616 }
617}
618
620{
621 // mTRDDCSFedCFGtag should not be cleared after upload giving alarm/warn logic
622 mFedCFGtagStartTSSet = false;
623 mFedCFGtagCompleteDPs = false;
624 mFirstRunEntryForFedCFGtagUpdate = false;
625 // reset the 'processed' flags for the fed DPs
626 for (auto& it : mPids) {
627 const auto& type = it.first.get_type();
629 if (std::strstr(it.first.get_alias(), "trd_CFGtag") != nullptr) {
630 it.second = false;
631 }
632 }
633 }
634}
Utils and constants for calibration and related workflows.
int32_t retVal
uint16_t pid
Definition RawData.h:2
static constexpr long DAY
DeliveryType get_type() const noexcept
int getChamberIdFromAlias(const char *alias) const
int process(const gsl::span< const DPCOM > dps)
bool isAliasFromEnvDP(const char *dpalias) const
void init(const std::vector< DPID > &pids)
int processFlags(uint64_t flag, const char *pid)
int processDP(const DPCOM &dpcom)
GLint GLint GLsizei GLint GLenum GLenum type
Definition glcorearb.h:275
GLuint GLsizei GLsizei * length
Definition glcorearb.h:790
GLbitfield flags
Definition glcorearb.h:1570
GLuint id
Definition glcorearb.h:650
std::string to_string(gsl::span< T, Size > span)
Definition common.h:52
static void prepareCCDBobjectInfo(T &obj, o2::ccdb::CcdbObjectInfo &info, const std::string &path, const std::map< std::string, std::string > &md, long start, long end=-1)
Definition Utils.h:91
uint64_t get_epoch_time() const noexcept
static constexpr uint16_t BAD_TIMESTAMP_FLAG
static constexpr uint16_t WRITE_FLAG
static constexpr uint16_t DIRTY_FLAG
static constexpr uint64_t TURN_FLAG
static constexpr uint16_t FBI_FLAG
static constexpr uint16_t END_FLAG
static constexpr uint16_t BAD_PAYLOAD_FLAG
uint16_t get_flags() const noexcept
static constexpr uint16_t BAD_DPID_FLAG
static constexpr uint16_t KEEP_ALIVE_FLAG
static constexpr uint16_t DIM_ERROR_FLAG
static constexpr uint16_t OVERWRITE_FLAG
static constexpr uint16_t BAD_FBI_FLAG
static constexpr uint16_t VICTIM_FLAG
static constexpr uint16_t BAD_FLAGS_FLAG
static constexpr uint16_t READ_FLAG
static constexpr uint16_t NEW_FLAG
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"